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 cf7db41e04b1917be399cd9f05d0a433caef1ef8..9e9b8a87d6bb102fad8df79047ad990ed4b904e3 100644 |
--- a/chrome/browser/extensions/api/extension_action/extension_action_api.cc |
+++ b/chrome/browser/extensions/api/extension_action/extension_action_api.cc |
@@ -171,14 +171,13 @@ ExtensionAction::ShowAction ExtensionActionAPI::ExecuteExtensionAction( |
int tab_id = SessionTabHelper::IdForTab(web_contents); |
- ExtensionAction* extension_action = |
- ExtensionActionManager::Get(browser_context_)->GetExtensionAction( |
- *extension); |
- |
- // Anything that calls this should have a page or browser action. |
- DCHECK(extension_action); |
- if (!extension_action->GetIsVisible(tab_id)) |
- return ExtensionAction::ACTION_NONE; |
+ ActiveScriptController* active_script_controller = |
+ ActiveScriptController::GetForWebContents(web_contents); |
+ bool has_pending_scripts = false; |
+ if (active_script_controller && |
+ active_script_controller->GetActionForExtension(extension)) { |
+ has_pending_scripts = true; |
+ } |
// Grant active tab if appropriate. |
if (grant_active_tab_permissions) { |
@@ -186,13 +185,20 @@ ExtensionAction::ShowAction ExtensionActionAPI::ExecuteExtensionAction( |
GrantIfRequested(extension); |
} |
- // Notify ActiveScriptController that the action was clicked, if appropriate. |
- ActiveScriptController* active_script_controller = |
- ActiveScriptController::GetForWebContents(web_contents); |
- if (active_script_controller && |
- active_script_controller->GetActionForExtension(extension)) { |
- active_script_controller->OnClicked(extension); |
- } |
+ // If this was a request to run a script, it will have been run once active |
+ // tab was granted. Return without executing the action, since we should only |
+ // run pending scripts OR the extension action, not both. |
+ if (has_pending_scripts) |
+ return ExtensionAction::ACTION_NONE; |
+ |
+ ExtensionAction* extension_action = |
+ ExtensionActionManager::Get(browser_context_)->GetExtensionAction( |
+ *extension); |
+ |
+ // Anything that gets here should have a page or browser action. |
+ DCHECK(extension_action); |
+ if (!extension_action->GetIsVisible(tab_id)) |
+ return ExtensionAction::ACTION_NONE; |
if (extension_action->HasPopup(tab_id)) |
return ExtensionAction::ACTION_SHOW_POPUP; |