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

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: add comment 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/tab_helper.h" 17 #include "chrome/browser/extensions/tab_helper.h"
16 #include "chrome/browser/profiles/profile.h" 18 #include "chrome/browser/profiles/profile.h"
(...skipping 17 matching lines...) Expand all
34 const extensions::ExtensionList& extension_list) { 36 const extensions::ExtensionList& extension_list) {
35 for (size_t i = 0; i < extension_list.size(); i++) { 37 for (size_t i = 0; i < extension_list.size(); i++) {
36 if (extension_list[i].get() == extension) 38 if (extension_list[i].get() == extension)
37 return true; 39 return true;
38 } 40 }
39 return false; 41 return false;
40 } 42 }
41 43
42 } // namespace 44 } // namespace
43 45
46 bool ExtensionToolbarModel::Observer::BrowserActionShowPopup(
47 const extensions::Extension* extension) {
48 return false;
49 }
50
44 ExtensionToolbarModel::ExtensionToolbarModel(ExtensionService* service) 51 ExtensionToolbarModel::ExtensionToolbarModel(ExtensionService* service)
45 : service_(service), 52 : service_(service),
46 prefs_(service->profile()->GetPrefs()), 53 prefs_(service->profile()->GetPrefs()),
47 extensions_initialized_(false), 54 extensions_initialized_(false),
48 weak_ptr_factory_(this) { 55 weak_ptr_factory_(this) {
49 DCHECK(service_); 56 DCHECK(service_);
50 57
51 registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_LOADED, 58 registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_LOADED,
52 content::Source<Profile>(service_->profile())); 59 content::Source<Profile>(service_->profile()));
53 registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_UNLOADED, 60 registrar_.Add(this, chrome::NOTIFICATION_EXTENSION_UNLOADED,
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
121 } 128 }
122 129
123 FOR_EACH_OBSERVER(Observer, observers_, BrowserActionMoved(extension, index)); 130 FOR_EACH_OBSERVER(Observer, observers_, BrowserActionMoved(extension, index));
124 131
125 UpdatePrefs(); 132 UpdatePrefs();
126 } 133 }
127 134
128 ExtensionToolbarModel::Action ExtensionToolbarModel::ExecuteBrowserAction( 135 ExtensionToolbarModel::Action ExtensionToolbarModel::ExecuteBrowserAction(
129 const Extension* extension, 136 const Extension* extension,
130 Browser* browser, 137 Browser* browser,
131 GURL* popup_url_out) { 138 GURL* popup_url_out,
139 bool should_grant) {
132 content::WebContents* web_contents = NULL; 140 content::WebContents* web_contents = NULL;
133 int tab_id = 0; 141 int tab_id = 0;
134 if (!ExtensionTabUtil::GetDefaultTab(browser, &web_contents, &tab_id)) 142 if (!ExtensionTabUtil::GetDefaultTab(browser, &web_contents, &tab_id))
135 return ACTION_NONE; 143 return ACTION_NONE;
136 144
137 ExtensionAction* browser_action = 145 ExtensionAction* browser_action =
138 extensions::ExtensionActionManager::Get(service_->profile())-> 146 extensions::ExtensionActionManager::Get(service_->profile())->
139 GetBrowserAction(*extension); 147 GetBrowserAction(*extension);
140 148
141 // For browser actions, visibility == enabledness. 149 // For browser actions, visibility == enabledness.
142 if (!browser_action->GetIsVisible(tab_id)) 150 if (!browser_action->GetIsVisible(tab_id))
143 return ACTION_NONE; 151 return ACTION_NONE;
144 152
145 extensions::TabHelper::FromWebContents(web_contents)-> 153 if (should_grant) {
146 active_tab_permission_granter()->GrantIfRequested(extension); 154 extensions::TabHelper::FromWebContents(web_contents)->
155 active_tab_permission_granter()->GrantIfRequested(extension);
156 }
147 157
148 if (browser_action->HasPopup(tab_id)) { 158 if (browser_action->HasPopup(tab_id)) {
149 if (popup_url_out) 159 if (popup_url_out)
150 *popup_url_out = browser_action->GetPopupUrl(tab_id); 160 *popup_url_out = browser_action->GetPopupUrl(tab_id);
151 return ACTION_SHOW_POPUP; 161 return ACTION_SHOW_POPUP;
152 } 162 }
153 163
154 extensions::ExtensionActionAPI::BrowserActionExecuted( 164 extensions::ExtensionActionAPI::BrowserActionExecuted(
155 service_->profile(), *browser_action, web_contents); 165 service_->profile(), *browser_action, web_contents);
156 return ACTION_NONE; 166 return ACTION_NONE;
(...skipping 290 matching lines...) Expand 10 before | Expand all | Expand 10 after
447 457
448 if (last_known_positions_.size() > pref_position_size) { 458 if (last_known_positions_.size() > pref_position_size) {
449 // Need to update pref because we have extra icons. But can't call 459 // Need to update pref because we have extra icons. But can't call
450 // UpdatePrefs() directly within observation closure. 460 // UpdatePrefs() directly within observation closure.
451 base::MessageLoop::current()->PostTask( 461 base::MessageLoop::current()->PostTask(
452 FROM_HERE, 462 FROM_HERE,
453 base::Bind(&ExtensionToolbarModel::UpdatePrefs, 463 base::Bind(&ExtensionToolbarModel::UpdatePrefs,
454 weak_ptr_factory_.GetWeakPtr())); 464 weak_ptr_factory_.GetWeakPtr()));
455 } 465 }
456 } 466 }
467
468 bool ExtensionToolbarModel::ShowBrowserActionPopup(
469 const extensions::Extension* extension) {
470 ObserverListBase<Observer>::Iterator it(observers_);
471 Observer* obs = NULL;
472 while ((obs = it.GetNext()) != NULL) {
473 // Stop after first popup since it should only show in the active window.
474 if (obs->BrowserActionShowPopup(extension))
475 return true;
476 }
477 return false;
478 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698