Chromium Code Reviews| Index: chrome/browser/prerender/prerender_tab_helper.cc |
| diff --git a/chrome/browser/prerender/prerender_tab_helper.cc b/chrome/browser/prerender/prerender_tab_helper.cc |
| index e8053e378079e05d7ff91089b2ad9362b5bc29b8..5aa08dd025fc1b5f357c51ea5dfaef037c672530 100644 |
| --- a/chrome/browser/prerender/prerender_tab_helper.cc |
| +++ b/chrome/browser/prerender/prerender_tab_helper.cc |
| @@ -13,7 +13,10 @@ |
| #include "chrome/browser/profiles/profile.h" |
| #include "chrome/browser/ui/tab_contents/core_tab_helper.h" |
| #include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h" |
| +#include "content/public/browser/notification_service.h" |
| +#include "content/public/browser/notification_types.h" |
| #include "content/public/browser/render_view_host.h" |
| +#include "content/public/browser/resource_request_details.h" |
| #include "content/public/browser/web_contents.h" |
| #include "content/public/browser/web_contents_view.h" |
| #include "skia/ext/platform_canvas.h" |
| @@ -149,27 +152,14 @@ PrerenderTabHelper::PrerenderTabHelper(TabContentsWrapper* tab) |
| : content::WebContentsObserver(tab->web_contents()), |
| pixel_stats_(new PixelStats(this)), |
| tab_(tab) { |
| + notification_registrar_.Add( |
| + this, content::NOTIFICATION_RESOURCE_RECEIVED_REDIRECT, |
| + content::Source<content::WebContents>(web_contents())); |
| } |
| PrerenderTabHelper::~PrerenderTabHelper() { |
| } |
| -void PrerenderTabHelper::ProvisionalChangeToMainFrameUrl( |
| - const GURL& url, |
| - const GURL& opener_url, |
| - content::RenderViewHost* render_view_host) { |
| - url_ = url; |
| - RecordPageviewEvent(PAGEVIEW_EVENT_NEW_URL); |
| - if (IsTopSite(url)) |
| - RecordPageviewEvent(PAGEVIEW_EVENT_TOP_SITE_NEW_URL); |
| - PrerenderManager* prerender_manager = MaybeGetPrerenderManager(); |
| - if (!prerender_manager) |
| - return; |
| - if (prerender_manager->IsWebContentsPrerendering(web_contents())) |
| - return; |
| - prerender_manager->MarkWebContentsAsNotPrerendered(web_contents()); |
| -} |
| - |
| void PrerenderTabHelper::DidCommitProvisionalLoadForFrame( |
| int64 frame_id, |
| bool is_main_frame, |
| @@ -277,4 +267,34 @@ bool PrerenderTabHelper::IsTopSite(const GURL& url) { |
| return (pm && pm->IsTopSite(url)); |
| } |
| +void PrerenderTabHelper::Observe( |
| + int type, |
| + const content::NotificationSource& source, |
| + const content::NotificationDetails& details) { |
| + switch (type) { |
| + case content::NOTIFICATION_RESOURCE_RECEIVED_REDIRECT: { |
| + DCHECK(content::Source<content::WebContents>(source).ptr() == |
| + web_contents()); |
| + content::ResourceRedirectDetails* resource_redirect_details = |
| + content::Details<content::ResourceRedirectDetails>(details).ptr(); |
| + CHECK(resource_redirect_details); |
| + url_ = resource_redirect_details->new_url; |
|
cbentzel
2012/05/17 17:42:39
Nit: I'd move everything below this into a helper
Deprecated (see juliatuttle)
2012/05/17 18:42:21
Done.
|
| + RecordPageviewEvent(PAGEVIEW_EVENT_NEW_URL); |
| + if (IsTopSite(url_)) |
| + RecordPageviewEvent(PAGEVIEW_EVENT_TOP_SITE_NEW_URL); |
| + PrerenderManager* prerender_manager = MaybeGetPrerenderManager(); |
| + if (!prerender_manager) |
| + break; |
| + if (prerender_manager->IsWebContentsPrerendering(web_contents())) |
| + break; |
| + prerender_manager->MarkWebContentsAsNotPrerendered(web_contents()); |
| + break; |
| + } |
| + |
| + default: |
| + NOTREACHED() << "Unexpected notification sent."; |
| + break; |
| + } |
| +} |
| + |
| } // namespace prerender |