session_crashed_bubble_view.h revision 5c02ac1a9c1b504631c0a3d2b6e737b5d738bae1
116c440a377b7ec8b722a2e2c7c864f75c95bd305Ted Kremenek// Copyright 2014 The Chromium Authors. All rights reserved. 216c440a377b7ec8b722a2e2c7c864f75c95bd305Ted Kremenek// Use of this source code is governed by a BSD-style license that can be 316c440a377b7ec8b722a2e2c7c864f75c95bd305Ted Kremenek// found in the LICENSE file. 416c440a377b7ec8b722a2e2c7c864f75c95bd305Ted Kremenek 516c440a377b7ec8b722a2e2c7c864f75c95bd305Ted Kremenek#ifndef CHROME_BROWSER_UI_VIEWS_SESSION_CRASHED_BUBBLE_VIEW_H_ 616c440a377b7ec8b722a2e2c7c864f75c95bd305Ted Kremenek#define CHROME_BROWSER_UI_VIEWS_SESSION_CRASHED_BUBBLE_VIEW_H_ 716c440a377b7ec8b722a2e2c7c864f75c95bd305Ted Kremenek 816c440a377b7ec8b722a2e2c7c864f75c95bd305Ted Kremenek#include "chrome/browser/ui/tabs/tab_strip_model_observer.h" 916c440a377b7ec8b722a2e2c7c864f75c95bd305Ted Kremenek#include "content/public/browser/notification_observer.h" 102e331b938b38057e333fab0ba841130ea8467794Douglas Gregor#include "content/public/browser/notification_registrar.h" 112e331b938b38057e333fab0ba841130ea8467794Douglas Gregor#include "content/public/browser/web_contents_observer.h" 122e331b938b38057e333fab0ba841130ea8467794Douglas Gregor#include "ui/views/bubble/bubble_delegate.h" 1316c440a377b7ec8b722a2e2c7c864f75c95bd305Ted Kremenek#include "ui/views/controls/button/button.h" 1416c440a377b7ec8b722a2e2c7c864f75c95bd305Ted Kremenek#include "ui/views/controls/link_listener.h" 1516c440a377b7ec8b722a2e2c7c864f75c95bd305Ted Kremenek 160a90d32523bfe5fa63e11b648686c9699f786d15Ted Kremeneknamespace views { 1716c440a377b7ec8b722a2e2c7c864f75c95bd305Ted Kremenekclass Checkbox; 18ed122735639d83c10f18c28c7fd117bfcd0f62cbTed Kremenekclass GridLayout; 197eaa8ae8692c5cd3eed8cb334fe5346470522091Douglas Gregorclass LabelButton; 2016c440a377b7ec8b722a2e2c7c864f75c95bd305Ted Kremenekclass Widget; 216931900f43cea558c6974075256c07728dbfecc6Douglas Gregor} 22283cae37b03047c14ef918503bc46b08405c3b69Douglas Gregor 23283cae37b03047c14ef918503bc46b08405c3b69Douglas Gregornamespace content { 241f60d9ea523fc321d811fe880ba9a1ec74fa8f9bDouglas Gregorclass WebContents; 25007a7c9d8dcdb2e9cd94b6075108bfc4c90e6ccdTed Kremenekclass RenderViewHost; 26edc8aa68ef91aeea686c5aadf64ef902c38318ddTed Kremenek} 2716c440a377b7ec8b722a2e2c7c864f75c95bd305Ted Kremenek 2816c440a377b7ec8b722a2e2c7c864f75c95bd305Ted Kremenekclass Browser; 291f60d9ea523fc321d811fe880ba9a1ec74fa8f9bDouglas Gregor 3016c440a377b7ec8b722a2e2c7c864f75c95bd305Ted Kremenek// It creates a session restore request bubble when the previous session has 315bfb8c128c2ac8eb4032afc180cdc400a0f953caDouglas Gregor// crashed. It also presents an option to enable metrics reporting, if it not 325bfb8c128c2ac8eb4032afc180cdc400a0f953caDouglas Gregor// enabled already. 335bfb8c128c2ac8eb4032afc180cdc400a0f953caDouglas Gregorclass SessionCrashedBubbleView 345bfb8c128c2ac8eb4032afc180cdc400a0f953caDouglas Gregor : public views::BubbleDelegateView, 3516c440a377b7ec8b722a2e2c7c864f75c95bd305Ted Kremenek public views::ButtonListener, 3616c440a377b7ec8b722a2e2c7c864f75c95bd305Ted Kremenek public views::LinkListener, 37e77f443dbca8cdc23e5aa94a2653367e4a7cbe47Ted Kremenek public content::WebContentsObserver, 38e77f443dbca8cdc23e5aa94a2653367e4a7cbe47Ted Kremenek public content::NotificationObserver, 39e77f443dbca8cdc23e5aa94a2653367e4a7cbe47Ted Kremenek public TabStripModelObserver { 40e77f443dbca8cdc23e5aa94a2653367e4a7cbe47Ted Kremenek public: 41387475d0c18aaeb022108de9d33b6c9fb7998843Sean Hunt static void Show(Browser* browser); 42387475d0c18aaeb022108de9d33b6c9fb7998843Sean Hunt 43387475d0c18aaeb022108de9d33b6c9fb7998843Sean Hunt private: 44e77f443dbca8cdc23e5aa94a2653367e4a7cbe47Ted Kremenek SessionCrashedBubbleView(views::View* anchor_view, 45e77f443dbca8cdc23e5aa94a2653367e4a7cbe47Ted Kremenek Browser* browser, 46e77f443dbca8cdc23e5aa94a2653367e4a7cbe47Ted Kremenek content::WebContents* web_contents); 47e77f443dbca8cdc23e5aa94a2653367e4a7cbe47Ted Kremenek virtual ~SessionCrashedBubbleView(); 48e77f443dbca8cdc23e5aa94a2653367e4a7cbe47Ted Kremenek 49a60ed47da13393796d8552b9fdca12abbb3eea42Ted Kremenek // WidgetDelegateView methods. 50a60ed47da13393796d8552b9fdca12abbb3eea42Ted Kremenek virtual views::View* GetInitiallyFocusedView() OVERRIDE; 51e77f443dbca8cdc23e5aa94a2653367e4a7cbe47Ted Kremenek 52e77f443dbca8cdc23e5aa94a2653367e4a7cbe47Ted Kremenek // views::BubbleDelegateView methods. 53e77f443dbca8cdc23e5aa94a2653367e4a7cbe47Ted Kremenek virtual void Init() OVERRIDE; 54e77f443dbca8cdc23e5aa94a2653367e4a7cbe47Ted Kremenek 55e77f443dbca8cdc23e5aa94a2653367e4a7cbe47Ted Kremenek // views::ButtonListener methods. 56a60ed47da13393796d8552b9fdca12abbb3eea42Ted Kremenek virtual void ButtonPressed(views::Button* sender, 57007a7c9d8dcdb2e9cd94b6075108bfc4c90e6ccdTed Kremenek const ui::Event& event) OVERRIDE; 5854d67caeee4fdce81f07163832f1163d5f2af5d2Daniel Dunbar 59007a7c9d8dcdb2e9cd94b6075108bfc4c90e6ccdTed Kremenek // views::LinkListener methods. 60dec0984fce504a39a7f085774fb67cfd9957be58Jeffrey Yasskin virtual void LinkClicked(views::Link* source, int event_floags) OVERRIDE; 61007a7c9d8dcdb2e9cd94b6075108bfc4c90e6ccdTed Kremenek 625bfb8c128c2ac8eb4032afc180cdc400a0f953caDouglas Gregor // content::WebContentsObserver methods. 63edc8aa68ef91aeea686c5aadf64ef902c38318ddTed Kremenek virtual void DidStartNavigationToPendingEntry( 64edc8aa68ef91aeea686c5aadf64ef902c38318ddTed Kremenek const GURL& url, 65a60ed47da13393796d8552b9fdca12abbb3eea42Ted Kremenek content::NavigationController::ReloadType reload_type) OVERRIDE; 66a60ed47da13393796d8552b9fdca12abbb3eea42Ted Kremenek virtual void DidFinishLoad( 6754d67caeee4fdce81f07163832f1163d5f2af5d2Daniel Dunbar int64 frame_id, 6897b9872d5775446cb8aca1380e437649fe848d91Douglas Gregor const GURL& validated_url, 6997b9872d5775446cb8aca1380e437649fe848d91Douglas Gregor bool is_main_frame, 7097b9872d5775446cb8aca1380e437649fe848d91Douglas Gregor content::RenderViewHost* render_view_host) OVERRIDE; 7197b9872d5775446cb8aca1380e437649fe848d91Douglas Gregor virtual void WasShown() OVERRIDE; 7297b9872d5775446cb8aca1380e437649fe848d91Douglas Gregor virtual void WasHidden() OVERRIDE; 7397b9872d5775446cb8aca1380e437649fe848d91Douglas Gregor 7497b9872d5775446cb8aca1380e437649fe848d91Douglas Gregor // content::NotificationObserver methods. 7597b9872d5775446cb8aca1380e437649fe848d91Douglas Gregor virtual void Observe( 7697b9872d5775446cb8aca1380e437649fe848d91Douglas Gregor int type, 7797b9872d5775446cb8aca1380e437649fe848d91Douglas Gregor const content::NotificationSource& source, 7897b9872d5775446cb8aca1380e437649fe848d91Douglas Gregor const content::NotificationDetails& details) OVERRIDE; 7997b9872d5775446cb8aca1380e437649fe848d91Douglas Gregor 8097b9872d5775446cb8aca1380e437649fe848d91Douglas Gregor // TabStripModelObserver methods. 8197b9872d5775446cb8aca1380e437649fe848d91Douglas Gregor // When the tab with current bubble is being dragged and dropped to a new 8297b9872d5775446cb8aca1380e437649fe848d91Douglas Gregor // window or to another window, the bubble will be dismissed as if the user 8397b9872d5775446cb8aca1380e437649fe848d91Douglas Gregor // chose not to restore the previous session. 8497b9872d5775446cb8aca1380e437649fe848d91Douglas Gregor virtual void TabDetachedAt( 8597b9872d5775446cb8aca1380e437649fe848d91Douglas Gregor content::WebContents* contents, 8697b9872d5775446cb8aca1380e437649fe848d91Douglas Gregor int index) OVERRIDE; 8797b9872d5775446cb8aca1380e437649fe848d91Douglas Gregor 8897b9872d5775446cb8aca1380e437649fe848d91Douglas Gregor // Create the view for user to opt in to Uma. 8997b9872d5775446cb8aca1380e437649fe848d91Douglas Gregor void CreateUmaOptinView(views::GridLayout* layout); 9097b9872d5775446cb8aca1380e437649fe848d91Douglas Gregor 9197b9872d5775446cb8aca1380e437649fe848d91Douglas Gregor // Restore previous session after user selects so. 9297b9872d5775446cb8aca1380e437649fe848d91Douglas Gregor void RestorePreviousSession(views::Button* sender); 9397b9872d5775446cb8aca1380e437649fe848d91Douglas Gregor 9497b9872d5775446cb8aca1380e437649fe848d91Douglas Gregor // Close and destroy the bubble. 95f85e193739c953358c865005855253af4f68a497John McCall void CloseBubble(); 9697b9872d5775446cb8aca1380e437649fe848d91Douglas Gregor 9797b9872d5775446cb8aca1380e437649fe848d91Douglas Gregor content::NotificationRegistrar registrar_; 9897b9872d5775446cb8aca1380e437649fe848d91Douglas Gregor 99ad762fcdc16b9e4705b12b09d92b8c026212b906Richard Smith // Used for opening the question mark link as well as access the tab strip. 10028bbe4b8acc338476fe0825769b41fb32b423c72John Wiegley Browser* browser_; 10128bbe4b8acc338476fe0825769b41fb32b423c72John Wiegley 10228bbe4b8acc338476fe0825769b41fb32b423c72John Wiegley // The web content associated with current bubble. 10303e80030515c800d1ab44125b9052dfffd1bd04cDouglas Gregor content::WebContents* web_contents_; 10497b9872d5775446cb8aca1380e437649fe848d91Douglas Gregor 10597b9872d5775446cb8aca1380e437649fe848d91Douglas Gregor // Button for the user to confirm a session restore. 10697b9872d5775446cb8aca1380e437649fe848d91Douglas Gregor views::LabelButton* restore_button_; 10736897b05ca2886e287f01802614bc10cbadcec22Douglas Gregor 10836897b05ca2886e287f01802614bc10cbadcec22Douglas Gregor // Button for the user to close this bubble. 10936897b05ca2886e287f01802614bc10cbadcec22Douglas Gregor views::LabelButton* close_; 11036897b05ca2886e287f01802614bc10cbadcec22Douglas Gregor 11197b9872d5775446cb8aca1380e437649fe848d91Douglas Gregor // Checkbox for the user to opt-in to UMA reporting. 11297b9872d5775446cb8aca1380e437649fe848d91Douglas Gregor views::Checkbox* uma_option_; 11397b9872d5775446cb8aca1380e437649fe848d91Douglas Gregor 11497b9872d5775446cb8aca1380e437649fe848d91Douglas Gregor // Whether or not a navigation has started on current tab. 11597b9872d5775446cb8aca1380e437649fe848d91Douglas Gregor bool started_navigation_; 11697b9872d5775446cb8aca1380e437649fe848d91Douglas Gregor 11797b9872d5775446cb8aca1380e437649fe848d91Douglas Gregor DISALLOW_COPY_AND_ASSIGN(SessionCrashedBubbleView); 1188ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor}; 1198ecdb65716cd7914ffb2eeee993fa9039fcd31e8Douglas Gregor 120f4e3cfbe8abd124be6341ef5d714819b4fbd9082Peter Collingbourne#endif // CHROME_BROWSER_UI_VIEWS_SESSION_CRASHED_BUBBLE_VIEW_H_ 12197b9872d5775446cb8aca1380e437649fe848d91Douglas Gregor