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

Side by Side Diff: chrome/browser/extensions/extension_toolbar_model.cc

Issue 25305002: Implement initial chrome.browserAction.openPopup API. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: move to interactive_ui_test Created 7 years, 2 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 unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/extensions/extension_toolbar_model.h" 5 #include "chrome/browser/extensions/extension_toolbar_model.h"
6 6
7 #include <string>
8
7 #include "base/prefs/pref_service.h" 9 #include "base/prefs/pref_service.h"
8 #include "chrome/browser/chrome_notification_types.h" 10 #include "chrome/browser/chrome_notification_types.h"
9 #include "chrome/browser/extensions/api/extension_action/extension_action_api.h" 11 #include "chrome/browser/extensions/api/extension_action/extension_action_api.h"
10 #include "chrome/browser/extensions/extension_action.h" 12 #include "chrome/browser/extensions/extension_action.h"
11 #include "chrome/browser/extensions/extension_action_manager.h" 13 #include "chrome/browser/extensions/extension_action_manager.h"
12 #include "chrome/browser/extensions/extension_prefs.h" 14 #include "chrome/browser/extensions/extension_prefs.h"
13 #include "chrome/browser/extensions/extension_service.h" 15 #include "chrome/browser/extensions/extension_service.h"
14 #include "chrome/browser/extensions/extension_tab_util.h" 16 #include "chrome/browser/extensions/extension_tab_util.h"
15 #include "chrome/browser/extensions/extension_util.h" 17 #include "chrome/browser/extensions/extension_util.h"
16 #include "chrome/browser/extensions/tab_helper.h" 18 #include "chrome/browser/extensions/tab_helper.h"
(...skipping 18 matching lines...) Expand all
35 const extensions::ExtensionList& extension_list) { 37 const extensions::ExtensionList& extension_list) {
36 for (size_t i = 0; i < extension_list.size(); i++) { 38 for (size_t i = 0; i < extension_list.size(); i++) {
37 if (extension_list[i].get() == extension) 39 if (extension_list[i].get() == extension)
38 return true; 40 return true;
39 } 41 }
40 return false; 42 return false;
41 } 43 }
42 44
43 } // namespace 45 } // namespace
44 46
47 bool ExtensionToolbarModel::Observer::BrowserActionShowPopup(
48 const extensions::Extension* extension) {
49 return false;
50 }
51
45 ExtensionToolbarModel::ExtensionToolbarModel(ExtensionService* service) 52 ExtensionToolbarModel::ExtensionToolbarModel(ExtensionService* service)
46 : service_(service), 53 : service_(service),
47 prefs_(service->profile()->GetPrefs()), 54 prefs_(service->profile()->GetPrefs()),
48 extensions_initialized_(false), 55 extensions_initialized_(false),
49 weak_ptr_factory_(this) { 56 weak_ptr_factory_(this) {
50 DCHECK(service_); 57 DCHECK(service_);
51 58
52 registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_LOADED, 59 registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_LOADED,
53 content::Source<Profile>(service_->profile())); 60 content::Source<Profile>(service_->profile()));
54 registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_UNLOADED, 61 registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_UNLOADED,
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
122 } 129 }
123 130
124 FOR_EACH_OBSERVER(Observer, observers_, BrowserActionMoved(extension, index)); 131 FOR_EACH_OBSERVER(Observer, observers_, BrowserActionMoved(extension, index));
125 132
126 UpdatePrefs(); 133 UpdatePrefs();
127 } 134 }
128 135
129 ExtensionToolbarModel::Action ExtensionToolbarModel::ExecuteBrowserAction( 136 ExtensionToolbarModel::Action ExtensionToolbarModel::ExecuteBrowserAction(
130 const Extension* extension, 137 const Extension* extension,
131 Browser* browser, 138 Browser* browser,
132 GURL* popup_url_out) { 139 GURL* popup_url_out,
140 bool should_grant) {
133 content::WebContents* web_contents = NULL; 141 content::WebContents* web_contents = NULL;
134 int tab_id = 0; 142 int tab_id = 0;
135 if (!ExtensionTabUtil::GetDefaultTab(browser, &web_contents, &tab_id)) 143 if (!ExtensionTabUtil::GetDefaultTab(browser, &web_contents, &tab_id))
136 return ACTION_NONE; 144 return ACTION_NONE;
137 145
138 ExtensionAction* browser_action = 146 ExtensionAction* browser_action =
139 extensions::ExtensionActionManager::Get(service_->profile())-> 147 extensions::ExtensionActionManager::Get(service_->profile())->
140 GetBrowserAction(*extension); 148 GetBrowserAction(*extension);
141 149
142 // For browser actions, visibility == enabledness. 150 // For browser actions, visibility == enabledness.
143 if (!browser_action->GetIsVisible(tab_id)) 151 if (!browser_action->GetIsVisible(tab_id))
144 return ACTION_NONE; 152 return ACTION_NONE;
145 153
146 extensions::TabHelper::FromWebContents(web_contents)-> 154 if (should_grant) {
147 active_tab_permission_granter()->GrantIfRequested(extension); 155 extensions::TabHelper::FromWebContents(web_contents)->
156 active_tab_permission_granter()->GrantIfRequested(extension);
157 }
148 158
149 if (browser_action->HasPopup(tab_id)) { 159 if (browser_action->HasPopup(tab_id)) {
150 if (popup_url_out) 160 if (popup_url_out)
151 *popup_url_out = browser_action->GetPopupUrl(tab_id); 161 *popup_url_out = browser_action->GetPopupUrl(tab_id);
152 return ACTION_SHOW_POPUP; 162 return ACTION_SHOW_POPUP;
153 } 163 }
154 164
155 extensions::ExtensionActionAPI::BrowserActionExecuted( 165 extensions::ExtensionActionAPI::BrowserActionExecuted(
156 service_->profile(), *browser_action, web_contents); 166 service_->profile(), *browser_action, web_contents);
157 return ACTION_NONE; 167 return ACTION_NONE;
(...skipping 290 matching lines...) Expand 10 before | Expand all | Expand 10 after
448 458
449 if (last_known_positions_.size() > pref_position_size) { 459 if (last_known_positions_.size() > pref_position_size) {
450 // Need to update pref because we have extra icons. But can't call 460 // Need to update pref because we have extra icons. But can't call
451 // UpdatePrefs() directly within observation closure. 461 // UpdatePrefs() directly within observation closure.
452 base::MessageLoop::current()->PostTask( 462 base::MessageLoop::current()->PostTask(
453 FROM_HERE, 463 FROM_HERE,
454 base::Bind(&ExtensionToolbarModel::UpdatePrefs, 464 base::Bind(&ExtensionToolbarModel::UpdatePrefs,
455 weak_ptr_factory_.GetWeakPtr())); 465 weak_ptr_factory_.GetWeakPtr()));
456 } 466 }
457 } 467 }
468
469 bool ExtensionToolbarModel::ShowBrowserActionPopup(
470 const extensions::Extension* extension) {
471 ObserverListBase<Observer>::Iterator it(observers_);
472 Observer* obs = NULL;
473 while ((obs = it.GetNext()) != NULL) {
474 // Stop after first popup since it should only show in the active window.
475 if (obs->BrowserActionShowPopup(extension))
476 return true;
477 }
478 return false;
479 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698