summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoryefim@chromium.org <yefim@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-05-15 05:21:31 +0000
committeryefim@chromium.org <yefim@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-05-15 05:21:31 +0000
commitd6abf3560a74d1bc3c9511794b4cb64e48841ec8 (patch)
tree72f4e836033b67a7ace036118094b3317d24b718
parent6c5358477dba0ecff519d6c33d7bbc399d5c70c3 (diff)
downloadchromium_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
-rw-r--r--chrome/browser/extensions/extension_context_menu_model.cc3
-rw-r--r--chrome/browser/extensions/extension_prefs.cc25
-rw-r--r--chrome/browser/extensions/extension_service.cc9
-rw-r--r--chrome/browser/extensions/extension_service.h4
-rw-r--r--chrome/browser/extensions/extension_toolbar_model.cc6
-rw-r--r--chrome/browser/ui/cocoa/extensions/extension_action_context_menu.mm3
-rw-r--r--chrome/browser/ui/views/browser_actions_container_browsertest.cc4
-rw-r--r--chrome/browser/ui/webui/extensions/extension_settings_handler.cc6
-rw-r--r--chrome/common/extensions/extension_switch_utils.cc5
-rw-r--r--chrome/common/extensions/extension_switch_utils.h2
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