Extend EnrollmentHandler to handle consumer management.
[chromium-blink-merge.git] / chrome / browser / ui / views / session_crashed_bubble_view.h
blob417b616d72d5abfd1d3e1dd17030cbd06222c252
1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #ifndef CHROME_BROWSER_UI_VIEWS_SESSION_CRASHED_BUBBLE_VIEW_H_
6 #define CHROME_BROWSER_UI_VIEWS_SESSION_CRASHED_BUBBLE_VIEW_H_
8 #include "base/memory/scoped_ptr.h"
9 #include "chrome/browser/ui/tabs/tab_strip_model_observer.h"
10 #include "content/public/browser/notification_observer.h"
11 #include "content/public/browser/notification_registrar.h"
12 #include "content/public/browser/web_contents_observer.h"
13 #include "ui/views/bubble/bubble_delegate.h"
14 #include "ui/views/controls/button/button.h"
15 #include "ui/views/controls/styled_label_listener.h"
17 namespace views {
18 class Checkbox;
19 class GridLayout;
20 class LabelButton;
21 class Widget;
24 namespace content {
25 class WebContents;
26 class RenderViewHost;
29 class Browser;
31 // It creates a session restore request bubble when the previous session has
32 // crashed. It also presents an option to enable metrics reporting, if it not
33 // enabled already.
34 class SessionCrashedBubbleView
35 : public views::BubbleDelegateView,
36 public views::ButtonListener,
37 public views::StyledLabelListener,
38 public content::WebContentsObserver,
39 public content::NotificationObserver,
40 public TabStripModelObserver {
41 public:
42 static void Show(Browser* browser);
44 private:
45 // A helper class that listens to browser removal event.
46 class BrowserRemovalObserver;
48 SessionCrashedBubbleView(views::View* anchor_view,
49 Browser* browser,
50 content::WebContents* web_contents,
51 bool offer_uma_optin);
52 virtual ~SessionCrashedBubbleView();
54 // Creates and shows the session crashed bubble, with |uma_opted_in_already|
55 // indicating whether the user has already opted-in to UMA. It will be called
56 // by Show. It takes ownership of |browser_observer|.
57 static void ShowForReal(scoped_ptr<BrowserRemovalObserver> browser_observer,
58 bool uma_opted_in_already);
60 // WidgetDelegateView methods.
61 virtual views::View* GetInitiallyFocusedView() OVERRIDE;
62 virtual base::string16 GetWindowTitle() const OVERRIDE;
63 virtual bool ShouldShowWindowTitle() const OVERRIDE;
64 virtual bool ShouldShowCloseButton() const OVERRIDE;
65 virtual void OnWidgetDestroying(views::Widget* widget) OVERRIDE;
67 // views::BubbleDelegateView methods.
68 virtual void Init() OVERRIDE;
70 // views::ButtonListener methods.
71 virtual void ButtonPressed(views::Button* sender,
72 const ui::Event& event) OVERRIDE;
74 // views::StyledLabelListener methods.
75 virtual void StyledLabelLinkClicked(const gfx::Range& range,
76 int event_flags) OVERRIDE;
78 // content::WebContentsObserver methods.
79 virtual void DidStartNavigationToPendingEntry(
80 const GURL& url,
81 content::NavigationController::ReloadType reload_type) OVERRIDE;
82 virtual void DidFinishLoad(content::RenderFrameHost* render_frame_host,
83 const GURL& validated_url) OVERRIDE;
84 virtual void WasShown() OVERRIDE;
85 virtual void WasHidden() OVERRIDE;
87 // content::NotificationObserver methods.
88 virtual void Observe(
89 int type,
90 const content::NotificationSource& source,
91 const content::NotificationDetails& details) OVERRIDE;
93 // TabStripModelObserver methods.
94 // When the tab with current bubble is being dragged and dropped to a new
95 // window or to another window, the bubble will be dismissed as if the user
96 // chose not to restore the previous session.
97 virtual void TabDetachedAt(
98 content::WebContents* contents,
99 int index) OVERRIDE;
101 // Create the view for user to opt in to Uma.
102 void CreateUmaOptinView(views::GridLayout* layout);
104 // Restore previous session after user selects so.
105 void RestorePreviousSession(views::Button* sender);
107 // Close and destroy the bubble.
108 void CloseBubble();
110 content::NotificationRegistrar registrar_;
112 // Used for opening the question mark link as well as access the tab strip.
113 Browser* browser_;
115 // The web content associated with current bubble.
116 content::WebContents* web_contents_;
118 // Button for the user to confirm a session restore.
119 views::LabelButton* restore_button_;
121 // Checkbox for the user to opt-in to UMA reporting.
122 views::Checkbox* uma_option_;
124 // Whether or not the UMA opt-in option should be shown.
125 bool offer_uma_optin_;
127 // Whether or not a navigation has started on current tab.
128 bool started_navigation_;
130 // Whether or not the user chose to restore previous session. It is used to
131 // collect bubble usage stats.
132 bool restored_;
134 DISALLOW_COPY_AND_ASSIGN(SessionCrashedBubbleView);
137 #endif // CHROME_BROWSER_UI_VIEWS_SESSION_CRASHED_BUBBLE_VIEW_H_