blob: 03411438aebb795c0d54182652abbb223558003c [file] [log] [blame]
// 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_