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

Side by Side Diff: net/android/java/src/org/chromium/net/ProxyChangeListener.java

Issue 26763005: android: Use new proxy from PROXY_CHANGE intent (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@lkgr
Patch Set: Created 7 years, 2 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 unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 package org.chromium.net; 5 package org.chromium.net;
6 6
7 import android.content.BroadcastReceiver; 7 import android.content.BroadcastReceiver;
8 import android.content.Context; 8 import android.content.Context;
9 import android.content.Intent; 9 import android.content.Intent;
10 import android.content.IntentFilter; 10 import android.content.IntentFilter;
11 import android.net.Proxy; 11 import android.net.Proxy;
12 import android.util.Log;
13
14 import java.lang.reflect.Method;
15 import java.util.Set;
Philippe 2013/10/15 14:33:21 Nit: nor that one.
Elly Fong-Jones 2013/10/15 16:37:15 Done.
12 16
13 import org.chromium.base.CalledByNative; 17 import org.chromium.base.CalledByNative;
14 import org.chromium.base.JNINamespace; 18 import org.chromium.base.JNINamespace;
15 import org.chromium.base.NativeClassQualifiedName; 19 import org.chromium.base.NativeClassQualifiedName;
16 20
17 // This class partners with native ProxyConfigServiceAndroid to listen for 21 // This class partners with native ProxyConfigServiceAndroid to listen for
18 // proxy change notifications from Android. 22 // proxy change notifications from Android.
19 @JNINamespace("net") 23 @JNINamespace("net")
20 public class ProxyChangeListener { 24 public class ProxyChangeListener {
21 private static final String TAG = "ProxyChangeListener"; 25 private static final String TAG = "ProxyChangeListener";
22 private static boolean sEnabled = true; 26 private static boolean sEnabled = true;
23 27
24 private int mNativePtr; 28 private int mNativePtr;
25 private Context mContext; 29 private Context mContext;
26 private ProxyReceiver mProxyReceiver; 30 private ProxyReceiver mProxyReceiver;
27 private Delegate mDelegate; 31 private Delegate mDelegate;
28 32
33 private class ProxyConfig {
Philippe 2013/10/15 14:33:21 Nit: you can make this 'private static class' sinc
Elly Fong-Jones 2013/10/15 16:37:15 Done.
34 public ProxyConfig(String host, int port) {
35 host_ = host;
36 port_ = port;
37 }
38 public String host_;
cbentzel 2013/10/15 12:29:07 Nit: Java uses mHost rather than host_; FindBugs
Philippe 2013/10/15 14:33:21 +1 Also consider either making those fields 'fina
Elly Fong-Jones 2013/10/15 16:37:15 Done.
39 public int port_;
40 };
41
29 public interface Delegate { 42 public interface Delegate {
30 public void proxySettingsChanged(); 43 public void proxySettingsChanged();
31 } 44 }
32 45
33 private ProxyChangeListener(Context context) { 46 private ProxyChangeListener(Context context) {
34 mContext = context; 47 mContext = context;
35 } 48 }
36 49
37 public static void setEnabled(boolean enabled) { 50 public static void setEnabled(boolean enabled) {
38 sEnabled = enabled; 51 sEnabled = enabled;
(...skipping 20 matching lines...) Expand all
59 registerReceiver(); 72 registerReceiver();
60 } 73 }
61 74
62 @CalledByNative 75 @CalledByNative
63 public void stop() { 76 public void stop() {
64 mNativePtr = 0; 77 mNativePtr = 0;
65 unregisterReceiver(); 78 unregisterReceiver();
66 } 79 }
67 80
68 private class ProxyReceiver extends BroadcastReceiver { 81 private class ProxyReceiver extends BroadcastReceiver {
82
Philippe 2013/10/15 14:33:21 Nit: other places in this file don't have this bla
Elly Fong-Jones 2013/10/15 16:37:15 Done.
69 @Override 83 @Override
70 public void onReceive(Context context, Intent intent) { 84 public void onReceive(Context context, Intent intent) {
71 if (intent.getAction().equals(Proxy.PROXY_CHANGE_ACTION)) { 85 if (intent.getAction().equals(Proxy.PROXY_CHANGE_ACTION)) {
72 proxySettingsChanged(); 86 ProxyConfig cfg = extractNewProxy(intent);
87 if (cfg != null) {
88 proxySettingsChanged(cfg);
89 }
90 }
91 }
92
93 // Extract a ProxyConfig object from the supplied Intent's extra data
94 // bundle. The android.net.ProxyProperties class is not exported from
95 // tne Android SDK, so we have to use reflection to get at it and invoke
96 // methods on it.
97 // TODO(ellyjones): once android.net.ProxyProperties is exported,
98 // rewrite this.
99 private ProxyConfig extractNewProxy(Intent intent) {
Philippe 2013/10/15 14:33:21 Nit: you can make this method 'static' if you neve
Elly Fong-Jones 2013/10/15 16:37:15 Alas: ../net/android/java/src/org/chromium/net/Pr
Philippe 2013/10/15 16:45:59 Wow, didn't know about that!
100 try {
101 final String kClassName = "android.net.ProxyProperties";
Philippe 2013/10/15 14:33:21 Nit: I believe we use capital letters for constant
Elly Fong-Jones 2013/10/15 16:37:15 Done.
102 final String kGetHostName = "getHost";
103 final String kGetPortName = "getPort";
104 Object props = intent.getExtras().get("proxy");
105 if (props == null) {
106 return null;
107 }
108 Class cls = Class.forName(kClassName);
109 Method gethost = cls.getDeclaredMethod(kGetHostName);
Philippe 2013/10/15 14:33:21 Nit: s/gethost/getHostMethod maybe (same below).
Elly Fong-Jones 2013/10/15 16:37:15 Done.
110 Method getport = cls.getDeclaredMethod(kGetPortName);
111
112 Object host_obj = gethost.invoke(props);
Philippe 2013/10/15 14:33:21 Nit: feel free to drop these two lines (that shoul
Elly Fong-Jones 2013/10/15 16:37:15 Done.
113 Object port_obj = getport.invoke(props);
114
115 String host = (String)host_obj;
116 int port = ((Integer)port_obj);
117
118 return new ProxyConfig(host, port);
119 } catch (Exception ex) {
120 return null;
73 } 121 }
74 } 122 }
75 } 123 }
76 124
77 private void proxySettingsChanged() { 125 private void proxySettingsChanged(ProxyConfig cfg) {
78 if (!sEnabled) { 126 if (!sEnabled) {
79 return; 127 return;
80 } 128 }
81 if (mDelegate != null) { 129 if (mDelegate != null) {
82 mDelegate.proxySettingsChanged(); 130 mDelegate.proxySettingsChanged();
83 } 131 }
84 if (mNativePtr == 0) { 132 if (mNativePtr == 0) {
85 return; 133 return;
86 } 134 }
87 // Note that this code currently runs on a MESSAGE_LOOP_UI thread, but 135 // Note that this code currently runs on a MESSAGE_LOOP_UI thread, but
88 // the C++ code must run the callbacks on the network thread. 136 // the C++ code must run the callbacks on the network thread.
89 nativeProxySettingsChanged(mNativePtr); 137 nativeProxySettingsChanged(mNativePtr, cfg);
90 } 138 }
91 139
92 private void registerReceiver() { 140 private void registerReceiver() {
93 if (mProxyReceiver != null) { 141 if (mProxyReceiver != null) {
94 return; 142 return;
95 } 143 }
96 IntentFilter filter = new IntentFilter(); 144 IntentFilter filter = new IntentFilter();
97 filter.addAction(Proxy.PROXY_CHANGE_ACTION); 145 filter.addAction(Proxy.PROXY_CHANGE_ACTION);
98 mProxyReceiver = new ProxyReceiver(); 146 mProxyReceiver = new ProxyReceiver();
99 mContext.getApplicationContext().registerReceiver(mProxyReceiver, filter ); 147 mContext.getApplicationContext().registerReceiver(mProxyReceiver, filter );
100 } 148 }
101 149
102 private void unregisterReceiver() { 150 private void unregisterReceiver() {
103 if (mProxyReceiver == null) { 151 if (mProxyReceiver == null) {
104 return; 152 return;
105 } 153 }
106 mContext.unregisterReceiver(mProxyReceiver); 154 mContext.unregisterReceiver(mProxyReceiver);
107 mProxyReceiver = null; 155 mProxyReceiver = null;
108 } 156 }
109 157
110 /** 158 /**
111 * See net/proxy/proxy_config_service_android.cc 159 * See net/proxy/proxy_config_service_android.cc
112 */ 160 */
113 @NativeClassQualifiedName("ProxyConfigServiceAndroid::JNIDelegate") 161 @NativeClassQualifiedName("ProxyConfigServiceAndroid::JNIDelegate")
114 private native void nativeProxySettingsChanged(int nativePtr); 162 private native void nativeProxySettingsChanged(int nativePtr,
163 ProxyConfig cfg);
Philippe 2013/10/15 14:33:21 We only pass PODs or Java "primitive" types (e.g.
Elly Fong-Jones 2013/10/15 16:37:15 Done.
115 } 164 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698