| 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..5f3ce7e7f429a29503ab1e2a097859d69de7d414
|
| --- /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 synchronized void start(int nativePtr) {
|
| + assert mNativePtr == 0;
|
| + mNativePtr = nativePtr;
|
| + registerReceiver();
|
| + }
|
| +
|
| + @CalledByNative
|
| + public synchronized 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 synchronized 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 */);
|
| +
|
| + 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;
|
| +}
|
|
|