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 c21b768e8a3463c95e091e98304415fc4d790b8e..ed3c8e67d540433c0a7839cbdc61be834f255d65 100644 |
--- a/chrome/browser/extensions/page_action_controller.cc |
+++ b/chrome/browser/extensions/page_action_controller.cc |
@@ -8,33 +8,39 @@ |
#include "chrome/browser/extensions/extension_browser_event_router.h" |
#include "chrome/browser/extensions/extension_service.h" |
#include "chrome/browser/extensions/extension_system.h" |
+#include "chrome/browser/extensions/extension_tab_helper.h" |
#include "chrome/browser/extensions/extension_tab_util.h" |
#include "chrome/common/extensions/extension_set.h" |
+#include "chrome/common/chrome_notification_types.h" |
+#include "content/public/browser/notification_service.h" |
#include "content/public/browser/web_contents.h" |
namespace extensions { |
-PageActionController::PageActionController(TabContentsWrapper* tab_contents) |
- : tab_contents_(tab_contents) {} |
+PageActionController::PageActionController(TabContentsWrapper* tab_contents, |
+ ExtensionTabHelper* tab_helper) |
+ : tab_contents_(tab_contents), |
+ tab_helper_(tab_helper) { |
+ tab_helper->AddObserver(this); |
+} |
-PageActionController::~PageActionController() {} |
+PageActionController::~PageActionController() { |
+ tab_helper_->RemoveObserver(this); |
+} |
-scoped_ptr<ActionBoxController::DataList> |
-PageActionController::GetAllBadgeData() { |
+scoped_ptr<std::vector<ExtensionAction*> > |
+PageActionController::GetCurrentActions() { |
+ int tab_id = ExtensionTabUtil::GetTabId(tab_contents_->web_contents()); |
const ExtensionSet* extensions = GetExtensionService()->extensions(); |
- scoped_ptr<DataList> all_badge_data(new DataList()); |
+ scoped_ptr<std::vector<ExtensionAction*> > current_actions( |
+ new std::vector<ExtensionAction*>()); |
for (ExtensionSet::const_iterator i = extensions->begin(); |
i != extensions->end(); ++i) { |
ExtensionAction* action = (*i)->page_action(); |
- if (action) { |
- Data data = { |
- DECORATION_NONE, |
- action, |
- }; |
- all_badge_data->push_back(data); |
- } |
+ if (action && action->GetIsVisible(tab_id)) |
+ current_actions->push_back(action); |
} |
- return all_badge_data.Pass(); |
+ return current_actions.Pass(); |
} |
ActionBoxController::Action PageActionController::OnClicked( |
@@ -69,6 +75,25 @@ ActionBoxController::Action PageActionController::OnClicked( |
return ACTION_NONE; |
} |
+void PageActionController::OnPageActionStateChanged() { |
+ content::NotificationService::current()->Notify( |
+ chrome::NOTIFICATION_EXTENSION_ACTION_BOX_UPDATED, |
+ content::Source<Profile>(tab_contents_->profile()), |
+ content::Details<TabContentsWrapper>(tab_contents_)); |
+ |
+ // TODO(kalman): remove this, and all occurrences of |
+ // NOTIFICATION_EXTENSION_PAGE_ACTION_VISIBILITY_CHANGED, when views and |
+ // cocoa have been updated to not use it. |
+ // |
+ // Only tests care about them, and they only ever use AllSources, so it can |
+ // safely be a bogus value. |
+ ExtensionAction bogus_action(""); |
+ content::NotificationService::current()->Notify( |
+ chrome::NOTIFICATION_EXTENSION_PAGE_ACTION_VISIBILITY_CHANGED, |
+ content::Source<ExtensionAction>(&bogus_action), |
+ content::Details<content::WebContents>(tab_contents_->web_contents())); |
+} |
+ |
ExtensionService* PageActionController::GetExtensionService() { |
return ExtensionSystem::Get(tab_contents_->profile())->extension_service(); |
} |