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

Side by Side Diff: chrome/browser/prerender/prerender_tab_helper.cc

Issue 2649923015: Convert PrerenderTabHelper to use the new navigation callbacks. (Closed)
Patch Set: fix Created 3 years, 11 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
« no previous file with comments | « chrome/browser/prerender/prerender_tab_helper.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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/prerender/prerender_tab_helper.h" 5 #include "chrome/browser/prerender/prerender_tab_helper.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/metrics/histogram_macros.h" 8 #include "base/metrics/histogram_macros.h"
9 #include "base/time/time.h" 9 #include "base/time/time.h"
10 #include "chrome/browser/prerender/prerender_histograms.h" 10 #include "chrome/browser/prerender/prerender_histograms.h"
11 #include "chrome/browser/prerender/prerender_manager.h" 11 #include "chrome/browser/prerender/prerender_manager.h"
12 #include "chrome/browser/prerender/prerender_manager_factory.h" 12 #include "chrome/browser/prerender/prerender_manager_factory.h"
13 #include "chrome/browser/profiles/profile.h" 13 #include "chrome/browser/profiles/profile.h"
14 #include "content/public/browser/navigation_handle.h"
14 #include "content/public/browser/render_frame_host.h" 15 #include "content/public/browser/render_frame_host.h"
15 #include "content/public/browser/resource_request_details.h" 16 #include "content/public/browser/resource_request_details.h"
16 #include "content/public/browser/web_contents.h" 17 #include "content/public/browser/web_contents.h"
17 18
18 using content::WebContents; 19 using content::WebContents;
19 20
20 DEFINE_WEB_CONTENTS_USER_DATA_KEY(prerender::PrerenderTabHelper); 21 DEFINE_WEB_CONTENTS_USER_DATA_KEY(prerender::PrerenderTabHelper);
21 22
22 namespace prerender { 23 namespace prerender {
23 24
24 PrerenderTabHelper::PrerenderTabHelper(content::WebContents* web_contents) 25 PrerenderTabHelper::PrerenderTabHelper(content::WebContents* web_contents)
25 : content::WebContentsObserver(web_contents), 26 : content::WebContentsObserver(web_contents),
26 origin_(ORIGIN_NONE), 27 origin_(ORIGIN_NONE),
27 weak_factory_(this) {} 28 weak_factory_(this) {}
28 29
29 PrerenderTabHelper::~PrerenderTabHelper() { 30 PrerenderTabHelper::~PrerenderTabHelper() {
30 } 31 }
31 32
32 void PrerenderTabHelper::DidGetRedirectForResourceRequest( 33 void PrerenderTabHelper::DidGetRedirectForResourceRequest(
33 const content::ResourceRedirectDetails& details) { 34 const content::ResourceRedirectDetails& details) {
34 if (details.resource_type != content::RESOURCE_TYPE_MAIN_FRAME) 35 if (details.resource_type != content::RESOURCE_TYPE_MAIN_FRAME)
35 return; 36 return;
36 37
37 MainFrameUrlDidChange(details.new_url); 38 MainFrameUrlDidChange(details.new_url);
38 } 39 }
39 40
40 void PrerenderTabHelper::DidCommitProvisionalLoadForFrame( 41 void PrerenderTabHelper::DidFinishNavigation(
41 content::RenderFrameHost* render_frame_host, 42 content::NavigationHandle* navigation_handle) {
42 const GURL& validated_url, 43 if (!navigation_handle->IsInMainFrame() ||
43 ui::PageTransition transition_type) { 44 !navigation_handle->HasCommitted() ||
44 if (render_frame_host->GetParent()) 45 navigation_handle->IsErrorPage()) {
45 return; 46 return;
46 url_ = validated_url; 47 }
48
49 url_ = navigation_handle->GetURL();
47 PrerenderManager* prerender_manager = MaybeGetPrerenderManager(); 50 PrerenderManager* prerender_manager = MaybeGetPrerenderManager();
48 if (!prerender_manager) 51 if (!prerender_manager)
49 return; 52 return;
50 if (prerender_manager->IsWebContentsPrerendering(web_contents(), NULL)) 53 if (prerender_manager->IsWebContentsPrerendering(web_contents(), NULL))
51 return; 54 return;
52 prerender_manager->RecordNavigation(validated_url); 55 prerender_manager->RecordNavigation(navigation_handle->GetURL());
pasko 2017/01/26 10:49:03 nit: why not use url_? methods called in between s
jam 2017/01/26 15:50:28 I was thrown off by the existing code, but I didn'
53 } 56 }
54 57
55 void PrerenderTabHelper::DidStopLoading() { 58 void PrerenderTabHelper::DidStopLoading() {
56 // Compute the PPLT metric and report it in a histogram, if needed. If the 59 // Compute the PPLT metric and report it in a histogram, if needed. If the
57 // page is still prerendering, record the not swapped in page load time 60 // page is still prerendering, record the not swapped in page load time
58 // instead. 61 // instead.
59 if (!pplt_load_start_.is_null()) { 62 if (!pplt_load_start_.is_null()) {
60 base::TimeTicks now = GetTimeTicksFromPrerenderManager(); 63 base::TimeTicks now = GetTimeTicksFromPrerenderManager();
61 if (IsPrerendering()) { 64 if (IsPrerendering()) {
62 PrerenderManager* prerender_manager = MaybeGetPrerenderManager(); 65 PrerenderManager* prerender_manager = MaybeGetPrerenderManager();
(...skipping 20 matching lines...) Expand all
83 RecordPerceivedPageLoadTime( 86 RecordPerceivedPageLoadTime(
84 now - pplt_load_start_, fraction_elapsed_at_swapin); 87 now - pplt_load_start_, fraction_elapsed_at_swapin);
85 } 88 }
86 } 89 }
87 90
88 // Reset the PPLT metric. 91 // Reset the PPLT metric.
89 pplt_load_start_ = base::TimeTicks(); 92 pplt_load_start_ = base::TimeTicks();
90 actual_load_start_ = base::TimeTicks(); 93 actual_load_start_ = base::TimeTicks();
91 } 94 }
92 95
93 void PrerenderTabHelper::DidStartProvisionalLoadForFrame( 96 void PrerenderTabHelper::DidStartNavigation(
94 content::RenderFrameHost* render_frame_host, 97 content::NavigationHandle* navigation_handle) {
95 const GURL& validated_url, 98 if (navigation_handle->IsSamePage())
96 bool is_error_page) { 99 return;
100
97 // Determine the navigation type. 101 // Determine the navigation type.
98 PrerenderManager* prerender_manager = MaybeGetPrerenderManager(); 102 PrerenderManager* prerender_manager = MaybeGetPrerenderManager();
99 if (prerender_manager && 103 if (prerender_manager &&
100 prerender_manager->IsWebContentsPrerendering(web_contents(), &origin_)) { 104 prerender_manager->IsWebContentsPrerendering(web_contents(), &origin_)) {
101 navigation_type_ = NAVIGATION_TYPE_PRERENDERED; 105 navigation_type_ = NAVIGATION_TYPE_PRERENDERED;
102 } else { 106 } else {
103 navigation_type_ = NAVIGATION_TYPE_NORMAL; 107 navigation_type_ = NAVIGATION_TYPE_NORMAL;
104 } 108 }
105 109
106 if (render_frame_host->GetParent()) 110 if (!navigation_handle->IsInMainFrame())
107 return; 111 return;
108 112
109 // Record PPLT state for the beginning of a new navigation. 113 // Record PPLT state for the beginning of a new navigation.
110 pplt_load_start_ = GetTimeTicksFromPrerenderManager(); 114 pplt_load_start_ = GetTimeTicksFromPrerenderManager();
111 actual_load_start_ = base::TimeTicks(); 115 actual_load_start_ = base::TimeTicks();
112 116
113 MainFrameUrlDidChange(validated_url); 117 MainFrameUrlDidChange(navigation_handle->GetURL());
114 } 118 }
115 119
116 void PrerenderTabHelper::MainFrameUrlDidChange(const GURL& url) { 120 void PrerenderTabHelper::MainFrameUrlDidChange(const GURL& url) {
117 url_ = url; 121 url_ = url;
118 } 122 }
119 123
120 PrerenderManager* PrerenderTabHelper::MaybeGetPrerenderManager() const { 124 PrerenderManager* PrerenderTabHelper::MaybeGetPrerenderManager() const {
121 return PrerenderManagerFactory::GetForBrowserContext( 125 return PrerenderManagerFactory::GetForBrowserContext(
122 web_contents()->GetBrowserContext()); 126 web_contents()->GetBrowserContext());
123 } 127 }
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
164 PrerenderManager* prerender_manager = MaybeGetPrerenderManager(); 168 PrerenderManager* prerender_manager = MaybeGetPrerenderManager();
165 if (!prerender_manager) 169 if (!prerender_manager)
166 return; 170 return;
167 171
168 prerender_manager->RecordPerceivedPageLoadTime( 172 prerender_manager->RecordPerceivedPageLoadTime(
169 origin_, navigation_type_, perceived_page_load_time, 173 origin_, navigation_type_, perceived_page_load_time,
170 fraction_plt_elapsed_at_swap_in, url_); 174 fraction_plt_elapsed_at_swap_in, url_);
171 } 175 }
172 176
173 } // namespace prerender 177 } // namespace prerender
OLDNEW
« no previous file with comments | « chrome/browser/prerender/prerender_tab_helper.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698