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; |