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..960adefec0b916624d1ebd0a682fada17da95daa |
| --- /dev/null |
| +++ b/chrome/browser/android/offline_pages/prerender_adapter.cc |
| @@ -0,0 +1,88 @@ |
| +// 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() { |
| + DestroyActive(); |
| +} |
| + |
| +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()); |
|
gabadie
2016/05/13 07:55:37
DCHECK(CanPrerender()) ?
dougarnett
2016/05/13 16:49:45
Done.
|
| + 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(); |
| +} |
| + |
| +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 { |
|
gabadie
2016/05/13 07:55:37
The name of this method is miss leading with what
dougarnett
2016/05/13 16:49:45
Done.
|
| + return active_handle_.get() == handle; |
| +} |
| + |
| +void PrerenderAdapter::DestroyActive() { |
| + if (IsActive()) { |
|
gabadie
2016/05/13 07:55:37
Why not asserting like other methods?
dougarnett
2016/05/13 16:49:45
Primarily so it can be simply called in the dtor.
|
| + active_handle_->OnCancel(); |
| + active_handle_.reset(nullptr); |
| + } |
| +} |
| + |
| +} // namespace offline_pages |