summaryrefslogtreecommitdiffstats
path: root/chrome/browser/extensions/page_action_controller.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser/extensions/page_action_controller.cc')
-rw-r--r--chrome/browser/extensions/page_action_controller.cc53
1 files changed, 39 insertions, 14 deletions
diff --git a/chrome/browser/extensions/page_action_controller.cc b/chrome/browser/extensions/page_action_controller.cc
index c21b768..ed3c8e6 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();
}