Index: chrome/browser/extensions/page_action_controller.cc |
diff --git a/chrome/browser/extensions/page_action_controller.cc b/chrome/browser/extensions/page_action_controller.cc |
index 6d9bfad11a903e1ce8c72e7a0fb8e4b015600cc8..d914f55df9a3578400f02e0c8ae029d972b01f66 100644 |
--- a/chrome/browser/extensions/page_action_controller.cc |
+++ b/chrome/browser/extensions/page_action_controller.cc |
@@ -9,14 +9,11 @@ |
#include "base/lazy_instance.h" |
#include "base/metrics/histogram.h" |
#include "chrome/browser/extensions/api/extension_action/extension_action_api.h" |
-#include "chrome/browser/extensions/component_loader.h" |
#include "chrome/browser/extensions/extension_action.h" |
#include "chrome/browser/extensions/extension_action_manager.h" |
-#include "chrome/browser/extensions/extension_tab_util.h" |
#include "chrome/browser/extensions/tab_helper.h" |
#include "chrome/browser/profiles/profile.h" |
#include "chrome/browser/sessions/session_id.h" |
-#include "content/public/browser/invalidate_type.h" |
#include "content/public/browser/navigation_details.h" |
#include "content/public/browser/web_contents.h" |
#include "extensions/browser/extension_registry.h" |
@@ -29,111 +26,69 @@ base::LazyInstance<std::set<Profile*> > g_reported_for_profiles = |
LAZY_INSTANCE_INITIALIZER; |
PageActionController::PageActionController(content::WebContents* web_contents) |
- : content::WebContentsObserver(web_contents) {} |
- |
-PageActionController::~PageActionController() {} |
- |
-std::vector<ExtensionAction*> PageActionController::GetCurrentActions() const { |
- ExtensionRegistry* registry = GetExtensionRegistry(); |
- if (!registry) |
- return std::vector<ExtensionAction*>(); |
- |
- // Accumulate the list of all page actions to display. |
- std::vector<ExtensionAction*> current_actions; |
- |
- ExtensionActionManager* extension_action_manager = |
- ExtensionActionManager::Get(GetProfile()); |
- |
- const ExtensionSet& enabled_set = registry->enabled_extensions(); |
- for (ExtensionSet::const_iterator i = enabled_set.begin(); |
- i != enabled_set.end(); |
- ++i) { |
- ExtensionAction* action = |
- extension_action_manager->GetPageAction(*i->get()); |
- if (action) |
- current_actions.push_back(action); |
- } |
+ : web_contents_(web_contents) { |
+} |
- if (!g_reported_for_profiles.Get().count(GetProfile())) { |
- UMA_HISTOGRAM_COUNTS_100("PageActionController.ExtensionsWithPageActions", |
- current_actions.size()); |
- g_reported_for_profiles.Get().insert(GetProfile()); |
- } |
+PageActionController::~PageActionController() { |
+} |
- return current_actions; |
+ExtensionAction* PageActionController::GetActionForExtension( |
+ const Extension* extension) { |
+ return ExtensionActionManager::Get(GetProfile())->GetPageAction(*extension); |
} |
LocationBarController::Action PageActionController::OnClicked( |
- const std::string& extension_id, int mouse_button) { |
- ExtensionRegistry* registry = GetExtensionRegistry(); |
- if (!registry) |
- return ACTION_NONE; |
- |
- const Extension* extension = |
- registry->enabled_extensions().GetByID(extension_id); |
- CHECK(extension); |
+ const Extension* extension) { |
ExtensionAction* page_action = |
ExtensionActionManager::Get(GetProfile())->GetPageAction(*extension); |
CHECK(page_action); |
- int tab_id = ExtensionTabUtil::GetTabId(web_contents()); |
- extensions::TabHelper::FromWebContents(web_contents())-> |
+ int tab_id = SessionID::IdForTab(web_contents_); |
+ TabHelper::FromWebContents(web_contents_)-> |
active_tab_permission_granter()->GrantIfRequested(extension); |
- switch (mouse_button) { |
- case 1: // left |
- case 2: // middle |
- if (page_action->HasPopup(tab_id)) |
- return ACTION_SHOW_POPUP; |
+ if (page_action->HasPopup(tab_id)) |
+ return LocationBarController::ACTION_SHOW_POPUP; |
- ExtensionActionAPI::PageActionExecuted( |
- GetProfile(), *page_action, tab_id, |
- web_contents()->GetURL().spec(), mouse_button); |
- return ACTION_NONE; |
+ ExtensionActionAPI::PageActionExecuted( |
+ web_contents_->GetBrowserContext(), |
+ *page_action, |
+ tab_id, |
+ web_contents_->GetLastCommittedURL().spec(), |
+ 1 /* Button indication. We only ever pass left-click. */); |
- case 3: // right |
- return extension->ShowConfigureContextMenus() ? |
- ACTION_SHOW_CONTEXT_MENU : ACTION_NONE; |
- } |
- |
- return ACTION_NONE; |
-} |
- |
-void PageActionController::NotifyChange() { |
- web_contents()->NotifyNavigationStateChanged( |
- content::INVALIDATE_TYPE_PAGE_ACTIONS); |
+ return LocationBarController::ACTION_NONE; |
} |
-void PageActionController::DidNavigateMainFrame( |
- const content::LoadCommittedDetails& details, |
- const content::FrameNavigateParams& params) { |
- if (details.is_in_page) |
- return; |
- |
- const std::vector<ExtensionAction*> current_actions = GetCurrentActions(); |
- |
- if (current_actions.empty()) |
- return; |
- |
- for (size_t i = 0; i < current_actions.size(); ++i) { |
- current_actions[i]->ClearAllValuesForTab( |
- SessionID::IdForTab(web_contents())); |
+void PageActionController::OnNavigated() { |
+ const ExtensionSet& extensions = |
+ ExtensionRegistry::Get(web_contents_->GetBrowserContext()) |
+ ->enabled_extensions(); |
+ int tab_id = SessionID::IdForTab(web_contents_); |
+ size_t num_current_actions = 0u; |
+ for (ExtensionSet::const_iterator iter = extensions.begin(); |
+ iter != extensions.end(); |
+ ++iter) { |
+ ExtensionAction* action = GetActionForExtension(*iter); |
+ if (action) { |
+ action->ClearAllValuesForTab(tab_id); |
+ ++num_current_actions; |
+ } |
} |
- NotifyChange(); |
-} |
- |
-Profile* PageActionController::GetProfile() const { |
- content::WebContents* web_contents = this->web_contents(); |
- if (web_contents) |
- return Profile::FromBrowserContext(web_contents->GetBrowserContext()); |
+ Profile* profile = GetProfile(); |
+ // Report the number of page actions for this profile, if we haven't already. |
not at google - send to devlin
2014/05/08 23:33:19
this is so broken. can you TODO-ify to fix this (s
Devlin
2014/05/09 00:15:32
Done.
|
+ if (!g_reported_for_profiles.Get().count(profile)) { |
+ UMA_HISTOGRAM_COUNTS_100("PageActionController.ExtensionsWithPageActions", |
+ num_current_actions); |
+ g_reported_for_profiles.Get().insert(profile); |
+ } |
- return NULL; |
+ LocationBarController::NotifyChange(web_contents_); |
} |
-ExtensionRegistry* PageActionController::GetExtensionRegistry() const { |
- Profile* profile = this->GetProfile(); |
- return profile ? ExtensionRegistry::Get(profile) : NULL; |
+Profile* PageActionController::GetProfile() { |
+ return Profile::FromBrowserContext(web_contents_->GetBrowserContext()); |
} |
} // namespace extensions |