| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "net/proxy/proxy_config_service_android.h" | 5 #include "net/proxy/proxy_config_service_android.h" |
| 6 | 6 |
| 7 #include <sys/system_properties.h> | 7 #include <sys/system_properties.h> |
| 8 | 8 |
| 9 #include "base/android/jni_array.h" | 9 #include "base/android/jni_array.h" |
| 10 #include "base/android/jni_string.h" | 10 #include "base/android/jni_string.h" |
| (...skipping 179 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 190 | 190 |
| 191 class ProxyConfigServiceAndroid::Delegate | 191 class ProxyConfigServiceAndroid::Delegate |
| 192 : public base::RefCountedThreadSafe<Delegate> { | 192 : public base::RefCountedThreadSafe<Delegate> { |
| 193 public: | 193 public: |
| 194 Delegate(const scoped_refptr<base::SequencedTaskRunner>& network_task_runner, | 194 Delegate(const scoped_refptr<base::SequencedTaskRunner>& network_task_runner, |
| 195 const scoped_refptr<base::SequencedTaskRunner>& jni_task_runner, | 195 const scoped_refptr<base::SequencedTaskRunner>& jni_task_runner, |
| 196 const GetPropertyCallback& get_property_callback) | 196 const GetPropertyCallback& get_property_callback) |
| 197 : jni_delegate_(this), | 197 : jni_delegate_(this), |
| 198 network_task_runner_(network_task_runner), | 198 network_task_runner_(network_task_runner), |
| 199 jni_task_runner_(jni_task_runner), | 199 jni_task_runner_(jni_task_runner), |
| 200 get_property_callback_(get_property_callback) { | 200 get_property_callback_(get_property_callback), |
| 201 exclude_pac_url_(false) { |
| 201 } | 202 } |
| 202 | 203 |
| 203 void SetupJNI() { | 204 void SetupJNI() { |
| 204 DCHECK(OnJNIThread()); | 205 DCHECK(OnJNIThread()); |
| 205 JNIEnv* env = AttachCurrentThread(); | 206 JNIEnv* env = AttachCurrentThread(); |
| 206 if (java_proxy_change_listener_.is_null()) { | 207 if (java_proxy_change_listener_.is_null()) { |
| 207 java_proxy_change_listener_.Reset( | 208 java_proxy_change_listener_.Reset( |
| 208 Java_ProxyChangeListener_create( | 209 Java_ProxyChangeListener_create( |
| 209 env, base::android::GetApplicationContext())); | 210 env, base::android::GetApplicationContext())); |
| 210 CHECK(!java_proxy_change_listener_.is_null()); | 211 CHECK(!java_proxy_change_listener_.is_null()); |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 264 &Delegate::SetNewConfigOnNetworkThread, this, proxy_config)); | 265 &Delegate::SetNewConfigOnNetworkThread, this, proxy_config)); |
| 265 } | 266 } |
| 266 | 267 |
| 267 // Called on the JNI thread. | 268 // Called on the JNI thread. |
| 268 void ProxySettingsChangedTo(const std::string& host, | 269 void ProxySettingsChangedTo(const std::string& host, |
| 269 int port, | 270 int port, |
| 270 const std::string& pac_url, | 271 const std::string& pac_url, |
| 271 const std::vector<std::string>& exclusion_list) { | 272 const std::vector<std::string>& exclusion_list) { |
| 272 DCHECK(OnJNIThread()); | 273 DCHECK(OnJNIThread()); |
| 273 ProxyConfig proxy_config; | 274 ProxyConfig proxy_config; |
| 274 CreateStaticProxyConfig(host, port, pac_url, exclusion_list, &proxy_config); | 275 if (exclude_pac_url_) { |
| 276 CreateStaticProxyConfig(host, port, "", exclusion_list, &proxy_config); |
| 277 } else { |
| 278 CreateStaticProxyConfig(host, port, pac_url, exclusion_list, |
| 279 &proxy_config); |
| 280 } |
| 275 network_task_runner_->PostTask( | 281 network_task_runner_->PostTask( |
| 276 FROM_HERE, | 282 FROM_HERE, |
| 277 base::Bind( | 283 base::Bind( |
| 278 &Delegate::SetNewConfigOnNetworkThread, this, proxy_config)); | 284 &Delegate::SetNewConfigOnNetworkThread, this, proxy_config)); |
| 279 } | 285 } |
| 280 | 286 |
| 287 void set_exclude_pac_url(bool enabled) { |
| 288 exclude_pac_url_ = enabled; |
| 289 } |
| 290 |
| 281 private: | 291 private: |
| 282 friend class base::RefCountedThreadSafe<Delegate>; | 292 friend class base::RefCountedThreadSafe<Delegate>; |
| 283 | 293 |
| 284 class JNIDelegateImpl : public ProxyConfigServiceAndroid::JNIDelegate { | 294 class JNIDelegateImpl : public ProxyConfigServiceAndroid::JNIDelegate { |
| 285 public: | 295 public: |
| 286 explicit JNIDelegateImpl(Delegate* delegate) : delegate_(delegate) {} | 296 explicit JNIDelegateImpl(Delegate* delegate) : delegate_(delegate) {} |
| 287 | 297 |
| 288 // ProxyConfigServiceAndroid::JNIDelegate overrides. | 298 // ProxyConfigServiceAndroid::JNIDelegate overrides. |
| 289 virtual void ProxySettingsChangedTo(JNIEnv* env, | 299 virtual void ProxySettingsChangedTo(JNIEnv* env, |
| 290 jobject jself, | 300 jobject jself, |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 337 } | 347 } |
| 338 | 348 |
| 339 ScopedJavaGlobalRef<jobject> java_proxy_change_listener_; | 349 ScopedJavaGlobalRef<jobject> java_proxy_change_listener_; |
| 340 | 350 |
| 341 JNIDelegateImpl jni_delegate_; | 351 JNIDelegateImpl jni_delegate_; |
| 342 ObserverList<Observer> observers_; | 352 ObserverList<Observer> observers_; |
| 343 scoped_refptr<base::SequencedTaskRunner> network_task_runner_; | 353 scoped_refptr<base::SequencedTaskRunner> network_task_runner_; |
| 344 scoped_refptr<base::SequencedTaskRunner> jni_task_runner_; | 354 scoped_refptr<base::SequencedTaskRunner> jni_task_runner_; |
| 345 GetPropertyCallback get_property_callback_; | 355 GetPropertyCallback get_property_callback_; |
| 346 ProxyConfig proxy_config_; | 356 ProxyConfig proxy_config_; |
| 357 bool exclude_pac_url_; |
| 347 | 358 |
| 348 DISALLOW_COPY_AND_ASSIGN(Delegate); | 359 DISALLOW_COPY_AND_ASSIGN(Delegate); |
| 349 }; | 360 }; |
| 350 | 361 |
| 351 ProxyConfigServiceAndroid::ProxyConfigServiceAndroid( | 362 ProxyConfigServiceAndroid::ProxyConfigServiceAndroid( |
| 352 const scoped_refptr<base::SequencedTaskRunner>& network_task_runner, | 363 const scoped_refptr<base::SequencedTaskRunner>& network_task_runner, |
| 353 const scoped_refptr<base::SequencedTaskRunner>& jni_task_runner) | 364 const scoped_refptr<base::SequencedTaskRunner>& jni_task_runner) |
| 354 : delegate_(new Delegate( | 365 : delegate_(new Delegate( |
| 355 network_task_runner, jni_task_runner, base::Bind(&GetJavaProperty))) { | 366 network_task_runner, jni_task_runner, base::Bind(&GetJavaProperty))) { |
| 356 delegate_->SetupJNI(); | 367 delegate_->SetupJNI(); |
| 357 delegate_->FetchInitialConfig(); | 368 delegate_->FetchInitialConfig(); |
| 358 } | 369 } |
| 359 | 370 |
| 360 ProxyConfigServiceAndroid::~ProxyConfigServiceAndroid() { | 371 ProxyConfigServiceAndroid::~ProxyConfigServiceAndroid() { |
| 361 delegate_->Shutdown(); | 372 delegate_->Shutdown(); |
| 362 } | 373 } |
| 363 | 374 |
| 364 // static | 375 // static |
| 365 bool ProxyConfigServiceAndroid::Register(JNIEnv* env) { | 376 bool ProxyConfigServiceAndroid::Register(JNIEnv* env) { |
| 366 return RegisterNativesImpl(env); | 377 return RegisterNativesImpl(env); |
| 367 } | 378 } |
| 368 | 379 |
| 380 void ProxyConfigServiceAndroid::set_exclude_pac_url(bool enabled) { |
| 381 delegate_->set_exclude_pac_url(enabled); |
| 382 } |
| 383 |
| 369 void ProxyConfigServiceAndroid::AddObserver(Observer* observer) { | 384 void ProxyConfigServiceAndroid::AddObserver(Observer* observer) { |
| 370 delegate_->AddObserver(observer); | 385 delegate_->AddObserver(observer); |
| 371 } | 386 } |
| 372 | 387 |
| 373 void ProxyConfigServiceAndroid::RemoveObserver(Observer* observer) { | 388 void ProxyConfigServiceAndroid::RemoveObserver(Observer* observer) { |
| 374 delegate_->RemoveObserver(observer); | 389 delegate_->RemoveObserver(observer); |
| 375 } | 390 } |
| 376 | 391 |
| 377 ProxyConfigService::ConfigAvailability | 392 ProxyConfigService::ConfigAvailability |
| 378 ProxyConfigServiceAndroid::GetLatestProxyConfig(ProxyConfig* config) { | 393 ProxyConfigServiceAndroid::GetLatestProxyConfig(ProxyConfig* config) { |
| 379 return delegate_->GetLatestProxyConfig(config); | 394 return delegate_->GetLatestProxyConfig(config); |
| 380 } | 395 } |
| 381 | 396 |
| 382 ProxyConfigServiceAndroid::ProxyConfigServiceAndroid( | 397 ProxyConfigServiceAndroid::ProxyConfigServiceAndroid( |
| 383 const scoped_refptr<base::SequencedTaskRunner>& network_task_runner, | 398 const scoped_refptr<base::SequencedTaskRunner>& network_task_runner, |
| 384 const scoped_refptr<base::SequencedTaskRunner>& jni_task_runner, | 399 const scoped_refptr<base::SequencedTaskRunner>& jni_task_runner, |
| 385 GetPropertyCallback get_property_callback) | 400 GetPropertyCallback get_property_callback) |
| 386 : delegate_(new Delegate( | 401 : delegate_(new Delegate( |
| 387 network_task_runner, jni_task_runner, get_property_callback)) { | 402 network_task_runner, jni_task_runner, get_property_callback)) { |
| 388 delegate_->SetupJNI(); | 403 delegate_->SetupJNI(); |
| 389 delegate_->FetchInitialConfig(); | 404 delegate_->FetchInitialConfig(); |
| 390 } | 405 } |
| 391 | 406 |
| 392 void ProxyConfigServiceAndroid::ProxySettingsChanged() { | 407 void ProxyConfigServiceAndroid::ProxySettingsChanged() { |
| 393 delegate_->ProxySettingsChanged(); | 408 delegate_->ProxySettingsChanged(); |
| 394 } | 409 } |
| 395 | 410 |
| 396 } // namespace net | 411 } // namespace net |
| OLD | NEW |