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..991b00e1e3e4a222d86559ef529e7ddc3dfaf7a0 100644 |
--- a/components/data_reduction_proxy/content/browser/content_lofi_decider.cc |
+++ b/components/data_reduction_proxy/content/browser/content_lofi_decider.cc |
@@ -4,7 +4,12 @@ |
#include "components/data_reduction_proxy/content/browser/content_lofi_decider.h" |
+#include <string> |
+ |
+#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 "content/public/browser/resource_request_info.h" |
+#include "net/http/http_request_headers.h" |
namespace data_reduction_proxy { |
@@ -15,8 +20,59 @@ 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 can get |
+ // "q=low". |
+ bool lofi_enabled_via_flag_or_field_trial = |
+ params::IsLoFiOnViaFlags() || params::IsIncludedInLoFiEnabledFieldTrial(); |
+ |
+ // Return if the user is using Lo-Fi and not part of the "Control" group. |
if (request_info) |
- return request_info->IsUsingLoFi(); |
+ return request_info->IsUsingLoFi() && lofi_enabled_via_flag_or_field_trial; |
+ return false; |
+} |
+ |
+bool ContentLoFiDecider::MaybeAddLoFiDirectiveToHeaders( |
+ const net::URLRequest& request, |
+ net::HttpRequestHeaders* headers) const { |
+ const content::ResourceRequestInfo* request_info = |
+ content::ResourceRequestInfo::ForRequest(&request); |
+ |
+ if (!request_info) |
+ return false; |
+ |
+ // 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(); |
+ |
+ 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(chrome_proxy_header())) { |
+ headers->GetHeader(chrome_proxy_header(), &header_value); |
+ headers->RemoveHeader(chrome_proxy_header()); |
+ header_value += ", "; |
+ } |
+ header_value += chrome_proxy_lo_fi_directive(); |
+ headers->SetHeader(chrome_proxy_header(), header_value); |
+ return true; |
+ } |
+ |
+ // User is part of Lo-Fi active control experiment. |
+ if (request_info->IsUsingLoFi() && |
+ params::IsIncludedInLoFiControlFieldTrial()) { |
+ if (headers->HasHeader(chrome_proxy_header())) { |
+ headers->GetHeader(chrome_proxy_header(), &header_value); |
+ headers->RemoveHeader(chrome_proxy_header()); |
+ header_value += ", "; |
+ } |
+ header_value += chrome_proxy_lo_fi_experiment_directive(); |
+ headers->SetHeader(chrome_proxy_header(), header_value); |
+ } |
+ |
return false; |
} |