Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1010)

Unified Diff: net/android/java/org/chromium/net/ProxyChangeListener.java

Issue 10206014: Upstream Android proxy config service. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix comment Created 8 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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;
+}

Powered by Google App Engine
This is Rietveld 408576698