diff options
Diffstat (limited to 'chrome')
-rw-r--r-- | chrome/browser/browser_prefs.cc | 2 | ||||
-rw-r--r-- | chrome/browser/extensions/extensions_ui.cc | 20 | ||||
-rw-r--r-- | chrome/browser/extensions/extensions_ui.h | 6 | ||||
-rw-r--r-- | chrome/browser/resources/extensions_ui.html | 95 | ||||
-rw-r--r-- | chrome/common/pref_names.cc | 4 | ||||
-rw-r--r-- | chrome/common/pref_names.h | 1 |
6 files changed, 103 insertions, 25 deletions
diff --git a/chrome/browser/browser_prefs.cc b/chrome/browser/browser_prefs.cc index cf13729..8020c4f 100644 --- a/chrome/browser/browser_prefs.cc +++ b/chrome/browser/browser_prefs.cc @@ -12,6 +12,7 @@ #include "chrome/browser/dom_ui/new_tab_ui.h" #include "chrome/browser/download/download_manager.h" #include "chrome/browser/extensions/extension_dom_ui.h" +#include "chrome/browser/extensions/extensions_ui.h" #include "chrome/browser/external_protocol_handler.h" #include "chrome/browser/form_field_history_manager.h" #include "chrome/browser/google_url_tracker.h" @@ -79,6 +80,7 @@ void RegisterAllPrefs(PrefService* user_prefs, PrefService* local_state) { TabContents::RegisterUserPrefs(user_prefs); TemplateURLPrepopulateData::RegisterUserPrefs(user_prefs); ExtensionDOMUI::RegisterUserPrefs(user_prefs); + ExtensionsUI::RegisterUserPrefs(user_prefs); NewTabUI::RegisterUserPrefs(user_prefs); BlockedPopupContainer::RegisterUserPrefs(user_prefs); DevToolsManager::RegisterUserPrefs(user_prefs); diff --git a/chrome/browser/extensions/extensions_ui.cc b/chrome/browser/extensions/extensions_ui.cc index ef05466..3a121ea 100644 --- a/chrome/browser/extensions/extensions_ui.cc +++ b/chrome/browser/extensions/extensions_ui.cc @@ -28,6 +28,8 @@ #include "chrome/common/jstemplate_builder.h" #include "chrome/common/notification_service.h" #include "chrome/common/notification_type.h" +#include "chrome/common/pref_names.h" +#include "chrome/common/pref_service.h" #include "chrome/common/url_constants.h" #include "net/base/net_util.h" @@ -88,6 +90,8 @@ ExtensionsDOMHandler::ExtensionsDOMHandler(ExtensionsService* extension_service) void ExtensionsDOMHandler::RegisterMessages() { dom_ui_->RegisterMessageCallback("requestExtensionsData", NewCallback(this, &ExtensionsDOMHandler::HandleRequestExtensionsData)); + dom_ui_->RegisterMessageCallback("toggleDeveloperMode", + NewCallback(this, &ExtensionsDOMHandler::HandleToggleDeveloperMode)); dom_ui_->RegisterMessageCallback("inspect", NewCallback(this, &ExtensionsDOMHandler::HandleInspectMessage)); dom_ui_->RegisterMessageCallback("reload", @@ -133,6 +137,10 @@ void ExtensionsDOMHandler::HandleRequestExtensionsData(const Value* value) { } results.Set(L"extensions", extensions_list); + bool developer_mode = dom_ui_->GetProfile()->GetPrefs() + ->GetBoolean(prefs::kExtensionsUIDeveloperMode); + results.SetBoolean(L"developerMode", developer_mode); + dom_ui_->CallJavascriptFunction(L"returnExtensionsData", results); // Register for notifications that we need to reload the page. @@ -147,6 +155,13 @@ void ExtensionsDOMHandler::HandleRequestExtensionsData(const Value* value) { NotificationService::AllSources()); } +void ExtensionsDOMHandler::HandleToggleDeveloperMode(const Value* value) { + bool developer_mode = dom_ui_->GetProfile()->GetPrefs() + ->GetBoolean(prefs::kExtensionsUIDeveloperMode); + dom_ui_->GetProfile()->GetPrefs()->SetBoolean( + prefs::kExtensionsUIDeveloperMode, !developer_mode); +} + void ExtensionsDOMHandler::HandleInspectMessage(const Value* value) { std::string render_process_id_str; std::string render_view_id_str; @@ -514,3 +529,8 @@ RefCountedMemory* ExtensionsUI::GetFaviconResourceBytes() { return ResourceBundle::GetSharedInstance(). LoadImageResourceBytes(IDR_PLUGIN); } + +// static +void ExtensionsUI::RegisterUserPrefs(PrefService* prefs) { + prefs->RegisterBooleanPref(prefs::kExtensionsUIDeveloperMode, false); +} diff --git a/chrome/browser/extensions/extensions_ui.h b/chrome/browser/extensions/extensions_ui.h index f315504..37e73b6 100644 --- a/chrome/browser/extensions/extensions_ui.h +++ b/chrome/browser/extensions/extensions_ui.h @@ -20,6 +20,7 @@ class DictionaryValue; class Extension; class ExtensionsService; class FilePath; +class PrefService; class UserScript; class Value; @@ -83,6 +84,9 @@ class ExtensionsDOMHandler // Callback for "requestExtensionsData" message. void HandleRequestExtensionsData(const Value* value); + // Callback for "toggleDeveloperMode" message. + void HandleToggleDeveloperMode(const Value* value); + // Callback for "inspect" message. void HandleInspectMessage(const Value* value); @@ -153,6 +157,8 @@ class ExtensionsUI : public DOMUI { static RefCountedMemory* GetFaviconResourceBytes(); + static void RegisterUserPrefs(PrefService* prefs); + private: DISALLOW_COPY_AND_ASSIGN(ExtensionsUI); }; diff --git a/chrome/browser/resources/extensions_ui.html b/chrome/browser/resources/extensions_ui.html index dc44f94..f2e13c8 100644 --- a/chrome/browser/resources/extensions_ui.html +++ b/chrome/browser/resources/extensions_ui.html @@ -74,8 +74,27 @@ div.content { -webkit-box-flex: 1; } +.showInDevMode { + overflow: hidden; +} + +body.hideDevModeInitial .showInDevMode { + height: 0 !important; + opacity: 0; +} + +body.hideDevMode .showInDevMode { + height: 0 !important; + opacity: 0; + -webkit-transition: all .5s ease-out; +} + +body.showDevMode .showInDevMode { + opacity: 1; + -webkit-transition: all .5s ease-in; +} + .wbox-dev-tools { - display: none; -webkit-box-align: stretch; -webkit-box-flex: 1; } @@ -111,14 +130,11 @@ div.content { } .extension-description { - color: gray; margin-top: 0.4em; } .extension-details { - color: gray; margin-top: 0.5em; - display: none; } .extension-actions { @@ -224,6 +240,7 @@ button { * expects to correctly populate the page. */ var extensionDataFormat = { + "developerMode": false, "extensions": [ { "id": "0000000000000000000000000000000000000000", @@ -297,6 +314,15 @@ var extensionDataFormat = { var devToolsExpanded = false; /** + * Toggles the devToolsExpanded, and notifies the c++ dom_ui to toggle the + * extensions.ui.developer_mode which saved in the preferences. + */ +function toggleDevToolsExpanded() { + devToolsExpanded = !devToolsExpanded; + chrome.send('toggleDeveloperMode', []); +} + +/** * Takes the |extensionsData| input argument which represents data about the * currently installed/running extensions and populates the html jstemplate with * that data. It expects an object structure like the above. @@ -331,12 +357,31 @@ window.domui_responded_ = false; function returnExtensionsData(extensionsData) { window.domui_responded_ = true; + + devToolsExpanded = extensionsData.developerMode; + showExtensionsData(extensionsData); // We are currently hiding the body because the first call to jstProcess() to // insert localized strings happens prior to this call which runs during the // body.onload event, causes a flickering. document.getElementById('body-container').style.display = "inline"; + + // Explicitly set the height for each element that wants to be "slid" in and + // out when the devToolsExpanded is toggled. + var slidables = document.getElementsByClassName('showInDevMode'); + for (var i = 0; i < slidables.length; i++) { + slidables[i].style.height = slidables[i].offsetHeight + "px"; + } + + // If not in developer mode, hide the developer mode elements without the + // slide/fade transition. + if (!devToolsExpanded) { + document.getElementsByTagName('body')[0].className = "hideDevModeInitial"; + } else { + document.getElementById('collapse').style.display = "inline"; + document.getElementById('expand').style.display = "none"; + } } /** @@ -435,19 +480,15 @@ function hidePackDialog() { * Toggles visibility of the developer tools. */ function toggleDeveloperTools() { - devToolsExpanded = !devToolsExpanded; + toggleDevToolsExpanded(); document.getElementById('collapse').style.display = devToolsExpanded ? "inline" : "none"; document.getElementById('expand').style.display = devToolsExpanded ? "none" : "inline"; - document.getElementById('developer_tools').style.display = - devToolsExpanded ? "-webkit-box" : "none"; - // Show/hide extra details for the extension. - var details = document.getElementsByClassName('extension-details'); - for (var i = 0; i < details.length; ++i) - details[i].style.display = devToolsExpanded ? "block" : "none"; + document.getElementsByTagName('body')[0].className = + devToolsExpanded ? "showDevMode" : "hideDevMode"; } /** @@ -534,7 +575,7 @@ function autoUpdate() { <div id="extensionTemplate"> <div id="container" class="vbox-container"> - <div id="top" class="wbox"> + <div id="top" class="wbox" style="padding-right: 10px"> <div class="section-header"> <table cellpadding="0" cellspacing="0" width="100%"> @@ -562,7 +603,7 @@ function autoUpdate() { </div> </div> - <div id="developer_tools" class="wbox-dev-tools"> + <div id="developer_tools" class="wbox-dev-tools showInDevMode"> <div class="developer-tools"> Developer Tools: <button onclick="loadExtension()">Load unpacked Extension...</button> @@ -600,18 +641,22 @@ function autoUpdate() { </div> <div class="extension-description" jscontent="description"></div> - <div class="extension-details">ID: <span jscontent="id" ></span> - </div> - <div class="extension-details"> - <span jsdisplay="views.length > 0"> - Inspect active views: - </span> - <ul class="extension-views"> - <li jsselect="views"> - <a jsvalues=".extensionView:$this" href="#" - onclick="sendInspectMessage(this.extensionView); return false;" - ><span jscontent="path"></span></a> - </ul> + <div class="showInDevMode"> + <div class="extension-details">ID: <span jscontent="id"></span> + </div> + <div class="extension-details"> + <span jsdisplay="views.length > 0"> + Inspect active views: + </span> + <ul class="extension-views"> + <li jsselect="views"> + <a jsvalues=".extensionView:$this" href="#" + onclick="sendInspectMessage(this.extensionView); return false;"> + <span jscontent="path"></span> + </a> + </li> + </ul> + </div> </div> </td> <td width="300"> diff --git a/chrome/common/pref_names.cc b/chrome/common/pref_names.cc index 8293cf5..ca6c17f 100644 --- a/chrome/common/pref_names.cc +++ b/chrome/common/pref_names.cc @@ -267,6 +267,10 @@ const wchar_t kCurrentThemeTints[] = L"extensions.theme.tints"; const wchar_t kCurrentThemeDisplayProperties[] = L"extensions.theme.properties"; +// Boolean pref which persists whether the extensions_ui is in developer mode +// (showing developer packing tools and extensions details) +const wchar_t kExtensionsUIDeveloperMode[] = L"extensions.ui.developer_mode"; + // Boolean that indicates whether we should check if we are the default browser // on start-up. const wchar_t kCheckDefaultBrowser[] = L"browser.check_default_browser"; diff --git a/chrome/common/pref_names.h b/chrome/common/pref_names.h index 96eacaf..dfbf8dd1 100644 --- a/chrome/common/pref_names.h +++ b/chrome/common/pref_names.h @@ -109,6 +109,7 @@ extern const wchar_t kCurrentThemeImages[]; extern const wchar_t kCurrentThemeColors[]; extern const wchar_t kCurrentThemeTints[]; extern const wchar_t kCurrentThemeDisplayProperties[]; +extern const wchar_t kExtensionsUIDeveloperMode[]; extern const wchar_t kCheckDefaultBrowser[]; extern const wchar_t kUseCustomChromeFrame[]; extern const wchar_t kShowOmniboxSearchHint[]; |