Chromium Code Reviews| Index: chrome/browser/prerender/prerender_contents.cc |
| diff --git a/chrome/browser/prerender/prerender_contents.cc b/chrome/browser/prerender/prerender_contents.cc |
| index c142f159881f75390482be7dbeb5bf376b5da973..d00b66f77ac7241cee550ccaeafd10ff9edc0f78 100644 |
| --- a/chrome/browser/prerender/prerender_contents.cc |
| +++ b/chrome/browser/prerender/prerender_contents.cc |
| @@ -22,6 +22,7 @@ |
| #include "content/browser/browsing_instance.h" |
| #include "content/browser/renderer_host/render_view_host.h" |
| #include "content/browser/renderer_host/resource_dispatcher_host.h" |
| +#include "content/browser/renderer_host/resource_request_details.h" |
| #include "content/browser/site_instance.h" |
| #include "content/common/notification_service.h" |
| #include "content/common/view_messages.h" |
| @@ -138,6 +139,10 @@ void PrerenderContents::StartPrerendering() { |
| registrar_.Add(this, NotificationType::DOWNLOAD_INITIATED, |
| NotificationService::AllSources()); |
| + // Register for redirects. |
|
Charlie Reis
2011/04/11 21:15:52
Please add "from this RenderViewHostDelegate," sin
cbentzel
2011/04/12 18:07:59
Done.
|
| + registrar_.Add(this, NotificationType::RESOURCE_RECEIVED_REDIRECT, |
| + Source<RenderViewHostDelegate>(this)); |
| + |
| DCHECK(load_start_time_.is_null()); |
| load_start_time_ = base::TimeTicks::Now(); |
| @@ -322,6 +327,23 @@ void PrerenderContents::Observe(NotificationType type, |
| break; |
| } |
| + case NotificationType::RESOURCE_RECEIVED_REDIRECT: { |
| + // RESOURCE_RECEIVED_REDIRECT can come for any resource on a page. |
| + // If it's a redirect on the top-level resource, the name needs |
| + // to be remembered for future matching, and if it redirects to |
| + // an https resource, it needs to be canceled. If a subresource |
| + // is redirected, nothing changes. |
|
Charlie Reis
2011/04/11 21:15:52
How are you distinguishing whether it's top-level
cbentzel
2011/04/11 21:18:35
I'll change to resource_type(). This was using "Ma
cbentzel
2011/04/12 18:07:59
resource_type() is much clearer about what's going
|
| + DCHECK(Source<RenderViewHostDelegate>(source).ptr() == this); |
| + ResourceRedirectDetails* resource_redirect_details = |
| + Details<ResourceRedirectDetails>(details).ptr(); |
| + CHECK(resource_redirect_details != NULL); |
|
Charlie Reis
2011/04/11 21:15:52
I think Chrome style is to omit the "!= NULL".
cbentzel
2011/04/12 18:07:59
Done.
|
| + if (MatchesURL(resource_redirect_details->url())) { |
| + if (!AddAliasURL(resource_redirect_details->new_url())) |
| + Destroy(FINAL_STATUS_HTTPS); |
| + } |
| + break; |
| + } |
| + |
| default: |
| NOTREACHED() << "Unexpected notification sent."; |
| break; |
| @@ -412,8 +434,6 @@ bool PrerenderContents::OnMessageReceived(const IPC::Message& message) { |
| IPC_BEGIN_MESSAGE_MAP_EX(PrerenderContents, message, message_is_ok) |
| IPC_MESSAGE_HANDLER(ViewHostMsg_DidStartProvisionalLoadForFrame, |
| OnDidStartProvisionalLoadForFrame) |
| - IPC_MESSAGE_HANDLER(ViewHostMsg_DidRedirectProvisionalLoad, |
| - OnDidRedirectProvisionalLoad) |
| IPC_MESSAGE_HANDLER(ViewHostMsg_UpdateFaviconURL, OnUpdateFaviconURL) |
| IPC_MESSAGE_HANDLER(ViewHostMsg_MaybeCancelPrerender, |
| OnMaybeCancelPrerender) |
| @@ -441,13 +461,6 @@ void PrerenderContents::OnDidStartProvisionalLoadForFrame(int64 frame_id, |
| } |
| } |
| -void PrerenderContents::OnDidRedirectProvisionalLoad(int32 page_id, |
| - const GURL& source_url, |
| - const GURL& target_url) { |
| - if (!AddAliasURL(target_url)) |
| - Destroy(FINAL_STATUS_HTTPS); |
| -} |
| - |
| void PrerenderContents::OnUpdateFaviconURL(int32 page_id, |
| const GURL& icon_url) { |
| icon_url_ = icon_url; |