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

Unified Diff: chrome/browser/prerender/prerender_contents.cc

Issue 6824054: PrerenderContents uses RESOURCE_RECEIVED_REDIRECT notification. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase Created 9 years, 8 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/prerender/prerender_contents.cc
diff --git a/chrome/browser/prerender/prerender_contents.cc b/chrome/browser/prerender/prerender_contents.cc
index 6051d07757f17d4d63b1edb3dfb911c29f5dc4c7..8da29700d1370f4c7b54be0466473a15e1c2951e 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 redirect notifications sourced from |this|.
+ 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,24 @@ 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.
+ DCHECK(Source<RenderViewHostDelegate>(source).ptr() == this);
+ ResourceRedirectDetails* resource_redirect_details =
+ Details<ResourceRedirectDetails>(details).ptr();
+ CHECK(resource_redirect_details);
+ if (resource_redirect_details->resource_type() ==
+ ResourceType::MAIN_FRAME) {
+ if (!AddAliasURL(resource_redirect_details->new_url()))
+ Destroy(FINAL_STATUS_HTTPS);
+ }
+ break;
+ }
+
default:
NOTREACHED() << "Unexpected notification sent.";
break;
@@ -412,8 +435,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 +462,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 std::vector<FaviconURL>& urls) {
« no previous file with comments | « chrome/browser/prerender/prerender_contents.h ('k') | chrome/test/data/prerender/prerender_embedded_content.html » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698