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

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

Issue 10316020: Remove WebContentsImpl::OnDidRedirectProvisionalLoad. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Move redirect handling into a helper method. Created 8 years, 7 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 | Annotate | Revision Log
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/metrics/histogram.h" 7 #include "base/metrics/histogram.h"
8 #include "base/string_number_conversions.h" 8 #include "base/string_number_conversions.h"
9 #include "base/time.h" 9 #include "base/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 "chrome/browser/ui/tab_contents/core_tab_helper.h" 14 #include "chrome/browser/ui/tab_contents/core_tab_helper.h"
15 #include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h" 15 #include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h"
16 #include "content/public/browser/notification_service.h"
17 #include "content/public/browser/notification_types.h"
16 #include "content/public/browser/render_view_host.h" 18 #include "content/public/browser/render_view_host.h"
19 #include "content/public/browser/resource_request_details.h"
17 #include "content/public/browser/web_contents.h" 20 #include "content/public/browser/web_contents.h"
18 #include "content/public/browser/web_contents_view.h" 21 #include "content/public/browser/web_contents_view.h"
19 #include "skia/ext/platform_canvas.h" 22 #include "skia/ext/platform_canvas.h"
20 #include "third_party/skia/include/core/SkBitmap.h" 23 #include "third_party/skia/include/core/SkBitmap.h"
21 #include "ui/gfx/rect.h" 24 #include "ui/gfx/rect.h"
22 25
23 using content::WebContents; 26 using content::WebContents;
24 27
25 namespace prerender { 28 namespace prerender {
26 29
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after
142 145
143 base::WeakPtrFactory<PixelStats> weak_factory_; 146 base::WeakPtrFactory<PixelStats> weak_factory_;
144 147
145 PrerenderTabHelper* tab_helper_; 148 PrerenderTabHelper* tab_helper_;
146 }; 149 };
147 150
148 PrerenderTabHelper::PrerenderTabHelper(TabContentsWrapper* tab) 151 PrerenderTabHelper::PrerenderTabHelper(TabContentsWrapper* tab)
149 : content::WebContentsObserver(tab->web_contents()), 152 : content::WebContentsObserver(tab->web_contents()),
150 pixel_stats_(new PixelStats(this)), 153 pixel_stats_(new PixelStats(this)),
151 tab_(tab) { 154 tab_(tab) {
155 notification_registrar_.Add(
156 this, content::NOTIFICATION_RESOURCE_RECEIVED_REDIRECT,
157 content::Source<content::WebContents>(web_contents()));
152 } 158 }
153 159
154 PrerenderTabHelper::~PrerenderTabHelper() { 160 PrerenderTabHelper::~PrerenderTabHelper() {
155 } 161 }
156 162
157 void PrerenderTabHelper::ProvisionalChangeToMainFrameUrl(
158 const GURL& url,
159 const GURL& opener_url,
160 content::RenderViewHost* render_view_host) {
161 url_ = url;
162 RecordPageviewEvent(PAGEVIEW_EVENT_NEW_URL);
163 if (IsTopSite(url))
164 RecordPageviewEvent(PAGEVIEW_EVENT_TOP_SITE_NEW_URL);
165 PrerenderManager* prerender_manager = MaybeGetPrerenderManager();
166 if (!prerender_manager)
167 return;
168 if (prerender_manager->IsWebContentsPrerendering(web_contents()))
169 return;
170 prerender_manager->MarkWebContentsAsNotPrerendered(web_contents());
171 }
172
173 void PrerenderTabHelper::DidCommitProvisionalLoadForFrame( 163 void PrerenderTabHelper::DidCommitProvisionalLoadForFrame(
174 int64 frame_id, 164 int64 frame_id,
175 bool is_main_frame, 165 bool is_main_frame,
176 const GURL& validated_url, 166 const GURL& validated_url,
177 content::PageTransition transition_type, 167 content::PageTransition transition_type,
178 content::RenderViewHost* render_view_host) { 168 content::RenderViewHost* render_view_host) {
179 if (!is_main_frame) 169 if (!is_main_frame)
180 return; 170 return;
181 PrerenderManager* prerender_manager = MaybeGetPrerenderManager(); 171 PrerenderManager* prerender_manager = MaybeGetPrerenderManager();
182 if (!prerender_manager) 172 if (!prerender_manager)
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
270 pplt_load_start_ = base::TimeTicks::Now(); 260 pplt_load_start_ = base::TimeTicks::Now();
271 pixel_stats_->GetBitmap(PixelStats::BITMAP_SWAP_IN, web_contents()); 261 pixel_stats_->GetBitmap(PixelStats::BITMAP_SWAP_IN, web_contents());
272 } 262 }
273 } 263 }
274 264
275 bool PrerenderTabHelper::IsTopSite(const GURL& url) { 265 bool PrerenderTabHelper::IsTopSite(const GURL& url) {
276 PrerenderManager* pm = MaybeGetPrerenderManager(); 266 PrerenderManager* pm = MaybeGetPrerenderManager();
277 return (pm && pm->IsTopSite(url)); 267 return (pm && pm->IsTopSite(url));
278 } 268 }
279 269
270 void PrerenderTabHelper::HandleResourceReceivedRedirect(const GURL& new_url) {
cbentzel 2012/05/17 18:52:05 Nit: the definitions should be ordered in same way
271 url_ = new_url;
272 RecordPageviewEvent(PAGEVIEW_EVENT_NEW_URL);
273 if (IsTopSite(url_))
274 RecordPageviewEvent(PAGEVIEW_EVENT_TOP_SITE_NEW_URL);
275 PrerenderManager* prerender_manager = MaybeGetPrerenderManager();
276 if (!prerender_manager)
277 return;
278 if (prerender_manager->IsWebContentsPrerendering(web_contents()))
279 return;
280 prerender_manager->MarkWebContentsAsNotPrerendered(web_contents());
281 }
cbentzel 2012/05/17 18:52:05 Nit: this needs to be outdented by 1
282
283 void PrerenderTabHelper::Observe(
284 int type,
285 const content::NotificationSource& source,
286 const content::NotificationDetails& details) {
287 switch (type) {
288 case content::NOTIFICATION_RESOURCE_RECEIVED_REDIRECT: {
289 DCHECK(content::Source<content::WebContents>(source).ptr() ==
290 web_contents());
291 content::ResourceRedirectDetails* resource_redirect_details =
292 content::Details<content::ResourceRedirectDetails>(details).ptr();
293 CHECK(resource_redirect_details);
294 HandleResourceReceivedRedirect(resource_redirect_details->new_url);
295 break;
296 }
297
298 default:
299 NOTREACHED() << "Unexpected notification sent.";
300 break;
301 }
302 }
303
280 } // namespace prerender 304 } // namespace prerender
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698