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 |