Chromium Code Reviews| Index: net/android/java/org/chromium/net/ProxyChangeListener.java |
| diff --git a/net/android/java/org/chromium/net/ProxyChangeListener.java b/net/android/java/org/chromium/net/ProxyChangeListener.java |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..d3d6d9697b258c0eec575edf9899a381b386b427 |
| --- /dev/null |
| +++ b/net/android/java/org/chromium/net/ProxyChangeListener.java |
| @@ -0,0 +1,91 @@ |
| +// Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| +// Use of this source code is governed by a BSD-style license that can be |
| +// found in the LICENSE file. |
| + |
| +package org.chromium.net; |
| + |
| +import android.content.BroadcastReceiver; |
| +import android.content.Context; |
| +import android.content.Intent; |
| +import android.content.IntentFilter; |
| +import android.net.Proxy; |
| +import org.chromium.base.CalledByNative; |
| + |
| +// This class partners with native ProxyConfigServiceAndroid to listen for |
| +// proxy change notifications from Android. |
| +class ProxyChangeListener { |
| + private static final String TAG = "ProxyChangeListener"; |
| + |
| + private ProxyChangeListener(Context context) { |
| + mContext = context; |
| + } |
| + |
| + @CalledByNative |
| + static public ProxyChangeListener create(Context context) { |
| + return new ProxyChangeListener(context); |
| + } |
| + |
| + @CalledByNative |
| + static public String getProperty(String property) { |
| + return System.getProperty(property); |
| + } |
| + |
| + @CalledByNative |
| + public void start(int nativePtr) { |
| + assert mNativePtr == 0; |
| + mNativePtr = nativePtr; |
| + registerReceiver(); |
| + } |
| + |
| + @CalledByNative |
| + public void stop() { |
| + mNativePtr = 0; |
| + unregisterReceiver(); |
| + } |
| + |
| + private class ProxyReceiver extends BroadcastReceiver { |
| + @Override |
| + public void onReceive(Context context, Intent intent) { |
| + if (intent.getAction().equals(Proxy.PROXY_CHANGE_ACTION)) { |
| + proxySettingsChanged(); |
| + } |
| + } |
| + } |
| + |
| + private void proxySettingsChanged() { |
| + if (mNativePtr == 0) |
| + return; |
| + |
| + // Note that this code currently runs on a MESSAGE_LOOP_UI thread, but |
| + // the C++ code must run the callbacks on the network thread. |
| + nativeProxySettingsChanged(mNativePtr); |
| + } |
| + |
| + /** |
| + * See net/proxy/proxy_config_service_android.cc |
| + */ |
| + private native void nativeProxySettingsChanged( |
| + int nativePtr /* net::ProxyConfigServiceAndroid::JNIDelegate */); |
|
Ryan Sleevi
2012/06/04 21:49:18
Does the JNI generator let you forward declare lik
Philippe
2012/06/05 09:07:54
Good point.
There is no forward declaration in th
Ryan Sleevi
2012/06/05 16:50:14
I see. The important take-away here is that all of
|
| + |
| + private void registerReceiver() { |
| + if (mProxyReceiver != null) { |
| + return; |
| + } |
| + IntentFilter filter = new IntentFilter(); |
| + filter.addAction(Proxy.PROXY_CHANGE_ACTION); |
| + mProxyReceiver = new ProxyReceiver(); |
| + mContext.getApplicationContext().registerReceiver(mProxyReceiver, filter); |
| + } |
| + |
| + private void unregisterReceiver() { |
| + if (mProxyReceiver == null) { |
| + return; |
| + } |
| + mContext.unregisterReceiver(mProxyReceiver); |
| + mProxyReceiver = null; |
| + } |
| + |
| + private int mNativePtr; |
| + private Context mContext; |
| + private ProxyReceiver mProxyReceiver; |
| +} |