| 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 |