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

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

Issue 7569027: net: Notify the http job and cache transaction about a filter (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 9 years, 4 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 | « net/url_request/url_request_job.h ('k') | net/url_request/url_request_job_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) 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 "net/url_request/url_request_job.h" 5 #include "net/url_request/url_request_job.h"
6 6
7 #include "base/compiler_specific.h" 7 #include "base/compiler_specific.h"
8 #include "base/message_loop.h" 8 #include "base/message_loop.h"
9 #include "base/string_number_conversions.h" 9 #include "base/string_number_conversions.h"
10 #include "base/string_util.h" 10 #include "base/string_util.h"
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
54 void URLRequestJob::DetachRequest() { 54 void URLRequestJob::DetachRequest() {
55 request_ = NULL; 55 request_ = NULL;
56 } 56 }
57 57
58 // This function calls ReadData to get stream data. If a filter exists, passes 58 // This function calls ReadData to get stream data. If a filter exists, passes
59 // the data to the attached filter. Then returns the output from filter back to 59 // the data to the attached filter. Then returns the output from filter back to
60 // the caller. 60 // the caller.
61 bool URLRequestJob::Read(IOBuffer* buf, int buf_size, int *bytes_read) { 61 bool URLRequestJob::Read(IOBuffer* buf, int buf_size, int *bytes_read) {
62 bool rv = false; 62 bool rv = false;
63 63
64 DCHECK_LT(buf_size, 1000000); // sanity check 64 DCHECK_LT(buf_size, 1000000); // Sanity check.
65 DCHECK(buf); 65 DCHECK(buf);
66 DCHECK(bytes_read); 66 DCHECK(bytes_read);
67 DCHECK(filtered_read_buffer_ == NULL); 67 DCHECK(filtered_read_buffer_ == NULL);
68 DCHECK_EQ(0, filtered_read_buffer_len_); 68 DCHECK_EQ(0, filtered_read_buffer_len_);
69 69
70 *bytes_read = 0; 70 *bytes_read = 0;
71 71
72 // Skip Filter if not present 72 // Skip Filter if not present.
73 if (!filter_.get()) { 73 if (!filter_.get()) {
74 rv = ReadRawDataHelper(buf, buf_size, bytes_read); 74 rv = ReadRawDataHelper(buf, buf_size, bytes_read);
75 } else { 75 } else {
76 // Save the caller's buffers while we do IO 76 // Save the caller's buffers while we do IO
77 // in the filter's buffers. 77 // in the filter's buffers.
78 filtered_read_buffer_ = buf; 78 filtered_read_buffer_ = buf;
79 filtered_read_buffer_len_ = buf_size; 79 filtered_read_buffer_len_ = buf_size;
80 80
81 if (ReadFilteredData(bytes_read)) { 81 if (ReadFilteredData(bytes_read)) {
82 rv = true; // we have data to return 82 rv = true; // We have data to return.
83
84 // It is fine to call DoneReading even if ReadFilteredData receives 0
85 // bytes from the net, but we avoid making that call if we know for
86 // sure that's the case (ReadRawDataHelper path).
87 if (*bytes_read == 0)
88 DoneReading();
83 } else { 89 } else {
84 rv = false; // error, or a new IO is pending 90 rv = false; // Error, or a new IO is pending.
85 } 91 }
86 } 92 }
87 if (rv && *bytes_read == 0) 93 if (rv && *bytes_read == 0)
88 NotifyDone(URLRequestStatus()); 94 NotifyDone(URLRequestStatus());
89 return rv; 95 return rv;
90 } 96 }
91 97
92 void URLRequestJob::StopCaching() { 98 void URLRequestJob::StopCaching() {
93 // Nothing to do here. 99 // Nothing to do here.
94 } 100 }
(...skipping 256 matching lines...) Expand 10 before | Expand all | Expand 10 after
351 // survival until we can get out of this method. 357 // survival until we can get out of this method.
352 scoped_refptr<URLRequestJob> self_preservation(this); 358 scoped_refptr<URLRequestJob> self_preservation(this);
353 359
354 if (filter_.get()) { 360 if (filter_.get()) {
355 // Tell the filter that it has more data 361 // Tell the filter that it has more data
356 FilteredDataRead(bytes_read); 362 FilteredDataRead(bytes_read);
357 363
358 // Filter the data. 364 // Filter the data.
359 int filter_bytes_read = 0; 365 int filter_bytes_read = 0;
360 if (ReadFilteredData(&filter_bytes_read)) { 366 if (ReadFilteredData(&filter_bytes_read)) {
367 if (!filter_bytes_read)
368 DoneReading();
361 request_->NotifyReadCompleted(filter_bytes_read); 369 request_->NotifyReadCompleted(filter_bytes_read);
362 } 370 }
363 } else { 371 } else {
364 request_->NotifyReadCompleted(bytes_read); 372 request_->NotifyReadCompleted(bytes_read);
365 } 373 }
366 DVLOG(1) << __FUNCTION__ << "() " 374 DVLOG(1) << __FUNCTION__ << "() "
367 << "\"" << (request_ ? request_->url().spec() : "???") << "\"" 375 << "\"" << (request_ ? request_->url().spec() : "???") << "\""
368 << " pre bytes read = " << bytes_read 376 << " pre bytes read = " << bytes_read
369 << " pre total = " << prefilter_bytes_read_ 377 << " pre total = " << prefilter_bytes_read_
370 << " post total = " << postfilter_bytes_read_; 378 << " post total = " << postfilter_bytes_read_;
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
439 request_->Restart(); 447 request_->Restart();
440 } 448 }
441 449
442 bool URLRequestJob::ReadRawData(IOBuffer* buf, int buf_size, 450 bool URLRequestJob::ReadRawData(IOBuffer* buf, int buf_size,
443 int *bytes_read) { 451 int *bytes_read) {
444 DCHECK(bytes_read); 452 DCHECK(bytes_read);
445 *bytes_read = 0; 453 *bytes_read = 0;
446 return true; 454 return true;
447 } 455 }
448 456
457 void URLRequestJob::DoneReading() {
458 // Do nothing.
459 }
460
449 void URLRequestJob::FilteredDataRead(int bytes_read) { 461 void URLRequestJob::FilteredDataRead(int bytes_read) {
450 DCHECK(filter_.get()); // don't add data if there is no filter 462 DCHECK(filter_.get()); // don't add data if there is no filter
451 filter_->FlushStreamBuffer(bytes_read); 463 filter_->FlushStreamBuffer(bytes_read);
452 } 464 }
453 465
454 bool URLRequestJob::ReadFilteredData(int* bytes_read) { 466 bool URLRequestJob::ReadFilteredData(int* bytes_read) {
455 DCHECK(filter_.get()); // don't add data if there is no filter 467 DCHECK(filter_.get()); // don't add data if there is no filter
456 DCHECK(filtered_read_buffer_ != NULL); // we need to have a buffer to fill 468 DCHECK(filtered_read_buffer_ != NULL); // we need to have a buffer to fill
457 DCHECK_GT(filtered_read_buffer_len_, 0); // sanity check 469 DCHECK_GT(filtered_read_buffer_len_, 0); // sanity check
458 DCHECK_LT(filtered_read_buffer_len_, 1000000); // sanity check 470 DCHECK_LT(filtered_read_buffer_len_, 1000000); // sanity check
(...skipping 210 matching lines...) Expand 10 before | Expand all | Expand 10 after
669 } 681 }
670 682
671 bool URLRequestJob::FilterHasData() { 683 bool URLRequestJob::FilterHasData() {
672 return filter_.get() && filter_->stream_data_len(); 684 return filter_.get() && filter_->stream_data_len();
673 } 685 }
674 686
675 void URLRequestJob::UpdatePacketReadTimes() { 687 void URLRequestJob::UpdatePacketReadTimes() {
676 } 688 }
677 689
678 } // namespace net 690 } // namespace net
OLDNEW
« no previous file with comments | « net/url_request/url_request_job.h ('k') | net/url_request/url_request_job_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698