Index: components/data_reduction_proxy/core/browser/data_reduction_proxy_config_unittest.cc |
diff --git a/components/data_reduction_proxy/core/browser/data_reduction_proxy_config_unittest.cc b/components/data_reduction_proxy/core/browser/data_reduction_proxy_config_unittest.cc |
index 2b55df8b84f40bfd407ec501e4412eb9bddc4ac6..b2bf43a07e75cefb941d215ae9f8b5ffac613dc5 100644 |
--- a/components/data_reduction_proxy/core/browser/data_reduction_proxy_config_unittest.cc |
+++ b/components/data_reduction_proxy/core/browser/data_reduction_proxy_config_unittest.cc |
@@ -38,6 +38,8 @@ |
#include "components/data_reduction_proxy/core/common/data_reduction_proxy_server.h" |
#include "components/data_reduction_proxy/core/common/data_reduction_proxy_switches.h" |
#include "components/data_reduction_proxy/proto/client_config.pb.h" |
+#include "components/previews/core/previews_decider.h" |
+#include "components/previews/core/previews_experiments.h" |
#include "components/variations/variations_associated_data.h" |
#include "net/base/load_flags.h" |
#include "net/base/net_errors.h" |
@@ -79,6 +81,28 @@ std::string GetRetryMapKeyFromOrigin(const std::string& origin) { |
return origin; |
} |
+class TestPreviewsDecider : public previews::PreviewsDecider { |
+ public: |
+ TestPreviewsDecider(bool allow_previews) : allow_previews_(allow_previews) {} |
+ ~TestPreviewsDecider() override {} |
+ |
+ // previews::PreviewsDecider: |
+ bool ShouldAllowPreviewAtECT( |
+ const net::URLRequest& request, |
+ previews::PreviewsType type, |
+ net::EffectiveConnectionType effective_connection_type_threshold) |
+ const override { |
+ return allow_previews_; |
+ } |
+ bool ShouldAllowPreview(const net::URLRequest& request, |
+ previews::PreviewsType type) const override { |
+ return allow_previews_; |
+ } |
+ |
+ private: |
+ bool allow_previews_; |
+}; |
+ |
} // namespace |
class DataReductionProxyConfigTest : public testing::Test { |
@@ -812,90 +836,194 @@ TEST_F(DataReductionProxyConfigTest, IsDataReductionProxyWithMutableConfig) { |
TEST_F(DataReductionProxyConfigTest, LoFiOn) { |
const struct { |
- bool lofi_switch_enabled; |
+ bool lofi_enabled; |
+ bool previews_black_list_used; |
const std::string lofi_field_trial_group_name; |
bool network_prohibitively_slow; |
bool expect_lofi_header; |
int bucket_to_check_for_auto_lofi_uma; |
int expect_bucket_count; |
+ bool is_opted_out; |
} tests[] = { |
{ |
// The Lo-Fi switch is off and the user is not in the enabled field |
// trial group. Lo-Fi should not be used. |
- false, std::string(), false, false, 0, |
+ false, false, std::string(), false, false, 0, |
0, // not in enabled field trial, UMA is not recorded |
+ false, |
}, |
{ |
// The Lo-Fi switch is off and the user is not in enabled field trial |
// group and the network quality is bad. Lo-Fi should not be used. |
- false, std::string(), true, false, 0, |
+ false, false, std::string(), true, false, 0, |
0, // not in enabled field trial, UMA is not recorded |
+ false, |
+ |
+ }, |
+ { |
+ // Lo-Fi is enabled through command line switch, but opted out. LoFi |
+ // should not be used. |
+ true, false, std::string(), false, false, 0, |
+ 0, // not in enabled field trial, UMA is not recorded |
+ true, |
}, |
{ |
// Lo-Fi is enabled through command line switch. LoFi should be used. |
- true, std::string(), false, true, 0, |
+ true, false, std::string(), false, true, 0, |
0, // not in enabled field trial, UMA is not recorded |
+ false, |
}, |
{ |
// The user is in the enabled field trial group but the network |
// quality is not bad. Lo-Fi should not be used. |
- false, "Enabled", false, false, |
+ false, false, "Enabled", false, false, |
0, // Lo-Fi request header is not used (state change: empty to empty) |
- 1, |
+ 1, false, |
}, |
{ |
// The user is in the enabled field trial group but the network |
// quality is not bad. Lo-Fi should not be used. |
- false, "Enabled_Control", false, false, |
+ false, false, "Enabled_Control", false, false, |
0, // Lo-Fi request header is not used (state change: empty to empty) |
- 1, |
+ 1, false, |
}, |
{ |
// The user is in the enabled field trial group and the network |
// quality is bad. Lo-Fi should be used. |
- false, "Enabled", true, true, |
+ false, false, "Enabled", true, true, |
1, // Lo-Fi request header is now used (state change: empty to low) |
- 1, |
+ 1, false, |
}, |
{ |
// The user is in the enabled field trial group and the network |
// quality is bad. Lo-Fi should be used. |
- false, "Enabled_Control", true, true, |
+ false, false, "Enabled_Control", true, true, |
3, // Lo-Fi request header is now used (state change: low to low) |
- 1, |
+ 1, false, |
}, |
{ |
// The user is in the enabled field trial group and the network |
// quality is bad. Lo-Fi should be used again. |
- false, "Enabled", true, true, |
+ false, false, "Enabled", true, true, |
3, // Lo-Fi request header is now used (state change: low to low) |
- 1, |
+ 1, false, |
}, |
{ |
// The user is in the enabled field trial group and the network |
// quality is bad. Lo-Fi should be used again. |
- false, "Enabled_Control", true, true, |
+ false, false, "Enabled_Control", true, true, |
3, // Lo-Fi request header is now used (state change: low to low) |
- 1, |
+ 1, false, |
}, |
{ |
// The user is in the enabled field trial group but the network |
// quality is not bad. Lo-Fi should not be used. |
- false, "Enabled", false, false, |
+ false, false, "Enabled", false, false, |
2, // Lo-Fi request header is not used (state change: low to empty) |
- 1, |
+ 1, false, |
}, |
{ |
// The user is in the enabled field trial group but the network |
// quality is not bad. Lo-Fi should not be used. |
- false, "Enabled_Control", false, false, |
+ false, false, "Enabled_Control", false, false, |
0, // Lo-Fi request header is not used (state change: empty to empty) |
- 1, |
+ 1, false, |
+ }, |
+ { |
+ // The Lo-Fi switch is off and the user is not in the enabled field |
+ // trial group. Lo-Fi should not be used. |
+ false, true, std::string(), false, false, 0, |
+ 0, // not in enabled field trial, UMA is not recorded |
+ false, |
+ }, |
+ { |
+ // The Lo-Fi switch is off and the user is not in enabled field trial |
+ // group and the network quality is bad. Lo-Fi should not be used. |
+ false, true, std::string(), true, false, 0, |
+ 0, // not in enabled field trial, UMA is not recorded |
+ false, |
+ }, |
+ { |
+ // Lo-Fi is enabled through command line switch. LoFi should be used. |
+ true, true, std::string(), false, true, 0, |
+ 0, // not in enabled field trial, UMA is not recorded |
+ false, |
+ }, |
+ { |
+ // Lo-Fi is enabled through command line switch, but opted out. LoFi |
+ // should not be used. |
+ true, true, std::string(), false, false, 0, |
+ 0, // not in enabled field trial, UMA is not recorded |
+ true, |
+ }, |
+ { |
+ // The user is in the enabled field trial group but the network |
+ // quality is not bad. Lo-Fi should not be used. |
+ false, true, "Enabled", false, false, |
+ 0, // Lo-Fi request header is not used (state change: empty to empty) |
+ 1, false, |
+ }, |
+ { |
+ // The user is in the enabled field trial group but the network |
+ // quality is not bad. Lo-Fi should not be used. |
+ false, true, "Enabled_Control", false, false, |
+ 0, // Lo-Fi request header is not used (state change: empty to empty) |
+ 1, false, |
+ }, |
+ { |
+ // The user is in the enabled field trial group and the network |
+ // quality is bad. Lo-Fi should be used. |
+ false, true, "Enabled", true, true, |
+ 1, // Lo-Fi request header is now used (state change: empty to low) |
+ 1, false, |
+ }, |
+ { |
+ // The user is in the enabled field trial group and the network |
+ // quality is bad. Lo-Fi should be used. |
+ false, true, "Enabled_Control", true, true, |
+ 3, // Lo-Fi request header is now used (state change: low to low) |
+ 1, false, |
+ }, |
+ { |
+ // The user is in the enabled field trial group and the network |
+ // quality is bad. Lo-Fi should be used again. |
+ false, true, "Enabled", true, true, |
+ 3, // Lo-Fi request header is now used (state change: low to low) |
+ 1, false, |
+ }, |
+ { |
+ // The user is in the enabled field trial group and the network |
+ // quality is bad. Lo-Fi should be used again. |
+ false, true, "Enabled_Control", true, true, |
+ 3, // Lo-Fi request header is now used (state change: low to low) |
+ 1, false, |
+ }, |
+ { |
+ // The user is in the enabled field trial group but the network |
+ // quality is not bad. Lo-Fi should not be used. |
+ false, true, "Enabled", false, false, |
+ 2, // Lo-Fi request header is not used (state change: low to empty) |
+ 1, false, |
+ }, |
+ { |
+ // The user is in the enabled field trial group but the network |
+ // quality is not bad. Lo-Fi should not be used. |
+ false, true, "Enabled_Control", false, false, |
+ 0, // Lo-Fi request header is not used (state change: empty to empty) |
+ 1, false, |
}, |
}; |
for (size_t i = 0; i < arraysize(tests); ++i) { |
config()->ResetLoFiStatusForTest(); |
- if (tests[i].lofi_switch_enabled) { |
+ |
+ base::FieldTrialList field_trial_list(nullptr); |
+ if (tests[i].previews_black_list_used) { |
+ base::FieldTrialList::CreateFieldTrial( |
+ "DataReductionProxyPreviewsBlackListTransition", "Enabled_"); |
+ } else if (tests[i].is_opted_out) { |
+ config()->SetLoFiModeOff(); |
+ } |
+ if (tests[i].lofi_enabled) { |
base::CommandLine::ForCurrentProcess()->AppendSwitchASCII( |
switches::kDataReductionProxyLoFi, |
switches::kDataReductionProxyLoFiValueAlwaysOn); |
@@ -904,7 +1032,6 @@ TEST_F(DataReductionProxyConfigTest, LoFiOn) { |
switches::kDataReductionProxyLoFi, std::string()); |
} |
- base::FieldTrialList field_trial_list(nullptr); |
if (!tests[i].lofi_field_trial_group_name.empty()) { |
base::FieldTrialList::CreateFieldTrial( |
params::GetLoFiFieldTrialName(), |
@@ -921,7 +1048,10 @@ TEST_F(DataReductionProxyConfigTest, LoFiOn) { |
GURL(), net::IDLE, &delegate_, TRAFFIC_ANNOTATION_FOR_TESTS); |
request->SetLoadFlags(request->load_flags() | |
net::LOAD_MAIN_FRAME_DEPRECATED); |
- bool should_enable_lofi = config()->ShouldEnableLoFi(*request.get()); |
+ std::unique_ptr<TestPreviewsDecider> previews_decider = |
+ base::MakeUnique<TestPreviewsDecider>(!tests[i].is_opted_out); |
+ bool should_enable_lofi = |
+ config()->ShouldEnableLoFi(*request.get(), previews_decider.get()); |
if (tests[i].expect_bucket_count != 0) { |
histogram_tester.ExpectBucketCount( |
"DataReductionProxy.AutoLoFiRequestHeaderState.Unknown", |