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

Unified Diff: chrome/browser/extensions/api/extension_action/extension_action_api.cc

Issue 496863003: Consolidate ExtensionAction execution code (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 4 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/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 1029c311c2b8241c81458aac374ac6ebc05c366e..e6cd1007ce65d87ac63439dd9bdf96a6cd10e4be 100644
--- a/chrome/browser/extensions/api/extension_action/extension_action_api.cc
+++ b/chrome/browser/extensions/api/extension_action/extension_action_api.cc
@@ -9,16 +9,17 @@
#include "base/strings/string_number_conversions.h"
#include "base/strings/string_util.h"
#include "base/values.h"
+#include "chrome/browser/extensions/active_script_controller.h"
#include "chrome/browser/extensions/api/extension_action/extension_page_actions_api_constants.h"
#include "chrome/browser/extensions/extension_action.h"
#include "chrome/browser/extensions/extension_action_manager.h"
-#include "chrome/browser/extensions/extension_service.h"
#include "chrome/browser/extensions/extension_tab_util.h"
#include "chrome/browser/extensions/extension_toolbar_model.h"
-#include "chrome/browser/extensions/location_bar_controller.h"
#include "chrome/browser/extensions/tab_helper.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/sessions/session_tab_helper.h"
+#include "chrome/browser/ui/browser.h"
+#include "chrome/browser/ui/tabs/tab_strip_model.h"
#include "chrome/common/extensions/api/extension_action/action_info.h"
#include "chrome/common/render_messages.h"
#include "content/public/browser/navigation_entry.h"
@@ -310,35 +311,91 @@ void ExtensionActionAPI::SetBrowserActionVisibility(
content::Details<const std::string>(&extension_id));
}
-// static
-void ExtensionActionAPI::BrowserActionExecuted(
- content::BrowserContext* context,
- const ExtensionAction& browser_action,
- WebContents* web_contents) {
- ExtensionActionExecuted(context, browser_action, web_contents);
+void ExtensionActionAPI::AddObserver(Observer* observer) {
+ observers_.AddObserver(observer);
}
-// static
-void ExtensionActionAPI::PageActionExecuted(content::BrowserContext* context,
- const ExtensionAction& page_action,
- int tab_id,
- const std::string& url,
- int button) {
- WebContents* web_contents = NULL;
- if (!ExtensionTabUtil::GetTabById(
- tab_id,
- Profile::FromBrowserContext(context),
- context->IsOffTheRecord(),
- NULL,
- NULL,
- &web_contents,
- NULL)) {
- return;
+void ExtensionActionAPI::RemoveObserver(Observer* observer) {
+ observers_.RemoveObserver(observer);
+}
+
+ExtensionAction::ShowAction ExtensionActionAPI::ExecuteExtensionAction(
+ const Extension* extension,
+ Browser* browser,
+ bool grant_active_tab_permissions) {
+ content::WebContents* web_contents =
+ browser->tab_strip_model()->GetActiveWebContents();
+ if (!web_contents)
+ return ExtensionAction::ACTION_NONE;
+
+ int tab_id = SessionTabHelper::IdForTab(web_contents);
+
+ ExtensionActionManager* action_manager =
+ ExtensionActionManager::Get(static_cast<Profile*>(browser_context_));
+ // TODO(devlin): Make a ExtensionActionManager::GetExtensionAction method.
+ ExtensionAction* extension_action =
+ action_manager->GetBrowserAction(*extension);
+ if (!extension_action)
+ extension_action = action_manager->GetPageAction(*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;
+
+ // Grant active tab if appropriate.
+ if (grant_active_tab_permissions) {
+ TabHelper::FromWebContents(web_contents)->active_tab_permission_granter()->
+ 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 (extension_action->HasPopup(tab_id))
+ return ExtensionAction::ACTION_SHOW_POPUP;
+
+ ExtensionActionExecuted(*extension_action, web_contents);
+ return ExtensionAction::ACTION_NONE;
+}
+
+void ExtensionActionAPI::NotifyChange(ExtensionAction* extension_action,
+ content::WebContents* web_contents,
+ content::BrowserContext* context) {
+ FOR_EACH_OBSERVER(
+ Observer,
+ observers_,
+ OnExtensionActionUpdated(extension_action, web_contents, context));
+}
+
+void ExtensionActionAPI::ClearAllValuesForTab(
+ content::WebContents* web_contents) {
+ DCHECK(web_contents);
+ int tab_id = SessionTabHelper::IdForTab(web_contents);
+ content::BrowserContext* browser_context = web_contents->GetBrowserContext();
+ const ExtensionSet& enabled_extensions =
+ ExtensionRegistry::Get(browser_context_)->enabled_extensions();
+ ExtensionActionManager* action_manager =
+ ExtensionActionManager::Get(browser_context_);
+
+ 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());
+ if (extension_action) {
+ extension_action->ClearAllValuesForTab(tab_id);
+ NotifyChange(extension_action, web_contents, browser_context);
+ }
}
- ExtensionActionExecuted(context, page_action, web_contents);
}
-// static
void ExtensionActionAPI::DispatchEventToExtension(
content::BrowserContext* context,
const std::string& extension_id,
@@ -354,9 +411,7 @@ void ExtensionActionAPI::DispatchEventToExtension(
->DispatchEventToExtension(extension_id, event.Pass());
}
-// static
void ExtensionActionAPI::ExtensionActionExecuted(
- content::BrowserContext* context,
const ExtensionAction& extension_action,
WebContents* web_contents) {
const char* event_name = NULL;
@@ -379,47 +434,10 @@ void ExtensionActionAPI::ExtensionActionExecuted(
args->Append(tab_value);
DispatchEventToExtension(
- context, extension_action.extension_id(), event_name, args.Pass());
- }
-}
-
-void ExtensionActionAPI::AddObserver(Observer* observer) {
- observers_.AddObserver(observer);
-}
-
-void ExtensionActionAPI::RemoveObserver(Observer* observer) {
- observers_.RemoveObserver(observer);
-}
-
-void ExtensionActionAPI::NotifyChange(ExtensionAction* extension_action,
- content::WebContents* web_contents,
- content::BrowserContext* context) {
- FOR_EACH_OBSERVER(
- Observer,
- observers_,
- OnExtensionActionUpdated(extension_action, web_contents, context));
-}
-
-void ExtensionActionAPI::ClearAllValuesForTab(
- content::WebContents* web_contents) {
- DCHECK(web_contents);
- int tab_id = SessionTabHelper::IdForTab(web_contents);
- content::BrowserContext* browser_context = web_contents->GetBrowserContext();
- const ExtensionSet& enabled_extensions =
- ExtensionRegistry::Get(browser_context_)->enabled_extensions();
- ExtensionActionManager* action_manager =
- ExtensionActionManager::Get(browser_context_);
-
- 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());
- if (extension_action) {
- extension_action->ClearAllValuesForTab(tab_id);
- NotifyChange(extension_action, web_contents, browser_context);
- }
+ web_contents->GetBrowserContext(),
+ extension_action.extension_id(),
+ event_name,
+ args.Pass());
}
}
@@ -491,9 +509,8 @@ void ExtensionActionStorageManager::WriteToStorage(
void ExtensionActionStorageManager::ReadFromStorage(
const std::string& extension_id, scoped_ptr<base::Value> value) {
- const Extension* extension =
- ExtensionSystem::Get(profile_)->extension_service()->
- extensions()->GetByID(extension_id);
+ const Extension* extension = ExtensionRegistry::Get(profile_)->
+ enabled_extensions().GetByID(extension_id);
if (!extension)
return;

Powered by Google App Engine
This is Rietveld 408576698