Bug 1379872 - early initialize ProtocolProxyService; r?bagder draft
authorLiang-Heng Chen <xeonchen@gmail.com>
Thu, 27 Jul 2017 19:10:21 +0800
changeset 619533 9ba6e98ea16b337970f36573d47757e2887a0015
parent 619309 a3e675a3b10a0ea289c301bedc31866f3daf7875
child 640420 65636c156ead886c988d8dc1b04ff0d2f8ebdf0a
push id71703
push userbmo:xeonchen@mozilla.com
push dateWed, 02 Aug 2017 06:15:05 +0000
reviewersbagder
bugs1379872
milestone56.0a1
Bug 1379872 - early initialize ProtocolProxyService; r?bagder MozReview-Commit-ID: Kv7cVYhmLJn
netwerk/base/nsIOService.cpp
netwerk/base/nsIOService.h
--- a/netwerk/base/nsIOService.cpp
+++ b/netwerk/base/nsIOService.cpp
@@ -49,16 +49,17 @@
 #include "mozilla/net/NeckoCommon.h"
 #include "mozilla/Services.h"
 #include "mozilla/Telemetry.h"
 #include "mozilla/net/DNS.h"
 #include "mozilla/ipc/URIUtils.h"
 #include "mozilla/net/NeckoChild.h"
 #include "mozilla/dom/ContentParent.h"
 #include "mozilla/net/CaptivePortalService.h"
+#include "mozilla/Unused.h"
 #include "ReferrerPolicy.h"
 #include "nsContentSecurityManager.h"
 #include "nsContentUtils.h"
 #include "xpcpublic.h"
 
 namespace mozilla {
 namespace net {
 
@@ -253,16 +254,17 @@ nsIOService::Init()
                                  "security.data_uri.unique_opaque_origin", false);
     Preferences::AddBoolVarCache(&sBlockToplevelDataUriNavigations,
                                  "security.data_uri.block_toplevel_data_uri_navigations", false);
     Preferences::AddBoolVarCache(&mOfflineMirrorsConnectivity, OFFLINE_MIRRORS_CONNECTIVITY, true);
 
     gIOService = this;
 
     InitializeNetworkLinkService();
+    InitializeProtocolProxyService();
 
     SetOffline(false);
 
     return NS_OK;
 }
 
 
 nsIOService::~nsIOService()
@@ -331,16 +333,29 @@ nsIOService::InitializeNetworkLinkServic
     }
 
     // After initializing the networkLinkService, query the connectivity state
     OnNetworkLinkEvent(NS_NETWORK_LINK_DATA_UNKNOWN);
 
     return rv;
 }
 
+nsresult
+nsIOService::InitializeProtocolProxyService()
+{
+    nsresult rv = NS_OK;
+
+    if (XRE_IsParentProcess()) {
+        // for early-initialization
+        Unused << do_GetService(NS_PROTOCOLPROXYSERVICE_CONTRACTID, &rv);
+    }
+
+    return rv;
+}
+
 nsIOService*
 nsIOService::GetInstance() {
     if (!gIOService) {
         gIOService = new nsIOService();
         if (!gIOService)
             return nullptr;
         NS_ADDREF(gIOService);
 
--- a/netwerk/base/nsIOService.h
+++ b/netwerk/base/nsIOService.h
@@ -131,16 +131,17 @@ private:
 
     // Prefs wrangling
     void PrefsChanged(nsIPrefBranch *prefs, const char *pref = nullptr);
     void GetPrefBranch(nsIPrefBranch **);
     void ParsePortList(nsIPrefBranch *prefBranch, const char *pref, bool remove);
 
     nsresult InitializeSocketTransportService();
     nsresult InitializeNetworkLinkService();
+    nsresult InitializeProtocolProxyService();
 
     // consolidated helper function
     void LookupProxyInfo(nsIURI *aURI, nsIURI *aProxyURI, uint32_t aProxyFlags,
                          nsCString *aScheme, nsIProxyInfo **outPI);
 
     nsresult NewChannelFromURIWithProxyFlagsInternal(nsIURI* aURI,
                                                      nsIURI* aProxyURI,
                                                      uint32_t aProxyFlags,