Chromium Code Reviews| Index: components/data_reduction_proxy/content/browser/content_lofi_decider.cc |
| diff --git a/components/data_reduction_proxy/content/browser/content_lofi_decider.cc b/components/data_reduction_proxy/content/browser/content_lofi_decider.cc |
| index 0132adde720726bed468cc670b0865b482cb5d44..20aaf5d97067c80e06ec87b7a700e3320a462f24 100644 |
| --- a/components/data_reduction_proxy/content/browser/content_lofi_decider.cc |
| +++ b/components/data_reduction_proxy/content/browser/content_lofi_decider.cc |
| @@ -4,10 +4,17 @@ |
| #include "components/data_reduction_proxy/content/browser/content_lofi_decider.h" |
| +#include <string> |
| + |
| +#include "components/data_reduction_proxy/core/common/data_reduction_proxy_params.h" |
| #include "content/public/browser/resource_request_info.h" |
| +#include "net/http/http_request_headers.h" |
| namespace data_reduction_proxy { |
| +const char kLoFiHeader[] = "q=low"; |
|
tbansal1
2015/11/20 21:56:58
Is it possible to move kLoFiHeader from data_reduc
megjablon
2015/11/20 23:14:50
Just using the value from data_reduction_proxy_hea
|
| +const char kLoFiExperimentHeader[] = "exp=lofi_active_control"; |
| + |
| ContentLoFiDecider::ContentLoFiDecider() {} |
| ContentLoFiDecider::~ContentLoFiDecider() {} |
| @@ -15,8 +22,58 @@ ContentLoFiDecider::~ContentLoFiDecider() {} |
| bool ContentLoFiDecider::IsUsingLoFiMode(const net::URLRequest& request) const { |
| const content::ResourceRequestInfo* request_info = |
| content::ResourceRequestInfo::ForRequest(&request); |
| + // The Lo-Fi directive should not be added for users in the Lo-Fi field |
| + // trial "Control" group. Check that the user is in a group that should |
| + // get "q=low". |
| + bool lofi_enabled_via_flag_or_field_trial = |
| + params::IsLoFiOnViaFlags() || params::IsIncludedInLoFiEnabledFieldTrial(); |
| if (request_info) |
| - return request_info->IsUsingLoFi(); |
| + return request_info->IsUsingLoFi() && lofi_enabled_via_flag_or_field_trial; |
| + return false; |
| +} |
| + |
| +bool ContentLoFiDecider::MaybeEnableLoFiMode( |
| + const net::URLRequest& request, |
| + net::HttpRequestHeaders* headers) const { |
| + const content::ResourceRequestInfo* request_info = |
| + content::ResourceRequestInfo::ForRequest(&request); |
| + |
| + if (request_info) { |
|
sclittle
2015/11/20 22:59:11
So, Lo-Fi mode is not enabled for any requests tha
megjablon
2015/11/20 23:14:50
Yep this was a side effect of the implementation t
|
| + // The Lo-Fi directive should not be added for users in the Lo-Fi field |
| + // trial "Control" group. Check that the user is in a group that should |
| + // get "q=low". |
| + bool lofi_enabled_via_flag_or_field_trial = |
| + params::IsLoFiOnViaFlags() || |
| + params::IsIncludedInLoFiEnabledFieldTrial(); |
|
tbansal1
2015/11/20 21:56:58
Is it possible to move this common code to anonymo
megjablon
2015/11/20 23:14:50
I don't see the need to move this. We don't use th
tbansal1
2015/11/23 20:39:52
Line 26 up.
|
| + |
| + const char kChromeProxyHeader[] = "Chrome-Proxy"; |
|
tbansal1
2015/11/20 21:56:58
Same here, is it possible to move this to params?
megjablon
2015/11/20 23:14:50
Just using the value from data_reduction_proxy_hea
|
| + std::string header_value; |
| + |
| + // User is using Lo-Fi and not part of the "Control" group. |
| + if (request_info->IsUsingLoFi() && lofi_enabled_via_flag_or_field_trial) { |
| + if (headers->HasHeader(kChromeProxyHeader)) { |
| + headers->GetHeader(kChromeProxyHeader, &header_value); |
| + headers->RemoveHeader(kChromeProxyHeader); |
| + header_value += ", "; |
| + } |
| + header_value += kLoFiHeader; |
| + headers->SetHeader(kChromeProxyHeader, header_value); |
| + return true; |
| + } |
| + |
| + // User is part of Lo-Fi active control experiment. |
| + if (request_info->IsUsingLoFi() && |
| + params::IsIncludedInLoFiControlFieldTrial()) { |
|
tbansal1
2015/11/20 21:56:58
Should this also check that Lo-Fi is not enabled f
megjablon
2015/11/20 23:14:50
That's redundant. If it's enabled from flags then
tbansal1
2015/11/23 20:39:52
Aah, did not see the return statement.
|
| + if (headers->HasHeader(kChromeProxyHeader)) { |
| + headers->GetHeader(kChromeProxyHeader, &header_value); |
| + headers->RemoveHeader(kChromeProxyHeader); |
| + header_value += ", "; |
| + } |
| + header_value += kLoFiExperimentHeader; |
|
tbansal1
2015/11/20 21:56:58
Can the user be in more than two experiments?
In t
megjablon
2015/11/20 23:14:50
Yes the user can. It looks like exp=a,exp=b
https
|
| + headers->SetHeader(kChromeProxyHeader, header_value); |
| + } |
| + } |
| + |
| return false; |
| } |