1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "chrome/browser/net/spdyproxy/data_reduction_proxy_settings_android.h"
7 #include "base/android/jni_android.h"
8 #include "base/android/jni_string.h"
9 #include "base/android/scoped_java_ref.h"
10 #include "base/base64.h"
11 #include "base/command_line.h"
12 #include "base/prefs/pref_service.h"
13 #include "chrome/browser/net/spdyproxy/data_reduction_proxy_chrome_settings.h"
14 #include "chrome/browser/prefs/proxy_prefs.h"
15 #include "chrome/common/chrome_switches.h"
16 #include "chrome/common/pref_names.h"
17 #include "components/data_reduction_proxy/browser/data_reduction_proxy_settings_test_utils.h"
18 #include "testing/gmock/include/gmock/gmock.h"
19 #include "testing/gtest/include/gtest/gtest.h"
23 using testing::AnyNumber
;
24 using testing::Return
;
26 const char kDataReductionProxyDev
[] = "http://foo-dev.com:80";
28 using data_reduction_proxy::DataReductionProxySettings
;
30 // Used for testing the DataReductionProxySettingsAndroid class.
31 class TestDataReductionProxySettingsAndroid
32 : public DataReductionProxySettingsAndroid
{
34 // Constructs an Android settings object for test that wraps the provided
36 explicit TestDataReductionProxySettingsAndroid(
37 DataReductionProxySettings
* settings
)
38 : DataReductionProxySettingsAndroid(),
39 settings_(settings
) {}
41 // Returns the provided setting object. Used by wrapping methods.
42 virtual DataReductionProxySettings
* Settings() OVERRIDE
{
46 // The wrapped settings object.
47 DataReductionProxySettings
* settings_
;
51 void data_reduction_proxy::DataReductionProxySettingsTestBase::ResetSettings(
53 bool fallback_allowed
,
59 flags
|= DataReductionProxyParams::kAllowed
;
61 flags
|= DataReductionProxyParams::kFallbackAllowed
;
63 flags
|= DataReductionProxyParams::kAlternativeAllowed
;
65 flags
|= DataReductionProxyParams::kPromoAllowed
;
67 flags
|= DataReductionProxyParams::kHoldback
;
68 MockDataReductionProxySettings
<C
>* settings
=
69 new MockDataReductionProxySettings
<C
>(flags
);
70 EXPECT_CALL(*settings
, GetOriginalProfilePrefs())
72 .WillRepeatedly(Return(&pref_service_
));
73 EXPECT_CALL(*settings
, GetLocalStatePrefs())
75 .WillRepeatedly(Return(&pref_service_
));
76 EXPECT_CALL(*settings
, GetURLFetcherForAvailabilityCheck()).Times(0);
77 EXPECT_CALL(*settings
, LogProxyState(_
, _
, _
)).Times(0);
78 settings_
.reset(settings
);
79 settings_
->SetDataReductionProxyStatisticsPrefs(statistics_prefs_
.get());
83 void data_reduction_proxy::DataReductionProxySettingsTestBase::SetProbeResult(
84 const std::string
& test_url
,
85 const std::string
& response
,
86 ProbeURLFetchResult result
,
89 MockDataReductionProxySettings
<C
>* settings
=
90 static_cast<MockDataReductionProxySettings
<C
>*>(settings_
.get());
91 if (0 == expected_calls
) {
92 EXPECT_CALL(*settings
, GetURLFetcherForAvailabilityCheck()).Times(0);
93 EXPECT_CALL(*settings
, RecordProbeURLFetchResult(_
)).Times(0);
95 EXPECT_CALL(*settings
, RecordProbeURLFetchResult(result
)).Times(1);
96 EXPECT_CALL(*settings
, GetURLFetcherForAvailabilityCheck())
97 .Times(expected_calls
)
98 .WillRepeatedly(Return(new net::FakeURLFetcher(
102 success
? net::HTTP_OK
: net::HTTP_INTERNAL_SERVER_ERROR
,
103 success
? net::URLRequestStatus::SUCCESS
:
104 net::URLRequestStatus::FAILED
)));
109 data_reduction_proxy::DataReductionProxySettingsTestBase::ResetSettings
<
110 DataReductionProxyChromeSettings
>(bool allowed
,
111 bool fallback_allowed
,
117 data_reduction_proxy::DataReductionProxySettingsTestBase::SetProbeResult
<
118 DataReductionProxyChromeSettings
>(const std::string
& test_url
,
119 const std::string
& response
,
120 ProbeURLFetchResult result
,
124 class DataReductionProxySettingsAndroidTest
125 : public data_reduction_proxy::ConcreteDataReductionProxySettingsTest
<
126 DataReductionProxyChromeSettings
> {
128 // DataReductionProxySettingsTest implementation:
129 virtual void SetUp() OVERRIDE
{
130 env_
= base::android::AttachCurrentThread();
131 DataReductionProxySettingsAndroid::Register(env_
);
132 DataReductionProxySettingsTestBase::SetUp();
133 ResetSettingsAndroid();
136 void ResetSettingsAndroid() {
137 settings_android_
.reset(new TestDataReductionProxySettingsAndroid(
141 DataReductionProxySettings
* Settings() {
142 return settings_
.get();
145 DataReductionProxySettingsAndroid
* SettingsAndroid() {
146 return settings_android_
.get();
149 scoped_ptr
<DataReductionProxySettingsAndroid
> settings_android_
;
153 TEST_F(DataReductionProxySettingsAndroidTest
, TestGetDataReductionProxyOrigin
) {
154 // SetUp() adds the origin to the command line, which should be returned here.
155 ScopedJavaLocalRef
<jstring
> result
=
156 SettingsAndroid()->GetDataReductionProxyOrigin(env_
, NULL
);
157 ASSERT_TRUE(result
.obj());
158 const base::android::JavaRef
<jstring
>& str_ref
= result
;
159 EXPECT_EQ(GURL(expected_params_
->DefaultOrigin()),
160 GURL(ConvertJavaStringToUTF8(str_ref
)));
163 TEST_F(DataReductionProxySettingsAndroidTest
,
164 TestGetDataReductionProxyDevOrigin
) {
165 CommandLine::ForCurrentProcess()->AppendSwitchASCII(
166 data_reduction_proxy::switches::kDataReductionProxyDev
,
167 kDataReductionProxyDev
);
168 ResetSettings(true, true, false, true, false);
169 ResetSettingsAndroid();
170 ScopedJavaLocalRef
<jstring
> result
=
171 SettingsAndroid()->GetDataReductionProxyOrigin(env_
, NULL
);
172 ASSERT_TRUE(result
.obj());
173 const base::android::JavaRef
<jstring
>& str_ref
= result
;
174 EXPECT_EQ(GURL(kDataReductionProxyDev
),
175 GURL(ConvertJavaStringToUTF8(str_ref
)));
178 TEST_F(DataReductionProxySettingsAndroidTest
, TestGetDailyContentLengths
) {
179 ScopedJavaLocalRef
<jlongArray
> result
=
180 SettingsAndroid()->GetDailyContentLengths(
181 env_
, data_reduction_proxy::prefs::kDailyHttpOriginalContentLength
);
182 ASSERT_TRUE(result
.obj());
184 jsize java_array_len
= env_
->GetArrayLength(result
.obj());
185 ASSERT_EQ(static_cast<jsize
>(data_reduction_proxy::kNumDaysInHistory
),
189 for (size_t i
= 0; i
< data_reduction_proxy::kNumDaysInHistory
; ++i
) {
190 env_
->GetLongArrayRegion(result
.obj(), i
, 1, &value
);
193 (data_reduction_proxy::kNumDaysInHistory
- 1 - i
) * 2), value
);