Index: chrome/browser/prerender/prerender_resource_throttle.cc |
diff --git a/chrome/browser/prerender/prerender_resource_throttle.cc b/chrome/browser/prerender/prerender_resource_throttle.cc |
index 200e2865557792db5a3c5c694c05a6bfac76474b..512b9d83d07133daafc95385095876e06f5e8a3a 100644 |
--- a/chrome/browser/prerender/prerender_resource_throttle.cc |
+++ b/chrome/browser/prerender/prerender_resource_throttle.cc |
@@ -121,8 +121,14 @@ void PrerenderResourceThrottle::WillStartRequestOnUI( |
if (prerender_contents) { |
// Abort any prerenders that spawn requests that use unsupported HTTP |
// methods or schemes. |
- if (!PrerenderManager::IsValidHttpMethod(method)) { |
- prerender_contents->Destroy(FINAL_STATUS_INVALID_HTTP_METHOD); |
+ if (!prerender_contents->IsValidHttpMethod(method)) { |
+ // If this is a full prerender, cancel the prerender in response to |
+ // invalid requests. For prefetches, cancel invalid requests but keep the |
+ // prefetch going, unless it's the main frame that's invalid. |
+ if (prerender_contents->prerender_mode() == FULL_PRERENDER || |
+ resource_type == content::RESOURCE_TYPE_MAIN_FRAME) { |
+ prerender_contents->Destroy(FINAL_STATUS_INVALID_HTTP_METHOD); |
+ } |
cancel = true; |
} else if (!PrerenderManager::DoesSubresourceURLHaveValidScheme(url)) { |
prerender_contents->Destroy(FINAL_STATUS_UNSUPPORTED_SCHEME); |