| Index: chrome/browser/ui/search/instant_unload_handler.cc
|
| diff --git a/chrome/browser/ui/search/instant_unload_handler.cc b/chrome/browser/ui/search/instant_unload_handler.cc
|
| deleted file mode 100644
|
| index 2f62eefd1098d0e10543b2e74f342574186fe740..0000000000000000000000000000000000000000
|
| --- a/chrome/browser/ui/search/instant_unload_handler.cc
|
| +++ /dev/null
|
| @@ -1,106 +0,0 @@
|
| -// Copyright 2012 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.
|
| -
|
| -#include "chrome/browser/ui/search/instant_unload_handler.h"
|
| -
|
| -#include <algorithm>
|
| -
|
| -#include "base/message_loop/message_loop.h"
|
| -#include "chrome/browser/ui/browser_navigator.h"
|
| -#include "content/public/browser/render_view_host.h"
|
| -#include "content/public/browser/web_contents.h"
|
| -#include "content/public/browser/web_contents_delegate.h"
|
| -
|
| -class InstantUnloadHandler::WebContentsDelegateImpl
|
| - : public content::WebContentsDelegate {
|
| - public:
|
| - WebContentsDelegateImpl(InstantUnloadHandler* handler,
|
| - scoped_ptr<content::WebContents> contents,
|
| - int index)
|
| - : handler_(handler),
|
| - contents_(contents.Pass()),
|
| - index_(index) {
|
| - contents_->SetDelegate(this);
|
| - contents_->GetRenderViewHost()->FirePageBeforeUnload(false);
|
| - }
|
| -
|
| - // Overridden from content::WebContentsDelegate:
|
| - virtual void CloseContents(content::WebContents* source) OVERRIDE {
|
| - DCHECK_EQ(contents_, source);
|
| - // Remove ourselves as the delegate, so that CloseContents() won't be
|
| - // called twice, leading to double deletion (http://crbug.com/155848).
|
| - contents_->SetDelegate(NULL);
|
| - handler_->Destroy(this);
|
| - }
|
| -
|
| - virtual void WillRunBeforeUnloadConfirm() OVERRIDE {
|
| - contents_->SetDelegate(NULL);
|
| - handler_->Activate(this, contents_.Pass(), index_);
|
| - }
|
| -
|
| - virtual bool ShouldSuppressDialogs() OVERRIDE {
|
| - return true;
|
| - }
|
| -
|
| - private:
|
| - InstantUnloadHandler* const handler_;
|
| - scoped_ptr<content::WebContents> contents_;
|
| -
|
| - // The tab strip index |contents_| was originally at. If we add the tab back
|
| - // to the tabstrip, we add it at this index.
|
| - const int index_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(WebContentsDelegateImpl);
|
| -};
|
| -
|
| -InstantUnloadHandler::InstantUnloadHandler(Browser* browser)
|
| - : browser_(browser) {
|
| -}
|
| -
|
| -InstantUnloadHandler::~InstantUnloadHandler() {
|
| -}
|
| -
|
| -void InstantUnloadHandler::RunUnloadListenersOrDestroy(
|
| - scoped_ptr<content::WebContents> contents,
|
| - int index) {
|
| - DCHECK(!contents->GetDelegate());
|
| -
|
| - if (!contents->NeedToFireBeforeUnload()) {
|
| - // Tab doesn't have any beforeunload listeners and can be safely deleted.
|
| - // However, the tab object should not be deleted immediately because when we
|
| - // get here from BrowserInstantController::TabDeactivated, other tab
|
| - // observers may still expect to interact with the tab before the event has
|
| - // finished propagating.
|
| - base::MessageLoop::current()->DeleteSoon(FROM_HERE, contents.release());
|
| - return;
|
| - }
|
| -
|
| - // Tab has beforeunload listeners. Install a delegate to run them.
|
| - delegates_.push_back(
|
| - new WebContentsDelegateImpl(this, contents.Pass(), index));
|
| -}
|
| -
|
| -void InstantUnloadHandler::Activate(WebContentsDelegateImpl* delegate,
|
| - scoped_ptr<content::WebContents> contents,
|
| - int index) {
|
| - // Remove (and delete) the delegate.
|
| - Destroy(delegate);
|
| -
|
| - // Add the tab back in.
|
| - chrome::NavigateParams params(browser_, contents.release());
|
| - params.disposition = NEW_FOREGROUND_TAB;
|
| - params.tabstrip_index = index;
|
| - chrome::Navigate(¶ms);
|
| -}
|
| -
|
| -void InstantUnloadHandler::Destroy(WebContentsDelegateImpl* delegate) {
|
| - ScopedVector<WebContentsDelegateImpl>::iterator i =
|
| - std::find(delegates_.begin(), delegates_.end(), delegate);
|
| - DCHECK(i != delegates_.end());
|
| -
|
| - // The delegate's method is a caller on the stack, so schedule the deletion
|
| - // for later.
|
| - delegates_.weak_erase(i);
|
| - base::MessageLoop::current()->DeleteSoon(FROM_HERE, delegate);
|
| -}
|
|
|