Home | History | Annotate | Download | only in frame
      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