| // Copyright 2016 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef CHROME_BROWSER_UI_VIEWS_IME_IME_WARNING_BUBBLE_VIEW_H_ |
| #define CHROME_BROWSER_UI_VIEWS_IME_IME_WARNING_BUBBLE_VIEW_H_ |
| |
| #include "base/macros.h" |
| #include "chrome/browser/ui/browser_list_observer.h" |
| #include "chrome/browser/ui/toolbar/toolbar_actions_bar_observer.h" |
| #include "ui/views/bubble/bubble_dialog_delegate_view.h" |
| |
| class BrowserActionsContainer; |
| class BrowserView; |
| class ToolbarActionsBar; |
| enum class ImeWarningBubblePermissionStatus; |
| |
| namespace extensions { |
| class Extension; |
| } |
| |
| namespace views { |
| class Checkbox; |
| } |
| |
| using ImeWarningBubbleResponseCallback = |
| base::Callback<void(ImeWarningBubblePermissionStatus status)>; |
| |
| // The implementation for the IME warning bubble. Provides warning information |
| // to the user upon the activation of an IME extension. |
| // The ImeWarningBubbleView is self-owned and deletes itself when it is closed |
| // or the parent browser is being destroyed. |
| class ImeWarningBubbleView : public views::BubbleDialogDelegateView, |
| public ToolbarActionsBarObserver, |
| public BrowserListObserver { |
| public: |
| static void ShowBubble(const extensions::Extension* extension, |
| BrowserView* browser_view, |
| const ImeWarningBubbleResponseCallback& callback); |
| |
| // views::DialogDelegate: |
| bool Accept() override; |
| bool Cancel() override; |
| |
| // ToolbarActionsBarObserver: |
| void OnToolbarActionsBarAnimationEnded() override; |
| |
| // BrowserListObserver: |
| void OnBrowserRemoved(Browser* browser) override; |
| |
| private: |
| friend class ImeWarningBubbleTest; |
| |
| static ImeWarningBubbleView* ime_warning_bubble_for_test_; |
| |
| ImeWarningBubbleView(const extensions::Extension* extension, |
| BrowserView* browser_view, |
| const ImeWarningBubbleResponseCallback& callback); |
| |
| ~ImeWarningBubbleView() override; |
| |
| // Recalculates the anchor position for this bubble. |
| void InitAnchorView(); |
| |
| // Intializes the layout for the bubble. |
| void InitLayout(); |
| |
| // Returns true if the action toolbar is animating. |
| bool IsToolbarAnimating(); |
| |
| const extensions::Extension* extension_; |
| BrowserView* browser_view_; |
| |
| // Saves the Browser instance of the browser view, which will be used in |
| // OnBrowserRemoved(), as browser_view_->browser() may be null when |
| // OnBrowserRemoved() is called. |
| Browser* const browser_; |
| |
| // True if bubble anchors to the action of the extension. |
| bool anchor_to_action_; |
| |
| // The check box on the bubble view. |
| views::Checkbox* never_show_checkbox_; |
| |
| ImeWarningBubbleResponseCallback response_callback_; |
| |
| // True if the warning bubble has been shown. |
| bool bubble_has_shown_; |
| |
| BrowserActionsContainer* container_; |
| |
| ToolbarActionsBar* toolbar_actions_bar_; |
| |
| ScopedObserver<ToolbarActionsBar, ToolbarActionsBarObserver> |
| toolbar_actions_bar_observer_; |
| |
| base::WeakPtrFactory<ImeWarningBubbleView> weak_ptr_factory_; |
| |
| DISALLOW_COPY_AND_ASSIGN(ImeWarningBubbleView); |
| }; |
| |
| #endif // CHROME_BROWSER_UI_VIEWS_IME_IME_WARNING_BUBBLE_VIEW_H_ |