Chromium Code Reviews| Index: chrome/browser/android/offline_pages/prerender_adapter.cc |
| diff --git a/chrome/browser/android/offline_pages/prerender_adapter.cc b/chrome/browser/android/offline_pages/prerender_adapter.cc |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..17b8bf0251dd59b1edc875262199a97a32c660c7 |
| --- /dev/null |
| +++ b/chrome/browser/android/offline_pages/prerender_adapter.cc |
| @@ -0,0 +1,87 @@ |
| +// Copyright 2016 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/android/offline_pages/prerender_adapter.h" |
| + |
| +#include "base/location.h" |
| +#include "base/logging.h" |
| +#include "chrome/browser/android/offline_pages/prerendering_loader.h" |
| +#include "chrome/browser/prerender/prerender_manager.h" |
| +#include "chrome/browser/prerender/prerender_manager_factory.h" |
| +#include "chrome/browser/profiles/profile.h" |
| +#include "content/public/browser/browser_context.h" |
| +#include "content/public/browser/web_contents.h" |
| +#include "ui/gfx/geometry/size.h" |
| + |
| +namespace offline_pages { |
| + |
| +PrerenderAdapter::PrerenderAdapter() {} |
| +PrerenderAdapter::~PrerenderAdapter() {} |
|
pasko
2016/05/17 15:34:20
nit: empty line above
|
| + |
| +bool PrerenderAdapter::CanPrerender() const { |
| + return prerender::PrerenderManager::ActuallyPrerendering(); |
| +} |
| + |
| +bool PrerenderAdapter::AddPrerenderForOffline( |
| + content::BrowserContext* browser_context, |
| + const GURL& url, |
| + content::SessionStorageNamespace* session_storage_namespace, |
| + const gfx::Size& size) { |
| + DCHECK(!IsActive()); |
| + Profile* profile = Profile::FromBrowserContext(browser_context); |
| + prerender::PrerenderManager* manager = |
| + prerender::PrerenderManagerFactory::GetForProfile(profile); |
| + DCHECK(manager); |
| + // Start prerendering the url and capture the handle for the prerendering. |
| + active_handle_.reset( |
| + manager->AddPrerenderForOffline(url, session_storage_namespace, size)); |
| + return active_handle_.get(); |
| +} |
| + |
| +void PrerenderAdapter::SetObserver( |
| + prerender::PrerenderHandle::Observer* observer) { |
| + DCHECK(IsActive()); |
| + active_handle_->SetObserver(observer); |
| +} |
| + |
| +bool PrerenderAdapter::IsPrerendering() const { |
| + DCHECK(IsActive()); |
| + return active_handle_->IsPrerendering(); |
| +} |
| + |
| +void PrerenderAdapter::OnCancel() { |
| + DCHECK(IsActive()); |
| + active_handle_->OnCancel(); |
| +} |
| + |
| +content::WebContents* PrerenderAdapter::GetWebContents() const { |
| + DCHECK(IsActive()); |
| + if (active_handle_->contents()) { |
| + // Note: the prerender stack maintains ownership of these contents |
| + // and PrerenderingLoader::StopLoading() must be called to report |
| + // the Loader is done with the contents. |
| + return active_handle_->contents()->prerender_contents(); |
| + } |
| + return nullptr; |
| +} |
| + |
| +prerender::FinalStatus PrerenderAdapter::GetFinalStatus() const { |
| + DCHECK(IsActive()); |
| + DCHECK(active_handle_->contents()); |
| + return active_handle_->contents()->final_status(); |
| +} |
| + |
| +bool PrerenderAdapter::IsActive() const { |
| + return active_handle_.get(); |
| +} |
| + |
| +bool PrerenderAdapter::IsActive(prerender::PrerenderHandle* handle) const { |
| + return active_handle_.get() == handle; |
| +} |
| + |
| +void PrerenderAdapter::DestroyActive() { |
| + active_handle_.reset(nullptr); |
|
pasko
2016/05/12 19:10:07
PrerenderHandle destructor has this comment:
//
dougarnett
2016/05/13 00:00:24
Done.
|
| +} |
| + |
| +} // namespace offline_pages |