OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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/automation/url_request_automation_job.h" | 5 #include "chrome/browser/automation/url_request_automation_job.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/compiler_specific.h" | 8 #include "base/compiler_specific.h" |
9 #include "base/message_loop.h" | 9 #include "base/message_loop.h" |
10 #include "base/time.h" | 10 #include "base/time.h" |
11 #include "chrome/browser/automation/automation_resource_message_filter.h" | 11 #include "chrome/browser/automation/automation_resource_message_filter.h" |
12 #include "chrome/common/automation_messages.h" | 12 #include "chrome/common/automation_messages.h" |
13 #include "content/browser/renderer_host/resource_dispatcher_host.h" | |
14 #include "content/browser/renderer_host/resource_dispatcher_host_request_info.h" | |
15 #include "content/public/browser/browser_thread.h" | 13 #include "content/public/browser/browser_thread.h" |
16 #include "content/public/browser/render_view_host.h" | 14 #include "content/public/browser/render_view_host.h" |
| 15 #include "content/public/browser/resource_request_info.h" |
17 #include "net/base/cookie_monster.h" | 16 #include "net/base/cookie_monster.h" |
18 #include "net/base/host_port_pair.h" | 17 #include "net/base/host_port_pair.h" |
19 #include "net/base/io_buffer.h" | 18 #include "net/base/io_buffer.h" |
20 #include "net/base/net_errors.h" | 19 #include "net/base/net_errors.h" |
21 #include "net/http/http_request_headers.h" | 20 #include "net/http/http_request_headers.h" |
22 #include "net/http/http_response_headers.h" | 21 #include "net/http/http_response_headers.h" |
23 #include "net/http/http_util.h" | 22 #include "net/http/http_util.h" |
24 #include "net/url_request/url_request_context.h" | 23 #include "net/url_request/url_request_context.h" |
25 | 24 |
26 using base::Time; | 25 using base::Time; |
27 using base::TimeDelta; | 26 using base::TimeDelta; |
28 using content::BrowserThread; | 27 using content::BrowserThread; |
| 28 using content::ResourceRequestInfo; |
29 | 29 |
30 // The list of filtered headers that are removed from requests sent via | 30 // The list of filtered headers that are removed from requests sent via |
31 // StartAsync(). These must be lower case. | 31 // StartAsync(). These must be lower case. |
32 static const char* const kFilteredHeaderStrings[] = { | 32 static const char* const kFilteredHeaderStrings[] = { |
33 "connection", | 33 "connection", |
34 "cookie", | 34 "cookie", |
35 "expect", | 35 "expect", |
36 "max-forwards", | 36 "max-forwards", |
37 "proxy-authorization", | 37 "proxy-authorization", |
38 "referer", | 38 "referer", |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
93 } | 93 } |
94 | 94 |
95 net::URLRequestJob* URLRequestAutomationJob::Factory( | 95 net::URLRequestJob* URLRequestAutomationJob::Factory( |
96 net::URLRequest* request, | 96 net::URLRequest* request, |
97 const std::string& scheme) { | 97 const std::string& scheme) { |
98 bool scheme_is_http = request->url().SchemeIs("http"); | 98 bool scheme_is_http = request->url().SchemeIs("http"); |
99 bool scheme_is_https = request->url().SchemeIs("https"); | 99 bool scheme_is_https = request->url().SchemeIs("https"); |
100 | 100 |
101 // Returning null here just means that the built-in handler will be used. | 101 // Returning null here just means that the built-in handler will be used. |
102 if (scheme_is_http || scheme_is_https) { | 102 if (scheme_is_http || scheme_is_https) { |
103 ResourceDispatcherHostRequestInfo* request_info = | 103 const ResourceRequestInfo* info = ResourceRequestInfo::ForRequest(request); |
104 ResourceDispatcherHost::InfoForRequest(request); | 104 if (info) { |
105 if (request_info) { | 105 int child_id = info->GetChildID(); |
106 int child_id = request_info->child_id(); | 106 int route_id = info->GetRouteID(); |
107 int route_id = request_info->route_id(); | |
108 AutomationResourceMessageFilter::AutomationDetails details; | 107 AutomationResourceMessageFilter::AutomationDetails details; |
109 if (AutomationResourceMessageFilter::LookupRegisteredRenderView( | 108 if (AutomationResourceMessageFilter::LookupRegisteredRenderView( |
110 child_id, route_id, &details)) { | 109 child_id, route_id, &details)) { |
111 URLRequestAutomationJob* job = new URLRequestAutomationJob(request, | 110 URLRequestAutomationJob* job = new URLRequestAutomationJob(request, |
112 details.tab_handle, request_info->request_id(), details.filter, | 111 details.tab_handle, info->GetRequestID(), details.filter, |
113 details.is_pending_render_view); | 112 details.is_pending_render_view); |
114 return job; | 113 return job; |
115 } | 114 } |
116 } | 115 } |
117 | 116 |
118 if (scheme_is_http && old_http_factory_) | 117 if (scheme_is_http && old_http_factory_) |
119 return old_http_factory_(request, scheme); | 118 return old_http_factory_(request, scheme); |
120 else if (scheme_is_https && old_https_factory_) | 119 else if (scheme_is_https && old_https_factory_) |
121 return old_https_factory_(request, scheme); | 120 return old_https_factory_(request, scheme); |
122 } | 121 } |
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
227 *http_status_code = redirect_status_; | 226 *http_status_code = redirect_status_; |
228 *location = GURL(redirect_url_); | 227 *location = GURL(redirect_url_); |
229 return true; | 228 return true; |
230 } | 229 } |
231 | 230 |
232 uint64 URLRequestAutomationJob::GetUploadProgress() const { | 231 uint64 URLRequestAutomationJob::GetUploadProgress() const { |
233 if (request_ && request_->status().is_success()) { | 232 if (request_ && request_->status().is_success()) { |
234 // We don't support incremental progress notifications in ChromeFrame. When | 233 // We don't support incremental progress notifications in ChromeFrame. When |
235 // we receive a response for the POST request from Chromeframe, it means | 234 // we receive a response for the POST request from Chromeframe, it means |
236 // that the upload is fully complete. | 235 // that the upload is fully complete. |
237 ResourceDispatcherHostRequestInfo* request_info = | 236 const ResourceRequestInfo* info = ResourceRequestInfo::ForRequest(request_); |
238 ResourceDispatcherHost::InfoForRequest(request_); | 237 if (info) { |
239 if (request_info) { | 238 return info->GetUploadSize(); |
240 return request_info->upload_size(); | |
241 } | 239 } |
242 } | 240 } |
243 return 0; | 241 return 0; |
244 } | 242 } |
245 | 243 |
246 net::HostPortPair URLRequestAutomationJob::GetSocketAddress() const { | 244 net::HostPortPair URLRequestAutomationJob::GetSocketAddress() const { |
247 return socket_address_; | 245 return socket_address_; |
248 } | 246 } |
249 | 247 |
250 bool URLRequestAutomationJob::MayFilterMessage(const IPC::Message& message, | 248 bool URLRequestAutomationJob::MayFilterMessage(const IPC::Message& message, |
(...skipping 188 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
439 | 437 |
440 // The referrer header must be suppressed if the preceding URL was | 438 // The referrer header must be suppressed if the preceding URL was |
441 // a secure one and the new one is not. | 439 // a secure one and the new one is not. |
442 if (referrer.SchemeIsSecure() && !request_->url().SchemeIsSecure()) { | 440 if (referrer.SchemeIsSecure() && !request_->url().SchemeIsSecure()) { |
443 DVLOG(1) << "Suppressing referrer header since going from secure to " | 441 DVLOG(1) << "Suppressing referrer header since going from secure to " |
444 "non-secure"; | 442 "non-secure"; |
445 referrer = GURL(); | 443 referrer = GURL(); |
446 } | 444 } |
447 | 445 |
448 // Get the resource type (main_frame/script/image/stylesheet etc. | 446 // Get the resource type (main_frame/script/image/stylesheet etc. |
449 ResourceDispatcherHostRequestInfo* request_info = | 447 const ResourceRequestInfo* info = ResourceRequestInfo::ForRequest(request_); |
450 ResourceDispatcherHost::InfoForRequest(request_); | |
451 ResourceType::Type resource_type = ResourceType::MAIN_FRAME; | 448 ResourceType::Type resource_type = ResourceType::MAIN_FRAME; |
452 if (request_info) { | 449 if (info) { |
453 resource_type = request_info->resource_type(); | 450 resource_type = info->GetResourceType(); |
454 } | 451 } |
455 | 452 |
456 // Ask automation to start this request. | 453 // Ask automation to start this request. |
457 AutomationURLRequest automation_request; | 454 AutomationURLRequest automation_request; |
458 automation_request.url = request_->url().spec(); | 455 automation_request.url = request_->url().spec(); |
459 automation_request.method = request_->method(); | 456 automation_request.method = request_->method(); |
460 automation_request.referrer = referrer.spec(); | 457 automation_request.referrer = referrer.spec(); |
461 automation_request.extra_request_headers = new_request_headers.ToString(); | 458 automation_request.extra_request_headers = new_request_headers.ToString(); |
462 automation_request.upload_data =request_->get_upload(); | 459 automation_request.upload_data =request_->get_upload(); |
463 automation_request.resource_type = resource_type; | 460 automation_request.resource_type = resource_type; |
(...skipping 25 matching lines...) Expand all Loading... |
489 if (!is_done()) { | 486 if (!is_done()) { |
490 NotifyDone(request_status_); | 487 NotifyDone(request_status_); |
491 } | 488 } |
492 // Reset any pending reads. | 489 // Reset any pending reads. |
493 if (pending_buf_) { | 490 if (pending_buf_) { |
494 pending_buf_ = NULL; | 491 pending_buf_ = NULL; |
495 pending_buf_size_ = 0; | 492 pending_buf_size_ = 0; |
496 NotifyReadComplete(0); | 493 NotifyReadComplete(0); |
497 } | 494 } |
498 } | 495 } |
OLD | NEW |