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_FRAME_WEB_CONTENTS_CLOSE_HANDLER_H_
6 #define CHROME_BROWSER_UI_VIEWS_FRAME_WEB_CONTENTS_CLOSE_HANDLER_H_
8 #include "base/timer/timer.h"
10 class WebContentsCloseHandlerDelegate
;
11 class WebContentsCloseHandlerTest
;
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
{
19 explicit WebContentsCloseHandler(WebContentsCloseHandlerDelegate
* delegate
);
20 ~WebContentsCloseHandler();
22 // Invoked when a tab is inserted.
25 // Invoked when the active WebContents changes.
26 void ActiveTabChanged();
28 // Invoked when all the tabs are about to be closed.
29 void WillCloseAllTabs();
31 // Invoked when the close was canceled.
32 void CloseAllTabsCanceled();
35 friend class WebContentsCloseHandlerTest
;
37 // Invoked from the |timer_|. If hit it means enough time has expired after a
38 // close was canceled.
39 void OnStillHaventClosed();
41 WebContentsCloseHandlerDelegate
* delegate_
;
43 // If true, WillCloseAllTabs() has been invoked.
46 // Set to true if the active tab changes while closing (ActiveTabChanged()
47 // was invoked following a WillCloseAllTabs()).
48 bool tab_changed_after_clone_
;
50 base::OneShotTimer
<WebContentsCloseHandler
> timer_
;
52 DISALLOW_COPY_AND_ASSIGN(WebContentsCloseHandler
);
55 #endif // CHROME_BROWSER_UI_VIEWS_FRAME_WEB_CONTENTS_CLOSE_HANDLER_H_