| 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 "content/browser/renderer_host/sync_resource_handler.h" | 5 #include "content/browser/renderer_host/sync_resource_handler.h" |
| 6 | 6 |
| 7 #include "base/logging.h" | 7 #include "base/logging.h" |
| 8 #include "content/browser/debugger/devtools_netlog_observer.h" | 8 #include "content/browser/debugger/devtools_netlog_observer.h" |
| 9 #include "content/browser/renderer_host/resource_dispatcher_host_impl.h" | 9 #include "content/browser/renderer_host/resource_dispatcher_host_impl.h" |
| 10 #include "content/browser/renderer_host/resource_message_filter.h" | 10 #include "content/browser/renderer_host/resource_message_filter.h" |
| 11 #include "content/common/resource_messages.h" | 11 #include "content/common/resource_messages.h" |
| 12 #include "content/public/browser/global_request_id.h" | 12 #include "content/public/browser/global_request_id.h" |
| 13 #include "content/public/browser/resource_dispatcher_host_delegate.h" | 13 #include "content/public/browser/resource_dispatcher_host_delegate.h" |
| 14 #include "net/base/io_buffer.h" | 14 #include "net/base/io_buffer.h" |
| 15 #include "net/http/http_response_headers.h" | 15 #include "net/http/http_response_headers.h" |
| 16 | 16 |
| 17 namespace content { | 17 namespace content { |
| 18 | 18 |
| 19 SyncResourceHandler::SyncResourceHandler( | 19 SyncResourceHandler::SyncResourceHandler( |
| 20 ResourceMessageFilter* filter, | 20 ResourceMessageFilter* filter, |
| 21 const GURL& url, | 21 net::URLRequest* request, |
| 22 IPC::Message* result_message, | 22 IPC::Message* result_message, |
| 23 ResourceDispatcherHostImpl* resource_dispatcher_host) | 23 ResourceDispatcherHostImpl* resource_dispatcher_host) |
| 24 : read_buffer_(new net::IOBuffer(kReadBufSize)), | 24 : read_buffer_(new net::IOBuffer(kReadBufSize)), |
| 25 filter_(filter), | 25 filter_(filter), |
| 26 request_(request), |
| 26 result_message_(result_message), | 27 result_message_(result_message), |
| 27 rdh_(resource_dispatcher_host) { | 28 rdh_(resource_dispatcher_host) { |
| 28 result_.final_url = url; | 29 result_.final_url = request_->url(); |
| 29 } | 30 } |
| 30 | 31 |
| 31 SyncResourceHandler::~SyncResourceHandler() { | 32 SyncResourceHandler::~SyncResourceHandler() { |
| 32 if (result_message_) { | 33 if (result_message_) { |
| 33 result_message_->set_reply_error(); | 34 result_message_->set_reply_error(); |
| 34 filter_->Send(result_message_); | 35 filter_->Send(result_message_); |
| 35 } | 36 } |
| 36 } | 37 } |
| 37 | 38 |
| 38 bool SyncResourceHandler::OnUploadProgress(int request_id, | 39 bool SyncResourceHandler::OnUploadProgress(int request_id, |
| 39 uint64 position, | 40 uint64 position, |
| 40 uint64 size) { | 41 uint64 size) { |
| 41 return true; | 42 return true; |
| 42 } | 43 } |
| 43 | 44 |
| 44 bool SyncResourceHandler::OnRequestRedirected( | 45 bool SyncResourceHandler::OnRequestRedirected( |
| 45 int request_id, | 46 int request_id, |
| 46 const GURL& new_url, | 47 const GURL& new_url, |
| 47 ResourceResponse* response, | 48 ResourceResponse* response, |
| 48 bool* defer) { | 49 bool* defer) { |
| 49 net::URLRequest* request = rdh_->GetURLRequest( | |
| 50 GlobalRequestID(filter_->child_id(), request_id)); | |
| 51 if (rdh_->delegate()) | 50 if (rdh_->delegate()) |
| 52 rdh_->delegate()->OnRequestRedirected(request, response); | 51 rdh_->delegate()->OnRequestRedirected(request_, response); |
| 53 | 52 |
| 54 DevToolsNetLogObserver::PopulateResponseInfo(request, response); | 53 DevToolsNetLogObserver::PopulateResponseInfo(request_, response); |
| 55 // TODO(darin): It would be much better if this could live in WebCore, but | 54 // TODO(darin): It would be much better if this could live in WebCore, but |
| 56 // doing so requires API changes at all levels. Similar code exists in | 55 // doing so requires API changes at all levels. Similar code exists in |
| 57 // WebCore/platform/network/cf/ResourceHandleCFNet.cpp :-( | 56 // WebCore/platform/network/cf/ResourceHandleCFNet.cpp :-( |
| 58 if (new_url.GetOrigin() != result_.final_url.GetOrigin()) { | 57 if (new_url.GetOrigin() != result_.final_url.GetOrigin()) { |
| 59 LOG(ERROR) << "Cross origin redirect denied"; | 58 LOG(ERROR) << "Cross origin redirect denied"; |
| 60 return false; | 59 return false; |
| 61 } | 60 } |
| 62 result_.final_url = new_url; | 61 result_.final_url = new_url; |
| 63 return true; | 62 return true; |
| 64 } | 63 } |
| 65 | 64 |
| 66 bool SyncResourceHandler::OnResponseStarted( | 65 bool SyncResourceHandler::OnResponseStarted( |
| 67 int request_id, | 66 int request_id, |
| 68 ResourceResponse* response, | 67 ResourceResponse* response, |
| 69 bool* defer) { | 68 bool* defer) { |
| 70 net::URLRequest* request = rdh_->GetURLRequest( | |
| 71 GlobalRequestID(filter_->child_id(), request_id)); | |
| 72 if (rdh_->delegate()) | 69 if (rdh_->delegate()) |
| 73 rdh_->delegate()->OnResponseStarted(request, response, filter_); | 70 rdh_->delegate()->OnResponseStarted(request_, response, filter_); |
| 74 | 71 |
| 75 DevToolsNetLogObserver::PopulateResponseInfo(request, response); | 72 DevToolsNetLogObserver::PopulateResponseInfo(request_, response); |
| 76 | 73 |
| 77 // We don't care about copying the status here. | 74 // We don't care about copying the status here. |
| 78 result_.headers = response->headers; | 75 result_.headers = response->headers; |
| 79 result_.mime_type = response->mime_type; | 76 result_.mime_type = response->mime_type; |
| 80 result_.charset = response->charset; | 77 result_.charset = response->charset; |
| 81 result_.download_file_path = response->download_file_path; | 78 result_.download_file_path = response->download_file_path; |
| 82 result_.request_time = response->request_time; | 79 result_.request_time = response->request_time; |
| 83 result_.response_time = response->response_time; | 80 result_.response_time = response->response_time; |
| 84 result_.connection_id = response->connection_id; | 81 result_.connection_id = response->connection_id; |
| 85 result_.connection_reused = response->connection_reused; | 82 result_.connection_reused = response->connection_reused; |
| (...skipping 23 matching lines...) Expand all Loading... |
| 109 result_.data.append(read_buffer_->data(), *bytes_read); | 106 result_.data.append(read_buffer_->data(), *bytes_read); |
| 110 return true; | 107 return true; |
| 111 } | 108 } |
| 112 | 109 |
| 113 bool SyncResourceHandler::OnResponseCompleted( | 110 bool SyncResourceHandler::OnResponseCompleted( |
| 114 int request_id, | 111 int request_id, |
| 115 const net::URLRequestStatus& status, | 112 const net::URLRequestStatus& status, |
| 116 const std::string& security_info) { | 113 const std::string& security_info) { |
| 117 result_.status = status; | 114 result_.status = status; |
| 118 | 115 |
| 119 net::URLRequest* request = rdh_->GetURLRequest( | |
| 120 GlobalRequestID(filter_->child_id(), request_id)); | |
| 121 result_.encoded_data_length = | 116 result_.encoded_data_length = |
| 122 DevToolsNetLogObserver::GetAndResetEncodedDataLength(request); | 117 DevToolsNetLogObserver::GetAndResetEncodedDataLength(request_); |
| 123 | 118 |
| 124 ResourceHostMsg_SyncLoad::WriteReplyParams(result_message_, result_); | 119 ResourceHostMsg_SyncLoad::WriteReplyParams(result_message_, result_); |
| 125 filter_->Send(result_message_); | 120 filter_->Send(result_message_); |
| 126 result_message_ = NULL; | 121 result_message_ = NULL; |
| 127 return true; | 122 return true; |
| 128 } | 123 } |
| 129 | 124 |
| 130 } // namespace content | 125 } // namespace content |
| OLD | NEW |