Chromium Code Reviews| Index: net/proxy/proxy_config_service_android.cc |
| diff --git a/net/proxy/proxy_config_service_android.cc b/net/proxy/proxy_config_service_android.cc |
| index 6a0be78d020561dfc193375b40c051b47eaa2008..95c6980e7cb0f03c5abfdfdf4492a4212184f17c 100644 |
| --- a/net/proxy/proxy_config_service_android.cc |
| +++ b/net/proxy/proxy_config_service_android.cc |
| @@ -161,16 +161,16 @@ class ProxyConfigServiceAndroid::Delegate |
| : public base::RefCountedThreadSafe<Delegate> { |
| public: |
| Delegate(base::SequencedTaskRunner* network_task_runner, |
| - base::SequencedTaskRunner* jni_task_runner, |
| + base::SequencedTaskRunner* glib_task_runner, |
| const GetPropertyCallback& get_property_callback) |
| : ALLOW_THIS_IN_INITIALIZER_LIST(jni_delegate_(this)), |
| network_task_runner_(network_task_runner), |
| - jni_task_runner_(jni_task_runner), |
| + glib_task_runner_(glib_task_runner), |
| get_property_callback_(get_property_callback) { |
| } |
| void SetupJNI() { |
| - DCHECK(OnJNIThread()); |
| + DCHECK(OnNetworkThread()); |
| JNIEnv* env = AttachCurrentThread(); |
| if (java_proxy_change_listener_.is_null()) { |
| java_proxy_change_listener_.Reset( |
| @@ -185,22 +185,16 @@ class ProxyConfigServiceAndroid::Delegate |
| } |
| void FetchInitialConfig() { |
| - DCHECK(OnJNIThread()); |
| - ProxyConfig proxy_config; |
| - GetLatestProxyConfigInternal(get_property_callback_, &proxy_config); |
| - network_task_runner_->PostTask( |
| - FROM_HERE, |
| - base::Bind(&Delegate::SetNewConfigOnNetworkThread, this, proxy_config)); |
| + DCHECK(OnNetworkThread()); |
| + SetNewConfigOnNetworkThread(); |
| } |
| - void Shutdown() { |
| - if (OnJNIThread()) { |
| - ShutdownOnJNIThread(); |
| - } else { |
| - jni_task_runner_->PostTask( |
| - FROM_HERE, |
| - base::Bind(&Delegate::ShutdownOnJNIThread, this)); |
| - } |
| + void StartTearDown() { |
|
Philippe
2012/10/19 09:35:25
Sorry, I didn't see at first that this was called
pauljensen
2012/10/19 16:00:13
I wondered about all this JNI thread interaction a
Philippe
2012/10/19 16:34:12
I agree that destruction should happen on the UI t
|
| + DCHECK(OnGlibThread()); |
| + if (java_proxy_change_listener_.is_null()) |
| + return; |
| + JNIEnv* env = AttachCurrentThread(); |
| + Java_ProxyChangeListener_stop(env, java_proxy_change_listener_.obj()); |
| } |
| // Called only on the network thread. |
| @@ -222,15 +216,12 @@ class ProxyConfigServiceAndroid::Delegate |
| return ProxyConfigService::CONFIG_VALID; |
| } |
| - // Called on the JNI thread. |
| + // Called on the glib thread. |
| void ProxySettingsChanged() { |
| - DCHECK(OnJNIThread()); |
| - ProxyConfig proxy_config; |
| - GetLatestProxyConfigInternal(get_property_callback_, &proxy_config); |
| + DCHECK(OnGlibThread()); |
| network_task_runner_->PostTask( |
| FROM_HERE, |
| - base::Bind( |
| - &Delegate::SetNewConfigOnNetworkThread, this, proxy_config)); |
| + base::Bind(&Delegate::SetNewConfigOnNetworkThread, this)); |
| } |
| private: |
| @@ -251,24 +242,17 @@ class ProxyConfigServiceAndroid::Delegate |
| virtual ~Delegate() {} |
| - void ShutdownOnJNIThread() { |
| - if (java_proxy_change_listener_.is_null()) |
| - return; |
| - JNIEnv* env = AttachCurrentThread(); |
| - Java_ProxyChangeListener_stop(env, java_proxy_change_listener_.obj()); |
| - } |
| - |
| // Called on the network thread. |
| - void SetNewConfigOnNetworkThread(const ProxyConfig& proxy_config) { |
| + void SetNewConfigOnNetworkThread() { |
| DCHECK(OnNetworkThread()); |
| - proxy_config_ = proxy_config; |
| + GetLatestProxyConfigInternal(get_property_callback_, &proxy_config_); |
| FOR_EACH_OBSERVER(Observer, observers_, |
| - OnProxyConfigChanged(proxy_config, |
| + OnProxyConfigChanged(proxy_config_, |
| ProxyConfigService::CONFIG_VALID)); |
| } |
| - bool OnJNIThread() const { |
| - return jni_task_runner_->RunsTasksOnCurrentThread(); |
| + bool OnGlibThread() const { |
| + return glib_task_runner_->RunsTasksOnCurrentThread(); |
| } |
| bool OnNetworkThread() const { |
| @@ -280,7 +264,7 @@ class ProxyConfigServiceAndroid::Delegate |
| JNIDelegateImpl jni_delegate_; |
| ObserverList<Observer> observers_; |
| scoped_refptr<base::SequencedTaskRunner> network_task_runner_; |
| - scoped_refptr<base::SequencedTaskRunner> jni_task_runner_; |
| + scoped_refptr<base::SequencedTaskRunner> glib_task_runner_; |
| GetPropertyCallback get_property_callback_; |
| ProxyConfig proxy_config_; |
| @@ -288,16 +272,18 @@ class ProxyConfigServiceAndroid::Delegate |
| }; |
| ProxyConfigServiceAndroid::ProxyConfigServiceAndroid( |
| - base::SequencedTaskRunner* network_task_runner, |
| - base::SequencedTaskRunner* jni_task_runner) |
| + base::SequencedTaskRunner* glib_task_runner, |
| + base::SequencedTaskRunner* network_task_runner) |
| : delegate_(new Delegate( |
| - network_task_runner, jni_task_runner, base::Bind(&GetJavaProperty))) { |
| + network_task_runner, glib_task_runner, base::Bind(&GetJavaProperty))) { |
| delegate_->SetupJNI(); |
| delegate_->FetchInitialConfig(); |
| } |
| -ProxyConfigServiceAndroid::~ProxyConfigServiceAndroid() { |
| - delegate_->Shutdown(); |
| +ProxyConfigServiceAndroid::~ProxyConfigServiceAndroid() {} |
| + |
| +void ProxyConfigServiceAndroid::StartTearDown() { |
| + delegate_->StartTearDown(); |
| } |
| // static |
| @@ -320,10 +306,10 @@ ProxyConfigServiceAndroid::GetLatestProxyConfig(ProxyConfig* config) { |
| ProxyConfigServiceAndroid::ProxyConfigServiceAndroid( |
| base::SequencedTaskRunner* network_task_runner, |
| - base::SequencedTaskRunner* jni_task_runner, |
| + base::SequencedTaskRunner* glib_task_runner, |
| GetPropertyCallback get_property_callback) |
| : delegate_(new Delegate( |
| - network_task_runner, jni_task_runner, get_property_callback)) { |
| + network_task_runner, glib_task_runner, get_property_callback)) { |
| delegate_->FetchInitialConfig(); |
| } |