Index: chrome/browser/extensions/api/extension_action/extension_action_api.cc |
diff --git a/chrome/browser/extensions/api/extension_action/extension_action_api.cc b/chrome/browser/extensions/api/extension_action/extension_action_api.cc |
index efbecfa5667ff6bda55ec106c8ea2a177e5324c4..fb05935330ea0b98b4ece4f8989258255ba2423f 100644 |
--- a/chrome/browser/extensions/api/extension_action/extension_action_api.cc |
+++ b/chrome/browser/extensions/api/extension_action/extension_action_api.cc |
@@ -230,6 +230,26 @@ bool ExtensionActionAPI::ShowExtensionActionPopup( |
} |
} |
+bool ExtensionActionAPI::ExtensionWantsToRun( |
+ const Extension* extension, content::WebContents* web_contents) { |
+ // An extension wants to act if it has a visible page action on the given |
+ // page... |
+ ExtensionAction* page_action = |
+ ExtensionActionManager::Get(browser_context_)->GetPageAction(*extension); |
+ if (page_action && |
+ page_action->GetIsVisible(SessionTabHelper::IdForTab(web_contents))) |
+ return true; |
+ |
+ // ... Or if it has pending scripts that need approval for execution. |
+ ActiveScriptController* active_script_controller = |
+ ActiveScriptController::GetForWebContents(web_contents); |
+ if (active_script_controller && |
+ active_script_controller->WantsToRun(extension)) |
+ return true; |
+ |
+ return false; |
+} |
+ |
void ExtensionActionAPI::NotifyChange(ExtensionAction* extension_action, |
content::WebContents* web_contents, |
content::BrowserContext* context) { |
@@ -255,9 +275,7 @@ void ExtensionActionAPI::ClearAllValuesForTab( |
for (ExtensionSet::const_iterator iter = enabled_extensions.begin(); |
iter != enabled_extensions.end(); ++iter) { |
ExtensionAction* extension_action = |
- action_manager->GetBrowserAction(*iter->get()); |
- if (!extension_action) |
- extension_action = action_manager->GetPageAction(*iter->get()); |
+ action_manager->GetExtensionAction(**iter); |
if (extension_action) { |
extension_action->ClearAllValuesForTab(tab_id); |
NotifyChange(extension_action, web_contents, browser_context); |