| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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/render_view_host.h" | 13 #include "content/browser/renderer_host/render_view_host.h" |
| 14 #include "content/browser/renderer_host/resource_dispatcher_host.h" | |
| 15 #include "content/browser/renderer_host/resource_dispatcher_host_request_info.h" | |
| 16 #include "content/public/browser/browser_thread.h" | 14 #include "content/public/browser/browser_thread.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->child_id(); |
| 106 int child_id = request_info->child_id(); | 106 int route_id = info->route_id(); |
| 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->request_id(), 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->upload_size(); |
| 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->resource_type(); |
| 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 |