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

Unified Diff: net/url_request/url_request_http_job.cc

Issue 1662763002: [ON HOLD] Implement pull-based design for content decoding (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Address comments Created 4 years, 8 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 side-by-side diff with in-line comments
Download patch
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;

Powered by Google App Engine
This is Rietveld 408576698