Commit f8066263 authored by Amogh Pradeep's avatar Amogh Pradeep Committed by Matthew Finkel
Browse files

Orfox: Centralized proxy applied to AbstractCommunicator and BaseResources.

See Bug 1357997 for partial uplift.

Also:
Bug 28051 - Use our Orbot for proxying our connections

Bug 31144 - ESR68 Network Code Review
parent f253de6a
Loading
Loading
Loading
Loading
+35 −33
Original line number Diff line number Diff line
@@ -1764,39 +1764,41 @@ public class GeckoAppShell {

    @WrapForJNI
    private static URLConnection getConnection(final String url) {
        try {
            String spec;
            if (url.startsWith("android://")) {
                spec = url.substring(10);
            } else {
                spec = url.substring(8);
            }

            // Check if we are loading a package icon.
            try {
                if (spec.startsWith("icon/")) {
                    String[] splits = spec.split("/");
                    if (splits.length != 2) {
                        return null;
                    }
                    final String pkg = splits[1];
                    final PackageManager pm = getApplicationContext().getPackageManager();
                    final Drawable d = pm.getApplicationIcon(pkg);
                    final Bitmap bitmap = BitmapUtils.getBitmapFromDrawable(d);
                    return new BitmapConnection(bitmap);
                }
            } catch (Exception ex) {
                Log.e(LOGTAG, "error", ex);
            }

            // if the colon got stripped, put it back
            int colon = spec.indexOf(':');
            if (colon == -1 || colon > spec.indexOf('/')) {
                spec = spec.replaceFirst("/", ":/");
            }
        } catch (Exception ex) {
            return null;
        }
        // Bug 31144 - Prevent potential proxy-bypass

        //try {
        //    String spec;
        //    if (url.startsWith("android://")) {
        //        spec = url.substring(10);
        //    } else {
        //        spec = url.substring(8);
        //    }

        //    // Check if we are loading a package icon.
        //    try {
        //        if (spec.startsWith("icon/")) {
        //            String[] splits = spec.split("/");
        //            if (splits.length != 2) {
        //                return null;
        //            }
        //            final String pkg = splits[1];
        //            final PackageManager pm = getApplicationContext().getPackageManager();
        //            final Drawable d = pm.getApplicationIcon(pkg);
        //            final Bitmap bitmap = BitmapUtils.getBitmapFromDrawable(d);
        //            return new BitmapConnection(bitmap);
        //        }
        //    } catch (Exception ex) {
        //        Log.e(LOGTAG, "error", ex);
        //    }

        //    // if the colon got stripped, put it back
        //    int colon = spec.indexOf(':');
        //    if (colon == -1 || colon > spec.indexOf('/')) {
        //        spec = spec.replaceFirst("/", ":/");
        //    }
        //} catch (Exception ex) {
        //    return null;
        //}
        return null;
    }

+0 −7
Original line number Diff line number Diff line
@@ -101,13 +101,6 @@ public final class BitmapUtils {
    public static Bitmap decodeUrl(final URL url) {
        InputStream stream = null;

        try {
            stream = url.openStream();
        } catch (IOException e) {
            Log.w(LOGTAG, "decodeUrl: IOException downloading " + url);
            return null;
        }

        if (stream == null) {
            Log.w(LOGTAG, "decodeUrl: stream not found downloading " + url);
            return null;
+24 −1
Original line number Diff line number Diff line
@@ -29,6 +29,10 @@ import java.net.URLConnection;
import java.util.List;

public class ProxySelector {
    private static final String TOR_PROXY_ADDRESS = "127.0.0.1";
    private static final int TOR_SOCKS_PROXY_PORT = 9150;
    private static final int TOR_HTTP_PROXY_PORT = 8218;

    public static URLConnection openConnectionWithProxy(final URI uri) throws IOException {
        java.net.ProxySelector ps = java.net.ProxySelector.getDefault();
        Proxy proxy = Proxy.NO_PROXY;
@@ -39,7 +43,26 @@ public class ProxySelector {
            }
        }

        return uri.toURL().openConnection(proxy);
        /* Ignore the proxy we found from the VM, only use Tor. We can probably
         * safely use the logic in this class in the future. */
        return uri.toURL().openConnection(getProxy());
    }

    public static Proxy getProxy() {
        // TODO make configurable
        return new Proxy(Proxy.Type.SOCKS, new InetSocketAddress(TOR_PROXY_ADDRESS, TOR_SOCKS_PROXY_PORT));
    }

    public static String getProxyHostAddress() {
        return TOR_PROXY_ADDRESS;
    }

    public static int getSocksProxyPort() {
        return TOR_SOCKS_PROXY_PORT;
    }

    public static int getHttpProxyPort() {
        return TOR_HTTP_PROXY_PORT;
    }

    public ProxySelector() {