Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(247)

Unified Diff: chrome/browser/extensions/extension_action_runner.cc

Issue 1804123003: [Extensions] Refactor extension action execution (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/extensions/extension_action_runner.cc
diff --git a/chrome/browser/extensions/extension_action_runner.cc b/chrome/browser/extensions/extension_action_runner.cc
index bcbb7e738c3ee2c4a003de97786b81b5090efa78..8fa7f01c52233cb9e12f18c08507020dafb598e8 100644
--- a/chrome/browser/extensions/extension_action_runner.cc
+++ b/chrome/browser/extensions/extension_action_runner.cc
@@ -68,13 +68,40 @@ ExtensionActionRunner* ExtensionActionRunner::GetForWebContents(
return tab_helper ? tab_helper->extension_action_runner() : NULL;
}
-void ExtensionActionRunner::OnActiveTabPermissionGranted(
- const Extension* extension) {
- if (WantsToRun(extension))
- OnClicked(extension);
+ExtensionAction::ShowAction ExtensionActionRunner::RunAction(
+ const Extension* extension,
+ bool grant_tab_permissions) {
+ bool has_pending_scripts = WantsToRun(extension);
+ if (grant_tab_permissions) {
+ TabHelper::FromWebContents(web_contents())
+ ->active_tab_permission_granter()
+ ->GrantIfRequested(extension);
+ // If the extension had blocked actions, granting active tab will have
+ // run the extension. Don't execute further since clicking should run
+ // blocked actions *or* the normal 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);
+ int tab_id = SessionTabHelper::IdForTab(web_contents());
+ if (!extension_action->GetIsVisible(tab_id))
+ return ExtensionAction::ACTION_NONE;
+
+ if (extension_action->HasPopup(tab_id))
+ return ExtensionAction::ACTION_SHOW_POPUP;
+
+ ExtensionActionAPI::Get(browser_context_)
+ ->DispatchExtensionActionClicked(*extension_action, web_contents());
+ return ExtensionAction::ACTION_NONE;
}
-void ExtensionActionRunner::OnClicked(const Extension* extension) {
+void ExtensionActionRunner::RunBlockedActions(const Extension* extension) {
DCHECK(ContainsKey(pending_scripts_, extension->id()) ||
web_request_blocked_.count(extension->id()) != 0);
@@ -94,6 +121,12 @@ void ExtensionActionRunner::OnClicked(const Extension* extension) {
NotifyChange(extension);
}
+void ExtensionActionRunner::OnActiveTabPermissionGranted(
+ const Extension* extension) {
+ if (WantsToRun(extension))
+ RunBlockedActions(extension);
+}
+
void ExtensionActionRunner::OnWebRequestBlocked(const Extension* extension) {
web_request_blocked_.insert(extension->id());
}

Powered by Google App Engine
This is Rietveld 408576698