Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(334)

Side by Side Diff: chrome/browser/android/offline_pages/prerender_adapter.cc

Issue 2357013002: Fix an issue that PrerenderLoader::OnPrerenderStart() never gets called. (Closed)
Patch Set: nits Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/android/offline_pages/prerender_adapter.h" 5 #include "chrome/browser/android/offline_pages/prerender_adapter.h"
6 6
7 #include "chrome/browser/prerender/prerender_manager.h" 7 #include "chrome/browser/prerender/prerender_manager.h"
8 #include "chrome/browser/prerender/prerender_manager_factory.h" 8 #include "chrome/browser/prerender/prerender_manager_factory.h"
9 #include "content/public/browser/browser_context.h" 9 #include "content/public/browser/browser_context.h"
10 #include "content/public/browser/web_contents.h" 10 #include "content/public/browser/web_contents.h"
(...skipping 23 matching lines...) Expand all
34 const GURL& url, 34 const GURL& url,
35 content::SessionStorageNamespace* session_storage_namespace, 35 content::SessionStorageNamespace* session_storage_namespace,
36 const gfx::Size& size) { 36 const gfx::Size& size) {
37 DCHECK(!IsActive()); 37 DCHECK(!IsActive());
38 DCHECK(CanPrerender()); 38 DCHECK(CanPrerender());
39 39
40 prerender::PrerenderManager* manager = 40 prerender::PrerenderManager* manager =
41 prerender::PrerenderManagerFactory::GetForBrowserContext(browser_context); 41 prerender::PrerenderManagerFactory::GetForBrowserContext(browser_context);
42 DCHECK(manager); 42 DCHECK(manager);
43 43
44 // Start prerendering the url and capture the handle for the prerendering. 44 // AddPrerenderForOffline() triggers the start event, and it is before the
45 // observer is set.
45 active_handle_ = 46 active_handle_ =
46 manager->AddPrerenderForOffline(url, session_storage_namespace, size); 47 manager->AddPrerenderForOffline(url, session_storage_namespace, size);
47 if (!active_handle_) 48 if (!active_handle_)
48 return false; 49 return false;
50 DCHECK(active_handle_->contents());
51 DCHECK(active_handle_->contents()->prerendering_has_started());
49 52
50 active_handle_->SetObserver(this); 53 active_handle_->SetObserver(this);
54
51 return true; 55 return true;
52 } 56 }
53 57
54 content::WebContents* PrerenderAdapter::GetWebContents() const { 58 content::WebContents* PrerenderAdapter::GetWebContents() const {
55 DCHECK(IsActive()); 59 DCHECK(IsActive());
56 DCHECK(active_handle_->contents()); 60 DCHECK(active_handle_->contents());
57 // Note: the prerender stack maintains ownership of these contents 61 // Note: the prerender stack maintains ownership of these contents
58 // and PrerenderingLoader::StopLoading() must be called to report 62 // and PrerenderingLoader::StopLoading() must be called to report
59 // the Loader is done with the contents. 63 // the Loader is done with the contents.
60 return active_handle_->contents()->prerender_contents(); 64 return active_handle_->contents()->prerender_contents();
(...skipping 12 matching lines...) Expand all
73 void PrerenderAdapter::DestroyActive() { 77 void PrerenderAdapter::DestroyActive() {
74 DCHECK(IsActive()); 78 DCHECK(IsActive());
75 // Clear active handle and call OnCancel from local variable to avoid 79 // Clear active handle and call OnCancel from local variable to avoid
76 // immediate Observer OnPrerenderStop() call from thinking still active. 80 // immediate Observer OnPrerenderStop() call from thinking still active.
77 prerender::PrerenderHandle* handle_to_destroy = active_handle_.release(); 81 prerender::PrerenderHandle* handle_to_destroy = active_handle_.release();
78 handle_to_destroy->OnCancel(); 82 handle_to_destroy->OnCancel();
79 delete handle_to_destroy; 83 delete handle_to_destroy;
80 } 84 }
81 85
82 void PrerenderAdapter::OnPrerenderStart(prerender::PrerenderHandle* handle) { 86 void PrerenderAdapter::OnPrerenderStart(prerender::PrerenderHandle* handle) {
83 DCHECK_EQ(active_handle_.get(), handle); 87 // Not expected as the start event will happen before the observer is set.
84 observer_->OnPrerenderStart(); 88 NOTREACHED();
85 } 89 }
86 90
87 void PrerenderAdapter::OnPrerenderStopLoading( 91 void PrerenderAdapter::OnPrerenderStopLoading(
88 prerender::PrerenderHandle* handle) { 92 prerender::PrerenderHandle* handle) {
89 DCHECK_EQ(active_handle_.get(), handle); 93 DCHECK_EQ(active_handle_.get(), handle);
90 observer_->OnPrerenderStopLoading(); 94 observer_->OnPrerenderStopLoading();
91 } 95 }
92 96
93 void PrerenderAdapter::OnPrerenderDomContentLoaded( 97 void PrerenderAdapter::OnPrerenderDomContentLoaded(
94 prerender::PrerenderHandle* handle) { 98 prerender::PrerenderHandle* handle) {
95 DCHECK_EQ(active_handle_.get(), handle); 99 DCHECK_EQ(active_handle_.get(), handle);
96 observer_->OnPrerenderDomContentLoaded(); 100 observer_->OnPrerenderDomContentLoaded();
97 } 101 }
98 102
99 void PrerenderAdapter::OnPrerenderStop(prerender::PrerenderHandle* handle) { 103 void PrerenderAdapter::OnPrerenderStop(prerender::PrerenderHandle* handle) {
100 if (IsActive()) { 104 if (IsActive()) {
101 DCHECK_EQ(active_handle_.get(), handle); 105 DCHECK_EQ(active_handle_.get(), handle);
102 observer_->OnPrerenderStop(); 106 observer_->OnPrerenderStop();
103 } 107 }
104 } 108 }
105 109
106 } // namespace offline_pages 110 } // namespace offline_pages
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698