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..41d48de2480bfbc913b68d05dafa60fca415e0e5 100644 |
--- a/chrome/browser/ui/views/extensions/extension_message_bubble_view.cc |
+++ b/chrome/browser/ui/views/extensions/extension_message_bubble_view.cc |
@@ -11,10 +11,12 @@ |
#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" |
#include "chrome/browser/profiles/profile.h" |
+#include "chrome/browser/ui/view_ids.h" |
#include "chrome/browser/ui/views/frame/browser_view.h" |
#include "chrome/browser/ui/views/toolbar/browser_actions_container.h" |
#include "chrome/browser/ui/views/toolbar/browser_actions_container_observer.h" |
@@ -62,6 +64,7 @@ ExtensionMessageBubbleView::ExtensionMessageBubbleView( |
: BubbleDelegateView(anchor_view, arrow_location), |
weak_factory_(this), |
controller_(controller.Pass()), |
+ anchor_view_(anchor_view), |
headline_(NULL), |
learn_more_(NULL), |
dismiss_button_(NULL), |
@@ -156,7 +159,8 @@ void ExtensionMessageBubbleView::Init() { |
views::Label* message = new views::Label(); |
message->SetMultiLine(true); |
message->SetHorizontalAlignment(gfx::ALIGN_LEFT); |
- message->SetText(delegate->GetMessageBody()); |
+ message->SetText(delegate->GetMessageBody( |
+ anchor_view_->id() == VIEW_ID_BROWSER_ACTION)); |
message->SizeToFit(views::Widget::GetLocalizedContentsWidth( |
IDS_EXTENSION_WIPEOUT_BUBBLE_WIDTH_CHARS)); |
layout->AddView(message); |
@@ -272,6 +276,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 +309,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 |
@@ -336,11 +345,11 @@ bool ExtensionMessageBubbleFactory::MaybeShowStartupOverrideExtensionsBubble( |
views::View* anchor_view) { |
#if !defined(OS_WIN) |
return false; |
-#endif |
- |
+#else |
DCHECK(!shown_startup_override_extensions_bubble_); |
- const Extension* extension = OverridesStartupPages(profile_, NULL); |
+ const Extension* extension = |
+ GetExtensionOverridingStartupPages(profile_, NULL); |
if (!extension) |
return false; |
@@ -351,15 +360,34 @@ 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; |
+#endif |
+} |
+bool ExtensionMessageBubbleFactory::MaybeShowProxyOverrideExtensionsBubble( |
+ views::View* anchor_view) { |
+#if !defined(OS_WIN) |
+ return false; |
+#else |
+ DCHECK(!shown_proxy_override_extensions_bubble_); |
+ |
+ const Extension* extension = GetExtensionOverridingProxy(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; |
+#endif |
} |
bool ExtensionMessageBubbleFactory::MaybeShowDevModeExtensionsBubble( |
@@ -375,23 +403,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 +434,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 +449,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 +478,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 +491,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); |