| // Copyright 2014 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "components/data_reduction_proxy/core/browser/data_reduction_proxy_interceptor.h" |
| |
| #include "components/data_reduction_proxy/core/browser/data_reduction_proxy_protocol.h" |
| #include "components/data_reduction_proxy/core/browser/data_reduction_proxy_usage_stats.h" |
| #include "components/data_reduction_proxy/core/common/data_reduction_proxy_headers.h" |
| #include "components/data_reduction_proxy/core/common/data_reduction_proxy_params.h" |
| #include "net/http/http_response_headers.h" |
| #include "net/url_request/url_request.h" |
| #include "net/url_request/url_request_context.h" |
| #include "net/url_request/url_request_http_job.h" |
| #include "net/url_request/url_request_job_factory.h" |
| |
| namespace data_reduction_proxy { |
| |
| DataReductionProxyInterceptor::DataReductionProxyInterceptor( |
| DataReductionProxyParams* params, |
| DataReductionProxyUsageStats* stats) |
| : params_(params), |
| usage_stats_(stats) { |
| } |
| |
| DataReductionProxyInterceptor::~DataReductionProxyInterceptor() { |
| } |
| |
| net::URLRequestJob* DataReductionProxyInterceptor::MaybeInterceptRequest( |
| net::URLRequest* request, |
| net::NetworkDelegate* network_delegate) const { |
| return nullptr; |
| } |
| |
| net::URLRequestJob* DataReductionProxyInterceptor::MaybeInterceptResponse( |
| net::URLRequest* request, |
| net::NetworkDelegate* network_delegate) const { |
| if (request->response_info().was_cached) |
| return nullptr; |
| DataReductionProxyBypassType bypass_type = BYPASS_EVENT_TYPE_MAX; |
| bool should_retry = data_reduction_proxy::MaybeBypassProxyAndPrepareToRetry( |
| params_, request, request->response_info().headers.get(), &bypass_type); |
| if (usage_stats_ && bypass_type != BYPASS_EVENT_TYPE_MAX) |
| usage_stats_->SetBypassType(bypass_type); |
| if (!should_retry) |
| return nullptr; |
| // Returning non-NULL has the effect of restarting the request with the |
| // supplied job. |
| DCHECK(request->url().SchemeIs("http")); |
| return request->context()->job_factory()->MaybeCreateJobWithProtocolHandler( |
| "http", request, network_delegate); |
| } |
| |
| } // namespace data_reduction_proxy |