firefox-for-android-layers.txt

A report on the different networking layers that are currently used in the Firefox for Android application - amoghbl1, 05/13/2015 06:08 pm

Download (5.25 KB)

 
1
After going through the source code for firefox for andoroid which can be found at http://hg.mozilla.org/mozilla-central/ , these were the network related findings that I've made.
2
The application uses maily 3 layers to work.
3
1) The core layer, written in C++.
4
2) A JS layer with some more functional code.
5
3) A Java layer that makes uses the Android API's and other code used for android.
6

    
7
Out of the 3 layers, 2 of them make network calls.
8
1) The C++ layer.
9
    There is an advantage of this layer making the network calls as all the calls made by this layer are proxied. They obey the fennec settings for proxy that has currently been set at mozilla-central/mobile/android/app/mobile.js . Hence, we do not need to bother about setting proxy to these connections and calls.
10

    
11
2) The Java layer.
12
    The Java code, the code run by android also has many network calls but the problem is that these calls are not done obeying the tor proxy and hence they are harmful.
13
    List of places where these calls are made are:
14
        a) any class which imports org.apache.* (commons.net.ftp.*, http.*):
15
            build/mobile/sutagent/android/DoCommand.java
16
            build/mobile/sutagent/android/SUTAgentAndroid.java
17
            mobile/android/base/distribution/Distribution.java
18
            mobile/android/base/favicons/LoadFaviconTask.java
19
            mobile/android/base/tests/BaseRobocopTest.java
20
        b) The browser also seems to be using another library for network communications and that lies at mobile/android/thirdparty/ch/boye/httpclientandroidlib
21
           This library seems to have proxy support but the calls made to this library have not been proxied, a list of those are here:
22
                mobile/android/base/background/bagheera/BagheeraClient.java
23
                mobile/android/base/background/bagheera/BagheeraRequestDelegate.java
24
                mobile/android/base/background/bagheera/BoundedByteArrayEntity.java
25
                mobile/android/base/background/bagheera/DeflateHelper.java
26
                mobile/android/base/background/fxa/FxAccountClient10.java
27
                mobile/android/base/background/fxa/FxAccountClient20.java
28
                mobile/android/base/background/fxa/FxAccountClientException.java
29
                mobile/android/base/background/fxa/SkewHandler.java
30
                mobile/android/base/background/fxa/oauth/FxAccountAbstractClient.java
31
                mobile/android/base/background/fxa/oauth/FxAccountAbstractClientException.java
32
                mobile/android/base/background/fxa/oauth/FxAccountOAuthClient10.java
33
                mobile/android/base/background/healthreport/upload/AndroidSubmissionClient.java                
34
                mobile/android/base/browserid/verifier/AbstractBrowserIDRemoteVerifierClient.java
35
                mobile/android/base/browserid/verifier/BrowserIDRemoteVerifierClient10.java
36
                mobile/android/base/sync/GlobalSession.java
37
                mobile/android/base/sync/jpake/JPakeClient.java
38
                mobile/android/base/sync/jpake/stage/DeleteChannel.java
39
                mobile/android/base/sync/jpake/stage/GetChannelStage.java
40
                mobile/android/base/sync/jpake/stage/GetRequestStage.java                
41
                mobile/android/base/sync/jpake/stage/PutRequestStage.java
42
                mobile/android/base/sync/net/AbstractBearerTokenAuthHeaderProvider.java
43
                mobile/android/base/sync/net/AuthHeaderProvider.java
44
                mobile/android/base/sync/net/BaseResource.java
45
                mobile/android/base/sync/net/BaseResourceDelegate.java
46
                mobile/android/base/sync/net/BasicAuthHeaderProvider.java
47
                mobile/android/base/sync/net/HMACAuthHeaderProvider.java
48
                mobile/android/base/sync/net/HawkAuthHeaderProvider.java
49
                mobile/android/base/sync/net/HttpResponseObserver.java
50
                mobile/android/base/sync/net/MozResponse.java    
51
                mobile/android/base/sync/net/Resource.java
52
                mobile/android/base/sync/net/ResourceDelegate.java
53
                mobile/android/base/sync/net/SyncResponse.java
54
                mobile/android/base/sync/net/SyncStorageCollectionRequest.java
55
                mobile/android/base/sync/net/SyncStorageRequest.java
56
                mobile/android/base/sync/net/SyncStorageResponse.java
57
                mobile/android/base/sync/net/TLSSocketFactory.java
58
                mobile/android/base/sync/repositories/Server11RepositorySession.java
59
                mobile/android/base/sync/setup/auth/AuthenticateAccountStage.java
60
                mobile/android/base/sync/setup/auth/EnsureUserExistenceStage.java
61
                mobile/android/base/sync/setup/auth/FetchUserNodeStage.java
62
                mobile/android/base/sync/stage/EnsureClusterURLStage.java
63
                mobile/android/base/sync/stage/SyncClientsEngineStage.java
64
                mobile/android/base/tokenserver/TokenServerClient.java
65
                mobile/android/tests/background/junit3/src/sync/TestUpgradeRequired.java
66
                This is the url for the query,
67
                https://dxr.mozilla.org/mozilla-central/search?q=ch.boye.httpclientandroidlib&case=false&offset=700
68
                NOTE:
69
                    Not all these classes make network calls, I will make a shorter list of this in the next few days.
70