Chromium Code Reviews| Index: chrome/browser/ui/views/extensions/extension_message_bubble_view.cc |
| diff --git a/chrome/browser/ui/views/extensions/extension_message_bubble_view.cc b/chrome/browser/ui/views/extensions/extension_message_bubble_view.cc |
| index 43532dbea569f12a943801f7830138ff319d2734..b93b4c12f2f6043a12d6101abddb6dd8f0b16a75 100644 |
| --- a/chrome/browser/ui/views/extensions/extension_message_bubble_view.cc |
| +++ b/chrome/browser/ui/views/extensions/extension_message_bubble_view.cc |
| @@ -11,6 +11,7 @@ |
| #include "chrome/browser/extensions/extension_action_manager.h" |
| #include "chrome/browser/extensions/extension_message_bubble_controller.h" |
| #include "chrome/browser/extensions/extension_service.h" |
| +#include "chrome/browser/extensions/proxy_overridden_bubble_controller.h" |
| #include "chrome/browser/extensions/settings_api_bubble_controller.h" |
| #include "chrome/browser/extensions/settings_api_helpers.h" |
| #include "chrome/browser/extensions/suspicious_extension_bubble_controller.h" |
| @@ -272,6 +273,7 @@ ExtensionMessageBubbleFactory::ExtensionMessageBubbleFactory( |
| toolbar_view_(toolbar_view), |
| shown_suspicious_extensions_bubble_(false), |
| shown_startup_override_extensions_bubble_(false), |
| + shown_proxy_override_extensions_bubble_(false), |
| shown_dev_mode_extensions_bubble_(false), |
| is_observing_(false), |
| stage_(STAGE_START), |
| @@ -304,6 +306,10 @@ void ExtensionMessageBubbleFactory::MaybeShow(views::View* anchor_view) { |
| MaybeShowStartupOverrideExtensionsBubble(anchor_view)) |
| return; |
| + if (!shown_proxy_override_extensions_bubble_ && |
| + MaybeShowProxyOverrideExtensionsBubble(anchor_view)) |
| + return; |
| + |
| if (!shown_dev_mode_extensions_bubble_) |
| MaybeShowDevModeExtensionsBubble(anchor_view); |
| #endif // OS_WIN |
| @@ -351,14 +357,32 @@ bool ExtensionMessageBubbleFactory::MaybeShowStartupOverrideExtensionsBubble( |
| return false; |
| shown_startup_override_extensions_bubble_ = true; |
| - SettingsApiBubbleController* weak_controller = settings_api_bubble.get(); |
| - ExtensionMessageBubbleView* bubble_delegate = new ExtensionMessageBubbleView( |
| - anchor_view, |
| - views::BubbleBorder::TOP_RIGHT, |
| - settings_api_bubble.PassAs<ExtensionMessageBubbleController>()); |
| - views::BubbleDelegateView::CreateBubble(bubble_delegate); |
| - weak_controller->Show(bubble_delegate); |
| + PrepareToHighlightExtensions( |
| + settings_api_bubble.PassAs<ExtensionMessageBubbleController>(), |
| + anchor_view); |
| + return true; |
| +} |
| + |
| +bool ExtensionMessageBubbleFactory::MaybeShowProxyOverrideExtensionsBubble( |
| + views::View* anchor_view) { |
| +#if !defined(OS_WIN) |
| + return false; |
|
Devlin
2014/05/20 17:26:31
Hopefully no compilers complain that lines 371-386
Finnur
2014/05/21 16:30:32
Meh... less code to compile on other platforms...
|
| +#endif |
| + |
| + DCHECK(!shown_proxy_override_extensions_bubble_); |
| + |
| + const Extension* extension = OverridesProxy(profile_); |
| + if (!extension) |
| + return false; |
| + scoped_ptr<ProxyOverriddenBubbleController> proxy_bubble( |
| + new ProxyOverriddenBubbleController(profile_)); |
| + if (!proxy_bubble->ShouldShow(extension->id())) |
| + return false; |
| + |
| + shown_proxy_override_extensions_bubble_ = true; |
| + PrepareToHighlightExtensions( |
| + proxy_bubble.PassAs<ExtensionMessageBubbleController>(), anchor_view); |
| return true; |
| } |
| @@ -375,23 +399,9 @@ bool ExtensionMessageBubbleFactory::MaybeShowDevModeExtensionsBubble( |
| return false; |
| shown_dev_mode_extensions_bubble_ = true; |
| - |
| - // We should be in the start stage (i.e., should not have a pending attempt to |
| - // show a bubble). |
| - DCHECK_EQ(stage_, STAGE_START); |
| - |
| - // Prepare to display and highlight the developer mode extensions before |
| - // showing the bubble. Since this is an asynchronous process, set member |
| - // variables for later use. |
| - controller_ = dev_mode_extensions.Pass(); |
| - anchor_view_ = anchor_view; |
| - container_ = toolbar_view_->browser_actions(); |
| - |
| - if (container_->animating()) |
| - MaybeObserve(); |
| - else |
| - HighlightDevModeExtensions(); |
| - |
| + PrepareToHighlightExtensions( |
| + dev_mode_extensions.PassAs<ExtensionMessageBubbleController>(), |
| + anchor_view); |
| return true; |
| } |
| @@ -420,9 +430,9 @@ bool ExtensionMessageBubbleFactory::IsInitialProfileCheck(Profile* profile) { |
| void ExtensionMessageBubbleFactory::OnBrowserActionsContainerAnimationEnded() { |
| MaybeStopObserving(); |
| if (stage_ == STAGE_START) { |
| - HighlightDevModeExtensions(); |
| + HighlightExtensions(); |
| } else if (stage_ == STAGE_HIGHLIGHTED) { |
| - ShowDevModeBubble(); |
| + ShowHighlightingBubble(); |
| } else { // We shouldn't be observing if we've completed the process. |
| NOTREACHED(); |
| Finish(); |
| @@ -435,7 +445,26 @@ void ExtensionMessageBubbleFactory::OnBrowserActionsContainerDestroyed() { |
| Finish(); |
| } |
| -void ExtensionMessageBubbleFactory::HighlightDevModeExtensions() { |
| +void ExtensionMessageBubbleFactory::PrepareToHighlightExtensions( |
| + scoped_ptr<ExtensionMessageBubbleController> controller, |
| + views::View* anchor_view) { |
| + // We should be in the start stage (i.e., should not have a pending attempt to |
| + // show a bubble). |
| + DCHECK_EQ(stage_, STAGE_START); |
| + |
| + // Prepare to display and highlight the extensions before showing the bubble. |
| + // Since this is an asynchronous process, set member variables for later use. |
| + controller_ = controller.Pass(); |
| + anchor_view_ = anchor_view; |
| + container_ = toolbar_view_->browser_actions(); |
| + |
| + if (container_->animating()) |
| + MaybeObserve(); |
| + else |
| + HighlightExtensions(); |
| +} |
| + |
| +void ExtensionMessageBubbleFactory::HighlightExtensions() { |
| DCHECK_EQ(STAGE_START, stage_); |
| stage_ = STAGE_HIGHLIGHTED; |
| @@ -445,10 +474,10 @@ void ExtensionMessageBubbleFactory::HighlightDevModeExtensions() { |
| if (container_->animating()) |
| MaybeObserve(); |
| else |
| - ShowDevModeBubble(); |
| + ShowHighlightingBubble(); |
| } |
| -void ExtensionMessageBubbleFactory::ShowDevModeBubble() { |
| +void ExtensionMessageBubbleFactory::ShowHighlightingBubble() { |
| DCHECK_EQ(stage_, STAGE_HIGHLIGHTED); |
| stage_ = STAGE_COMPLETE; |
| @@ -458,11 +487,13 @@ void ExtensionMessageBubbleFactory::ShowDevModeBubble() { |
| if (reference_view && reference_view->visible()) |
| anchor_view_ = reference_view; |
| - DevModeBubbleController* weak_controller = controller_.get(); |
| - ExtensionMessageBubbleView* bubble_delegate = new ExtensionMessageBubbleView( |
| - anchor_view_, |
| - views::BubbleBorder::TOP_RIGHT, |
| - scoped_ptr<ExtensionMessageBubbleController>(controller_.release())); |
| + ExtensionMessageBubbleController* weak_controller = controller_.get(); |
| + ExtensionMessageBubbleView* bubble_delegate = |
| + new ExtensionMessageBubbleView( |
| + anchor_view_, |
| + views::BubbleBorder::TOP_RIGHT, |
| + scoped_ptr<ExtensionMessageBubbleController>( |
| + controller_.release())); |
| views::BubbleDelegateView::CreateBubble(bubble_delegate); |
| weak_controller->Show(bubble_delegate); |