diff options
author | yefim@chromium.org <yefim@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-05-15 05:21:31 +0000 |
---|---|---|
committer | yefim@chromium.org <yefim@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-05-15 05:21:31 +0000 |
commit | d6abf3560a74d1bc3c9511794b4cb64e48841ec8 (patch) | |
tree | 72f4e836033b67a7ace036118094b3317d24b718 | |
parent | 6c5358477dba0ecff519d6c33d7bbc399d5c70c3 (diff) | |
download | chromium_src-d6abf3560a74d1bc3c9511794b4cb64e48841ec8.zip chromium_src-d6abf3560a74d1bc3c9511794b4cb64e48841ec8.tar.gz chromium_src-d6abf3560a74d1bc3c9511794b4cb64e48841ec8.tar.bz2 |
Added browser_action_pinned extension preference and modified BrowserActionContainer to show extensions based on it.
BUG=125307
TEST=make sure you have extensions that show icon in browser action area; add --enable_action_box to command line; make sure browser doesn't show any extensions in browser actions area; go to extensions setting, try show/hide extensions
Review URL: https://chromiumcodereview.appspot.com/10378117
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@137081 0039d316-1c4b-4281-b951-d872f2087c98
10 files changed, 40 insertions, 27 deletions
diff --git a/chrome/browser/extensions/extension_context_menu_model.cc b/chrome/browser/extensions/extension_context_menu_model.cc index 0bf5fe0..f336b7c 100644 --- a/chrome/browser/extensions/extension_context_menu_model.cc +++ b/chrome/browser/extensions/extension_context_menu_model.cc @@ -94,7 +94,8 @@ void ExtensionContextMenuModel::ExecuteCommand(int command_id) { break; case HIDE: { ExtensionService* extension_service = profile_->GetExtensionService(); - extension_service->SetBrowserActionVisibility(extension, false); + extension_service->extension_prefs()-> + SetBrowserActionVisibility(extension, false); break; } case DISABLE: { diff --git a/chrome/browser/extensions/extension_prefs.cc b/chrome/browser/extensions/extension_prefs.cc index 180fee3..3daf398 100644 --- a/chrome/browser/extensions/extension_prefs.cc +++ b/chrome/browser/extensions/extension_prefs.cc @@ -15,6 +15,7 @@ #include "chrome/browser/prefs/pref_service.h" #include "chrome/browser/prefs/scoped_user_pref_update.h" #include "chrome/common/chrome_notification_types.h" +#include "chrome/common/extensions/extension_switch_utils.h" #include "chrome/common/extensions/manifest.h" #include "chrome/common/extensions/url_pattern.h" #include "chrome/common/pref_names.h" @@ -113,6 +114,10 @@ const char kUpdateUrlData[] = "update_url_data"; // Whether the browser action is visible in the toolbar. const char kBrowserActionVisible[] = "browser_action_visible"; +// Whether the browser action is pinned in the toolbar. This will eventually +// replace kBrowserActionVisible. +const char kBrowserActionPinned[] = "browser_action_pinned"; + // Preferences that hold which permissions the user has granted the extension. // We explicitly keep track of these so that extensions can contain unknown // permissions, for backwards compatibility reasons, and we can still prompt @@ -1269,14 +1274,21 @@ void ExtensionPrefs::SetExtensionState(const std::string& extension_id, } bool ExtensionPrefs::GetBrowserActionVisibility(const Extension* extension) { + bool action_box_enabled = extensions::switch_utils::IsActionBoxEnabled(); + bool default_value = !action_box_enabled; + const DictionaryValue* extension_prefs = GetExtensionPref(extension->id()); if (!extension_prefs) - return true; + return default_value; + bool visible = false; - if (!extension_prefs->GetBoolean(kBrowserActionVisible, &visible) || visible) - return true; + const char* browser_action_pref = action_box_enabled ? kBrowserActionPinned : + kBrowserActionVisible; + bool pref_exists = extension_prefs->GetBoolean(browser_action_pref, &visible); + if (!pref_exists) + return default_value; - return false; + return visible; } void ExtensionPrefs::SetBrowserActionVisibility(const Extension* extension, @@ -1284,7 +1296,10 @@ void ExtensionPrefs::SetBrowserActionVisibility(const Extension* extension, if (GetBrowserActionVisibility(extension) == visible) return; - UpdateExtensionPref(extension->id(), kBrowserActionVisible, + bool action_box_enabled = extensions::switch_utils::IsActionBoxEnabled(); + const char* browser_action_pref = action_box_enabled ? kBrowserActionPinned : + kBrowserActionVisible; + UpdateExtensionPref(extension->id(), browser_action_pref, Value::CreateBooleanValue(visible)); content::NotificationService::current()->Notify( chrome::NOTIFICATION_EXTENSION_BROWSER_ACTION_VISIBILITY_CHANGED, diff --git a/chrome/browser/extensions/extension_service.cc b/chrome/browser/extensions/extension_service.cc index 5a66ea9..b4580a8 100644 --- a/chrome/browser/extensions/extension_service.cc +++ b/chrome/browser/extensions/extension_service.cc @@ -1694,15 +1694,6 @@ void ExtensionService::SetAllowFileAccess(const Extension* extension, ReloadExtension(extension->id()); } -bool ExtensionService::GetBrowserActionVisibility(const Extension* extension) { - return extension_prefs_->GetBrowserActionVisibility(extension); -} - -void ExtensionService::SetBrowserActionVisibility(const Extension* extension, - bool visible) { - extension_prefs_->SetBrowserActionVisibility(extension, visible); -} - // Some extensions will autoupdate themselves externally from Chrome. These // are typically part of some larger client application package. To support // these, the extension will register its location in the the preferences file diff --git a/chrome/browser/extensions/extension_service.h b/chrome/browser/extensions/extension_service.h index 4cc7725..174f5ea 100644 --- a/chrome/browser/extensions/extension_service.h +++ b/chrome/browser/extensions/extension_service.h @@ -255,10 +255,6 @@ class ExtensionService // only. void SetAllowFileAccess(const Extension* extension, bool allow); - // Getter and setter for the Browser Action visibility in the toolbar. - bool GetBrowserActionVisibility(const Extension* extension); - void SetBrowserActionVisibility(const Extension* extension, bool visible); - // Whether the persistent background page, if any, is ready. We don't load // other components until then. If there is no background page, or if it is // non-persistent (lazy), we consider it to be ready. diff --git a/chrome/browser/extensions/extension_toolbar_model.cc b/chrome/browser/extensions/extension_toolbar_model.cc index 6d4614d..5c063a8 100644 --- a/chrome/browser/extensions/extension_toolbar_model.cc +++ b/chrome/browser/extensions/extension_toolbar_model.cc @@ -113,14 +113,14 @@ void ExtensionToolbarModel::Observe( if (toolitems_[i].get() == extension) return; // Already exists. } - if (service_->GetBrowserActionVisibility(extension)) + if (service_->extension_prefs()->GetBrowserActionVisibility(extension)) AddExtension(extension); } else if (type == chrome::NOTIFICATION_EXTENSION_UNLOADED) { RemoveExtension(extension); } else if ( type == chrome::NOTIFICATION_EXTENSION_BROWSER_ACTION_VISIBILITY_CHANGED) { - if (service_->GetBrowserActionVisibility(extension)) + if (service_->extension_prefs()->GetBrowserActionVisibility(extension)) AddExtension(extension); else RemoveExtension(extension); @@ -192,7 +192,7 @@ void ExtensionToolbarModel::InitializeExtensionList() { const Extension* extension = *it; if (!extension->browser_action()) continue; - if (!service_->GetBrowserActionVisibility(extension)) + if (!service_->extension_prefs()->GetBrowserActionVisibility(extension)) continue; std::vector<std::string>::iterator pos = diff --git a/chrome/browser/ui/cocoa/extensions/extension_action_context_menu.mm b/chrome/browser/ui/cocoa/extensions/extension_action_context_menu.mm index 0d16558..a7b7a4f 100644 --- a/chrome/browser/ui/cocoa/extensions/extension_action_context_menu.mm +++ b/chrome/browser/ui/cocoa/extensions/extension_action_context_menu.mm @@ -186,7 +186,8 @@ int CurrentTabId() { } case kExtensionContextHide: { ExtensionService* extension_service = profile_->GetExtensionService(); - extension_service->SetBrowserActionVisibility(extension_, false); + extension_service->extension_prefs()-> + SetBrowserActionVisibility(extension_, false); break; } case kExtensionContextManage: { diff --git a/chrome/browser/ui/views/browser_actions_container_browsertest.cc b/chrome/browser/ui/views/browser_actions_container_browsertest.cc index f2a79da..9e2c3d8 100644 --- a/chrome/browser/ui/views/browser_actions_container_browsertest.cc +++ b/chrome/browser/ui/views/browser_actions_container_browsertest.cc @@ -233,8 +233,8 @@ IN_PROC_BROWSER_TEST_F(BrowserActionsContainerTest, ForceHide) { // Force hide this browser action. ExtensionService* service = browser()->profile()->GetExtensionService(); - service->SetBrowserActionVisibility(service->GetExtensionById(idA, false), - false); + service->extension_prefs()->SetBrowserActionVisibility( + service->GetExtensionById(idA, false), false); EXPECT_EQ(0, browser_actions_bar()->VisibleBrowserActions()); ReloadExtension(idA); diff --git a/chrome/browser/ui/webui/extensions/extension_settings_handler.cc b/chrome/browser/ui/webui/extensions/extension_settings_handler.cc index 8ebfde0..3993240 100644 --- a/chrome/browser/ui/webui/extensions/extension_settings_handler.cc +++ b/chrome/browser/ui/webui/extensions/extension_settings_handler.cc @@ -132,7 +132,8 @@ DictionaryValue* ExtensionSettingsHandler::CreateExtensionDetailValue( extension_data->SetInteger("order", 2); if (extension_service_ && - !extension_service_->GetBrowserActionVisibility(extension)) { + !extension_service_->extension_prefs()-> + GetBrowserActionVisibility(extension)) { extension_data->SetBoolean("enable_show_button", true); } @@ -666,7 +667,8 @@ void ExtensionSettingsHandler::HandleShowButtonMessage(const ListValue* args) { const Extension* extension = GetActiveExtension(args); if (!extension) return; - extension_service_->SetBrowserActionVisibility(extension, true); + extension_service_->extension_prefs()-> + SetBrowserActionVisibility(extension, true); } void ExtensionSettingsHandler::HandleAutoUpdateMessage(const ListValue* args) { diff --git a/chrome/common/extensions/extension_switch_utils.cc b/chrome/common/extensions/extension_switch_utils.cc index 7f4dcf6..2cd451a 100644 --- a/chrome/common/extensions/extension_switch_utils.cc +++ b/chrome/common/extensions/extension_switch_utils.cc @@ -22,6 +22,11 @@ bool IsOffStoreInstallEnabled() { #endif } +bool IsActionBoxEnabled() { + return CommandLine::ForCurrentProcess()->HasSwitch( + switches::kEnableActionBox); +} + } // switch_utils } // extensions diff --git a/chrome/common/extensions/extension_switch_utils.h b/chrome/common/extensions/extension_switch_utils.h index c52879f..24e1c47 100644 --- a/chrome/common/extensions/extension_switch_utils.h +++ b/chrome/common/extensions/extension_switch_utils.h @@ -12,6 +12,8 @@ namespace switch_utils { bool IsOffStoreInstallEnabled(); +bool IsActionBoxEnabled(); + } // switch_utils } // extensions |