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

Side by Side Diff: content/browser/loader/sync_resource_handler.cc

Issue 2526983002: Refactor ResourceHandler API. (Closed)
Patch Set: Response to comments Created 3 years, 10 months 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
OLDNEW
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/loader/sync_resource_handler.h" 5 #include "content/browser/loader/sync_resource_handler.h"
6 6
7 #include "base/callback_helpers.h" 7 #include "base/callback_helpers.h"
8 #include "base/logging.h" 8 #include "base/logging.h"
9 #include "content/browser/loader/netlog_observer.h" 9 #include "content/browser/loader/netlog_observer.h"
10 #include "content/browser/loader/resource_controller.h"
10 #include "content/browser/loader/resource_dispatcher_host_impl.h" 11 #include "content/browser/loader/resource_dispatcher_host_impl.h"
11 #include "content/browser/loader/resource_request_info_impl.h" 12 #include "content/browser/loader/resource_request_info_impl.h"
12 #include "content/common/resource_messages.h" 13 #include "content/common/resource_messages.h"
13 #include "content/public/browser/resource_dispatcher_host_delegate.h" 14 #include "content/public/browser/resource_dispatcher_host_delegate.h"
14 #include "content/public/browser/resource_request_info.h" 15 #include "content/public/browser/resource_request_info.h"
15 #include "net/base/io_buffer.h" 16 #include "net/base/io_buffer.h"
16 #include "net/http/http_response_headers.h" 17 #include "net/http/http_response_headers.h"
17 #include "net/url_request/redirect_info.h" 18 #include "net/url_request/redirect_info.h"
18 19
19 namespace content { 20 namespace content {
20 21
21 SyncResourceHandler::SyncResourceHandler( 22 SyncResourceHandler::SyncResourceHandler(
22 net::URLRequest* request, 23 net::URLRequest* request,
23 const SyncLoadResultCallback& result_handler, 24 const SyncLoadResultCallback& result_handler,
24 ResourceDispatcherHostImpl* resource_dispatcher_host) 25 ResourceDispatcherHostImpl* resource_dispatcher_host)
25 : ResourceHandler(request), 26 : ResourceHandler(request),
26 read_buffer_(new net::IOBuffer(kReadBufSize)), 27 read_buffer_(new net::IOBuffer(kReadBufSize)),
27 result_handler_(result_handler), 28 result_handler_(result_handler),
28 rdh_(resource_dispatcher_host), 29 rdh_(resource_dispatcher_host),
29 total_transfer_size_(0) { 30 total_transfer_size_(0) {
30 result_.final_url = request->url(); 31 result_.final_url = request->url();
31 } 32 }
32 33
33 SyncResourceHandler::~SyncResourceHandler() { 34 SyncResourceHandler::~SyncResourceHandler() {
34 if (result_handler_) 35 if (result_handler_)
35 result_handler_.Run(nullptr); 36 result_handler_.Run(nullptr);
36 } 37 }
37 38
38 bool SyncResourceHandler::OnRequestRedirected( 39 void SyncResourceHandler::OnRequestRedirected(
39 const net::RedirectInfo& redirect_info, 40 const net::RedirectInfo& redirect_info,
40 ResourceResponse* response, 41 ResourceResponse* response,
41 bool* defer) { 42 std::unique_ptr<ResourceController> controller) {
42 if (rdh_->delegate()) { 43 if (rdh_->delegate()) {
43 rdh_->delegate()->OnRequestRedirected( 44 rdh_->delegate()->OnRequestRedirected(
44 redirect_info.new_url, request(), GetRequestInfo()->GetContext(), 45 redirect_info.new_url, request(), GetRequestInfo()->GetContext(),
45 response); 46 response);
46 } 47 }
47 48
48 NetLogObserver::PopulateResponseInfo(request(), response); 49 NetLogObserver::PopulateResponseInfo(request(), response);
49 // TODO(darin): It would be much better if this could live in WebCore, but 50 // TODO(darin): It would be much better if this could live in WebCore, but
50 // doing so requires API changes at all levels. Similar code exists in 51 // doing so requires API changes at all levels. Similar code exists in
51 // WebCore/platform/network/cf/ResourceHandleCFNet.cpp :-( 52 // WebCore/platform/network/cf/ResourceHandleCFNet.cpp :-(
52 if (redirect_info.new_url.GetOrigin() != result_.final_url.GetOrigin()) { 53 if (redirect_info.new_url.GetOrigin() != result_.final_url.GetOrigin()) {
53 LOG(ERROR) << "Cross origin redirect denied"; 54 LOG(ERROR) << "Cross origin redirect denied";
54 return false; 55 controller->Cancel();
56 return;
55 } 57 }
56 result_.final_url = redirect_info.new_url; 58 result_.final_url = redirect_info.new_url;
57 59
58 total_transfer_size_ += request()->GetTotalReceivedBytes(); 60 total_transfer_size_ += request()->GetTotalReceivedBytes();
59 return true; 61 controller->Resume();
60 } 62 }
61 63
62 bool SyncResourceHandler::OnResponseStarted( 64 void SyncResourceHandler::OnResponseStarted(
63 ResourceResponse* response, 65 ResourceResponse* response,
64 bool* defer) { 66 std::unique_ptr<ResourceController> controller) {
65 ResourceRequestInfoImpl* info = GetRequestInfo(); 67 ResourceRequestInfoImpl* info = GetRequestInfo();
66 DCHECK(info->requester_info()->IsRenderer()); 68 DCHECK(info->requester_info()->IsRenderer());
67 if (!info->requester_info()->filter()) 69 if (!info->requester_info()->filter()) {
68 return false; 70 controller->Cancel();
71 return;
72 }
69 73
70 if (rdh_->delegate()) { 74 if (rdh_->delegate()) {
71 rdh_->delegate()->OnResponseStarted(request(), info->GetContext(), 75 rdh_->delegate()->OnResponseStarted(request(), info->GetContext(),
72 response); 76 response);
73 } 77 }
74 78
75 NetLogObserver::PopulateResponseInfo(request(), response); 79 NetLogObserver::PopulateResponseInfo(request(), response);
76 80
77 // We don't care about copying the status here. 81 // We don't care about copying the status here.
78 result_.headers = response->head.headers; 82 result_.headers = response->head.headers;
79 result_.mime_type = response->head.mime_type; 83 result_.mime_type = response->head.mime_type;
80 result_.charset = response->head.charset; 84 result_.charset = response->head.charset;
81 result_.download_file_path = response->head.download_file_path; 85 result_.download_file_path = response->head.download_file_path;
82 result_.request_time = response->head.request_time; 86 result_.request_time = response->head.request_time;
83 result_.response_time = response->head.response_time; 87 result_.response_time = response->head.response_time;
84 result_.load_timing = response->head.load_timing; 88 result_.load_timing = response->head.load_timing;
85 result_.devtools_info = response->head.devtools_info; 89 result_.devtools_info = response->head.devtools_info;
86 return true; 90 controller->Resume();
87 } 91 }
88 92
89 bool SyncResourceHandler::OnWillStart(const GURL& url, bool* defer) { 93 void SyncResourceHandler::OnWillStart(
90 return true; 94 const GURL& url,
95 std::unique_ptr<ResourceController> controller) {
96 controller->Resume();
91 } 97 }
92 98
93 bool SyncResourceHandler::OnWillRead(scoped_refptr<net::IOBuffer>* buf, 99 bool SyncResourceHandler::OnWillRead(scoped_refptr<net::IOBuffer>* buf,
94 int* buf_size, 100 int* buf_size,
95 int min_size) { 101 int min_size) {
96 DCHECK(min_size == -1); 102 DCHECK(min_size == -1);
97 *buf = read_buffer_.get(); 103 *buf = read_buffer_.get();
98 *buf_size = kReadBufSize; 104 *buf_size = kReadBufSize;
99 return true; 105 return true;
100 } 106 }
101 107
102 bool SyncResourceHandler::OnReadCompleted(int bytes_read, bool* defer) { 108 void SyncResourceHandler::OnReadCompleted(
103 if (!bytes_read) 109 int bytes_read,
104 return true; 110 std::unique_ptr<ResourceController> controller) {
105 result_.data.append(read_buffer_->data(), bytes_read); 111 if (bytes_read)
106 return true; 112 result_.data.append(read_buffer_->data(), bytes_read);
113 controller->Resume();
107 } 114 }
108 115
109 void SyncResourceHandler::OnResponseCompleted( 116 void SyncResourceHandler::OnResponseCompleted(
110 const net::URLRequestStatus& status, 117 const net::URLRequestStatus& status,
111 bool* defer) { 118 std::unique_ptr<ResourceController> controller) {
112 result_.error_code = status.error(); 119 result_.error_code = status.error();
113 120
114 int total_transfer_size = request()->GetTotalReceivedBytes(); 121 int total_transfer_size = request()->GetTotalReceivedBytes();
115 result_.encoded_data_length = total_transfer_size_ + total_transfer_size; 122 result_.encoded_data_length = total_transfer_size_ + total_transfer_size;
116 result_.encoded_body_length = request()->GetRawBodyBytes(); 123 result_.encoded_body_length = request()->GetRawBodyBytes();
117 124
118 base::ResetAndReturn(&result_handler_).Run(&result_); 125 base::ResetAndReturn(&result_handler_).Run(&result_);
126
127 controller->Resume();
119 } 128 }
120 129
121 void SyncResourceHandler::OnDataDownloaded(int bytes_downloaded) { 130 void SyncResourceHandler::OnDataDownloaded(int bytes_downloaded) {
122 // Sync requests don't involve ResourceMsg_DataDownloaded messages 131 // Sync requests don't involve ResourceMsg_DataDownloaded messages
123 // being sent back to renderers as progress is made. 132 // being sent back to renderers as progress is made.
124 } 133 }
125 134
126 } // namespace content 135 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/loader/sync_resource_handler.h ('k') | content/browser/loader/test_resource_handler.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698