OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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/ui/extensions/extension_action_view_controller.h" | 5 #include "chrome/browser/ui/extensions/extension_action_view_controller.h" |
6 | 6 |
7 #include <utility> | 7 #include <utility> |
8 | 8 |
9 #include "base/logging.h" | 9 #include "base/logging.h" |
10 #include "base/strings/utf_string_conversions.h" | 10 #include "base/strings/utf_string_conversions.h" |
11 #include "chrome/browser/extensions/api/commands/command_service.h" | 11 #include "chrome/browser/extensions/api/commands/command_service.h" |
12 #include "chrome/browser/extensions/api/extension_action/extension_action_api.h" | 12 #include "chrome/browser/extensions/api/extension_action/extension_action_api.h" |
13 #include "chrome/browser/extensions/extension_action.h" | 13 #include "chrome/browser/extensions/extension_action.h" |
| 14 #include "chrome/browser/extensions/extension_action_runner.h" |
14 #include "chrome/browser/extensions/extension_view.h" | 15 #include "chrome/browser/extensions/extension_view.h" |
15 #include "chrome/browser/extensions/extension_view_host.h" | 16 #include "chrome/browser/extensions/extension_view_host.h" |
16 #include "chrome/browser/extensions/extension_view_host_factory.h" | 17 #include "chrome/browser/extensions/extension_view_host_factory.h" |
17 #include "chrome/browser/profiles/profile.h" | 18 #include "chrome/browser/profiles/profile.h" |
18 #include "chrome/browser/sessions/session_tab_helper.h" | 19 #include "chrome/browser/sessions/session_tab_helper.h" |
19 #include "chrome/browser/ui/browser.h" | 20 #include "chrome/browser/ui/browser.h" |
20 #include "chrome/browser/ui/extensions/accelerator_priority.h" | 21 #include "chrome/browser/ui/extensions/accelerator_priority.h" |
21 #include "chrome/browser/ui/extensions/extension_action_platform_delegate.h" | 22 #include "chrome/browser/ui/extensions/extension_action_platform_delegate.h" |
22 #include "chrome/browser/ui/extensions/icon_with_badge_image_source.h" | 23 #include "chrome/browser/ui/extensions/icon_with_badge_image_source.h" |
23 #include "chrome/browser/ui/toolbar/toolbar_action_view_delegate.h" | 24 #include "chrome/browser/ui/toolbar/toolbar_action_view_delegate.h" |
24 #include "chrome/browser/ui/toolbar/toolbar_actions_bar.h" | 25 #include "chrome/browser/ui/toolbar/toolbar_actions_bar.h" |
25 #include "chrome/common/extensions/api/extension_action/action_info.h" | 26 #include "chrome/common/extensions/api/extension_action/action_info.h" |
26 #include "extensions/browser/extension_host.h" | 27 #include "extensions/browser/extension_host.h" |
27 #include "extensions/browser/extension_registry.h" | 28 #include "extensions/browser/extension_registry.h" |
28 #include "extensions/common/extension.h" | 29 #include "extensions/common/extension.h" |
29 #include "extensions/common/feature_switch.h" | 30 #include "extensions/common/feature_switch.h" |
30 #include "extensions/common/manifest_constants.h" | 31 #include "extensions/common/manifest_constants.h" |
31 #include "ui/gfx/image/image_skia.h" | 32 #include "ui/gfx/image/image_skia.h" |
32 #include "ui/gfx/image/image_skia_operations.h" | 33 #include "ui/gfx/image/image_skia_operations.h" |
33 | 34 |
34 using extensions::ActionInfo; | 35 using extensions::ActionInfo; |
35 using extensions::CommandService; | 36 using extensions::CommandService; |
| 37 using extensions::ExtensionActionRunner; |
36 | 38 |
37 ExtensionActionViewController::ExtensionActionViewController( | 39 ExtensionActionViewController::ExtensionActionViewController( |
38 const extensions::Extension* extension, | 40 const extensions::Extension* extension, |
39 Browser* browser, | 41 Browser* browser, |
40 ExtensionAction* extension_action, | 42 ExtensionAction* extension_action, |
41 ToolbarActionsBar* toolbar_actions_bar) | 43 ToolbarActionsBar* toolbar_actions_bar) |
42 : extension_(extension), | 44 : extension_(extension), |
43 browser_(browser), | 45 browser_(browser), |
44 extension_action_(extension_action), | 46 extension_action_(extension_action), |
45 toolbar_actions_bar_(toolbar_actions_bar), | 47 toolbar_actions_bar_(toolbar_actions_bar), |
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
112 return GetAccessibleName(web_contents); | 114 return GetAccessibleName(web_contents); |
113 } | 115 } |
114 | 116 |
115 bool ExtensionActionViewController::IsEnabled( | 117 bool ExtensionActionViewController::IsEnabled( |
116 content::WebContents* web_contents) const { | 118 content::WebContents* web_contents) const { |
117 if (!ExtensionIsValid()) | 119 if (!ExtensionIsValid()) |
118 return false; | 120 return false; |
119 | 121 |
120 return extension_action_->GetIsVisible( | 122 return extension_action_->GetIsVisible( |
121 SessionTabHelper::IdForTab(web_contents)) || | 123 SessionTabHelper::IdForTab(web_contents)) || |
122 extensions::ExtensionActionAPI::Get(browser_->profile()) | 124 HasBeenBlocked(web_contents); |
123 ->HasBeenBlocked(extension(), web_contents); | |
124 } | 125 } |
125 | 126 |
126 bool ExtensionActionViewController::WantsToRun( | 127 bool ExtensionActionViewController::WantsToRun( |
127 content::WebContents* web_contents) const { | 128 content::WebContents* web_contents) const { |
128 extensions::ExtensionActionAPI* action_api = | 129 return ExtensionIsValid() && |
129 extensions::ExtensionActionAPI::Get(browser_->profile()); | 130 (PageActionWantsToRun(web_contents) || HasBeenBlocked(web_contents)); |
130 return action_api->PageActionWantsToRun(extension(), web_contents) || | |
131 action_api->HasBeenBlocked(extension(), web_contents); | |
132 } | 131 } |
133 | 132 |
134 bool ExtensionActionViewController::HasPopup( | 133 bool ExtensionActionViewController::HasPopup( |
135 content::WebContents* web_contents) const { | 134 content::WebContents* web_contents) const { |
136 if (!ExtensionIsValid()) | 135 if (!ExtensionIsValid()) |
137 return false; | 136 return false; |
138 | 137 |
139 int tab_id = SessionTabHelper::IdForTab(web_contents); | 138 int tab_id = SessionTabHelper::IdForTab(web_contents); |
140 return (tab_id < 0) ? false : extension_action_->HasPopup(tab_id); | 139 return (tab_id < 0) ? false : extension_action_->HasPopup(tab_id); |
141 } | 140 } |
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
201 return; | 200 return; |
202 | 201 |
203 view_delegate_->UpdateState(); | 202 view_delegate_->UpdateState(); |
204 } | 203 } |
205 | 204 |
206 bool ExtensionActionViewController::ExecuteAction(PopupShowAction show_action, | 205 bool ExtensionActionViewController::ExecuteAction(PopupShowAction show_action, |
207 bool grant_tab_permissions) { | 206 bool grant_tab_permissions) { |
208 if (!ExtensionIsValid()) | 207 if (!ExtensionIsValid()) |
209 return false; | 208 return false; |
210 | 209 |
211 if (extensions::ExtensionActionAPI::Get(browser_->profile()) | 210 content::WebContents* web_contents = view_delegate_->GetCurrentWebContents(); |
212 ->ExecuteExtensionAction( | 211 ExtensionActionRunner* action_runner = |
213 extension_.get(), browser_, grant_tab_permissions) == | 212 ExtensionActionRunner::GetForWebContents(web_contents); |
| 213 if (!action_runner) |
| 214 return false; |
| 215 |
| 216 if (action_runner->RunAction(extension(), grant_tab_permissions) == |
214 ExtensionAction::ACTION_SHOW_POPUP) { | 217 ExtensionAction::ACTION_SHOW_POPUP) { |
215 GURL popup_url = extension_action_->GetPopupUrl( | 218 GURL popup_url = extension_action_->GetPopupUrl( |
216 SessionTabHelper::IdForTab(view_delegate_->GetCurrentWebContents())); | 219 SessionTabHelper::IdForTab(view_delegate_->GetCurrentWebContents())); |
217 return GetPreferredPopupViewController() | 220 return GetPreferredPopupViewController() |
218 ->TriggerPopupWithUrl(show_action, popup_url, grant_tab_permissions); | 221 ->TriggerPopupWithUrl(show_action, popup_url, grant_tab_permissions); |
219 } | 222 } |
220 return false; | 223 return false; |
221 } | 224 } |
222 | 225 |
223 void ExtensionActionViewController::RegisterCommand() { | 226 void ExtensionActionViewController::RegisterCommand() { |
(...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
394 // If the extension doesn't want to run on the active web contents, we | 397 // If the extension doesn't want to run on the active web contents, we |
395 // grayscale it to indicate that. | 398 // grayscale it to indicate that. |
396 image_source->set_grayscale(!IsEnabled(web_contents)); | 399 image_source->set_grayscale(!IsEnabled(web_contents)); |
397 // If the action *does* want to run on the active web contents and is also | 400 // If the action *does* want to run on the active web contents and is also |
398 // overflowed, we add a decoration so that the user can see which overflowed | 401 // overflowed, we add a decoration so that the user can see which overflowed |
399 // action wants to run (since they wouldn't be able to see the change from | 402 // action wants to run (since they wouldn't be able to see the change from |
400 // grayscale to color). | 403 // grayscale to color). |
401 bool is_overflow = | 404 bool is_overflow = |
402 toolbar_actions_bar_ && toolbar_actions_bar_->in_overflow_mode(); | 405 toolbar_actions_bar_ && toolbar_actions_bar_->in_overflow_mode(); |
403 | 406 |
404 extensions::ExtensionActionAPI* api = | 407 bool has_blocked_actions = HasBeenBlocked(web_contents); |
405 extensions::ExtensionActionAPI::Get(browser_->profile()); | |
406 bool has_blocked_actions = api->HasBeenBlocked(extension(), web_contents); | |
407 image_source->set_paint_blocked_actions_decoration(has_blocked_actions); | 408 image_source->set_paint_blocked_actions_decoration(has_blocked_actions); |
408 image_source->set_paint_page_action_decoration( | 409 image_source->set_paint_page_action_decoration( |
409 !has_blocked_actions && is_overflow && | 410 !has_blocked_actions && is_overflow && |
410 api->PageActionWantsToRun(extension(), web_contents)); | 411 PageActionWantsToRun(web_contents)); |
411 } | 412 } |
412 | 413 |
413 return image_source; | 414 return image_source; |
414 } | 415 } |
| 416 |
| 417 bool ExtensionActionViewController::PageActionWantsToRun( |
| 418 content::WebContents* web_contents) const { |
| 419 return extension_action_->action_type() == |
| 420 extensions::ActionInfo::TYPE_PAGE && |
| 421 extension_action_->GetIsVisible( |
| 422 SessionTabHelper::IdForTab(web_contents)); |
| 423 } |
| 424 |
| 425 bool ExtensionActionViewController::HasBeenBlocked( |
| 426 content::WebContents* web_contents) const { |
| 427 ExtensionActionRunner* action_runner = |
| 428 ExtensionActionRunner::GetForWebContents(web_contents); |
| 429 return action_runner && action_runner->WantsToRun(extension()); |
| 430 } |
OLD | NEW |