Home | History | Annotate | Download | only in instant
      1 // Copyright (c) 2011 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_INSTANT_INSTANT_UNLOAD_HANDLER_H_
      6 #define CHROME_BROWSER_INSTANT_INSTANT_UNLOAD_HANDLER_H_
      7 #pragma once
      8 
      9 #include "base/memory/scoped_vector.h"
     10 
     11 class Browser;
     12 class TabContentsWrapper;
     13 
     14 // InstantUnloadHandler makes sure the before unload and unload handler is run
     15 // when using instant. When the user commits the instant preview the existing
     16 // TabContentsWrapper is passed to |RunUnloadListenersOrDestroy|. If the tab has
     17 // no before unload or unload listener the tab is deleted, otherwise the before
     18 // unload and unload listener is executed. If the before unload listener shows a
     19 // dialog the tab is added back to the tabstrip at its original location next to
     20 // the instant page.
     21 class InstantUnloadHandler {
     22  public:
     23   explicit InstantUnloadHandler(Browser* browser);
     24   ~InstantUnloadHandler();
     25 
     26   // See class description for details on what this does.
     27   void RunUnloadListenersOrDestroy(TabContentsWrapper* tab_contents, int index);
     28 
     29  private:
     30   class TabContentsDelegateImpl;
     31 
     32   // Invoked if the tab is to be shown. This happens if the before unload
     33   // listener returns a string.
     34   void Activate(TabContentsDelegateImpl* delegate);
     35 
     36   // Destroys the old tab. This is invoked if script tries to close the page.
     37   void Destroy(TabContentsDelegateImpl* delegate);
     38 
     39   // TODO(sky): browser really needs to wait to close until there are no more
     40   // tabs managed by InstantUnloadHandler.
     41   Browser* browser_;
     42 
     43   ScopedVector<TabContentsDelegateImpl> delegates_;
     44 
     45   DISALLOW_COPY_AND_ASSIGN(InstantUnloadHandler);
     46 };
     47 
     48 #endif  // CHROME_BROWSER_INSTANT_INSTANT_UNLOAD_HANDLER_H_
     49