| Index: chrome/browser/ui/views/extensions/extension_message_bubble_view.h
|
| diff --git a/chrome/browser/ui/views/extensions/extension_message_bubble_view.h b/chrome/browser/ui/views/extensions/extension_message_bubble_view.h
|
| index 177673fad20e24eb7ea26787d0086124ea753bc1..eadaf716feffa9861002ae7e6e6f9ead6abae0f6 100644
|
| --- a/chrome/browser/ui/views/extensions/extension_message_bubble_view.h
|
| +++ b/chrome/browser/ui/views/extensions/extension_message_bubble_view.h
|
| @@ -5,14 +5,18 @@
|
| #ifndef CHROME_BROWSER_UI_VIEWS_EXTENSIONS_EXTENSION_MESSAGE_BUBBLE_VIEW_H_
|
| #define CHROME_BROWSER_UI_VIEWS_EXTENSIONS_EXTENSION_MESSAGE_BUBBLE_VIEW_H_
|
|
|
| +#include "base/compiler_specific.h"
|
| #include "base/macros.h"
|
| #include "base/memory/scoped_ptr.h"
|
| #include "chrome/browser/extensions/extension_message_bubble.h"
|
| +#include "chrome/browser/ui/views/toolbar/browser_actions_container_observer.h"
|
| #include "ui/views/bubble/bubble_delegate.h"
|
| #include "ui/views/controls/button/button.h"
|
| #include "ui/views/controls/link_listener.h"
|
|
|
| class Profile;
|
| +class BrowserActionsContainer;
|
| +class ToolbarView;
|
|
|
| namespace views {
|
| class Label;
|
| @@ -22,7 +26,120 @@
|
|
|
| namespace extensions {
|
|
|
| +class DevModeBubbleController;
|
| class ExtensionMessageBubbleController;
|
| +
|
| +// Create and show ExtensionMessageBubbles for either extensions that look
|
| +// suspicious and have therefore been disabled, or for extensions that are
|
| +// running in developer mode that we want to warn the user about.
|
| +// Calling MaybeShow() will show one of the bubbles, if there is cause to (we
|
| +// don't show both in order to avoid spamminess). The suspicious extensions
|
| +// bubble takes priority over the developer mode extensions bubble.
|
| +class ExtensionMessageBubbleFactory : public BrowserActionsContainerObserver {
|
| + public:
|
| + ExtensionMessageBubbleFactory(Profile* profile, ToolbarView* toolbar_view);
|
| + ~ExtensionMessageBubbleFactory() override;
|
| +
|
| + void MaybeShow(views::View* anchor_view);
|
| +
|
| + private:
|
| + // The stage of showing the developer mode extensions bubble. STAGE_START
|
| + // corresponds to the beginning of the process, when nothing has been done.
|
| + // STAGE_HIGHLIGHTED indicates that the toolbar should be highlighting
|
| + // dangerous extensions. STAGE_COMPLETE means that the process should be
|
| + // ended.
|
| + enum Stage { STAGE_START, STAGE_HIGHLIGHTED, STAGE_COMPLETE };
|
| +
|
| + // Shows the suspicious extensions bubble, if there are suspicious extensions
|
| + // and we have not done so already.
|
| + // Returns true if we have show the view.
|
| + bool MaybeShowSuspiciousExtensionsBubble(views::View* anchor_view);
|
| +
|
| + // Shows the settings API extensions bubble, if there are extensions
|
| + // overriding the startup pages and we have not done so already.
|
| + // Returns true if we show the view (or start the process).
|
| + bool MaybeShowStartupOverrideExtensionsBubble(views::View* anchor_view);
|
| +
|
| + // Shows the bubble for when there are extensions overriding the proxy (if we
|
| + // have not done so already). Returns true if we show the view (or start the
|
| + // process of doing so).
|
| + bool MaybeShowProxyOverrideExtensionsBubble(views::View* anchor_view);
|
| +
|
| + // Shows the developer mode extensions bubble, if there are extensions running
|
| + // in developer mode and we have not done so already.
|
| + // Returns true if we show the view (or start the process).
|
| + bool MaybeShowDevModeExtensionsBubble(views::View* anchor_view);
|
| +
|
| + // Starts or stops observing the BrowserActionsContainer, if necessary.
|
| + void MaybeObserve();
|
| + void MaybeStopObserving();
|
| +
|
| + // Adds |profile| to the list of profiles that have been evaluated for showing
|
| + // a bubble. Handy for things that only want to check once per profile.
|
| + void RecordProfileCheck(Profile* profile);
|
| + // Returns false if this profile has been evaluated before.
|
| + bool IsInitialProfileCheck(Profile* profile);
|
| +
|
| + // BrowserActionsContainer::Observer implementation.
|
| + void OnBrowserActionsContainerAnimationEnded() override;
|
| + void OnBrowserActionsContainerDestroyed() override;
|
| +
|
| + // Sets the stage for highlighting extensions and then showing the bubble
|
| + // controlled by |controller|, anchored to |anchor_view|.
|
| + void PrepareToHighlightExtensions(
|
| + scoped_ptr<ExtensionMessageBubbleController> controller,
|
| + views::View* anchor_view);
|
| +
|
| + // Inform the ExtensionToolbarModel to highlight the appropriate extensions.
|
| + void HighlightExtensions();
|
| +
|
| + // Shows the waiting bubbble, after highlighting the extensions.
|
| + void ShowHighlightingBubble();
|
| +
|
| + // Finishes the process of showing the developer mode bubble.
|
| + void Finish();
|
| +
|
| + // The associated profile.
|
| + Profile* profile_;
|
| +
|
| + // The toolbar view that the ExtensionMessageBubbleViews will attach to.
|
| + ToolbarView* toolbar_view_;
|
| +
|
| + // Whether or not we have shown the suspicious extensions bubble.
|
| + bool shown_suspicious_extensions_bubble_;
|
| +
|
| + // Whether or not we have shown the Settings API extensions bubble notifying
|
| + // the user about the startup pages being overridden.
|
| + bool shown_startup_override_extensions_bubble_;
|
| +
|
| + // Whether or not we have shown the bubble notifying the user about the proxy
|
| + // being overridden.
|
| + bool shown_proxy_override_extensions_bubble_;
|
| +
|
| + // Whether or not we have shown the developer mode extensions bubble.
|
| + bool shown_dev_mode_extensions_bubble_;
|
| +
|
| + // Whether or not we are already observing the BrowserActionsContainer (so
|
| + // we don't add ourselves twice).
|
| + bool is_observing_;
|
| +
|
| + // The current stage of showing the bubble.
|
| + Stage stage_;
|
| +
|
| + // The BrowserActionsContainer for the profile. This will be NULL if the
|
| + // factory is not currently in the process of showing a bubble.
|
| + BrowserActionsContainer* container_;
|
| +
|
| + // The default view to anchor the bubble to. This will be NULL if the factory
|
| + // is not currently in the process of showing a bubble.
|
| + views::View* anchor_view_;
|
| +
|
| + // The controller to show a bubble for. This will be NULL if the factory is
|
| + // not currently in the process of showing a bubble.
|
| + scoped_ptr<ExtensionMessageBubbleController> controller_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(ExtensionMessageBubbleFactory);
|
| +};
|
|
|
| // This is a class that implements the UI for the bubble showing which
|
| // extensions look suspicious and have therefore been automatically disabled.
|
| @@ -37,6 +154,9 @@
|
| scoped_ptr<ExtensionMessageBubbleController> controller);
|
|
|
| // ExtensionMessageBubble methods.
|
| + void OnActionButtonClicked(const base::Closure& callback) override;
|
| + void OnDismissButtonClicked(const base::Closure& callback) override;
|
| + void OnLinkClicked(const base::Closure& callback) override;
|
| void Show() override;
|
|
|
| // WidgetObserver methods.
|
| @@ -78,6 +198,11 @@
|
| bool link_clicked_;
|
| bool action_taken_;
|
|
|
| + // Callbacks into the controller.
|
| + base::Closure action_callback_;
|
| + base::Closure dismiss_callback_;
|
| + base::Closure link_callback_;
|
| +
|
| base::WeakPtrFactory<ExtensionMessageBubbleView> weak_factory_;
|
|
|
| DISALLOW_COPY_AND_ASSIGN(ExtensionMessageBubbleView);
|
|
|