// Copyright (c) 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/prerender/prerender_handle.h" #include #include "chrome/browser/prerender/prerender_contents.h" namespace prerender { PrerenderHandle::~PrerenderHandle() { DCHECK(!IsValid()); // This shouldn't occur, but we also shouldn't leak if it does. if (IsValid()) OnCancel(); } void PrerenderHandle::OnNavigateAway() { DCHECK(CalledOnValidThread()); if (!IsValid()) return; prerender_data_->OnNavigateAwayByHandle(); prerender_data_.reset(); } void PrerenderHandle::OnCancel() { DCHECK(CalledOnValidThread()); if (!IsValid()) return; prerender_data_->OnCancelByHandle(); prerender_data_.reset(); } bool PrerenderHandle::IsValid() const { return prerender_data_ != NULL; } bool PrerenderHandle::IsPending() const { DCHECK(CalledOnValidThread()); return prerender_data_ && !prerender_data_->contents(); } bool PrerenderHandle::IsPrerendering() const { DCHECK(CalledOnValidThread()); return prerender_data_ && prerender_data_->contents(); } bool PrerenderHandle::IsFinishedLoading() const { DCHECK(CalledOnValidThread()); if (!prerender_data_ || IsPending()) return false; return prerender_data_->contents()->has_finished_loading(); } PrerenderHandle::PrerenderHandle( PrerenderManager::PrerenderData* prerender_data) : prerender_data_(prerender_data->AsWeakPtr()), weak_ptr_factory_(this) { prerender_data->OnNewHandle(); } void PrerenderHandle::SwapPrerenderDataWith( PrerenderHandle* other_prerender_handle) { DCHECK(CalledOnValidThread()); DCHECK(other_prerender_handle); std::swap(prerender_data_, other_prerender_handle->prerender_data_); } } // namespace prerender