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. 4 5 #ifndef CHROME_BROWSER_UI_VIEWS_FRAME_WEB_CONTENTS_CLOSE_HANDLER_H_ 6 #define CHROME_BROWSER_UI_VIEWS_FRAME_WEB_CONTENTS_CLOSE_HANDLER_H_ 7 8 #include "base/timer/timer.h" 9 10 class WebContentsCloseHandlerDelegate; 11 class WebContentsCloseHandlerTest; 12 13 // WebContentsCloseHandler handles notifying its delegate at the right time 14 // to clone and/or destroy the layer tree of the active tab. This is done so 15 // that on closing a window the user sees the contents of the last active 16 // tab rather than an empty rect. 17 class WebContentsCloseHandler { 18 public: 19 explicit WebContentsCloseHandler(WebContentsCloseHandlerDelegate* delegate); 20 ~WebContentsCloseHandler(); 21 22 // Invoked when a tab is inserted. 23 void TabInserted(); 24 25 // Invoked when the active WebContents changes. 26 void ActiveTabChanged(); 27 28 // Invoked when all the tabs are about to be closed. 29 void WillCloseAllTabs(); 30 31 // Invoked when the close was canceled. 32 void CloseAllTabsCanceled(); 33 34 private: 35 friend class WebContentsCloseHandlerTest; 36 37 // Invoked from the |timer_|. If hit it means enough time has expired after a 38 // close was canceled. 39 void OnStillHaventClosed(); 40 41 WebContentsCloseHandlerDelegate* delegate_; 42 43 // If true, WillCloseAllTabs() has been invoked. 44 bool in_close_; 45 46 // Set to true if the active tab changes while closing (ActiveTabChanged() 47 // was invoked following a WillCloseAllTabs()). 48 bool tab_changed_after_clone_; 49 50 base::OneShotTimer<WebContentsCloseHandler> timer_; 51 52 DISALLOW_COPY_AND_ASSIGN(WebContentsCloseHandler); 53 }; 54 55 #endif // CHROME_BROWSER_UI_VIEWS_FRAME_WEB_CONTENTS_CLOSE_HANDLER_H_ 56