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

Side by Side Diff: net/url_request/url_fetcher_core.cc

Issue 2599873002: Allow URLFetcher to be used from sequenced tasks. (Closed)
Patch Set: remove get() Created 3 years, 11 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
« no previous file with comments | « net/url_request/url_fetcher_core.h ('k') | net/url_request/url_fetcher_impl_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 "net/url_request/url_fetcher_core.h" 5 #include "net/url_request/url_fetcher_core.h"
6 6
7 #include <stdint.h> 7 #include <stdint.h>
8 #include <utility> 8 #include <utility>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
11 #include "base/logging.h" 11 #include "base/logging.h"
12 #include "base/metrics/histogram_macros.h" 12 #include "base/metrics/histogram_macros.h"
13 #include "base/profiler/scoped_tracker.h" 13 #include "base/profiler/scoped_tracker.h"
14 #include "base/sequenced_task_runner.h" 14 #include "base/sequenced_task_runner.h"
15 #include "base/single_thread_task_runner.h" 15 #include "base/single_thread_task_runner.h"
16 #include "base/stl_util.h" 16 #include "base/stl_util.h"
17 #include "base/threading/thread_task_runner_handle.h" 17 #include "base/threading/sequenced_task_runner_handle.h"
18 #include "base/tracked_objects.h" 18 #include "base/tracked_objects.h"
19 #include "net/base/elements_upload_data_stream.h" 19 #include "net/base/elements_upload_data_stream.h"
20 #include "net/base/io_buffer.h" 20 #include "net/base/io_buffer.h"
21 #include "net/base/load_flags.h" 21 #include "net/base/load_flags.h"
22 #include "net/base/net_errors.h" 22 #include "net/base/net_errors.h"
23 #include "net/base/request_priority.h" 23 #include "net/base/request_priority.h"
24 #include "net/base/upload_bytes_element_reader.h" 24 #include "net/base/upload_bytes_element_reader.h"
25 #include "net/base/upload_data_stream.h" 25 #include "net/base/upload_data_stream.h"
26 #include "net/base/upload_file_element_reader.h" 26 #include "net/base/upload_file_element_reader.h"
27 #include "net/http/http_response_headers.h" 27 #include "net/http/http_response_headers.h"
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
72 URLFetcherCore::g_registry = LAZY_INSTANCE_INITIALIZER; 72 URLFetcherCore::g_registry = LAZY_INSTANCE_INITIALIZER;
73 73
74 URLFetcherCore::URLFetcherCore(URLFetcher* fetcher, 74 URLFetcherCore::URLFetcherCore(URLFetcher* fetcher,
75 const GURL& original_url, 75 const GURL& original_url,
76 URLFetcher::RequestType request_type, 76 URLFetcher::RequestType request_type,
77 URLFetcherDelegate* d) 77 URLFetcherDelegate* d)
78 : fetcher_(fetcher), 78 : fetcher_(fetcher),
79 original_url_(original_url), 79 original_url_(original_url),
80 request_type_(request_type), 80 request_type_(request_type),
81 delegate_(d), 81 delegate_(d),
82 delegate_task_runner_(base::ThreadTaskRunnerHandle::Get()), 82 delegate_task_runner_(base::SequencedTaskRunnerHandle::Get()),
83 load_flags_(LOAD_NORMAL), 83 load_flags_(LOAD_NORMAL),
84 response_code_(URLFetcher::RESPONSE_CODE_INVALID), 84 response_code_(URLFetcher::RESPONSE_CODE_INVALID),
85 buffer_(new IOBuffer(kBufferSize)), 85 buffer_(new IOBuffer(kBufferSize)),
86 url_request_data_key_(NULL), 86 url_request_data_key_(NULL),
87 was_fetched_via_proxy_(false), 87 was_fetched_via_proxy_(false),
88 was_cached_(false), 88 was_cached_(false),
89 received_response_content_length_(0), 89 received_response_content_length_(0),
90 total_received_bytes_(0), 90 total_received_bytes_(0),
91 upload_content_set_(false), 91 upload_content_set_(false),
92 upload_range_offset_(0), 92 upload_range_offset_(0),
93 upload_range_length_(0), 93 upload_range_length_(0),
94 referrer_policy_( 94 referrer_policy_(
95 URLRequest::CLEAR_REFERRER_ON_TRANSITION_FROM_SECURE_TO_INSECURE), 95 URLRequest::CLEAR_REFERRER_ON_TRANSITION_FROM_SECURE_TO_INSECURE),
96 is_chunked_upload_(false), 96 is_chunked_upload_(false),
97 was_cancelled_(false), 97 was_cancelled_(false),
98 stop_on_redirect_(false), 98 stop_on_redirect_(false),
99 stopped_on_redirect_(false), 99 stopped_on_redirect_(false),
100 automatically_retry_on_5xx_(true), 100 automatically_retry_on_5xx_(true),
101 num_retries_on_5xx_(0), 101 num_retries_on_5xx_(0),
102 max_retries_on_5xx_(0), 102 max_retries_on_5xx_(0),
103 num_retries_on_network_changes_(0), 103 num_retries_on_network_changes_(0),
104 max_retries_on_network_changes_(0), 104 max_retries_on_network_changes_(0),
105 current_upload_bytes_(-1), 105 current_upload_bytes_(-1),
106 current_response_bytes_(0), 106 current_response_bytes_(0),
107 total_response_bytes_(-1) { 107 total_response_bytes_(-1) {
108 CHECK(original_url_.is_valid()); 108 CHECK(original_url_.is_valid());
109 } 109 }
110 110
111 void URLFetcherCore::Start() { 111 void URLFetcherCore::Start() {
112 DCHECK(delegate_task_runner_.get()); 112 DCHECK(delegate_task_runner_);
113 DCHECK(request_context_getter_.get()) << "We need an URLRequestContext!"; 113 DCHECK(request_context_getter_.get()) << "We need an URLRequestContext!";
114 if (network_task_runner_.get()) { 114 if (network_task_runner_.get()) {
115 DCHECK_EQ(network_task_runner_, 115 DCHECK_EQ(network_task_runner_,
116 request_context_getter_->GetNetworkTaskRunner()); 116 request_context_getter_->GetNetworkTaskRunner());
117 } else { 117 } else {
118 network_task_runner_ = request_context_getter_->GetNetworkTaskRunner(); 118 network_task_runner_ = request_context_getter_->GetNetworkTaskRunner();
119 } 119 }
120 DCHECK(network_task_runner_.get()) << "We need an IO task runner"; 120 DCHECK(network_task_runner_.get()) << "We need an IO task runner";
121 121
122 network_task_runner_->PostTask( 122 network_task_runner_->PostTask(
123 FROM_HERE, base::Bind(&URLFetcherCore::StartOnIOThread, this)); 123 FROM_HERE, base::Bind(&URLFetcherCore::StartOnIOThread, this));
124 } 124 }
125 125
126 void URLFetcherCore::Stop() { 126 void URLFetcherCore::Stop() {
127 if (delegate_task_runner_.get()) // May be NULL in tests. 127 if (delegate_task_runner_) // May be NULL in tests.
128 DCHECK(delegate_task_runner_->BelongsToCurrentThread()); 128 DCHECK(delegate_task_runner_->RunsTasksOnCurrentThread());
129 129
130 delegate_ = NULL; 130 delegate_ = NULL;
131 fetcher_ = NULL; 131 fetcher_ = NULL;
132 if (!network_task_runner_.get()) 132 if (!network_task_runner_.get())
133 return; 133 return;
134 if (network_task_runner_->RunsTasksOnCurrentThread()) { 134 if (network_task_runner_->RunsTasksOnCurrentThread()) {
135 CancelURLRequest(ERR_ABORTED); 135 CancelURLRequest(ERR_ABORTED);
136 } else { 136 } else {
137 network_task_runner_->PostTask( 137 network_task_runner_->PostTask(
138 FROM_HERE, 138 FROM_HERE,
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
197 // to ensure non-empty upload content as it is not yet supplied. 197 // to ensure non-empty upload content as it is not yet supplied.
198 DCHECK(!content_type.empty()); 198 DCHECK(!content_type.empty());
199 199
200 upload_content_type_ = content_type; 200 upload_content_type_ = content_type;
201 upload_content_.clear(); 201 upload_content_.clear();
202 is_chunked_upload_ = true; 202 is_chunked_upload_ = true;
203 } 203 }
204 204
205 void URLFetcherCore::AppendChunkToUpload(const std::string& content, 205 void URLFetcherCore::AppendChunkToUpload(const std::string& content,
206 bool is_last_chunk) { 206 bool is_last_chunk) {
207 DCHECK(delegate_task_runner_.get()); 207 DCHECK(delegate_task_runner_);
208 DCHECK(network_task_runner_.get()); 208 DCHECK(network_task_runner_.get());
209 DCHECK(is_chunked_upload_); 209 DCHECK(is_chunked_upload_);
210 network_task_runner_->PostTask( 210 network_task_runner_->PostTask(
211 FROM_HERE, 211 FROM_HERE,
212 base::Bind(&URLFetcherCore::CompleteAddingUploadDataChunk, this, content, 212 base::Bind(&URLFetcherCore::CompleteAddingUploadDataChunk, this, content,
213 is_last_chunk)); 213 is_last_chunk));
214 } 214 }
215 215
216 void URLFetcherCore::SetLoadFlags(int load_flags) { 216 void URLFetcherCore::SetLoadFlags(int load_flags) {
217 load_flags_ = load_flags; 217 load_flags_ = load_flags;
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
282 return backoff_delay_; 282 return backoff_delay_;
283 } 283 }
284 284
285 void URLFetcherCore::SetAutomaticallyRetryOnNetworkChanges(int max_retries) { 285 void URLFetcherCore::SetAutomaticallyRetryOnNetworkChanges(int max_retries) {
286 max_retries_on_network_changes_ = max_retries; 286 max_retries_on_network_changes_ = max_retries;
287 } 287 }
288 288
289 void URLFetcherCore::SaveResponseToFileAtPath( 289 void URLFetcherCore::SaveResponseToFileAtPath(
290 const base::FilePath& file_path, 290 const base::FilePath& file_path,
291 scoped_refptr<base::SequencedTaskRunner> file_task_runner) { 291 scoped_refptr<base::SequencedTaskRunner> file_task_runner) {
292 DCHECK(delegate_task_runner_->BelongsToCurrentThread()); 292 DCHECK(delegate_task_runner_->RunsTasksOnCurrentThread());
293 SaveResponseWithWriter(std::unique_ptr<URLFetcherResponseWriter>( 293 SaveResponseWithWriter(std::unique_ptr<URLFetcherResponseWriter>(
294 new URLFetcherFileWriter(file_task_runner, file_path))); 294 new URLFetcherFileWriter(file_task_runner, file_path)));
295 } 295 }
296 296
297 void URLFetcherCore::SaveResponseToTemporaryFile( 297 void URLFetcherCore::SaveResponseToTemporaryFile(
298 scoped_refptr<base::SequencedTaskRunner> file_task_runner) { 298 scoped_refptr<base::SequencedTaskRunner> file_task_runner) {
299 DCHECK(delegate_task_runner_->BelongsToCurrentThread()); 299 DCHECK(delegate_task_runner_->RunsTasksOnCurrentThread());
300 SaveResponseWithWriter(std::unique_ptr<URLFetcherResponseWriter>( 300 SaveResponseWithWriter(std::unique_ptr<URLFetcherResponseWriter>(
301 new URLFetcherFileWriter(file_task_runner, base::FilePath()))); 301 new URLFetcherFileWriter(file_task_runner, base::FilePath())));
302 } 302 }
303 303
304 void URLFetcherCore::SaveResponseWithWriter( 304 void URLFetcherCore::SaveResponseWithWriter(
305 std::unique_ptr<URLFetcherResponseWriter> response_writer) { 305 std::unique_ptr<URLFetcherResponseWriter> response_writer) {
306 DCHECK(delegate_task_runner_->BelongsToCurrentThread()); 306 DCHECK(delegate_task_runner_->RunsTasksOnCurrentThread());
307 response_writer_ = std::move(response_writer); 307 response_writer_ = std::move(response_writer);
308 } 308 }
309 309
310 HttpResponseHeaders* URLFetcherCore::GetResponseHeaders() const { 310 HttpResponseHeaders* URLFetcherCore::GetResponseHeaders() const {
311 return response_headers_.get(); 311 return response_headers_.get();
312 } 312 }
313 313
314 // TODO(panayiotis): socket_address_ is written in the IO thread, 314 // TODO(panayiotis): socket_address_ is written in the IO thread,
315 // if this is accessed in the UI thread, this could result in a race. 315 // if this is accessed in the UI thread, this could result in a race.
316 // Same for response_headers_ above and was_fetched_via_proxy_ below. 316 // Same for response_headers_ above and was_fetched_via_proxy_ below.
(...skipping 27 matching lines...) Expand all
344 344
345 const URLRequestStatus& URLFetcherCore::GetStatus() const { 345 const URLRequestStatus& URLFetcherCore::GetStatus() const {
346 return status_; 346 return status_;
347 } 347 }
348 348
349 int URLFetcherCore::GetResponseCode() const { 349 int URLFetcherCore::GetResponseCode() const {
350 return response_code_; 350 return response_code_;
351 } 351 }
352 352
353 void URLFetcherCore::ReceivedContentWasMalformed() { 353 void URLFetcherCore::ReceivedContentWasMalformed() {
354 DCHECK(delegate_task_runner_->BelongsToCurrentThread()); 354 DCHECK(delegate_task_runner_->RunsTasksOnCurrentThread());
355 if (network_task_runner_.get()) { 355 if (network_task_runner_.get()) {
356 network_task_runner_->PostTask( 356 network_task_runner_->PostTask(
357 FROM_HERE, base::Bind(&URLFetcherCore::NotifyMalformedContent, this)); 357 FROM_HERE, base::Bind(&URLFetcherCore::NotifyMalformedContent, this));
358 } 358 }
359 } 359 }
360 360
361 bool URLFetcherCore::GetResponseAsString( 361 bool URLFetcherCore::GetResponseAsString(
362 std::string* out_response_string) const { 362 std::string* out_response_string) const {
363 URLFetcherStringWriter* string_writer = 363 URLFetcherStringWriter* string_writer =
364 response_writer_ ? response_writer_->AsStringWriter() : NULL; 364 response_writer_ ? response_writer_->AsStringWriter() : NULL;
365 if (!string_writer) 365 if (!string_writer)
366 return false; 366 return false;
367 367
368 *out_response_string = string_writer->data(); 368 *out_response_string = string_writer->data();
369 UMA_HISTOGRAM_MEMORY_KB("UrlFetcher.StringResponseSize", 369 UMA_HISTOGRAM_MEMORY_KB("UrlFetcher.StringResponseSize",
370 (string_writer->data().length() / 1024)); 370 (string_writer->data().length() / 1024));
371 return true; 371 return true;
372 } 372 }
373 373
374 bool URLFetcherCore::GetResponseAsFilePath(bool take_ownership, 374 bool URLFetcherCore::GetResponseAsFilePath(bool take_ownership,
375 base::FilePath* out_response_path) { 375 base::FilePath* out_response_path) {
376 DCHECK(delegate_task_runner_->BelongsToCurrentThread()); 376 DCHECK(delegate_task_runner_->RunsTasksOnCurrentThread());
377 377
378 URLFetcherFileWriter* file_writer = 378 URLFetcherFileWriter* file_writer =
379 response_writer_ ? response_writer_->AsFileWriter() : NULL; 379 response_writer_ ? response_writer_->AsFileWriter() : NULL;
380 if (!file_writer) 380 if (!file_writer)
381 return false; 381 return false;
382 382
383 *out_response_path = file_writer->file_path(); 383 *out_response_path = file_writer->file_path();
384 384
385 if (take_ownership) { 385 if (take_ownership) {
386 // Intentionally calling a file_writer_ method directly without posting 386 // Intentionally calling a file_writer_ method directly without posting
(...skipping 276 matching lines...) Expand 10 before | Expand all | Expand 10 after
663 if (!original_url_throttler_entry_.get()) { 663 if (!original_url_throttler_entry_.get()) {
664 original_url_throttler_entry_ = 664 original_url_throttler_entry_ =
665 context->throttler_manager()->RegisterRequestUrl(original_url_); 665 context->throttler_manager()->RegisterRequestUrl(original_url_);
666 } 666 }
667 667
668 if (original_url_throttler_entry_.get()) { 668 if (original_url_throttler_entry_.get()) {
669 int64_t delay = 669 int64_t delay =
670 original_url_throttler_entry_->ReserveSendingTimeForNextRequest( 670 original_url_throttler_entry_->ReserveSendingTimeForNextRequest(
671 GetBackoffReleaseTime()); 671 GetBackoffReleaseTime());
672 if (delay != 0) { 672 if (delay != 0) {
673 base::ThreadTaskRunnerHandle::Get()->PostDelayedTask( 673 network_task_runner_->PostDelayedTask(
674 FROM_HERE, base::Bind(&URLFetcherCore::StartURLRequest, this), 674 FROM_HERE, base::Bind(&URLFetcherCore::StartURLRequest, this),
675 base::TimeDelta::FromMilliseconds(delay)); 675 base::TimeDelta::FromMilliseconds(delay));
676 return; 676 return;
677 } 677 }
678 } 678 }
679 } 679 }
680 680
681 StartURLRequest(); 681 StartURLRequest();
682 } 682 }
683 683
(...skipping 19 matching lines...) Expand all
703 // context. 703 // context.
704 request_context_getter_ = NULL; 704 request_context_getter_ = NULL;
705 initiator_.reset(); 705 initiator_.reset();
706 url_request_data_key_ = NULL; 706 url_request_data_key_ = NULL;
707 url_request_create_data_callback_.Reset(); 707 url_request_create_data_callback_.Reset();
708 was_cancelled_ = true; 708 was_cancelled_ = true;
709 } 709 }
710 710
711 void URLFetcherCore::OnCompletedURLRequest( 711 void URLFetcherCore::OnCompletedURLRequest(
712 base::TimeDelta backoff_delay) { 712 base::TimeDelta backoff_delay) {
713 DCHECK(delegate_task_runner_->BelongsToCurrentThread()); 713 DCHECK(delegate_task_runner_->RunsTasksOnCurrentThread());
714 714
715 // Save the status and backoff_delay so that delegates can read it. 715 // Save the status and backoff_delay so that delegates can read it.
716 if (delegate_) { 716 if (delegate_) {
717 backoff_delay_ = backoff_delay; 717 backoff_delay_ = backoff_delay;
718 InformDelegateFetchIsComplete(); 718 InformDelegateFetchIsComplete();
719 } 719 }
720 } 720 }
721 721
722 void URLFetcherCore::InformDelegateFetchIsComplete() { 722 void URLFetcherCore::InformDelegateFetchIsComplete() {
723 DCHECK(delegate_task_runner_->BelongsToCurrentThread()); 723 DCHECK(delegate_task_runner_->RunsTasksOnCurrentThread());
724 if (delegate_) 724 if (delegate_)
725 delegate_->OnURLFetchComplete(fetcher_); 725 delegate_->OnURLFetchComplete(fetcher_);
726 } 726 }
727 727
728 void URLFetcherCore::NotifyMalformedContent() { 728 void URLFetcherCore::NotifyMalformedContent() {
729 DCHECK(network_task_runner_->BelongsToCurrentThread()); 729 DCHECK(network_task_runner_->BelongsToCurrentThread());
730 if (url_throttler_entry_.get()) { 730 if (url_throttler_entry_.get()) {
731 int status_code = response_code_; 731 int status_code = response_code_;
732 if (status_code == URLFetcher::RESPONSE_CODE_INVALID) { 732 if (status_code == URLFetcher::RESPONSE_CODE_INVALID) {
733 // The status code will generally be known by the time clients 733 // The status code will generally be known by the time clients
(...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after
904 if (!is_chunked_upload_) { 904 if (!is_chunked_upload_) {
905 total = static_cast<int64_t>(request_->GetUploadProgress().size()); 905 total = static_cast<int64_t>(request_->GetUploadProgress().size());
906 // Total may be zero if the UploadDataStream::Init has not been called 906 // Total may be zero if the UploadDataStream::Init has not been called
907 // yet. Don't send the upload progress until the size is initialized. 907 // yet. Don't send the upload progress until the size is initialized.
908 if (!total) 908 if (!total)
909 return; 909 return;
910 } 910 }
911 delegate_task_runner_->PostTask( 911 delegate_task_runner_->PostTask(
912 FROM_HERE, 912 FROM_HERE,
913 base::Bind( 913 base::Bind(
914 &URLFetcherCore::InformDelegateUploadProgressInDelegateThread, 914 &URLFetcherCore::InformDelegateUploadProgressInDelegateSequence,
915 this, current, total)); 915 this, current, total));
916 } 916 }
917 } 917 }
918 } 918 }
919 919
920 void URLFetcherCore::InformDelegateUploadProgressInDelegateThread( 920 void URLFetcherCore::InformDelegateUploadProgressInDelegateSequence(
921 int64_t current, 921 int64_t current,
922 int64_t total) { 922 int64_t total) {
923 DCHECK(delegate_task_runner_->BelongsToCurrentThread()); 923 DCHECK(delegate_task_runner_->RunsTasksOnCurrentThread());
924 if (delegate_) 924 if (delegate_)
925 delegate_->OnURLFetchUploadProgress(fetcher_, current, total); 925 delegate_->OnURLFetchUploadProgress(fetcher_, current, total);
926 } 926 }
927 927
928 void URLFetcherCore::InformDelegateDownloadProgress() { 928 void URLFetcherCore::InformDelegateDownloadProgress() {
929 DCHECK(network_task_runner_->BelongsToCurrentThread()); 929 DCHECK(network_task_runner_->BelongsToCurrentThread());
930 930
931 // TODO(pkasting): Remove ScopedTracker below once crbug.com/455952 is fixed. 931 // TODO(pkasting): Remove ScopedTracker below once crbug.com/455952 is fixed.
932 tracked_objects::ScopedTracker tracking_profile2( 932 tracked_objects::ScopedTracker tracking_profile2(
933 FROM_HERE_WITH_EXPLICIT_FUNCTION( 933 FROM_HERE_WITH_EXPLICIT_FUNCTION(
934 "455952 delegate_task_runner_->PostTask()")); 934 "455952 delegate_task_runner_->PostTask()"));
935 935
936 delegate_task_runner_->PostTask( 936 delegate_task_runner_->PostTask(
937 FROM_HERE, 937 FROM_HERE,
938 base::Bind( 938 base::Bind(
939 &URLFetcherCore::InformDelegateDownloadProgressInDelegateThread, this, 939 &URLFetcherCore::InformDelegateDownloadProgressInDelegateSequence,
940 current_response_bytes_, total_response_bytes_, 940 this, current_response_bytes_, total_response_bytes_,
941 request_->GetTotalReceivedBytes())); 941 request_->GetTotalReceivedBytes()));
942 } 942 }
943 943
944 void URLFetcherCore::InformDelegateDownloadProgressInDelegateThread( 944 void URLFetcherCore::InformDelegateDownloadProgressInDelegateSequence(
945 int64_t current, 945 int64_t current,
946 int64_t total, 946 int64_t total,
947 int64_t current_network_bytes) { 947 int64_t current_network_bytes) {
948 DCHECK(delegate_task_runner_->BelongsToCurrentThread()); 948 DCHECK(delegate_task_runner_->RunsTasksOnCurrentThread());
949 if (delegate_) 949 if (delegate_)
950 delegate_->OnURLFetchDownloadProgress(fetcher_, current, total, 950 delegate_->OnURLFetchDownloadProgress(fetcher_, current, total,
951 current_network_bytes); 951 current_network_bytes);
952 } 952 }
953 953
954 void URLFetcherCore::AssertHasNoUploadData() const { 954 void URLFetcherCore::AssertHasNoUploadData() const {
955 DCHECK(!upload_content_set_); 955 DCHECK(!upload_content_set_);
956 DCHECK(upload_content_.empty()); 956 DCHECK(upload_content_.empty());
957 DCHECK(upload_file_path_.empty()); 957 DCHECK(upload_file_path_.empty());
958 DCHECK(upload_stream_factory_.is_null()); 958 DCHECK(upload_stream_factory_.is_null());
959 } 959 }
960 960
961 } // namespace net 961 } // namespace net
OLDNEW
« no previous file with comments | « net/url_request/url_fetcher_core.h ('k') | net/url_request/url_fetcher_impl_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698