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

Side by Side Diff: chrome/browser/renderer_host/sync_resource_handler.cc

Issue 5874002: Create a ResourceMessageFilter to filter resource related IPCs. This gets ri... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 10 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 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/renderer_host/sync_resource_handler.h" 5 #include "chrome/browser/renderer_host/sync_resource_handler.h"
6 6
7 #include "base/logging.h" 7 #include "base/logging.h"
8 #include "chrome/browser/debugger/devtools_netlog_observer.h" 8 #include "chrome/browser/debugger/devtools_netlog_observer.h"
9 #include "chrome/browser/net/load_timing_observer.h" 9 #include "chrome/browser/net/load_timing_observer.h"
10 #include "chrome/browser/renderer_host/global_request_id.h" 10 #include "chrome/browser/renderer_host/global_request_id.h"
11 #include "chrome/browser/renderer_host/resource_dispatcher_host.h"
12 #include "chrome/browser/renderer_host/resource_message_filter.h"
11 #include "chrome/common/render_messages.h" 13 #include "chrome/common/render_messages.h"
12 #include "net/base/io_buffer.h" 14 #include "net/base/io_buffer.h"
13 #include "net/http/http_response_headers.h" 15 #include "net/http/http_response_headers.h"
14 16
15 SyncResourceHandler::SyncResourceHandler( 17 SyncResourceHandler::SyncResourceHandler(
16 ResourceDispatcherHost::Receiver* receiver, 18 ResourceMessageFilter* filter,
17 int process_id,
18 const GURL& url, 19 const GURL& url,
19 IPC::Message* result_message, 20 IPC::Message* result_message,
20 ResourceDispatcherHost* resource_dispatcher_host) 21 ResourceDispatcherHost* resource_dispatcher_host)
21 : read_buffer_(new net::IOBuffer(kReadBufSize)), 22 : read_buffer_(new net::IOBuffer(kReadBufSize)),
22 receiver_(receiver), 23 filter_(filter),
23 process_id_(process_id),
24 result_message_(result_message), 24 result_message_(result_message),
25 rdh_(resource_dispatcher_host) { 25 rdh_(resource_dispatcher_host) {
26 result_.final_url = url; 26 result_.final_url = url;
27 } 27 }
28 28
29 SyncResourceHandler::~SyncResourceHandler() { 29 SyncResourceHandler::~SyncResourceHandler() {
30 } 30 }
31 31
32 bool SyncResourceHandler::OnUploadProgress(int request_id, 32 bool SyncResourceHandler::OnUploadProgress(int request_id,
33 uint64 position, 33 uint64 position,
34 uint64 size) { 34 uint64 size) {
35 return true; 35 return true;
36 } 36 }
37 37
38 bool SyncResourceHandler::OnRequestRedirected(int request_id, 38 bool SyncResourceHandler::OnRequestRedirected(int request_id,
39 const GURL& new_url, 39 const GURL& new_url,
40 ResourceResponse* response, 40 ResourceResponse* response,
41 bool* defer) { 41 bool* defer) {
42 net::URLRequest* request = rdh_->GetURLRequest( 42 net::URLRequest* request = rdh_->GetURLRequest(
43 GlobalRequestID(process_id_, request_id)); 43 GlobalRequestID(filter_->child_id(), request_id));
44 LoadTimingObserver::PopulateTimingInfo(request, response); 44 LoadTimingObserver::PopulateTimingInfo(request, response);
45 DevToolsNetLogObserver::PopulateResponseInfo(request, response); 45 DevToolsNetLogObserver::PopulateResponseInfo(request, response);
46 // TODO(darin): It would be much better if this could live in WebCore, but 46 // TODO(darin): It would be much better if this could live in WebCore, but
47 // doing so requires API changes at all levels. Similar code exists in 47 // doing so requires API changes at all levels. Similar code exists in
48 // WebCore/platform/network/cf/ResourceHandleCFNet.cpp :-( 48 // WebCore/platform/network/cf/ResourceHandleCFNet.cpp :-(
49 if (new_url.GetOrigin() != result_.final_url.GetOrigin()) { 49 if (new_url.GetOrigin() != result_.final_url.GetOrigin()) {
50 LOG(ERROR) << "Cross origin redirect denied"; 50 LOG(ERROR) << "Cross origin redirect denied";
51 return false; 51 return false;
52 } 52 }
53 result_.final_url = new_url; 53 result_.final_url = new_url;
54 return true; 54 return true;
55 } 55 }
56 56
57 bool SyncResourceHandler::OnResponseStarted(int request_id, 57 bool SyncResourceHandler::OnResponseStarted(int request_id,
58 ResourceResponse* response) { 58 ResourceResponse* response) {
59 net::URLRequest* request = rdh_->GetURLRequest( 59 net::URLRequest* request = rdh_->GetURLRequest(
60 GlobalRequestID(process_id_, request_id)); 60 GlobalRequestID(filter_->child_id(), request_id));
61 LoadTimingObserver::PopulateTimingInfo(request, response); 61 LoadTimingObserver::PopulateTimingInfo(request, response);
62 DevToolsNetLogObserver::PopulateResponseInfo(request, response); 62 DevToolsNetLogObserver::PopulateResponseInfo(request, response);
63 63
64 // We don't care about copying the status here. 64 // We don't care about copying the status here.
65 result_.headers = response->response_head.headers; 65 result_.headers = response->response_head.headers;
66 result_.mime_type = response->response_head.mime_type; 66 result_.mime_type = response->response_head.mime_type;
67 result_.charset = response->response_head.charset; 67 result_.charset = response->response_head.charset;
68 result_.download_file_path = response->response_head.download_file_path; 68 result_.download_file_path = response->response_head.download_file_path;
69 result_.request_time = response->response_head.request_time; 69 result_.request_time = response->response_head.request_time;
70 result_.response_time = response->response_head.response_time; 70 result_.response_time = response->response_head.response_time;
(...skipping 25 matching lines...) Expand all
96 return true; 96 return true;
97 } 97 }
98 98
99 bool SyncResourceHandler::OnResponseCompleted( 99 bool SyncResourceHandler::OnResponseCompleted(
100 int request_id, 100 int request_id,
101 const URLRequestStatus& status, 101 const URLRequestStatus& status,
102 const std::string& security_info) { 102 const std::string& security_info) {
103 result_.status = status; 103 result_.status = status;
104 104
105 ViewHostMsg_SyncLoad::WriteReplyParams(result_message_, result_); 105 ViewHostMsg_SyncLoad::WriteReplyParams(result_message_, result_);
106 receiver_->Send(result_message_); 106 filter_->Send(result_message_);
107 result_message_ = NULL; 107 result_message_ = NULL;
108 return true; 108 return true;
109 } 109 }
110 110
111 void SyncResourceHandler::OnRequestClosed() { 111 void SyncResourceHandler::OnRequestClosed() {
112 if (!result_message_) 112 if (!result_message_)
113 return; 113 return;
114 114
115 result_message_->set_reply_error(); 115 result_message_->set_reply_error();
116 receiver_->Send(result_message_); 116 filter_->Send(result_message_);
117 receiver_ = NULL; // net::URLRequest is gone, and perhaps also the receiver.
118 } 117 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698