| Index: net/url_request/url_request_http_job.cc
|
| diff --git a/net/url_request/url_request_http_job.cc b/net/url_request/url_request_http_job.cc
|
| index 51b690824301e8a7bcdb5cbd1f2333d4469858f6..66a51a05ea516e51c83b263b30eb22c0b2033d7f 100644
|
| --- a/net/url_request/url_request_http_job.cc
|
| +++ b/net/url_request/url_request_http_job.cc
|
| @@ -33,6 +33,7 @@
|
| #include "net/base/url_util.h"
|
| #include "net/cert/cert_status_flags.h"
|
| #include "net/cookies/cookie_store.h"
|
| +#include "net/filter/stream_source_util.h"
|
| #include "net/http/http_content_disposition.h"
|
| #include "net/http/http_network_session.h"
|
| #include "net/http/http_request_headers.h"
|
| @@ -161,88 +162,6 @@ void LogChannelIDAndCookieStores(const GURL& url,
|
|
|
| namespace net {
|
|
|
| -class URLRequestHttpJob::HttpFilterContext : public FilterContext {
|
| - public:
|
| - explicit HttpFilterContext(URLRequestHttpJob* job);
|
| - ~HttpFilterContext() override;
|
| -
|
| - // FilterContext implementation.
|
| - bool GetMimeType(std::string* mime_type) const override;
|
| - bool GetURL(GURL* gurl) const override;
|
| - base::Time GetRequestTime() const override;
|
| - bool IsCachedContent() const override;
|
| - SdchManager::DictionarySet* SdchDictionariesAdvertised() const override;
|
| - int64_t GetByteReadCount() const override;
|
| - int GetResponseCode() const override;
|
| - const URLRequestContext* GetURLRequestContext() const override;
|
| - void RecordPacketStats(StatisticSelector statistic) const override;
|
| - const BoundNetLog& GetNetLog() const override;
|
| -
|
| - private:
|
| - URLRequestHttpJob* job_;
|
| -
|
| - // URLRequestHttpJob may be detached from URLRequest, but we still need to
|
| - // return something.
|
| - BoundNetLog dummy_log_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(HttpFilterContext);
|
| -};
|
| -
|
| -URLRequestHttpJob::HttpFilterContext::HttpFilterContext(URLRequestHttpJob* job)
|
| - : job_(job) {
|
| - DCHECK(job_);
|
| -}
|
| -
|
| -URLRequestHttpJob::HttpFilterContext::~HttpFilterContext() {
|
| -}
|
| -
|
| -bool URLRequestHttpJob::HttpFilterContext::GetMimeType(
|
| - std::string* mime_type) const {
|
| - return job_->GetMimeType(mime_type);
|
| -}
|
| -
|
| -bool URLRequestHttpJob::HttpFilterContext::GetURL(GURL* gurl) const {
|
| - if (!job_->request())
|
| - return false;
|
| - *gurl = job_->request()->url();
|
| - return true;
|
| -}
|
| -
|
| -base::Time URLRequestHttpJob::HttpFilterContext::GetRequestTime() const {
|
| - return job_->request() ? job_->request()->request_time() : base::Time();
|
| -}
|
| -
|
| -bool URLRequestHttpJob::HttpFilterContext::IsCachedContent() const {
|
| - return job_->is_cached_content_;
|
| -}
|
| -
|
| -SdchManager::DictionarySet*
|
| -URLRequestHttpJob::HttpFilterContext::SdchDictionariesAdvertised() const {
|
| - return job_->dictionaries_advertised_.get();
|
| -}
|
| -
|
| -int64_t URLRequestHttpJob::HttpFilterContext::GetByteReadCount() const {
|
| - return job_->prefilter_bytes_read();
|
| -}
|
| -
|
| -int URLRequestHttpJob::HttpFilterContext::GetResponseCode() const {
|
| - return job_->GetResponseCode();
|
| -}
|
| -
|
| -const URLRequestContext*
|
| -URLRequestHttpJob::HttpFilterContext::GetURLRequestContext() const {
|
| - return job_->request() ? job_->request()->context() : NULL;
|
| -}
|
| -
|
| -void URLRequestHttpJob::HttpFilterContext::RecordPacketStats(
|
| - StatisticSelector statistic) const {
|
| - job_->RecordPacketStats(statistic);
|
| -}
|
| -
|
| -const BoundNetLog& URLRequestHttpJob::HttpFilterContext::GetNetLog() const {
|
| - return job_->request() ? job_->request()->net_log() : dummy_log_;
|
| -}
|
| -
|
| // TODO(darin): make sure the port blocking code is not lost
|
| // static
|
| URLRequestJob* URLRequestHttpJob::Factory(URLRequest* request,
|
| @@ -294,7 +213,6 @@ URLRequestHttpJob::URLRequestHttpJob(
|
| bytes_observed_in_packets_(0),
|
| request_time_snapshot_(),
|
| final_packet_time_(),
|
| - filter_context_(new HttpFilterContext(this)),
|
| on_headers_received_callback_(
|
| base::Bind(&URLRequestHttpJob::OnHeadersReceivedCallback,
|
| base::Unretained(this))),
|
| @@ -314,6 +232,8 @@ URLRequestHttpJob::URLRequestHttpJob(
|
| URLRequestHttpJob::~URLRequestHttpJob() {
|
| CHECK(!awaiting_callback_);
|
|
|
| +// FIXME: FilterContext is gone. How should we handle SDCH stats???
|
| +#if 0
|
| DCHECK(!sdch_test_control_ || !sdch_test_activated_);
|
| if (!is_cached_content_) {
|
| if (sdch_test_control_)
|
| @@ -321,9 +241,10 @@ URLRequestHttpJob::~URLRequestHttpJob() {
|
| if (sdch_test_activated_)
|
| RecordPacketStats(FilterContext::SDCH_EXPERIMENT_DECODE);
|
| }
|
| +#endif
|
| // Make sure SDCH filters are told to emit histogram data while
|
| // filter_context_ is still alive.
|
| - DestroyFilters();
|
| + // DestroyFilters();
|
|
|
| DoneWithRequest(ABORTED);
|
| }
|
| @@ -1228,27 +1149,13 @@ void URLRequestHttpJob::PopulateNetErrorDetails(
|
| return transaction_->PopulateNetErrorDetails(details);
|
| }
|
|
|
| -Filter* URLRequestHttpJob::SetupFilter() const {
|
| +std::unique_ptr<StreamSource> URLRequestHttpJob::SetupSource() {
|
| DCHECK(transaction_.get());
|
| if (!response_info_)
|
| - return NULL;
|
| + return nullptr;
|
|
|
| - std::vector<Filter::FilterType> encoding_types;
|
| - std::string encoding_type;
|
| - HttpResponseHeaders* headers = GetResponseHeaders();
|
| - size_t iter = 0;
|
| - while (headers->EnumerateHeader(&iter, "Content-Encoding", &encoding_type)) {
|
| - encoding_types.push_back(Filter::ConvertEncodingToType(encoding_type));
|
| - }
|
| -
|
| - // Even if encoding types are empty, there is a chance that we need to add
|
| - // some decoding, as some proxies strip encoding completely. In such cases,
|
| - // we may need to add (for example) SDCH filtering (when the context suggests
|
| - // it is appropriate).
|
| - Filter::FixupEncodingTypes(*filter_context_, &encoding_types);
|
| -
|
| - return !encoding_types.empty()
|
| - ? Filter::Factory(encoding_types, *filter_context_) : NULL;
|
| + return StreamSourceUtil::BuildSourceChain(URLRequestJob::SetupSource(),
|
| + GetResponseHeaders());
|
| }
|
|
|
| bool URLRequestHttpJob::CopyFragmentOnRedirect(const GURL& location) const {
|
| @@ -1543,44 +1450,6 @@ void URLRequestHttpJob::UpdatePacketReadTimes() {
|
| bytes_observed_in_packets_ = prefilter_bytes_read();
|
| }
|
|
|
| -void URLRequestHttpJob::RecordPacketStats(
|
| - FilterContext::StatisticSelector statistic) const {
|
| - if (!packet_timing_enabled_ || (final_packet_time_ == base::Time()))
|
| - return;
|
| -
|
| - base::TimeDelta duration = final_packet_time_ - request_time_snapshot_;
|
| - switch (statistic) {
|
| - case FilterContext::SDCH_DECODE: {
|
| - UMA_HISTOGRAM_CUSTOM_COUNTS("Sdch3.Network_Decode_Bytes_Processed_b",
|
| - static_cast<int>(bytes_observed_in_packets_), 500, 100000, 100);
|
| - return;
|
| - }
|
| - case FilterContext::SDCH_PASSTHROUGH: {
|
| - // Despite advertising a dictionary, we handled non-sdch compressed
|
| - // content.
|
| - return;
|
| - }
|
| -
|
| - case FilterContext::SDCH_EXPERIMENT_DECODE: {
|
| - UMA_HISTOGRAM_CUSTOM_TIMES("Sdch3.Experiment3_Decode",
|
| - duration,
|
| - base::TimeDelta::FromMilliseconds(20),
|
| - base::TimeDelta::FromMinutes(10), 100);
|
| - return;
|
| - }
|
| - case FilterContext::SDCH_EXPERIMENT_HOLDBACK: {
|
| - UMA_HISTOGRAM_CUSTOM_TIMES("Sdch3.Experiment3_Holdback",
|
| - duration,
|
| - base::TimeDelta::FromMilliseconds(20),
|
| - base::TimeDelta::FromMinutes(10), 100);
|
| - return;
|
| - }
|
| - default:
|
| - NOTREACHED();
|
| - return;
|
| - }
|
| -}
|
| -
|
| void URLRequestHttpJob::RecordPerfHistograms(CompletionCause reason) {
|
| if (start_time_.is_null())
|
| return;
|
|
|