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

Unified Diff: chrome/browser/ui/views/extensions/extension_message_bubble_view.cc

Issue 288923004: Add an extension override bubble and warning box for proxy extensions. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix tests Created 6 years, 6 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 side-by-side diff with in-line comments
Download patch
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);

Powered by Google App Engine
This is Rietveld 408576698