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 "net/url_request/url_request_simple_job.h" | 5 #include "net/url_request/url_request_simple_job.h" |
6 | 6 |
7 #include <vector> | 7 #include <vector> |
8 | 8 |
9 #include "base/bind.h" | 9 #include "base/bind.h" |
10 #include "base/compiler_specific.h" | 10 #include "base/compiler_specific.h" |
11 #include "base/memory/ref_counted_memory.h" | 11 #include "base/memory/ref_counted_memory.h" |
12 #include "base/message_loop/message_loop.h" | 12 #include "base/message_loop/message_loop.h" |
13 #include "base/profiler/scoped_tracker.h" | |
14 #include "base/threading/worker_pool.h" | 13 #include "base/threading/worker_pool.h" |
15 #include "net/base/io_buffer.h" | 14 #include "net/base/io_buffer.h" |
16 #include "net/base/net_errors.h" | 15 #include "net/base/net_errors.h" |
17 #include "net/http/http_request_headers.h" | 16 #include "net/http/http_request_headers.h" |
18 #include "net/http/http_util.h" | 17 #include "net/http/http_util.h" |
19 #include "net/url_request/url_request_status.h" | 18 #include "net/url_request/url_request_status.h" |
20 | 19 |
21 namespace net { | 20 namespace net { |
22 | 21 |
23 namespace { | 22 namespace { |
24 | 23 |
25 void CopyData(const scoped_refptr<IOBuffer>& buf, | 24 void CopyData(const scoped_refptr<IOBuffer>& buf, |
26 int buf_size, | 25 int buf_size, |
27 const scoped_refptr<base::RefCountedMemory>& data, | 26 const scoped_refptr<base::RefCountedMemory>& data, |
28 int64 data_offset) { | 27 int64 data_offset) { |
29 // TODO(vadimt): Remove ScopedTracker below once crbug.com/422489 is fixed. | |
30 tracked_objects::ScopedTracker tracking_profile( | |
31 FROM_HERE_WITH_EXPLICIT_FUNCTION("422489 CopyData")); | |
32 | |
33 memcpy(buf->data(), data->front() + data_offset, buf_size); | 28 memcpy(buf->data(), data->front() + data_offset, buf_size); |
34 } | 29 } |
35 | 30 |
36 } // namespace | 31 } // namespace |
37 | 32 |
38 URLRequestSimpleJob::URLRequestSimpleJob(URLRequest* request, | 33 URLRequestSimpleJob::URLRequestSimpleJob(URLRequest* request, |
39 NetworkDelegate* network_delegate) | 34 NetworkDelegate* network_delegate) |
40 : URLRangeRequestJob(request, network_delegate), | 35 : URLRangeRequestJob(request, network_delegate), |
41 next_data_offset_(0), | 36 next_data_offset_(0), |
42 task_runner_(base::WorkerPool::GetTaskRunner(false)), | 37 task_runner_(base::WorkerPool::GetTaskRunner(false)), |
(...skipping 15 matching lines...) Expand all Loading... |
58 | 53 |
59 bool URLRequestSimpleJob::GetCharset(std::string* charset) { | 54 bool URLRequestSimpleJob::GetCharset(std::string* charset) { |
60 *charset = charset_; | 55 *charset = charset_; |
61 return true; | 56 return true; |
62 } | 57 } |
63 | 58 |
64 URLRequestSimpleJob::~URLRequestSimpleJob() {} | 59 URLRequestSimpleJob::~URLRequestSimpleJob() {} |
65 | 60 |
66 bool URLRequestSimpleJob::ReadRawData(IOBuffer* buf, int buf_size, | 61 bool URLRequestSimpleJob::ReadRawData(IOBuffer* buf, int buf_size, |
67 int* bytes_read) { | 62 int* bytes_read) { |
68 // TODO(vadimt): Remove ScopedTracker below once crbug.com/422489 is fixed. | |
69 tracked_objects::ScopedTracker tracking_profile( | |
70 FROM_HERE_WITH_EXPLICIT_FUNCTION( | |
71 "422489 URLRequestSimpleJob::ReadRawData")); | |
72 | |
73 DCHECK(bytes_read); | 63 DCHECK(bytes_read); |
74 buf_size = static_cast<int>( | 64 buf_size = static_cast<int>( |
75 std::min(static_cast<int64>(buf_size), | 65 std::min(static_cast<int64>(buf_size), |
76 byte_range_.last_byte_position() - next_data_offset_ + 1)); | 66 byte_range_.last_byte_position() - next_data_offset_ + 1)); |
77 DCHECK_GE(buf_size, 0); | 67 DCHECK_GE(buf_size, 0); |
78 if (buf_size == 0) { | 68 if (buf_size == 0) { |
79 *bytes_read = 0; | 69 *bytes_read = 0; |
80 return true; | 70 return true; |
81 } | 71 } |
82 | 72 |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
117 int result = GetData(mime_type, charset, &str_data->data(), callback); | 107 int result = GetData(mime_type, charset, &str_data->data(), callback); |
118 *data = str_data; | 108 *data = str_data; |
119 return result; | 109 return result; |
120 } | 110 } |
121 | 111 |
122 void URLRequestSimpleJob::StartAsync() { | 112 void URLRequestSimpleJob::StartAsync() { |
123 if (!request_) | 113 if (!request_) |
124 return; | 114 return; |
125 | 115 |
126 if (ranges().size() > 1) { | 116 if (ranges().size() > 1) { |
127 // TODO(vadimt): Remove ScopedTracker below once crbug.com/422489 is fixed. | |
128 tracked_objects::ScopedTracker tracking_profile( | |
129 FROM_HERE_WITH_EXPLICIT_FUNCTION( | |
130 "422489 URLRequestSimpleJob::StartAsync 1")); | |
131 | |
132 NotifyDone(URLRequestStatus(URLRequestStatus::FAILED, | 117 NotifyDone(URLRequestStatus(URLRequestStatus::FAILED, |
133 ERR_REQUEST_RANGE_NOT_SATISFIABLE)); | 118 ERR_REQUEST_RANGE_NOT_SATISFIABLE)); |
134 return; | 119 return; |
135 } | 120 } |
136 | 121 |
137 if (!ranges().empty() && range_parse_result() == OK) | 122 if (!ranges().empty() && range_parse_result() == OK) |
138 byte_range_ = ranges().front(); | 123 byte_range_ = ranges().front(); |
139 | 124 |
140 int result; | 125 const int result = |
141 { | 126 GetRefCountedData(&mime_type_, &charset_, &data_, |
142 // TODO(vadimt): Remove ScopedTracker below once crbug.com/422489 is fixed. | 127 base::Bind(&URLRequestSimpleJob::OnGetDataCompleted, |
143 // Remove the block and assign 'result' in its declaration. | 128 weak_factory_.GetWeakPtr())); |
144 tracked_objects::ScopedTracker tracking_profile( | |
145 FROM_HERE_WITH_EXPLICIT_FUNCTION( | |
146 "422489 URLRequestSimpleJob::StartAsync 2")); | |
147 | 129 |
148 result = | 130 if (result != ERR_IO_PENDING) |
149 GetRefCountedData(&mime_type_, &charset_, &data_, | |
150 base::Bind(&URLRequestSimpleJob::OnGetDataCompleted, | |
151 weak_factory_.GetWeakPtr())); | |
152 } | |
153 | |
154 if (result != ERR_IO_PENDING) { | |
155 // TODO(vadimt): Remove ScopedTracker below once crbug.com/422489 is fixed. | |
156 tracked_objects::ScopedTracker tracking_profile( | |
157 FROM_HERE_WITH_EXPLICIT_FUNCTION( | |
158 "422489 URLRequestSimpleJob::StartAsync 3")); | |
159 | |
160 OnGetDataCompleted(result); | 131 OnGetDataCompleted(result); |
161 } | |
162 } | 132 } |
163 | 133 |
164 void URLRequestSimpleJob::OnGetDataCompleted(int result) { | 134 void URLRequestSimpleJob::OnGetDataCompleted(int result) { |
165 // TODO(vadimt): Remove ScopedTracker below once crbug.com/422489 is fixed. | |
166 tracked_objects::ScopedTracker tracking_profile( | |
167 FROM_HERE_WITH_EXPLICIT_FUNCTION( | |
168 "422489 URLRequestSimpleJob::OnGetDataCompleted")); | |
169 | |
170 if (result == OK) { | 135 if (result == OK) { |
171 // Notify that the headers are complete | 136 // Notify that the headers are complete |
172 if (!byte_range_.ComputeBounds(data_->size())) { | 137 if (!byte_range_.ComputeBounds(data_->size())) { |
173 NotifyDone(URLRequestStatus(URLRequestStatus::FAILED, | 138 NotifyDone(URLRequestStatus(URLRequestStatus::FAILED, |
174 ERR_REQUEST_RANGE_NOT_SATISFIABLE)); | 139 ERR_REQUEST_RANGE_NOT_SATISFIABLE)); |
175 return; | 140 return; |
176 } | 141 } |
177 | 142 |
178 next_data_offset_ = byte_range_.first_byte_position(); | 143 next_data_offset_ = byte_range_.first_byte_position(); |
179 set_expected_content_size(byte_range_.last_byte_position() - | 144 set_expected_content_size(byte_range_.last_byte_position() - |
180 next_data_offset_ + 1); | 145 next_data_offset_ + 1); |
181 NotifyHeadersComplete(); | 146 NotifyHeadersComplete(); |
182 } else { | 147 } else { |
183 NotifyStartError(URLRequestStatus(URLRequestStatus::FAILED, result)); | 148 NotifyStartError(URLRequestStatus(URLRequestStatus::FAILED, result)); |
184 } | 149 } |
185 } | 150 } |
186 | 151 |
187 } // namespace net | 152 } // namespace net |
OLD | NEW |