OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/browser/prerender/prerender_resource_throttle.h" | 5 #include "chrome/browser/prerender/prerender_resource_throttle.h" |
6 | 6 |
7 #include "chrome/browser/prerender/prerender_final_status.h" | 7 #include "chrome/browser/prerender/prerender_final_status.h" |
8 #include "chrome/browser/prerender/prerender_manager.h" | 8 #include "chrome/browser/prerender/prerender_manager.h" |
9 #include "chrome/browser/prerender/prerender_util.h" | 9 #include "chrome/browser/prerender/prerender_util.h" |
10 #include "content/public/browser/browser_thread.h" | 10 #include "content/public/browser/browser_thread.h" |
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
71 controller()->Resume(); | 71 controller()->Resume(); |
72 } | 72 } |
73 | 73 |
74 void PrerenderResourceThrottle::Cancel() { | 74 void PrerenderResourceThrottle::Cancel() { |
75 controller()->Cancel(); | 75 controller()->Cancel(); |
76 } | 76 } |
77 | 77 |
78 void PrerenderResourceThrottle::WillStartRequestOnUI( | 78 void PrerenderResourceThrottle::WillStartRequestOnUI( |
79 const base::WeakPtr<PrerenderResourceThrottle>& throttle, | 79 const base::WeakPtr<PrerenderResourceThrottle>& throttle, |
80 const std::string& method, | 80 const std::string& method, |
81 ResourceType::Type resource_type, | 81 ResourceType resource_type, |
82 int render_process_id, | 82 int render_process_id, |
83 int render_frame_id, | 83 int render_frame_id, |
84 const GURL& url) { | 84 const GURL& url) { |
85 bool cancel = false; | 85 bool cancel = false; |
86 PrerenderContents* prerender_contents = | 86 PrerenderContents* prerender_contents = |
87 PrerenderContentsFromRenderFrame(render_process_id, render_frame_id); | 87 PrerenderContentsFromRenderFrame(render_process_id, render_frame_id); |
88 if (prerender_contents) { | 88 if (prerender_contents) { |
89 // Abort any prerenders that spawn requests that use unsupported HTTP | 89 // Abort any prerenders that spawn requests that use unsupported HTTP |
90 // methods or schemes. | 90 // methods or schemes. |
91 if (!PrerenderManager::IsValidHttpMethod(method)) { | 91 if (!PrerenderManager::IsValidHttpMethod(method)) { |
92 prerender_contents->Destroy(FINAL_STATUS_INVALID_HTTP_METHOD); | 92 prerender_contents->Destroy(FINAL_STATUS_INVALID_HTTP_METHOD); |
93 cancel = true; | 93 cancel = true; |
94 } else if (!PrerenderManager::DoesSubresourceURLHaveValidScheme(url)) { | 94 } else if (!PrerenderManager::DoesSubresourceURLHaveValidScheme(url)) { |
95 prerender_contents->Destroy(FINAL_STATUS_UNSUPPORTED_SCHEME); | 95 prerender_contents->Destroy(FINAL_STATUS_UNSUPPORTED_SCHEME); |
96 ReportUnsupportedPrerenderScheme(url); | 96 ReportUnsupportedPrerenderScheme(url); |
97 cancel = true; | 97 cancel = true; |
98 #if defined(OS_ANDROID) | 98 #if defined(OS_ANDROID) |
99 } else if (resource_type == ResourceType::FAVICON) { | 99 } else if (resource_type == content::RESOURCE_TYPE_FAVICON) { |
100 // Delay icon fetching until the contents are getting swapped in | 100 // Delay icon fetching until the contents are getting swapped in |
101 // to conserve network usage in mobile devices. | 101 // to conserve network usage in mobile devices. |
102 prerender_contents->AddResourceThrottle(throttle); | 102 prerender_contents->AddResourceThrottle(throttle); |
103 return; | 103 return; |
104 #endif | 104 #endif |
105 } | 105 } |
106 } | 106 } |
107 | 107 |
108 content::BrowserThread::PostTask( | 108 content::BrowserThread::PostTask( |
109 content::BrowserThread::IO, | 109 content::BrowserThread::IO, |
110 FROM_HERE, | 110 FROM_HERE, |
111 base::Bind(cancel ? &PrerenderResourceThrottle::Cancel : | 111 base::Bind(cancel ? &PrerenderResourceThrottle::Cancel : |
112 &PrerenderResourceThrottle::Resume, throttle)); | 112 &PrerenderResourceThrottle::Resume, throttle)); |
113 } | 113 } |
114 | 114 |
115 void PrerenderResourceThrottle::WillRedirectRequestOnUI( | 115 void PrerenderResourceThrottle::WillRedirectRequestOnUI( |
116 const base::WeakPtr<PrerenderResourceThrottle>& throttle, | 116 const base::WeakPtr<PrerenderResourceThrottle>& throttle, |
117 const std::string& follow_only_when_prerender_shown_header, | 117 const std::string& follow_only_when_prerender_shown_header, |
118 ResourceType::Type resource_type, | 118 ResourceType resource_type, |
119 bool async, | 119 bool async, |
120 int render_process_id, | 120 int render_process_id, |
121 int render_frame_id, | 121 int render_frame_id, |
122 const GURL& new_url) { | 122 const GURL& new_url) { |
123 bool cancel = false; | 123 bool cancel = false; |
124 PrerenderContents* prerender_contents = | 124 PrerenderContents* prerender_contents = |
125 PrerenderContentsFromRenderFrame(render_process_id, render_frame_id); | 125 PrerenderContentsFromRenderFrame(render_process_id, render_frame_id); |
126 if (prerender_contents) { | 126 if (prerender_contents) { |
127 // Abort any prerenders with requests which redirect to invalid schemes. | 127 // Abort any prerenders with requests which redirect to invalid schemes. |
128 if (!PrerenderManager::DoesURLHaveValidScheme(new_url)) { | 128 if (!PrerenderManager::DoesURLHaveValidScheme(new_url)) { |
129 prerender_contents->Destroy(FINAL_STATUS_UNSUPPORTED_SCHEME); | 129 prerender_contents->Destroy(FINAL_STATUS_UNSUPPORTED_SCHEME); |
130 ReportUnsupportedPrerenderScheme(new_url); | 130 ReportUnsupportedPrerenderScheme(new_url); |
131 cancel = true; | 131 cancel = true; |
132 } else if (follow_only_when_prerender_shown_header == "1" && | 132 } else if (follow_only_when_prerender_shown_header == "1" && |
133 resource_type != ResourceType::MAIN_FRAME) { | 133 resource_type != content::RESOURCE_TYPE_MAIN_FRAME) { |
134 // Only defer redirects with the Follow-Only-When-Prerender-Shown | 134 // Only defer redirects with the Follow-Only-When-Prerender-Shown |
135 // header. Do not defer redirects on main frame loads. | 135 // header. Do not defer redirects on main frame loads. |
136 if (!async) { | 136 if (!async) { |
137 // Cancel on deferred synchronous requests. Those will | 137 // Cancel on deferred synchronous requests. Those will |
138 // indefinitely hang up a renderer process. | 138 // indefinitely hang up a renderer process. |
139 prerender_contents->Destroy(FINAL_STATUS_BAD_DEFERRED_REDIRECT); | 139 prerender_contents->Destroy(FINAL_STATUS_BAD_DEFERRED_REDIRECT); |
140 cancel = true; | 140 cancel = true; |
141 } else { | 141 } else { |
142 // Defer the redirect until the prerender is used or canceled. | 142 // Defer the redirect until the prerender is used or canceled. |
143 prerender_contents->AddResourceThrottle(throttle); | 143 prerender_contents->AddResourceThrottle(throttle); |
(...skipping 14 matching lines...) Expand all Loading... |
158 if (g_prerender_contents_for_testing) | 158 if (g_prerender_contents_for_testing) |
159 return g_prerender_contents_for_testing; | 159 return g_prerender_contents_for_testing; |
160 content::RenderFrameHost* rfh = content::RenderFrameHost::FromID( | 160 content::RenderFrameHost* rfh = content::RenderFrameHost::FromID( |
161 render_process_id, render_frame_id); | 161 render_process_id, render_frame_id); |
162 content::WebContents* web_contents = | 162 content::WebContents* web_contents = |
163 content::WebContents::FromRenderFrameHost(rfh); | 163 content::WebContents::FromRenderFrameHost(rfh); |
164 return PrerenderContents::FromWebContents(web_contents); | 164 return PrerenderContents::FromWebContents(web_contents); |
165 } | 165 } |
166 | 166 |
167 } // namespace prerender | 167 } // namespace prerender |
OLD | NEW |