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

Side by Side Diff: chrome/common/net/url_fetcher.cc

Issue 6292013: Add chunked uploads support to SPDY (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: . Created 9 years, 9 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 | Annotate | Revision Log
« no previous file with comments | « chrome/common/net/url_fetcher.h ('k') | net/base/upload_data.h » ('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) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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/common/net/url_fetcher.h" 5 #include "chrome/common/net/url_fetcher.h"
6 6
7 #include <set> 7 #include <set>
8 8
9 #include "base/compiler_specific.h" 9 #include "base/compiler_specific.h"
10 #include "base/lazy_instance.h" 10 #include "base/lazy_instance.h"
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
94 void NotifyMalformedContent(); 94 void NotifyMalformedContent();
95 95
96 // Deletes the request, removes it from the registry, and removes the 96 // Deletes the request, removes it from the registry, and removes the
97 // destruction observer. 97 // destruction observer.
98 void ReleaseRequest(); 98 void ReleaseRequest();
99 99
100 // Returns the max value of exponential back-off release time for 100 // Returns the max value of exponential back-off release time for
101 // |original_url_| and |url_|. 101 // |original_url_| and |url_|.
102 base::TimeTicks GetBackoffReleaseTime(); 102 base::TimeTicks GetBackoffReleaseTime();
103 103
104 void CompleteAddingUploadDataChunk(const std::string& data); 104 void CompleteAddingUploadDataChunk(const std::string& data,
105 bool is_last_chunk);
105 106
106 // Adds a block of data to be uploaded in a POST body. This can only be called 107 // Adds a block of data to be uploaded in a POST body. This can only be called
107 // after Start(). 108 // after Start().
108 void AppendChunkToUpload(const std::string& data); 109 void AppendChunkToUpload(const std::string& data, bool is_last_chunk);
109 110
110 URLFetcher* fetcher_; // Corresponding fetcher object 111 URLFetcher* fetcher_; // Corresponding fetcher object
111 GURL original_url_; // The URL we were asked to fetch 112 GURL original_url_; // The URL we were asked to fetch
112 GURL url_; // The URL we eventually wound up at 113 GURL url_; // The URL we eventually wound up at
113 RequestType request_type_; // What type of request is this? 114 RequestType request_type_; // What type of request is this?
114 URLFetcher::Delegate* delegate_; // Object to notify on completion 115 URLFetcher::Delegate* delegate_; // Object to notify on completion
115 scoped_refptr<base::MessageLoopProxy> delegate_loop_proxy_; 116 scoped_refptr<base::MessageLoopProxy> delegate_loop_proxy_;
116 // Message loop proxy of the creating 117 // Message loop proxy of the creating
117 // thread. 118 // thread.
118 scoped_refptr<base::MessageLoopProxy> io_message_loop_proxy_; 119 scoped_refptr<base::MessageLoopProxy> io_message_loop_proxy_;
(...skipping 165 matching lines...) Expand 10 before | Expand all | Expand 10 after
284 // Some servers may treat HEAD requests as GET requests. To free up the 285 // Some servers may treat HEAD requests as GET requests. To free up the
285 // network connection as soon as possible, signal that the request has 286 // network connection as soon as possible, signal that the request has
286 // completed immediately, without trying to read any data back (all we care 287 // completed immediately, without trying to read any data back (all we care
287 // about is the response code and headers, which we already have). 288 // about is the response code and headers, which we already have).
288 if (request_->status().is_success() && (request_type_ != HEAD)) 289 if (request_->status().is_success() && (request_type_ != HEAD))
289 request_->Read(buffer_, kBufferSize, &bytes_read); 290 request_->Read(buffer_, kBufferSize, &bytes_read);
290 OnReadCompleted(request_.get(), bytes_read); 291 OnReadCompleted(request_.get(), bytes_read);
291 } 292 }
292 293
293 void URLFetcher::Core::CompleteAddingUploadDataChunk( 294 void URLFetcher::Core::CompleteAddingUploadDataChunk(
294 const std::string& content) { 295 const std::string& content, bool is_last_chunk) {
295 DCHECK(is_chunked_upload_); 296 DCHECK(is_chunked_upload_);
296 DCHECK(request_.get()); 297 DCHECK(request_.get());
297 if (content.length()) { 298 DCHECK(!content.empty());
298 request_->AppendChunkToUpload(content.data(), 299 request_->AppendChunkToUpload(content.data(),
299 static_cast<int>(content.length())); 300 static_cast<int>(content.length()),
300 } else { 301 is_last_chunk);
301 request_->MarkEndOfChunks();
302 }
303 } 302 }
304 303
305 void URLFetcher::Core::AppendChunkToUpload(const std::string& content) { 304 void URLFetcher::Core::AppendChunkToUpload(const std::string& content,
305 bool is_last_chunk) {
306 DCHECK(delegate_loop_proxy_); 306 DCHECK(delegate_loop_proxy_);
307 CHECK(io_message_loop_proxy_.get()); 307 CHECK(io_message_loop_proxy_.get());
308 io_message_loop_proxy_->PostTask( 308 io_message_loop_proxy_->PostTask(
309 FROM_HERE, 309 FROM_HERE,
310 NewRunnableMethod(this, &Core::CompleteAddingUploadDataChunk, content)); 310 NewRunnableMethod(this, &Core::CompleteAddingUploadDataChunk, content,
311 is_last_chunk));
311 } 312 }
312 313
313 void URLFetcher::Core::OnReadCompleted(net::URLRequest* request, 314 void URLFetcher::Core::OnReadCompleted(net::URLRequest* request,
314 int bytes_read) { 315 int bytes_read) {
315 DCHECK(request == request_); 316 DCHECK(request == request_);
316 DCHECK(io_message_loop_proxy_->BelongsToCurrentThread()); 317 DCHECK(io_message_loop_proxy_->BelongsToCurrentThread());
317 318
318 url_ = request->url(); 319 url_ = request->url();
319 url_throttler_entry_ = 320 url_throttler_entry_ =
320 net::URLRequestThrottlerManager::GetInstance()->RegisterRequestUrl(url_); 321 net::URLRequestThrottlerManager::GetInstance()->RegisterRequestUrl(url_);
(...skipping 192 matching lines...) Expand 10 before | Expand all | Expand 10 after
513 514
514 void URLFetcher::set_chunked_upload(const std::string& content_type) { 515 void URLFetcher::set_chunked_upload(const std::string& content_type) {
515 DCHECK(core_->is_chunked_upload_ || 516 DCHECK(core_->is_chunked_upload_ ||
516 (core_->upload_content_type_.empty() && 517 (core_->upload_content_type_.empty() &&
517 core_->upload_content_.empty())); 518 core_->upload_content_.empty()));
518 core_->upload_content_type_ = content_type; 519 core_->upload_content_type_ = content_type;
519 core_->upload_content_.clear(); 520 core_->upload_content_.clear();
520 core_->is_chunked_upload_ = true; 521 core_->is_chunked_upload_ = true;
521 } 522 }
522 523
523 void URLFetcher::AppendChunkToUpload(const std::string& data) { 524 void URLFetcher::AppendChunkToUpload(const std::string& data,
525 bool is_last_chunk) {
524 DCHECK(data.length()); 526 DCHECK(data.length());
525 core_->AppendChunkToUpload(data); 527 core_->AppendChunkToUpload(data, is_last_chunk);
526 }
527
528 void URLFetcher::MarkEndOfChunks() {
529 core_->AppendChunkToUpload(std::string());
530 } 528 }
531 529
532 const std::string& URLFetcher::upload_data() const { 530 const std::string& URLFetcher::upload_data() const {
533 return core_->upload_content_; 531 return core_->upload_content_;
534 } 532 }
535 533
536 void URLFetcher::set_referrer(const std::string& referrer) { 534 void URLFetcher::set_referrer(const std::string& referrer) {
537 core_->referrer_ = referrer; 535 core_->referrer_ = referrer;
538 } 536 }
539 537
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
577 } 575 }
578 576
579 // static 577 // static
580 void URLFetcher::CancelAll() { 578 void URLFetcher::CancelAll() {
581 Core::CancelAll(); 579 Core::CancelAll();
582 } 580 }
583 581
584 URLFetcher::Delegate* URLFetcher::delegate() const { 582 URLFetcher::Delegate* URLFetcher::delegate() const {
585 return core_->delegate(); 583 return core_->delegate();
586 } 584 }
OLDNEW
« no previous file with comments | « chrome/common/net/url_fetcher.h ('k') | net/base/upload_data.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698