Index: chrome/browser/extensions/extension_toolbar_model.cc |
diff --git a/chrome/browser/extensions/extension_toolbar_model.cc b/chrome/browser/extensions/extension_toolbar_model.cc |
index c869fd91d184932f037a508c2b9ecfb58be2b29a..0b162abdb6f5e1e9affdf50ac9bd71d02cdc4ba3 100644 |
--- a/chrome/browser/extensions/extension_toolbar_model.cc |
+++ b/chrome/browser/extensions/extension_toolbar_model.cc |
@@ -4,6 +4,8 @@ |
#include "chrome/browser/extensions/extension_toolbar_model.h" |
+#include <string> |
+ |
#include "base/prefs/pref_service.h" |
#include "chrome/browser/chrome_notification_types.h" |
#include "chrome/browser/extensions/api/extension_action/extension_action_api.h" |
@@ -41,6 +43,11 @@ bool IsInExtensionList(const Extension* extension, |
} // namespace |
+bool ExtensionToolbarModel::Observer::BrowserActionShowPopup( |
+ const extensions::Extension* extension) { |
+ return false; |
+} |
+ |
ExtensionToolbarModel::ExtensionToolbarModel(ExtensionService* service) |
: service_(service), |
prefs_(service->profile()->GetPrefs()), |
@@ -129,6 +136,14 @@ ExtensionToolbarModel::Action ExtensionToolbarModel::ExecuteBrowserAction( |
const Extension* extension, |
Browser* browser, |
GURL* popup_url_out) { |
+ return ExecuteBrowserAction(extension, browser, popup_url_out, true); |
+} |
+ |
+ExtensionToolbarModel::Action ExtensionToolbarModel::ExecuteBrowserAction( |
+ const Extension* extension, |
+ Browser* browser, |
+ GURL* popup_url_out, |
+ bool should_grant) { |
content::WebContents* web_contents = NULL; |
int tab_id = 0; |
if (!ExtensionTabUtil::GetDefaultTab(browser, &web_contents, &tab_id)) |
@@ -142,8 +157,10 @@ ExtensionToolbarModel::Action ExtensionToolbarModel::ExecuteBrowserAction( |
if (!browser_action->GetIsVisible(tab_id)) |
return ACTION_NONE; |
- extensions::TabHelper::FromWebContents(web_contents)-> |
- active_tab_permission_granter()->GrantIfRequested(extension); |
+ if (should_grant) { |
+ extensions::TabHelper::FromWebContents(web_contents)-> |
+ active_tab_permission_granter()->GrantIfRequested(extension); |
+ } |
if (browser_action->HasPopup(tab_id)) { |
if (popup_url_out) |
@@ -454,3 +471,15 @@ void ExtensionToolbarModel::OnExtensionToolbarPrefChange() { |
weak_ptr_factory_.GetWeakPtr())); |
} |
} |
+ |
+bool ExtensionToolbarModel::ShowBrowserActionPopup( |
+ const extensions::Extension* extension) { |
+ ObserverListBase<Observer>::Iterator it(observers_); |
+ Observer* obs = NULL; |
+ while ((obs = it.GetNext()) != NULL) { |
+ // Stop after first popup since it should only show in the active window. |
+ if (obs->BrowserActionShowPopup(extension)) |
+ return true; |
+ } |
+ return false; |
+} |