| Index: chrome/browser/android/offline_pages/prerendering_offliner.h
|
| diff --git a/chrome/browser/android/offline_pages/prerendering_offliner.h b/chrome/browser/android/offline_pages/prerendering_offliner.h
|
| index 4b970c4ce4eba576d87d20cad3449d3e62a4e9f4..08d0a665b520408c5f681165b72525cdb87a47d0 100644
|
| --- a/chrome/browser/android/offline_pages/prerendering_offliner.h
|
| +++ b/chrome/browser/android/offline_pages/prerendering_offliner.h
|
| @@ -11,6 +11,7 @@
|
| #include "chrome/browser/android/offline_pages/prerendering_loader.h"
|
| #include "components/offline_pages/background/offliner.h"
|
| #include "components/offline_pages/offline_page_model.h"
|
| +#include "components/offline_pages/offline_page_types.h"
|
|
|
| namespace content {
|
| class BrowserContext;
|
| @@ -23,7 +24,7 @@ class OfflinerPolicy;
|
|
|
| // An Offliner implementation that attempts client-side rendering and saving
|
| // of an offline page. It uses the PrerenderingLoader to load the page and
|
| -// the OfflinePageModel to save it.
|
| +// the OfflinePageModel to save it. Only one request may be active at a time.
|
| class PrerenderingOffliner : public Offliner {
|
| public:
|
| PrerenderingOffliner(content::BrowserContext* browser_context,
|
| @@ -40,11 +41,36 @@ class PrerenderingOffliner : public Offliner {
|
| // and must be called before any of the Offliner interface methods are called.
|
| void SetLoaderForTesting(std::unique_ptr<PrerenderingLoader> loader);
|
|
|
| + protected:
|
| + // Internal method for OfflinePageModel's check if url can be saved.
|
| + // Exposed for unit testing.
|
| + // TODO(dougarnett): Consider making OfflinePageModel mockable instead.
|
| + virtual bool CanSavePage(const GURL& url);
|
| +
|
| + // Internal method for requesting OfflinePageModel to save page.
|
| + // Exposed for unit testing.
|
| + // TODO(dougarnett): Consider making OfflinePageModel mockable instead.
|
| + virtual void SavePage(const GURL& url,
|
| + const ClientId& client_id,
|
| + std::unique_ptr<OfflinePageArchiver> archiver,
|
| + const SavePageCallback& callback);
|
| +
|
| private:
|
| - void OnLoadPageDone(const Offliner::RequestStatus load_status,
|
| - content::WebContents* contents);
|
| + // Callback logic for PrerenderingLoader::LoadPage().
|
| + void OnLoadPageDone(const SavePageRequest& request,
|
| + const CompletionCallback& completion_callback,
|
| + Offliner::RequestStatus load_status,
|
| + content::WebContents* web_contents);
|
| +
|
| + // Callback logic for OfflinePageModel::SavePage().
|
| + void OnSavePageDone(const SavePageRequest& request,
|
| + const CompletionCallback& completion_callback,
|
| + SavePageResult save_result,
|
| + int64_t offline_id);
|
|
|
| PrerenderingLoader* GetOrCreateLoader();
|
| + void SetPendingRequest(int64_t request_id);
|
| + void ClearPendingRequest();
|
|
|
| // Not owned.
|
| content::BrowserContext* browser_context_;
|
| @@ -52,6 +78,10 @@ class PrerenderingOffliner : public Offliner {
|
| OfflinePageModel* offline_page_model_;
|
| // Lazily created.
|
| std::unique_ptr<PrerenderingLoader> loader_;
|
| + // Tracks pending request, if any. Not owned.
|
| + // May be used to ensure a callback applies to the pending request (e.g., in
|
| + // case we receive a save page callback for an old, canceled request).
|
| + SavePageRequest const* pending_request_;
|
| base::WeakPtrFactory<PrerenderingOffliner> weak_ptr_factory_;
|
|
|
| DISALLOW_COPY_AND_ASSIGN(PrerenderingOffliner);
|
|
|