OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/browser/net/spdyproxy/data_reduction_proxy_settings_android.h" | 5 #include "chrome/browser/net/spdyproxy/data_reduction_proxy_settings_android.h" |
6 | 6 |
7 #include "base/android/build_info.h" | |
8 #include "base/android/jni_android.h" | 7 #include "base/android/jni_android.h" |
9 #include "base/android/jni_string.h" | 8 #include "base/android/jni_string.h" |
10 #include "base/bind.h" | |
11 #include "base/command_line.h" | |
12 #include "base/memory/scoped_ptr.h" | |
13 #include "base/metrics/field_trial.h" | |
14 #include "base/metrics/histogram.h" | |
15 #include "base/prefs/pref_member.h" | |
16 #include "base/prefs/pref_service.h" | |
17 #include "base/strings/string_number_conversions.h" | |
18 #include "base/strings/utf_string_conversions.h" | |
19 #include "chrome/browser/browser_process.h" | |
20 #include "chrome/browser/net/spdyproxy/data_reduction_proxy_chrome_configurator.
h" | 9 #include "chrome/browser/net/spdyproxy/data_reduction_proxy_chrome_configurator.
h" |
21 #include "chrome/browser/net/spdyproxy/data_reduction_proxy_settings_factory_and
roid.h" | 10 #include "chrome/browser/net/spdyproxy/data_reduction_proxy_chrome_settings.h" |
22 #include "chrome/browser/prefs/proxy_prefs.h" | 11 #include "chrome/browser/net/spdyproxy/data_reduction_proxy_chrome_settings_fact
ory.h" |
23 #include "chrome/browser/profiles/profile.h" | 12 #include "chrome/browser/profiles/profile.h" |
24 #include "chrome/browser/profiles/profile_manager.h" | 13 #include "chrome/browser/profiles/profile_manager.h" |
25 #include "chrome/common/chrome_switches.h" | |
26 #include "chrome/common/pref_names.h" | 14 #include "chrome/common/pref_names.h" |
27 #include "components/data_reduction_proxy/browser/data_reduction_proxy_configura
tor.h" | |
28 #include "components/data_reduction_proxy/browser/data_reduction_proxy_params.h" | 15 #include "components/data_reduction_proxy/browser/data_reduction_proxy_params.h" |
29 #include "components/data_reduction_proxy/browser/data_reduction_proxy_settings.
h" | 16 #include "components/data_reduction_proxy/browser/data_reduction_proxy_settings.
h" |
| 17 #include "components/data_reduction_proxy/browser/data_reduction_proxy_usage_sta
ts.h" |
30 #include "jni/DataReductionProxySettings_jni.h" | 18 #include "jni/DataReductionProxySettings_jni.h" |
31 #include "net/base/auth.h" | |
32 #include "net/base/host_port_pair.h" | |
33 #include "net/base/load_flags.h" | |
34 #include "net/base/net_errors.h" | |
35 #include "net/url_request/url_fetcher.h" | |
36 #include "net/url_request/url_fetcher_delegate.h" | |
37 #include "net/url_request/url_request_status.h" | |
38 | 19 |
39 using base::android::CheckException; | 20 |
40 using base::android::ConvertJavaStringToUTF8; | |
41 using base::android::ConvertUTF16ToJavaString; | |
42 using base::android::ConvertUTF8ToJavaString; | 21 using base::android::ConvertUTF8ToJavaString; |
43 using base::android::ScopedJavaLocalRef; | 22 using base::android::ScopedJavaLocalRef; |
44 using data_reduction_proxy::DataReductionProxyParams; | 23 using data_reduction_proxy::DataReductionProxyParams; |
45 using data_reduction_proxy::DataReductionProxySettings; | 24 using data_reduction_proxy::DataReductionProxySettings; |
46 | 25 |
47 namespace { | 26 DataReductionProxySettingsAndroid::DataReductionProxySettingsAndroid() { |
48 | |
49 // The C++ definition of enum SpdyProxyAuthState defined in | |
50 // tools/histograms/histograms.xml. | |
51 // New values should be added at the end before |NUM_SPDY_PROXY_AUTH_STATE|. | |
52 enum { | |
53 CHROME_STARTUP, | |
54 SPDY_PROXY_AUTH_ON_AT_STARTUP, | |
55 SPDY_PROXY_AUTH_ON_BY_USER, | |
56 SPDY_PROXY_AUTH_OFF_BY_USER, | |
57 // Used by UMA histograms and should always be the last value. | |
58 NUM_SPDY_PROXY_AUTH_STATE | |
59 }; | |
60 | |
61 } // namespace | |
62 | |
63 DataReductionProxySettingsAndroid::DataReductionProxySettingsAndroid( | |
64 data_reduction_proxy::DataReductionProxyParams* params) | |
65 : DataReductionProxySettings(params) { | |
66 } | 27 } |
67 | 28 |
68 DataReductionProxySettingsAndroid::~DataReductionProxySettingsAndroid() { | 29 DataReductionProxySettingsAndroid::~DataReductionProxySettingsAndroid() { |
69 } | 30 } |
70 | 31 |
71 void DataReductionProxySettingsAndroid::InitDataReductionProxySettings( | |
72 Profile* profile) { | |
73 DCHECK(profile); | |
74 PrefService* prefs = profile->GetPrefs(); | |
75 | |
76 scoped_ptr<data_reduction_proxy::DataReductionProxyConfigurator> | |
77 configurator(new DataReductionProxyChromeConfigurator(prefs)); | |
78 SetProxyConfigurator(configurator.Pass()); | |
79 DataReductionProxySettings::InitDataReductionProxySettings( | |
80 prefs, | |
81 g_browser_process->local_state(), | |
82 ProfileManager::GetActiveUserProfile()->GetRequestContext()); | |
83 DataReductionProxySettings::SetDataReductionProxyAlternativeEnabled( | |
84 DataReductionProxyParams::IsIncludedInAlternativeFieldTrial()); | |
85 } | |
86 | |
87 void DataReductionProxySettingsAndroid::BypassHostPattern( | |
88 JNIEnv* env, jobject obj, jstring pattern) { | |
89 configurator()->AddHostPatternToBypass( | |
90 ConvertJavaStringToUTF8(env, pattern)); | |
91 } | |
92 void DataReductionProxySettingsAndroid::BypassURLPattern( | |
93 JNIEnv* env, jobject obj, jstring pattern) { | |
94 configurator()->AddURLPatternToBypass(ConvertJavaStringToUTF8(env, pattern)); | |
95 } | |
96 | |
97 jboolean DataReductionProxySettingsAndroid::IsDataReductionProxyAllowed( | 32 jboolean DataReductionProxySettingsAndroid::IsDataReductionProxyAllowed( |
98 JNIEnv* env, jobject obj) { | 33 JNIEnv* env, jobject obj) { |
99 return params()->allowed(); | 34 return Settings()->params()->allowed(); |
100 } | 35 } |
101 | 36 |
102 jboolean DataReductionProxySettingsAndroid::IsDataReductionProxyPromoAllowed( | 37 jboolean DataReductionProxySettingsAndroid::IsDataReductionProxyPromoAllowed( |
103 JNIEnv* env, jobject obj) { | 38 JNIEnv* env, jobject obj) { |
104 return params()->promo_allowed(); | 39 return Settings()->params()->promo_allowed(); |
105 } | 40 } |
106 | 41 |
107 jboolean DataReductionProxySettingsAndroid::IsIncludedInAltFieldTrial( | 42 jboolean DataReductionProxySettingsAndroid::IsIncludedInAltFieldTrial( |
108 JNIEnv* env, jobject obj) { | 43 JNIEnv* env, jobject obj) { |
109 return DataReductionProxyParams::IsIncludedInAlternativeFieldTrial(); | 44 return DataReductionProxyParams::IsIncludedInAlternativeFieldTrial(); |
110 } | 45 } |
111 | 46 |
112 ScopedJavaLocalRef<jstring> | 47 ScopedJavaLocalRef<jstring> |
113 DataReductionProxySettingsAndroid::GetDataReductionProxyOrigin( | 48 DataReductionProxySettingsAndroid::GetDataReductionProxyOrigin( |
114 JNIEnv* env, jobject obj) { | 49 JNIEnv* env, jobject obj) { |
115 return ConvertUTF8ToJavaString(env, params()->origin().spec()); | 50 return ConvertUTF8ToJavaString(env, Settings()->params()->origin().spec()); |
116 } | 51 } |
117 | 52 |
118 jboolean DataReductionProxySettingsAndroid::IsDataReductionProxyEnabled( | 53 jboolean DataReductionProxySettingsAndroid::IsDataReductionProxyEnabled( |
119 JNIEnv* env, jobject obj) { | 54 JNIEnv* env, jobject obj) { |
120 return DataReductionProxySettings::IsDataReductionProxyEnabled(); | 55 return Settings()->IsDataReductionProxyEnabled(); |
121 } | 56 } |
122 | 57 |
123 jboolean DataReductionProxySettingsAndroid::IsDataReductionProxyManaged( | 58 jboolean DataReductionProxySettingsAndroid::IsDataReductionProxyManaged( |
124 JNIEnv* env, jobject obj) { | 59 JNIEnv* env, jobject obj) { |
125 return DataReductionProxySettings::IsDataReductionProxyManaged(); | 60 return Settings()->IsDataReductionProxyManaged(); |
126 } | 61 } |
127 | 62 |
128 void DataReductionProxySettingsAndroid::SetDataReductionProxyEnabled( | 63 void DataReductionProxySettingsAndroid::SetDataReductionProxyEnabled( |
129 JNIEnv* env, | 64 JNIEnv* env, |
130 jobject obj, | 65 jobject obj, |
131 jboolean enabled) { | 66 jboolean enabled) { |
132 DataReductionProxySettings::SetDataReductionProxyEnabled(enabled); | 67 Settings()->SetDataReductionProxyEnabled(enabled); |
133 } | 68 } |
134 | 69 |
135 jlong DataReductionProxySettingsAndroid::GetDataReductionLastUpdateTime( | 70 jlong DataReductionProxySettingsAndroid::GetDataReductionLastUpdateTime( |
136 JNIEnv* env, jobject obj) { | 71 JNIEnv* env, jobject obj) { |
137 return DataReductionProxySettings::GetDataReductionLastUpdateTime(); | 72 return Settings()->GetDataReductionLastUpdateTime(); |
138 } | 73 } |
139 | 74 |
140 base::android::ScopedJavaLocalRef<jobject> | 75 base::android::ScopedJavaLocalRef<jobject> |
141 DataReductionProxySettingsAndroid::GetContentLengths(JNIEnv* env, | 76 DataReductionProxySettingsAndroid::GetContentLengths(JNIEnv* env, |
142 jobject obj) { | 77 jobject obj) { |
143 int64 original_content_length; | 78 int64 original_content_length; |
144 int64 received_content_length; | 79 int64 received_content_length; |
145 int64 last_update_internal; | 80 int64 last_update_internal; |
146 DataReductionProxySettings::GetContentLengths( | 81 Settings()->GetContentLengths( |
147 data_reduction_proxy::kNumDaysInHistorySummary, | 82 data_reduction_proxy::kNumDaysInHistorySummary, |
148 &original_content_length, | 83 &original_content_length, |
149 &received_content_length, | 84 &received_content_length, |
150 &last_update_internal); | 85 &last_update_internal); |
151 | 86 |
152 return Java_ContentLengths_create(env, | 87 return Java_ContentLengths_create(env, |
153 original_content_length, | 88 original_content_length, |
154 received_content_length); | 89 received_content_length); |
155 } | 90 } |
156 | 91 |
157 ScopedJavaLocalRef<jlongArray> | 92 ScopedJavaLocalRef<jlongArray> |
158 DataReductionProxySettingsAndroid::GetDailyOriginalContentLengths( | 93 DataReductionProxySettingsAndroid::GetDailyOriginalContentLengths( |
159 JNIEnv* env, jobject obj) { | 94 JNIEnv* env, jobject obj) { |
160 return GetDailyContentLengths( | 95 return GetDailyContentLengths( |
161 env, data_reduction_proxy::prefs::kDailyHttpOriginalContentLength); | 96 env, data_reduction_proxy::prefs::kDailyHttpOriginalContentLength); |
162 } | 97 } |
163 | 98 |
164 ScopedJavaLocalRef<jlongArray> | 99 ScopedJavaLocalRef<jlongArray> |
165 DataReductionProxySettingsAndroid::GetDailyReceivedContentLengths( | 100 DataReductionProxySettingsAndroid::GetDailyReceivedContentLengths( |
166 JNIEnv* env, jobject obj) { | 101 JNIEnv* env, jobject obj) { |
167 return GetDailyContentLengths( | 102 return GetDailyContentLengths( |
168 env, data_reduction_proxy::prefs::kDailyHttpReceivedContentLength); | 103 env, data_reduction_proxy::prefs::kDailyHttpReceivedContentLength); |
169 } | 104 } |
170 | 105 |
171 jboolean DataReductionProxySettingsAndroid::IsDataReductionProxyUnreachable( | 106 jboolean DataReductionProxySettingsAndroid::IsDataReductionProxyUnreachable( |
172 JNIEnv* env, jobject obj) { | 107 JNIEnv* env, jobject obj) { |
173 DCHECK(usage_stats()); | 108 return Settings()->IsDataReductionProxyUnreachable(); |
174 return usage_stats()->isDataReductionProxyUnreachable(); | |
175 } | 109 } |
176 | 110 |
177 // static | 111 // static |
178 bool DataReductionProxySettingsAndroid::Register(JNIEnv* env) { | 112 bool DataReductionProxySettingsAndroid::Register(JNIEnv* env) { |
179 bool register_natives_impl_result = RegisterNativesImpl(env); | 113 bool register_natives_impl_result = RegisterNativesImpl(env); |
180 return register_natives_impl_result; | 114 return register_natives_impl_result; |
181 } | 115 } |
182 | 116 |
183 void DataReductionProxySettingsAndroid::AddDefaultProxyBypassRules() { | |
184 DataReductionProxySettings::AddDefaultProxyBypassRules(); | |
185 // Chrome cannot authenticate with the data reduction proxy when fetching URLs | |
186 // from the settings menu. | |
187 configurator()->AddURLPatternToBypass( | |
188 "http://www.google.com/policies/privacy*"); | |
189 } | |
190 | |
191 void DataReductionProxySettingsAndroid::SetProxyConfigs( | |
192 bool enabled, | |
193 bool alternative_enabled, | |
194 bool restricted, | |
195 bool at_startup) { | |
196 // Sanity check: If there's no fallback proxy, we can't do a restricted mode. | |
197 std::string fallback = params()->fallback_origin().spec(); | |
198 if (fallback.empty() && enabled && restricted) | |
199 enabled = false; | |
200 | |
201 LogProxyState(enabled, restricted, at_startup); | |
202 | |
203 if (enabled && !params()->holdback()) { | |
204 if (alternative_enabled) { | |
205 configurator()->Enable(restricted, | |
206 !params()->fallback_allowed(), | |
207 params()->alt_origin().spec(), | |
208 params()->alt_fallback_origin().spec(), | |
209 params()->ssl_origin().spec()); | |
210 } else { | |
211 configurator()->Enable(restricted, | |
212 !params()->fallback_allowed(), | |
213 params()->origin().spec(), | |
214 params()->fallback_origin().spec(), | |
215 std::string()); | |
216 } | |
217 } else { | |
218 configurator()->Disable(); | |
219 } | |
220 } | |
221 | |
222 ScopedJavaLocalRef<jlongArray> | 117 ScopedJavaLocalRef<jlongArray> |
223 DataReductionProxySettingsAndroid::GetDailyContentLengths( | 118 DataReductionProxySettingsAndroid::GetDailyContentLengths( |
224 JNIEnv* env, const char* pref_name) { | 119 JNIEnv* env, const char* pref_name) { |
225 jlongArray result = env->NewLongArray( | 120 jlongArray result = env->NewLongArray( |
226 data_reduction_proxy::kNumDaysInHistory); | 121 data_reduction_proxy::kNumDaysInHistory); |
227 | 122 |
228 DataReductionProxySettings::ContentLengthList lengths = | 123 DataReductionProxySettings::ContentLengthList lengths = |
229 DataReductionProxySettings::GetDailyContentLengths(pref_name); | 124 Settings()->GetDailyContentLengths(pref_name); |
230 | 125 |
231 if (!lengths.empty()) { | 126 if (!lengths.empty()) { |
232 DCHECK_EQ(lengths.size(), data_reduction_proxy::kNumDaysInHistory); | 127 DCHECK_EQ(lengths.size(), data_reduction_proxy::kNumDaysInHistory); |
233 env->SetLongArrayRegion(result, 0, lengths.size(), &lengths[0]); | 128 env->SetLongArrayRegion(result, 0, lengths.size(), &lengths[0]); |
234 return ScopedJavaLocalRef<jlongArray>(env, result); | 129 return ScopedJavaLocalRef<jlongArray>(env, result); |
235 } | 130 } |
236 | 131 |
237 return ScopedJavaLocalRef<jlongArray>(env, result); | 132 return ScopedJavaLocalRef<jlongArray>(env, result); |
238 } | 133 } |
239 | 134 |
| 135 DataReductionProxySettings* DataReductionProxySettingsAndroid::Settings() { |
| 136 DataReductionProxySettings* settings = |
| 137 DataReductionProxyChromeSettingsFactory::GetForBrowserContext( |
| 138 ProfileManager::GetActiveUserProfile()); |
| 139 DCHECK(settings); |
| 140 return settings; |
| 141 } |
240 | 142 |
241 | 143 |
242 // Used by generated jni code. | 144 // Used by generated jni code. |
243 static jlong Init(JNIEnv* env, jobject obj) { | 145 static jlong Init(JNIEnv* env, jobject obj) { |
244 DataReductionProxySettingsAndroid* settings = | 146 return reinterpret_cast<intptr_t>(new DataReductionProxySettingsAndroid()); |
245 DataReductionProxySettingsFactoryAndroid::GetForBrowserContext( | |
246 ProfileManager::GetActiveUserProfile()); | |
247 return reinterpret_cast<intptr_t>(settings); | |
248 } | 147 } |
OLD | NEW |