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

Side by Side Diff: chrome/browser/extensions/api/extension_action/extension_action_api.cc

Issue 597413003: Introduce an "ExtensionWantsToAct" method (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Latest master for CQ Created 6 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/api/extension_action/extension_action_api.h" 5 #include "chrome/browser/extensions/api/extension_action/extension_action_api.h"
6 6
7 #include "base/lazy_instance.h" 7 #include "base/lazy_instance.h"
8 #include "base/strings/string_number_conversions.h" 8 #include "base/strings/string_number_conversions.h"
9 #include "base/values.h" 9 #include "base/values.h"
10 #include "chrome/browser/extensions/active_script_controller.h" 10 #include "chrome/browser/extensions/active_script_controller.h"
(...skipping 212 matching lines...) Expand 10 before | Expand all | Expand 10 after
223 // enabled. 223 // enabled.
224 return browser->window()->GetLocationBar()->ShowPageActionPopup( 224 return browser->window()->GetLocationBar()->ShowPageActionPopup(
225 extension, grant_active_tab_permissions); 225 extension, grant_active_tab_permissions);
226 } else { 226 } else {
227 return ExtensionToolbarModel::Get(browser->profile())-> 227 return ExtensionToolbarModel::Get(browser->profile())->
228 ShowExtensionActionPopup( 228 ShowExtensionActionPopup(
229 extension, browser, grant_active_tab_permissions); 229 extension, browser, grant_active_tab_permissions);
230 } 230 }
231 } 231 }
232 232
233 bool ExtensionActionAPI::ExtensionWantsToRun(
234 const Extension* extension, content::WebContents* web_contents) {
235 // An extension wants to act if it has a visible page action on the given
236 // page...
237 ExtensionAction* page_action =
238 ExtensionActionManager::Get(browser_context_)->GetPageAction(*extension);
239 if (page_action &&
240 page_action->GetIsVisible(SessionTabHelper::IdForTab(web_contents)))
241 return true;
242
243 // ... Or if it has pending scripts that need approval for execution.
244 ActiveScriptController* active_script_controller =
245 ActiveScriptController::GetForWebContents(web_contents);
246 if (active_script_controller &&
247 active_script_controller->WantsToRun(extension))
248 return true;
249
250 return false;
251 }
252
233 void ExtensionActionAPI::NotifyChange(ExtensionAction* extension_action, 253 void ExtensionActionAPI::NotifyChange(ExtensionAction* extension_action,
234 content::WebContents* web_contents, 254 content::WebContents* web_contents,
235 content::BrowserContext* context) { 255 content::BrowserContext* context) {
236 FOR_EACH_OBSERVER( 256 FOR_EACH_OBSERVER(
237 Observer, 257 Observer,
238 observers_, 258 observers_,
239 OnExtensionActionUpdated(extension_action, web_contents, context)); 259 OnExtensionActionUpdated(extension_action, web_contents, context));
240 260
241 if (extension_action->action_type() == ActionInfo::TYPE_PAGE) 261 if (extension_action->action_type() == ActionInfo::TYPE_PAGE)
242 NotifyPageActionsChanged(web_contents); 262 NotifyPageActionsChanged(web_contents);
243 } 263 }
244 264
245 void ExtensionActionAPI::ClearAllValuesForTab( 265 void ExtensionActionAPI::ClearAllValuesForTab(
246 content::WebContents* web_contents) { 266 content::WebContents* web_contents) {
247 DCHECK(web_contents); 267 DCHECK(web_contents);
248 int tab_id = SessionTabHelper::IdForTab(web_contents); 268 int tab_id = SessionTabHelper::IdForTab(web_contents);
249 content::BrowserContext* browser_context = web_contents->GetBrowserContext(); 269 content::BrowserContext* browser_context = web_contents->GetBrowserContext();
250 const ExtensionSet& enabled_extensions = 270 const ExtensionSet& enabled_extensions =
251 ExtensionRegistry::Get(browser_context_)->enabled_extensions(); 271 ExtensionRegistry::Get(browser_context_)->enabled_extensions();
252 ExtensionActionManager* action_manager = 272 ExtensionActionManager* action_manager =
253 ExtensionActionManager::Get(browser_context_); 273 ExtensionActionManager::Get(browser_context_);
254 274
255 for (ExtensionSet::const_iterator iter = enabled_extensions.begin(); 275 for (ExtensionSet::const_iterator iter = enabled_extensions.begin();
256 iter != enabled_extensions.end(); ++iter) { 276 iter != enabled_extensions.end(); ++iter) {
257 ExtensionAction* extension_action = 277 ExtensionAction* extension_action =
258 action_manager->GetBrowserAction(*iter->get()); 278 action_manager->GetExtensionAction(**iter);
259 if (!extension_action)
260 extension_action = action_manager->GetPageAction(*iter->get());
261 if (extension_action) { 279 if (extension_action) {
262 extension_action->ClearAllValuesForTab(tab_id); 280 extension_action->ClearAllValuesForTab(tab_id);
263 NotifyChange(extension_action, web_contents, browser_context); 281 NotifyChange(extension_action, web_contents, browser_context);
264 } 282 }
265 } 283 }
266 } 284 }
267 285
268 void ExtensionActionAPI::DispatchEventToExtension( 286 void ExtensionActionAPI::DispatchEventToExtension(
269 content::BrowserContext* context, 287 content::BrowserContext* context,
270 const std::string& extension_id, 288 const std::string& extension_id,
(...skipping 359 matching lines...) Expand 10 before | Expand all | Expand 10 after
630 if (host->extension_host_type() != VIEW_TYPE_EXTENSION_POPUP || 648 if (host->extension_host_type() != VIEW_TYPE_EXTENSION_POPUP ||
631 host->extension()->id() != extension_->id()) 649 host->extension()->id() != extension_->id())
632 return; 650 return;
633 651
634 SendResponse(true); 652 SendResponse(true);
635 response_sent_ = true; 653 response_sent_ = true;
636 registrar_.RemoveAll(); 654 registrar_.RemoveAll();
637 } 655 }
638 656
639 } // namespace extensions 657 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698