| // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef CHROME_BROWSER_INSTANT_INSTANT_UNLOAD_HANDLER_H_ |
| #define CHROME_BROWSER_INSTANT_INSTANT_UNLOAD_HANDLER_H_ |
| #pragma once |
| |
| #include "base/memory/scoped_vector.h" |
| |
| class Browser; |
| class TabContentsWrapper; |
| |
| // InstantUnloadHandler makes sure the before unload and unload handler is run |
| // when using instant. When the user commits the instant preview the existing |
| // TabContentsWrapper is passed to |RunUnloadListenersOrDestroy|. If the tab has |
| // no before unload or unload listener the tab is deleted, otherwise the before |
| // unload and unload listener is executed. If the before unload listener shows a |
| // dialog the tab is added back to the tabstrip at its original location next to |
| // the instant page. |
| class InstantUnloadHandler { |
| public: |
| explicit InstantUnloadHandler(Browser* browser); |
| ~InstantUnloadHandler(); |
| |
| // See class description for details on what this does. |
| void RunUnloadListenersOrDestroy(TabContentsWrapper* tab_contents, int index); |
| |
| private: |
| class TabContentsDelegateImpl; |
| |
| // Invoked if the tab is to be shown. This happens if the before unload |
| // listener returns a string. |
| void Activate(TabContentsDelegateImpl* delegate); |
| |
| // Destroys the old tab. This is invoked if script tries to close the page. |
| void Destroy(TabContentsDelegateImpl* delegate); |
| |
| // TODO(sky): browser really needs to wait to close until there are no more |
| // tabs managed by InstantUnloadHandler. |
| Browser* browser_; |
| |
| ScopedVector<TabContentsDelegateImpl> delegates_; |
| |
| DISALLOW_COPY_AND_ASSIGN(InstantUnloadHandler); |
| }; |
| |
| #endif // CHROME_BROWSER_INSTANT_INSTANT_UNLOAD_HANDLER_H_ |