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

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

Issue 2576443002: [PlzNavigate] Use WebContentsGetter in PrerenderResourceThrottle (Closed)
Patch Set: add comment Created 4 years 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
« no previous file with comments | « chrome/browser/prerender/prerender_resource_throttle.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 8efbcfe11533015a1f2fffdc107b91f18ad0531c..41600207b17e20aecfae2c8b0ba5f9fffd4cf391 100644
--- a/chrome/browser/prerender/prerender_resource_throttle.cc
+++ b/chrome/browser/prerender/prerender_resource_throttle.cc
@@ -12,14 +12,13 @@
#include "chrome/browser/prerender/prerender_manager.h"
#include "chrome/browser/prerender/prerender_util.h"
#include "content/public/browser/browser_thread.h"
-#include "content/public/browser/render_frame_host.h"
-#include "content/public/browser/resource_request_info.h"
#include "content/public/browser/web_contents.h"
#include "net/http/http_response_headers.h"
#include "net/url_request/redirect_info.h"
#include "net/url_request/url_request.h"
using content::BrowserThread;
+using content::ResourceRequestInfo;
using content::ResourceType;
namespace prerender {
@@ -49,7 +48,8 @@ class PrerenderThrottleInfo
: public base::RefCountedThreadSafe<PrerenderThrottleInfo,
BrowserThread::DeleteOnUIThread> {
public:
- PrerenderThrottleInfo() : manager_(nullptr) {}
+ PrerenderThrottleInfo()
+ : mode_(NO_PRERENDER), origin_(ORIGIN_NONE), manager_(nullptr) {}
void Set(PrerenderMode mode, Origin origin, PrerenderManager* manager) {
DCHECK_CURRENTLY_ON(BrowserThread::UI);
@@ -94,8 +94,8 @@ void PrerenderResourceThrottle::WillStartRequest(bool* defer) {
BrowserThread::PostTask(
BrowserThread::UI, FROM_HERE,
base::Bind(&PrerenderResourceThrottle::WillStartRequestOnUI, AsWeakPtr(),
- request_->method(), info->GetResourceType(),
- info->GetChildID(), info->GetRenderFrameID(), request_->url(),
+ request_->method(), info->GetResourceType(), request_->url(),
+ info->GetWebContentsGetterForRequest(),
prerender_throttle_info_));
}
@@ -112,8 +112,8 @@ void PrerenderResourceThrottle::WillRedirectRequest(
BrowserThread::UI, FROM_HERE,
base::Bind(&PrerenderResourceThrottle::WillRedirectRequestOnUI,
AsWeakPtr(), header, info->GetResourceType(), info->IsAsync(),
- IsNoStoreResponse(*request_), info->GetChildID(),
- info->GetRenderFrameID(), redirect_info.new_url));
+ IsNoStoreResponse(*request_), redirect_info.new_url,
+ info->GetWebContentsGetterForRequest()));
}
void PrerenderResourceThrottle::WillProcessResponse(bool* defer) {
@@ -131,7 +131,6 @@ void PrerenderResourceThrottle::WillProcessResponse(bool* defer) {
base::Bind(&PrerenderResourceThrottle::WillProcessResponseOnUI,
content::IsResourceTypeFrame(info->GetResourceType()),
IsNoStoreResponse(*request_), redirect_count,
- info->GetChildID(), info->GetRenderFrameID(),
prerender_throttle_info_));
}
@@ -148,13 +147,12 @@ void PrerenderResourceThrottle::WillStartRequestOnUI(
const base::WeakPtr<PrerenderResourceThrottle>& throttle,
const std::string& method,
ResourceType resource_type,
- int render_process_id,
- int render_frame_id,
const GURL& url,
+ const ResourceRequestInfo::WebContentsGetter& web_contents_getter,
scoped_refptr<PrerenderThrottleInfo> prerender_throttle_info) {
bool cancel = false;
PrerenderContents* prerender_contents =
- PrerenderContentsFromRenderFrame(render_process_id, render_frame_id);
+ PrerenderContentsFromGetter(web_contents_getter);
if (prerender_contents) {
DCHECK(prerender_throttle_info);
prerender_throttle_info->Set(prerender_contents->prerender_mode(),
@@ -172,7 +170,13 @@ void PrerenderResourceThrottle::WillStartRequestOnUI(
prerender_contents->Destroy(FINAL_STATUS_INVALID_HTTP_METHOD);
}
cancel = true;
- } else if (!PrerenderManager::DoesSubresourceURLHaveValidScheme(url)) {
+ } else if (!PrerenderManager::DoesSubresourceURLHaveValidScheme(url) &&
+ resource_type != content::RESOURCE_TYPE_MAIN_FRAME) {
+ // Destroying the prerender for unsupported scheme only for non-main
+ // resource to allow chrome://crash to actually crash in the
+ // *RendererCrash tests instead of being intercepted here. The unsupported
+ // scheme for the main resource is checked in WillRedirectRequestOnUI()
+ // and PrerenderContents::CheckURL(). See http://crbug.com/673771.
prerender_contents->Destroy(FINAL_STATUS_UNSUPPORTED_SCHEME);
ReportUnsupportedPrerenderScheme(url);
cancel = true;
@@ -200,12 +204,11 @@ void PrerenderResourceThrottle::WillRedirectRequestOnUI(
ResourceType resource_type,
bool async,
bool is_no_store,
- int render_process_id,
- int render_frame_id,
- const GURL& new_url) {
+ const GURL& new_url,
+ const ResourceRequestInfo::WebContentsGetter& web_contents_getter) {
bool cancel = false;
PrerenderContents* prerender_contents =
- PrerenderContentsFromRenderFrame(render_process_id, render_frame_id);
+ PrerenderContentsFromGetter(web_contents_getter);
if (prerender_contents) {
prerender_contents->prerender_manager()->RecordPrefetchResponseReceived(
prerender_contents->origin(),
@@ -245,8 +248,6 @@ void PrerenderResourceThrottle::WillProcessResponseOnUI(
bool is_main_resource,
bool is_no_store,
int redirect_count,
- int render_process_id,
- int render_frame_id,
scoped_refptr<PrerenderThrottleInfo> prerender_throttle_info) {
DCHECK(prerender_throttle_info);
if (!prerender_throttle_info->manager())
@@ -263,15 +264,11 @@ void PrerenderResourceThrottle::WillProcessResponseOnUI(
}
// static
-PrerenderContents* PrerenderResourceThrottle::PrerenderContentsFromRenderFrame(
- int render_process_id, int render_frame_id) {
+PrerenderContents* PrerenderResourceThrottle::PrerenderContentsFromGetter(
+ const ResourceRequestInfo::WebContentsGetter& web_contents_getter) {
if (g_prerender_contents_for_testing)
return g_prerender_contents_for_testing;
- content::RenderFrameHost* rfh = content::RenderFrameHost::FromID(
- render_process_id, render_frame_id);
- content::WebContents* web_contents =
- content::WebContents::FromRenderFrameHost(rfh);
- return PrerenderContents::FromWebContents(web_contents);
+ return PrerenderContents::FromWebContents(web_contents_getter.Run());
}
} // namespace prerender
« no previous file with comments | « chrome/browser/prerender/prerender_resource_throttle.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698