Chromium Code Reviews| Index: net/android/java/src/org/chromium/net/ProxyChangeListener.java |
| diff --git a/net/android/java/src/org/chromium/net/ProxyChangeListener.java b/net/android/java/src/org/chromium/net/ProxyChangeListener.java |
| index f1362d35f1abfffa42386d1ee8487c9297843c35..b1aa4ddc8d7415d76abbd9b488c6550ff0352eec 100644 |
| --- a/net/android/java/src/org/chromium/net/ProxyChangeListener.java |
| +++ b/net/android/java/src/org/chromium/net/ProxyChangeListener.java |
| @@ -11,9 +11,12 @@ import android.content.IntentFilter; |
| import android.net.Proxy; |
| import android.net.Uri; |
| import android.os.Build; |
| +import android.os.Handler; |
| +import android.os.Looper; |
| import android.text.TextUtils; |
| import android.util.Log; |
| +import org.chromium.base.BuildConfig; |
| import org.chromium.base.annotations.CalledByNative; |
| import org.chromium.base.annotations.JNINamespace; |
| import org.chromium.base.annotations.NativeClassQualifiedName; |
| @@ -30,8 +33,11 @@ public class ProxyChangeListener { |
| private static final String TAG = "ProxyChangeListener"; |
| private static boolean sEnabled = true; |
| + private final Context mContext; |
| + private final Looper mLooper; |
| + private final Handler mHandler; |
| + |
| private long mNativePtr; |
| - private Context mContext; |
| private ProxyReceiver mProxyReceiver; |
| private Delegate mDelegate; |
| @@ -57,6 +63,8 @@ public class ProxyChangeListener { |
| private ProxyChangeListener(Context context) { |
| mContext = context; |
| + mLooper = Looper.myLooper(); |
| + mHandler = new Handler(mLooper); |
| } |
| public static void setEnabled(boolean enabled) { |
| @@ -79,6 +87,7 @@ public class ProxyChangeListener { |
| @CalledByNative |
| public void start(long nativePtr) { |
| + assertOnThread(); |
| assert mNativePtr == 0; |
| mNativePtr = nativePtr; |
| registerReceiver(); |
| @@ -86,15 +95,21 @@ public class ProxyChangeListener { |
| @CalledByNative |
| public void stop() { |
| + assertOnThread(); |
| mNativePtr = 0; |
| unregisterReceiver(); |
| } |
| private class ProxyReceiver extends BroadcastReceiver { |
| @Override |
| - public void onReceive(Context context, Intent intent) { |
| + public void onReceive(Context context, final Intent intent) { |
| if (intent.getAction().equals(Proxy.PROXY_CHANGE_ACTION)) { |
| - proxySettingsChanged(extractNewProxy(intent)); |
| + runOnThread(new Runnable() { |
| + @Override |
| + public void run() { |
| + proxySettingsChanged(ProxyReceiver.this, extractNewProxy(intent)); |
| + } |
| + }); |
| } |
| } |
| @@ -175,8 +190,8 @@ public class ProxyChangeListener { |
| } |
| } |
| - private void proxySettingsChanged(ProxyConfig cfg) { |
| - if (!sEnabled) { |
| + private void proxySettingsChanged(ProxyReceiver proxyReceiver, ProxyConfig cfg) { |
| + if (!sEnabled || proxyReceiver != mProxyReceiver) { |
|
xunjieli
2017/04/13 18:44:54
Same here. Maybe add a comment on we need this ext
pauljensen
2017/05/01 15:35:53
Done.
|
| return; |
| } |
| if (mDelegate != null) { |
| @@ -213,6 +228,25 @@ public class ProxyChangeListener { |
| mProxyReceiver = null; |
| } |
| + private boolean onThread() { |
| + return mLooper == Looper.myLooper(); |
| + } |
| + |
| + private void assertOnThread() { |
| + if (BuildConfig.DCHECK_IS_ON && !onThread()) { |
| + throw new IllegalStateException( |
| + "Must be called on NetworkChangeNotifierAutoDetect thread."); |
|
xunjieli
2017/04/13 18:44:54
nit: s/NetworkChangeNotifierAutoDetect/ProxyChange
pauljensen
2017/05/01 15:35:53
Done.
|
| + } |
| + } |
| + |
| + private void runOnThread(Runnable r) { |
| + if (onThread()) { |
| + r.run(); |
| + } else { |
| + mHandler.post(r); |
| + } |
| + } |
| + |
| /** |
| * See net/proxy/proxy_config_service_android.cc |
| */ |