diff options
Diffstat (limited to 'netwerk')
42 files changed, 170 insertions, 1606 deletions
diff --git a/netwerk/base/Tickler.h b/netwerk/base/Tickler.h index 63353a924..e38f0d99c 100644 --- a/netwerk/base/Tickler.h +++ b/netwerk/base/Tickler.h @@ -27,10 +27,6 @@ // The tickler only applies to wifi on mobile right now. Hopefully it // can also be restricted to particular handset models in the future. -#if defined(ANDROID) -#define MOZ_USE_WIFI_TICKLER -#endif - #include "mozilla/Attributes.h" #include "nsISupports.h" #include <stdint.h> diff --git a/netwerk/base/nsIOService.cpp b/netwerk/base/nsIOService.cpp index bd9a4a96f..314f2aeff 100644 --- a/netwerk/base/nsIOService.cpp +++ b/netwerk/base/nsIOService.cpp @@ -79,6 +79,7 @@ namespace net { nsIOService* gIOService = nullptr; static bool gHasWarnedUploadChannel2; +static bool gCaptivePortalEnabled = false; static LazyLogModule gIOServiceLog("nsIOService"); #undef LOG #define LOG(args) MOZ_LOG(gIOServiceLog, LogLevel::Debug, args) @@ -1142,7 +1143,7 @@ nsIOService::SetConnectivityInternal(bool aConnectivity) mConnectivity = aConnectivity; if (mCaptivePortalService) { - if (aConnectivity && !xpc::AreNonLocalConnectionsDisabled()) { + if (aConnectivity && !xpc::AreNonLocalConnectionsDisabled() && gCaptivePortalEnabled) { // This will also trigger a captive portal check for the new network static_cast<CaptivePortalService*>(mCaptivePortalService.get())->Start(); } else { @@ -1285,10 +1286,9 @@ nsIOService::PrefsChanged(nsIPrefBranch *prefs, const char *pref) } if (!pref || strcmp(pref, NETWORK_CAPTIVE_PORTAL_PREF) == 0) { - bool captivePortalEnabled; - nsresult rv = prefs->GetBoolPref(NETWORK_CAPTIVE_PORTAL_PREF, &captivePortalEnabled); + nsresult rv = prefs->GetBoolPref(NETWORK_CAPTIVE_PORTAL_PREF, &gCaptivePortalEnabled); if (NS_SUCCEEDED(rv) && mCaptivePortalService) { - if (captivePortalEnabled && !xpc::AreNonLocalConnectionsDisabled()) { + if (gCaptivePortalEnabled && !xpc::AreNonLocalConnectionsDisabled()) { static_cast<CaptivePortalService*>(mCaptivePortalService.get())->Start(); } else { static_cast<CaptivePortalService*>(mCaptivePortalService.get())->Stop(); diff --git a/netwerk/base/nsNetUtil.cpp b/netwerk/base/nsNetUtil.cpp index 2974e26b0..ce0e2d4ef 100644 --- a/netwerk/base/nsNetUtil.cpp +++ b/netwerk/base/nsNetUtil.cpp @@ -1814,9 +1814,7 @@ NS_RelaxStrictFileOriginPolicy(nsIURI *aTargetURI, NS_FAILED(sourceFileURL->GetFile(getter_AddRefs(sourceFile))) || !targetFile || !sourceFile || NS_FAILED(targetFile->Normalize()) || -#ifndef MOZ_WIDGET_ANDROID NS_FAILED(sourceFile->Normalize()) || -#endif (!aAllowDirectoryTarget && (NS_FAILED(targetFile->IsDirectory(&targetIsDir)) || targetIsDir))) { return false; diff --git a/netwerk/base/nsSocketTransport2.cpp b/netwerk/base/nsSocketTransport2.cpp index 0c8434813..76a357aa3 100644 --- a/netwerk/base/nsSocketTransport2.cpp +++ b/netwerk/base/nsSocketTransport2.cpp @@ -3048,9 +3048,8 @@ nsSocketTransport::PRFileDescAutoLock::SetKeepaliveVals(bool aEnabled, #elif defined(XP_UNIX) // Not all *nix OSes support the following setsockopt() options - // ... but we assume they are supported in the Android kernel; // build errors will tell us if they are not. -#if defined(ANDROID) || defined(TCP_KEEPIDLE) +#ifdef TCP_KEEPIDLE // Idle time until first keepalive probe; interval between ack'd probes; seconds. int err = setsockopt(sock, IPPROTO_TCP, TCP_KEEPIDLE, &aIdleTime, sizeof(aIdleTime)); @@ -3061,7 +3060,7 @@ nsSocketTransport::PRFileDescAutoLock::SetKeepaliveVals(bool aEnabled, } #endif -#if defined(ANDROID) || defined(TCP_KEEPINTVL) +#ifdef TCP_KEEPINTVL // Interval between unack'd keepalive probes; seconds. err = setsockopt(sock, IPPROTO_TCP, TCP_KEEPINTVL, &aRetryInterval, sizeof(aRetryInterval)); @@ -3072,7 +3071,7 @@ nsSocketTransport::PRFileDescAutoLock::SetKeepaliveVals(bool aEnabled, } #endif -#if defined(ANDROID) || defined(TCP_KEEPCNT) +#ifdef TCP_KEEPCNT // Number of unack'd keepalive probes before connection times out. err = setsockopt(sock, IPPROTO_TCP, TCP_KEEPCNT, &aProbeCount, sizeof(aProbeCount)); diff --git a/netwerk/base/nsSocketTransportService2.cpp b/netwerk/base/nsSocketTransportService2.cpp index af5742564..4a8d80eed 100644 --- a/netwerk/base/nsSocketTransportService2.cpp +++ b/netwerk/base/nsSocketTransportService2.cpp @@ -25,7 +25,6 @@ #include "nsThreadUtils.h" #include "nsIFile.h" #include "nsIWidget.h" -#include "mozilla/dom/FlyWebService.h" namespace mozilla { namespace net { @@ -681,20 +680,6 @@ nsSocketTransportService::CreateRoutedTransport(const char **types, nsIProxyInfo *proxyInfo, nsISocketTransport **result) { - // Check FlyWeb table for host mappings. If one exists, then use that. - RefPtr<mozilla::dom::FlyWebService> fws = - mozilla::dom::FlyWebService::GetExisting(); - if (fws) { - nsresult rv = fws->CreateTransportForHost(types, typeCount, host, port, - hostRoute, portRoute, - proxyInfo, result); - NS_ENSURE_SUCCESS(rv, rv); - - if (*result) { - return NS_OK; - } - } - NS_ENSURE_TRUE(mInitialized, NS_ERROR_NOT_INITIALIZED); NS_ENSURE_TRUE(port >= 0 && port <= 0xFFFF, NS_ERROR_ILLEGAL_VALUE); diff --git a/netwerk/base/security-prefs.js b/netwerk/base/security-prefs.js index 702315d43..973c73123 100644 --- a/netwerk/base/security-prefs.js +++ b/netwerk/base/security-prefs.js @@ -120,27 +120,6 @@ pref("security.webauth.u2f_enable_usbtoken", false); // OCSP must-staple pref("security.ssl.enable_ocsp_must_staple", true); -// HPKP settings - -// Enable pinning checks by default. -pref("security.cert_pinning.enforcement_level", 2); -// Do not process hpkp headers rooted by not built in roots by default. -// This is to prevent accidental pinning from MITM devices and is used -// for tests. -pref("security.cert_pinning.process_headers_from_non_builtin_roots", false); -// Impose a maximum age on HPKP headers, to avoid sites getting permanently -// blacking themselves out by setting a bad pin. (60 days by default) -// https://tools.ietf.org/html/rfc7469#section-4.1 -pref("security.cert_pinning.max_max_age_seconds", 5184000); -// Controls whether or not HPKP (the HTTP Public Key Pinning header) is enabled. -// If true, the header is processed and collected HPKP information is consulted -// when looking for pinning information. -// If false, the header is not processed and collected HPKP information is not -// consulted when looking for pinning information. Preloaded pins are not -// affected by this preference. -// Default: false -pref("security.cert_pinning.hpkp.enabled", false); - // If a request is mixed-content, send an HSTS priming request to attempt to // see if it is available over HTTPS. pref("security.mixed_content.send_hsts_priming", true); diff --git a/netwerk/build/moz.build b/netwerk/build/moz.build index 6cb47f99e..db2c4cada 100644 --- a/netwerk/build/moz.build +++ b/netwerk/build/moz.build @@ -42,11 +42,6 @@ if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'cocoa': '/netwerk/system/mac', ] -if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'android': - LOCAL_INCLUDES += [ - '/netwerk/system/android', - ] - elif CONFIG['OS_ARCH'] == 'Linux': LOCAL_INCLUDES += [ '/netwerk/system/linux', diff --git a/netwerk/build/nsNetModule.cpp b/netwerk/build/nsNetModule.cpp index d244a14f1..88bdff548 100644 --- a/netwerk/build/nsNetModule.cpp +++ b/netwerk/build/nsNetModule.cpp @@ -418,9 +418,6 @@ NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nsNotifyAddrListener, Init) #elif defined(MOZ_WIDGET_COCOA) #include "nsNetworkLinkService.h" NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nsNetworkLinkService, Init) -#elif defined(MOZ_WIDGET_ANDROID) -#include "nsAndroidNetworkLinkService.h" -NS_GENERIC_FACTORY_CONSTRUCTOR(nsAndroidNetworkLinkService) #elif defined(XP_LINUX) #include "nsNotifyAddrListener_Linux.h" NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nsNotifyAddrListener, Init) @@ -852,8 +849,6 @@ NS_DEFINE_NAMED_CID(NS_RTSPPROTOCOLHANDLER_CID); NS_DEFINE_NAMED_CID(NS_NETWORK_LINK_SERVICE_CID); #elif defined(MOZ_WIDGET_COCOA) NS_DEFINE_NAMED_CID(NS_NETWORK_LINK_SERVICE_CID); -#elif defined(MOZ_WIDGET_ANDROID) -NS_DEFINE_NAMED_CID(NS_NETWORK_LINK_SERVICE_CID); #elif defined(XP_LINUX) NS_DEFINE_NAMED_CID(NS_NETWORK_LINK_SERVICE_CID); #endif @@ -1003,8 +998,6 @@ static const mozilla::Module::CIDEntry kNeckoCIDs[] = { { &kNS_NETWORK_LINK_SERVICE_CID, false, nullptr, nsNotifyAddrListenerConstructor }, #elif defined(MOZ_WIDGET_COCOA) { &kNS_NETWORK_LINK_SERVICE_CID, false, nullptr, nsNetworkLinkServiceConstructor }, -#elif defined(MOZ_WIDGET_ANDROID) - { &kNS_NETWORK_LINK_SERVICE_CID, false, nullptr, nsAndroidNetworkLinkServiceConstructor }, #elif defined(XP_LINUX) { &kNS_NETWORK_LINK_SERVICE_CID, false, nullptr, nsNotifyAddrListenerConstructor }, #endif @@ -1158,8 +1151,6 @@ static const mozilla::Module::ContractIDEntry kNeckoContracts[] = { { NS_NETWORK_LINK_SERVICE_CONTRACTID, &kNS_NETWORK_LINK_SERVICE_CID }, #elif defined(MOZ_WIDGET_COCOA) { NS_NETWORK_LINK_SERVICE_CONTRACTID, &kNS_NETWORK_LINK_SERVICE_CID }, -#elif defined(MOZ_WIDGET_ANDROID) - { NS_NETWORK_LINK_SERVICE_CONTRACTID, &kNS_NETWORK_LINK_SERVICE_CID }, #elif defined(XP_LINUX) { NS_NETWORK_LINK_SERVICE_CONTRACTID, &kNS_NETWORK_LINK_SERVICE_CID }, #endif diff --git a/netwerk/cache/nsCacheService.cpp b/netwerk/cache/nsCacheService.cpp index 4b08614b8..b2d488ea6 100644 --- a/netwerk/cache/nsCacheService.cpp +++ b/netwerk/cache/nsCacheService.cpp @@ -107,13 +107,9 @@ static const char * prefList[] = { // Cache sizes, in KB const int32_t DEFAULT_CACHE_SIZE = 250 * 1024; // 250 MB -#ifdef ANDROID -const int32_t MAX_CACHE_SIZE = 200 * 1024; // 200 MB -const int32_t OLD_MAX_CACHE_SIZE = 200 * 1024; // 200 MB -#else const int32_t MAX_CACHE_SIZE = 350 * 1024; // 350 MB const int32_t OLD_MAX_CACHE_SIZE = 1024 * 1024; // 1 GB -#endif + // Default cache size was 50 MB for many years until FF 4: const int32_t PRE_GECKO_2_0_DEFAULT_CACHE_SIZE = 50 * 1024; @@ -593,17 +589,8 @@ SmartCacheSize(const uint32_t availKB, bool shouldUseOldMaxSmartSize) avail10MBs = 50; } -#ifdef ANDROID - // On Android, smaller/older devices may have very little storage and - // device owners may be sensitive to storage footprint: Use a smaller - // percentage of available space and a smaller minimum. - - // 20% of space up to 500 MB (10 MB min) - sz10MBs += std::max<uint32_t>(1, static_cast<uint32_t>(avail10MBs * .2)); -#else // 40% of space up to 500 MB (50 MB min) sz10MBs += std::max<uint32_t>(5, static_cast<uint32_t>(avail10MBs * .4)); -#endif return std::min<uint32_t>(maxSize, sz10MBs * 10 * 1024); } diff --git a/netwerk/cache/nsDeleteDir.cpp b/netwerk/cache/nsDeleteDir.cpp index 8c4edf812..b081a12eb 100644 --- a/netwerk/cache/nsDeleteDir.cpp +++ b/netwerk/cache/nsDeleteDir.cpp @@ -235,18 +235,11 @@ nsDeleteDir::DeleteDir(nsIFile *dirIn, bool moveToTrash, uint32_t delay) if (!leaf.Length()) return NS_ERROR_FAILURE; -#if defined(MOZ_WIDGET_ANDROID) - nsCOMPtr<nsIFile> parent; - rv = trash->GetParent(getter_AddRefs(parent)); - if (NS_FAILED(rv)) - return rv; - rv = dir->MoveToNative(parent, leaf); -#else // Important: must rename directory w/o changing parent directory: else on // NTFS we'll wait (with cache lock) while nsIFile's ACL reset walks file // tree: was hanging GUI for *minutes* on large cache dirs. rv = dir->MoveToNative(nullptr, leaf); -#endif + if (NS_FAILED(rv)) return rv; } else { @@ -269,21 +262,6 @@ nsresult nsDeleteDir::GetTrashDir(nsIFile *target, nsCOMPtr<nsIFile> *result) { nsresult rv; -#if defined(MOZ_WIDGET_ANDROID) - // Try to use the app cache folder for cache trash on Android - char* cachePath = getenv("CACHE_DIRECTORY"); - if (cachePath) { - rv = NS_NewNativeLocalFile(nsDependentCString(cachePath), - true, getter_AddRefs(*result)); - if (NS_FAILED(rv)) - return rv; - - // Add a sub folder with the cache folder name - nsAutoCString leaf; - rv = target->GetNativeLeafName(leaf); - (*result)->AppendNative(leaf); - } else -#endif { rv = target->Clone(getter_AddRefs(*result)); } @@ -318,11 +296,9 @@ nsDeleteDir::RemoveOldTrashes(nsIFile *cacheDir) return rv; nsCOMPtr<nsIFile> parent; -#if defined(MOZ_WIDGET_ANDROID) - rv = trash->GetParent(getter_AddRefs(parent)); -#else + rv = cacheDir->GetParent(getter_AddRefs(parent)); -#endif + if (NS_FAILED(rv)) return rv; diff --git a/netwerk/cache2/CacheFileIOManager.cpp b/netwerk/cache2/CacheFileIOManager.cpp index 25e621d12..845ad7314 100644 --- a/netwerk/cache2/CacheFileIOManager.cpp +++ b/netwerk/cache2/CacheFileIOManager.cpp @@ -49,11 +49,7 @@ namespace net { #define kRemoveTrashStartDelay 60000 // in milliseconds #define kSmartSizeUpdateInterval 60000 // in milliseconds -#ifdef ANDROID -const uint32_t kMaxCacheSizeKB = 200*1024; // 200 MB -#else const uint32_t kMaxCacheSizeKB = 350*1024; // 350 MB -#endif bool CacheFileHandle::DispatchRelease() @@ -1280,37 +1276,6 @@ CacheFileIOManager::OnProfile() CacheObserver::ParentDirOverride(getter_AddRefs(directory)); -#if defined(MOZ_WIDGET_ANDROID) - nsCOMPtr<nsIFile> profilelessDirectory; - char* cachePath = getenv("CACHE_DIRECTORY"); - if (!directory && cachePath && *cachePath) { - rv = NS_NewNativeLocalFile(nsDependentCString(cachePath), - true, getter_AddRefs(directory)); - if (NS_SUCCEEDED(rv)) { - // Save this directory as the profileless path. - rv = directory->Clone(getter_AddRefs(profilelessDirectory)); - NS_ENSURE_SUCCESS(rv, rv); - - // Add profile leaf name to the directory name to distinguish - // multiple profiles Fennec supports. - nsCOMPtr<nsIFile> profD; - rv = NS_GetSpecialDirectory(NS_APP_USER_PROFILE_50_DIR, - getter_AddRefs(profD)); - - nsAutoCString leafName; - if (NS_SUCCEEDED(rv)) { - rv = profD->GetNativeLeafName(leafName); - } - if (NS_SUCCEEDED(rv)) { - rv = directory->AppendNative(leafName); - } - if (NS_FAILED(rv)) { - directory = nullptr; - } - } - } -#endif - if (!directory) { rv = NS_GetSpecialDirectory(NS_APP_CACHE_PARENT_DIR, getter_AddRefs(directory)); @@ -1329,15 +1294,6 @@ CacheFileIOManager::OnProfile() // All functions return a clone. ioMan->mCacheDirectory.swap(directory); -#if defined(MOZ_WIDGET_ANDROID) - if (profilelessDirectory) { - rv = profilelessDirectory->Append(NS_LITERAL_STRING("cache2")); - NS_ENSURE_SUCCESS(rv, rv); - } - - ioMan->mCacheProfilelessDirectory.swap(profilelessDirectory); -#endif - if (ioMan->mCacheDirectory) { CacheIndex::Init(ioMan->mCacheDirectory); } @@ -2391,23 +2347,6 @@ void CacheFileIOManager::GetCacheDirectory(nsIFile** result) ioMan->mCacheDirectory->Clone(result); } -#if defined(MOZ_WIDGET_ANDROID) - -// static -void CacheFileIOManager::GetProfilelessCacheDirectory(nsIFile** result) -{ - *result = nullptr; - - RefPtr<CacheFileIOManager> ioMan = gInstance; - if (!ioMan || !ioMan->mCacheProfilelessDirectory) { - return; - } - - ioMan->mCacheProfilelessDirectory->Clone(result); -} - -#endif - // static nsresult CacheFileIOManager::GetEntryInfo(const SHA1Sum::Hash *aHash, @@ -4019,17 +3958,8 @@ SmartCacheSize(const uint32_t availKB) avail10MBs = 50; } -#ifdef ANDROID - // On Android, smaller/older devices may have very little storage and - // device owners may be sensitive to storage footprint: Use a smaller - // percentage of available space and a smaller minimum. - - // 20% of space up to 500 MB (10 MB min) - sz10MBs += std::max<uint32_t>(1, static_cast<uint32_t>(avail10MBs * .2)); -#else // 40% of space up to 500 MB (50 MB min) sz10MBs += std::max<uint32_t>(5, static_cast<uint32_t>(avail10MBs * .4)); -#endif return std::min<uint32_t>(maxSize, sz10MBs * 10 * 1024); } diff --git a/netwerk/cache2/CacheFileIOManager.h b/netwerk/cache2/CacheFileIOManager.h index 5ac812da5..8a51b5a0e 100644 --- a/netwerk/cache2/CacheFileIOManager.h +++ b/netwerk/cache2/CacheFileIOManager.h @@ -346,9 +346,6 @@ public: }; static void GetCacheDirectory(nsIFile** result); -#if defined(MOZ_WIDGET_ANDROID) - static void GetProfilelessCacheDirectory(nsIFile** result); -#endif // Calls synchronously OnEntryInfo for an entry with the given hash. // Tries to find an existing entry in the service hashtables first, if not @@ -459,13 +456,6 @@ private: bool mShuttingDown; RefPtr<CacheIOThread> mIOThread; nsCOMPtr<nsIFile> mCacheDirectory; -#if defined(MOZ_WIDGET_ANDROID) - // On Android we add the active profile directory name between the path - // and the 'cache2' leaf name. However, to delete any leftover data from - // times before we were doing it, we still need to access the directory - // w/o the profile name in the path. Here it is stored. - nsCOMPtr<nsIFile> mCacheProfilelessDirectory; -#endif bool mTreeCreated; bool mTreeCreationFailed; CacheFileHandles mHandles; diff --git a/netwerk/cache2/CacheStorageService.cpp b/netwerk/cache2/CacheStorageService.cpp index 3ee1e15cd..a27b082c4 100644 --- a/netwerk/cache2/CacheStorageService.cpp +++ b/netwerk/cache2/CacheStorageService.cpp @@ -569,17 +569,11 @@ private: { nsCacheService::GetDiskCacheDirectory(getter_AddRefs(mCache1Dir)); CacheFileIOManager::GetCacheDirectory(getter_AddRefs(mCache2Dir)); -#if defined(MOZ_WIDGET_ANDROID) - CacheFileIOManager::GetProfilelessCacheDirectory(getter_AddRefs(mCache2Profileless)); -#endif } virtual ~CleaupCacheDirectoriesRunnable() {} uint32_t mVersion, mActive; nsCOMPtr<nsIFile> mCache1Dir, mCache2Dir; -#if defined(MOZ_WIDGET_ANDROID) - nsCOMPtr<nsIFile> mCache2Profileless; -#endif }; // static @@ -613,13 +607,6 @@ NS_IMETHODIMP CleaupCacheDirectoriesRunnable::Run() if (mCache2Dir) { nsDeleteDir::RemoveOldTrashes(mCache2Dir); } -#if defined(MOZ_WIDGET_ANDROID) - if (mCache2Profileless) { - nsDeleteDir::RemoveOldTrashes(mCache2Profileless); - // Always delete the profileless cache on Android - nsDeleteDir::DeleteDir(mCache2Profileless, true, 30000); - } -#endif // Delete the non-active version cache data right now if (mVersion == mActive) { diff --git a/netwerk/dns/mdns/libmdns/MulticastDNSAndroid.jsm b/netwerk/dns/mdns/libmdns/MulticastDNSAndroid.jsm deleted file mode 100644 index 771f9a794..000000000 --- a/netwerk/dns/mdns/libmdns/MulticastDNSAndroid.jsm +++ /dev/null @@ -1,244 +0,0 @@ -// -*- Mode: js2; tab-width: 2; indent-tabs-mode: nil; js2-basic-offset: 2; js2-skip-preprocessor-directives: t; -*- -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - -"use strict"; - -this.EXPORTED_SYMBOLS = ["MulticastDNS"]; - -const { classes: Cc, interfaces: Ci, utils: Cu } = Components; - -Cu.import("resource://gre/modules/Messaging.jsm"); -Cu.import("resource://gre/modules/Services.jsm"); -var log = Cu.import("resource://gre/modules/AndroidLog.jsm", {}).AndroidLog.d.bind(null, "MulticastDNS"); - -const FAILURE_INTERNAL_ERROR = -65537; - -// Helper function for sending commands to Java. -function send(type, data, callback) { - let msg = { - type: type - }; - - for (let i in data) { - try { - msg[i] = data[i]; - } catch (e) { - } - } - - Messaging.sendRequestForResult(msg) - .then(result => callback(result, null), - err => callback(null, typeof err === "number" ? err : FAILURE_INTERNAL_ERROR)); -} - -// Receives service found/lost event from NsdManager -function ServiceManager() { -} - -ServiceManager.prototype = { - listeners: {}, - numListeners: 0, - - registerEvent: function() { - log("registerEvent"); - Messaging.addListener(this.onServiceFound.bind(this), "NsdManager:ServiceFound"); - Messaging.addListener(this.onServiceLost.bind(this), "NsdManager:ServiceLost"); - }, - - unregisterEvent: function() { - log("unregisterEvent"); - Messaging.removeListener("NsdManager:ServiceFound"); - Messaging.removeListener("NsdManager:ServiceLost"); - }, - - addListener: function(aServiceType, aListener) { - log("addListener: " + aServiceType + ", " + aListener); - - if (!this.listeners[aServiceType]) { - this.listeners[aServiceType] = []; - } - if (this.listeners[aServiceType].includes(aListener)) { - log("listener already exists"); - return; - } - - this.listeners[aServiceType].push(aListener); - ++this.numListeners; - - if (this.numListeners === 1) { - this.registerEvent(); - } - - log("listener added: " + this); - }, - - removeListener: function(aServiceType, aListener) { - log("removeListener: " + aServiceType + ", " + aListener); - - if (!this.listeners[aServiceType]) { - log("listener doesn't exist"); - return; - } - let index = this.listeners[aServiceType].indexOf(aListener); - if (index < 0) { - log("listener doesn't exist"); - return; - } - - this.listeners[aServiceType].splice(index, 1); - --this.numListeners; - - if (this.numListeners === 0) { - this.unregisterEvent(); - } - - log("listener removed" + this); - }, - - onServiceFound: function(aServiceInfo) { - let listeners = this.listeners[aServiceInfo.serviceType]; - if (listeners) { - for (let listener of listeners) { - listener.onServiceFound(aServiceInfo); - } - } else { - log("no listener"); - } - return {}; - }, - - onServiceLost: function(aServiceInfo) { - let listeners = this.listeners[aServiceInfo.serviceType]; - if (listeners) { - for (let listener of listeners) { - listener.onServiceLost(aServiceInfo); - } - } else { - log("no listener"); - } - return {}; - } -}; - -// make an object from nsIPropertyBag2 -function parsePropertyBag2(bag) { - if (!bag || !(bag instanceof Ci.nsIPropertyBag2)) { - throw new TypeError("Not a property bag"); - } - - let attributes = []; - let enumerator = bag.enumerator; - while (enumerator.hasMoreElements()) { - let name = enumerator.getNext().QueryInterface(Ci.nsIProperty).name; - let value = bag.getPropertyAsACString(name); - attributes.push({ - "name": name, - "value": value - }); - } - - return attributes; -} - -function MulticastDNS() { - this.serviceManager = new ServiceManager(); -} - -MulticastDNS.prototype = { - startDiscovery: function(aServiceType, aListener) { - this.serviceManager.addListener(aServiceType, aListener); - - let serviceInfo = { - serviceType: aServiceType, - uniqueId: aListener.uuid - }; - - send("NsdManager:DiscoverServices", serviceInfo, (result, err) => { - if (err) { - log("onStartDiscoveryFailed: " + aServiceType + " (" + err + ")"); - this.serviceManager.removeListener(aServiceType, aListener); - aListener.onStartDiscoveryFailed(aServiceType, err); - } else { - aListener.onDiscoveryStarted(result); - } - }); - }, - - stopDiscovery: function(aServiceType, aListener) { - this.serviceManager.removeListener(aServiceType, aListener); - - let serviceInfo = { - uniqueId: aListener.uuid - }; - - send("NsdManager:StopServiceDiscovery", serviceInfo, (result, err) => { - if (err) { - log("onStopDiscoveryFailed: " + aServiceType + " (" + err + ")"); - aListener.onStopDiscoveryFailed(aServiceType, err); - } else { - aListener.onDiscoveryStopped(aServiceType); - } - }); - }, - - registerService: function(aServiceInfo, aListener) { - let serviceInfo = { - port: aServiceInfo.port, - serviceType: aServiceInfo.serviceType, - uniqueId: aListener.uuid - }; - - try { - serviceInfo.host = aServiceInfo.host; - } catch(e) { - // host unspecified - } - try { - serviceInfo.serviceName = aServiceInfo.serviceName; - } catch(e) { - // serviceName unspecified - } - try { - serviceInfo.attributes = parsePropertyBag2(aServiceInfo.attributes); - } catch(e) { - // attributes unspecified - } - - send("NsdManager:RegisterService", serviceInfo, (result, err) => { - if (err) { - log("onRegistrationFailed: (" + err + ")"); - aListener.onRegistrationFailed(aServiceInfo, err); - } else { - aListener.onServiceRegistered(result); - } - }); - }, - - unregisterService: function(aServiceInfo, aListener) { - let serviceInfo = { - uniqueId: aListener.uuid - }; - - send("NsdManager:UnregisterService", serviceInfo, (result, err) => { - if (err) { - log("onUnregistrationFailed: (" + err + ")"); - aListener.onUnregistrationFailed(aServiceInfo, err); - } else { - aListener.onServiceUnregistered(aServiceInfo); - } - }); - }, - - resolveService: function(aServiceInfo, aListener) { - send("NsdManager:ResolveService", aServiceInfo, (result, err) => { - if (err) { - log("onResolveFailed: (" + err + ")"); - aListener.onResolveFailed(aServiceInfo, err); - } else { - aListener.onServiceResolved(result); - } - }); - } -}; diff --git a/netwerk/dns/mdns/libmdns/moz.build b/netwerk/dns/mdns/libmdns/moz.build index efad64d64..b7d376fc3 100644 --- a/netwerk/dns/mdns/libmdns/moz.build +++ b/netwerk/dns/mdns/libmdns/moz.build @@ -31,11 +31,6 @@ else: 'fallback/MulticastDNS.jsm', ] - if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'android': - EXTRA_JS_MODULES += [ - 'MulticastDNSAndroid.jsm', - ] - UNIFIED_SOURCES += [ 'nsDNSServiceInfo.cpp', 'nsMulticastDNSModule.cpp', diff --git a/netwerk/dns/mdns/libmdns/nsDNSServiceDiscovery.js b/netwerk/dns/mdns/libmdns/nsDNSServiceDiscovery.js index b94f67297..af9196135 100644 --- a/netwerk/dns/mdns/libmdns/nsDNSServiceDiscovery.js +++ b/netwerk/dns/mdns/libmdns/nsDNSServiceDiscovery.js @@ -5,17 +5,9 @@ const { classes: Cc, interfaces: Ci, results: Cr, utils: Cu } = Components; -Cu.import("resource://gre/modules/ExtensionUtils.jsm"); Cu.import('resource://gre/modules/Services.jsm'); Cu.import("resource://gre/modules/XPCOMUtils.jsm"); - -let { PlatformInfo } = ExtensionUtils; - -if (PlatformInfo.os == "android" && !Services.prefs.getBoolPref("network.mdns.use_js_fallback")) { - Cu.import("resource://gre/modules/MulticastDNSAndroid.jsm"); -} else { - Cu.import("resource://gre/modules/MulticastDNS.jsm"); -} +Cu.import("resource://gre/modules/MulticastDNS.jsm"); const DNSSERVICEDISCOVERY_CID = Components.ID("{f9346d98-f27a-4e89-b744-493843416480}"); const DNSSERVICEDISCOVERY_CONTRACT_ID = "@mozilla.org/toolkit/components/mdnsresponder/dns-sd;1"; diff --git a/netwerk/protocol/device/AndroidCaptureProvider.cpp b/netwerk/protocol/device/AndroidCaptureProvider.cpp deleted file mode 100644 index e69766085..000000000 --- a/netwerk/protocol/device/AndroidCaptureProvider.cpp +++ /dev/null @@ -1,301 +0,0 @@ -/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - -#include "base/basictypes.h" -#include "AndroidCaptureProvider.h" -#include "nsXULAppAPI.h" -#include "nsStreamUtils.h" -#include "nsThreadUtils.h" -#include "nsMemory.h" -#include "RawStructs.h" - -// The maximum number of frames we keep in our queue. Don't live in the past. -#define MAX_FRAMES_QUEUED 10 - -using namespace mozilla::net; - -NS_IMPL_ISUPPORTS(AndroidCameraInputStream, nsIInputStream, nsIAsyncInputStream) - -AndroidCameraInputStream::AndroidCameraInputStream() : - mWidth(0), mHeight(0), mCamera(0), mHeaderSent(false), mClosed(true), mFrameSize(0), - mMonitor("AndroidCamera.Monitor") -{ - mAvailable = sizeof(RawVideoHeader); - mFrameQueue = new nsDeque(); -} - -AndroidCameraInputStream::~AndroidCameraInputStream() { - // clear the frame queue - while (mFrameQueue->GetSize() > 0) { - free(mFrameQueue->PopFront()); - } - delete mFrameQueue; -} - -NS_IMETHODIMP -AndroidCameraInputStream::Init(nsACString& aContentType, nsCaptureParams* aParams) -{ - if (!XRE_IsParentProcess()) - return NS_ERROR_NOT_IMPLEMENTED; - - mContentType = aContentType; - mWidth = aParams->width; - mHeight = aParams->height; - mCamera = aParams->camera; - - CameraStreamImpl *impl = CameraStreamImpl::GetInstance(0); - if (!impl) - return NS_ERROR_OUT_OF_MEMORY; - if (impl->Init(mContentType, mCamera, mWidth, mHeight, this)) { - mWidth = impl->GetWidth(); - mHeight = impl->GetHeight(); - mClosed = false; - } - return NS_OK; -} - -void AndroidCameraInputStream::ReceiveFrame(char* frame, uint32_t length) { - { - mozilla::ReentrantMonitorAutoEnter autoMonitor(mMonitor); - if (mFrameQueue->GetSize() > MAX_FRAMES_QUEUED) { - free(mFrameQueue->PopFront()); - mAvailable -= mFrameSize; - } - } - - mFrameSize = sizeof(RawPacketHeader) + length; - - char* fullFrame = (char*)moz_xmalloc(mFrameSize); - - if (!fullFrame) - return; - - RawPacketHeader* header = (RawPacketHeader*) fullFrame; - header->packetID = 0xFF; - header->codecID = 0x595556; // "YUV" - - // we copy the Y plane, and de-interlace the CrCb - - uint32_t yFrameSize = mWidth * mHeight; - uint32_t uvFrameSize = yFrameSize / 4; - - memcpy(fullFrame + sizeof(RawPacketHeader), frame, yFrameSize); - - char* uFrame = fullFrame + yFrameSize; - char* vFrame = fullFrame + yFrameSize + uvFrameSize; - char* yFrame = frame + yFrameSize; - for (uint32_t i = 0; i < uvFrameSize; i++) { - uFrame[i] = yFrame[2 * i + 1]; - vFrame[i] = yFrame[2 * i]; - } - - { - mozilla::ReentrantMonitorAutoEnter autoMonitor(mMonitor); - mAvailable += mFrameSize; - mFrameQueue->Push((void*)fullFrame); - } - - NotifyListeners(); -} - -NS_IMETHODIMP -AndroidCameraInputStream::Available(uint64_t *aAvailable) -{ - mozilla::ReentrantMonitorAutoEnter autoMonitor(mMonitor); - - *aAvailable = mAvailable; - - return NS_OK; -} - -NS_IMETHODIMP AndroidCameraInputStream::IsNonBlocking(bool *aNonBlock) { - *aNonBlock = true; - return NS_OK; -} - -NS_IMETHODIMP AndroidCameraInputStream::Read(char *aBuffer, uint32_t aCount, uint32_t *aRead) { - return ReadSegments(NS_CopySegmentToBuffer, aBuffer, aCount, aRead); -} - -NS_IMETHODIMP AndroidCameraInputStream::ReadSegments(nsWriteSegmentFun aWriter, void *aClosure, uint32_t aCount, uint32_t *aRead) { - *aRead = 0; - - nsresult rv; - - if (mAvailable == 0) - return NS_BASE_STREAM_WOULD_BLOCK; - - if (aCount > mAvailable) - aCount = mAvailable; - - if (!mHeaderSent) { - CameraStreamImpl *impl = CameraStreamImpl::GetInstance(0); - RawVideoHeader header; - header.headerPacketID = 0; - header.codecID = 0x595556; // "YUV" - header.majorVersion = 0; - header.minorVersion = 1; - header.options = 1 | 1 << 1; // color, 4:2:2 - - header.alphaChannelBpp = 0; - header.lumaChannelBpp = 8; - header.chromaChannelBpp = 4; - header.colorspace = 1; - - header.frameWidth = mWidth; - header.frameHeight = mHeight; - header.aspectNumerator = 1; - header.aspectDenominator = 1; - - header.framerateNumerator = impl->GetFps(); - header.framerateDenominator = 1; - - rv = aWriter(this, aClosure, (const char*)&header, 0, sizeof(RawVideoHeader), aRead); - - if (NS_FAILED(rv)) - return NS_OK; - - mHeaderSent = true; - aCount -= sizeof(RawVideoHeader); - mAvailable -= sizeof(RawVideoHeader); - } - - { - mozilla::ReentrantMonitorAutoEnter autoMonitor(mMonitor); - while ((mAvailable > 0) && (aCount >= mFrameSize)) { - uint32_t readThisTime = 0; - - char* frame = (char*)mFrameQueue->PopFront(); - rv = aWriter(this, aClosure, (const char*)frame, *aRead, mFrameSize, &readThisTime); - - if (readThisTime != mFrameSize) { - mFrameQueue->PushFront((void*)frame); - return NS_OK; - } - - // RawReader does a copy when calling VideoData::Create() - free(frame); - - if (NS_FAILED(rv)) - return NS_OK; - - aCount -= readThisTime; - mAvailable -= readThisTime; - *aRead += readThisTime; - } - } - return NS_OK; -} - -NS_IMETHODIMP AndroidCameraInputStream::Close() { - return CloseWithStatus(NS_OK); -} - - -/** - * must be called on the main (java) thread - */ -void AndroidCameraInputStream::doClose() { - NS_ASSERTION(!mClosed, "Camera is already closed"); - - CameraStreamImpl *impl = CameraStreamImpl::GetInstance(0); - impl->Close(); - mClosed = true; -} - - -void AndroidCameraInputStream::NotifyListeners() { - mozilla::ReentrantMonitorAutoEnter autoMonitor(mMonitor); - - if (mCallback && (mAvailable > sizeof(RawVideoHeader))) { - nsCOMPtr<nsIInputStreamCallback> callback; - if (mCallbackTarget) { - callback = NS_NewInputStreamReadyEvent(mCallback, mCallbackTarget); - } else { - callback = mCallback; - } - - NS_ASSERTION(callback, "Shouldn't fail to make the callback!"); - - // Null the callback first because OnInputStreamReady may reenter AsyncWait - mCallback = nullptr; - mCallbackTarget = nullptr; - - callback->OnInputStreamReady(this); - } -} - -NS_IMETHODIMP AndroidCameraInputStream::AsyncWait(nsIInputStreamCallback *aCallback, uint32_t aFlags, uint32_t aRequestedCount, nsIEventTarget *aTarget) -{ - if (aFlags != 0) - return NS_ERROR_NOT_IMPLEMENTED; - - if (mCallback || mCallbackTarget) - return NS_ERROR_UNEXPECTED; - - mCallbackTarget = aTarget; - mCallback = aCallback; - - // What we are being asked for may be present already - NotifyListeners(); - return NS_OK; -} - - -NS_IMETHODIMP AndroidCameraInputStream::CloseWithStatus(nsresult status) -{ - AndroidCameraInputStream::doClose(); - return NS_OK; -} - -/** - * AndroidCaptureProvider implementation - */ - -NS_IMPL_ISUPPORTS0(AndroidCaptureProvider) - -AndroidCaptureProvider* AndroidCaptureProvider::sInstance = nullptr; - -AndroidCaptureProvider::AndroidCaptureProvider() { -} - -AndroidCaptureProvider::~AndroidCaptureProvider() { - AndroidCaptureProvider::sInstance = nullptr; -} - -nsresult AndroidCaptureProvider::Init(nsACString& aContentType, - nsCaptureParams* aParams, - nsIInputStream** aStream) { - - NS_ENSURE_ARG_POINTER(aParams); - - NS_ASSERTION(aParams->frameLimit == 0 || aParams->timeLimit == 0, - "Cannot set both a frame limit and a time limit!"); - - RefPtr<AndroidCameraInputStream> stream; - - if (aContentType.EqualsLiteral("video/x-raw-yuv")) { - stream = new AndroidCameraInputStream(); - if (stream) { - nsresult rv = stream->Init(aContentType, aParams); - if (NS_FAILED(rv)) - return rv; - } - else - return NS_ERROR_OUT_OF_MEMORY; - } else { - NS_NOTREACHED("Should not have asked Android for this type!"); - } - stream.forget(aStream); - return NS_OK; -} - -already_AddRefed<AndroidCaptureProvider> GetAndroidCaptureProvider() { - if (!AndroidCaptureProvider::sInstance) { - AndroidCaptureProvider::sInstance = new AndroidCaptureProvider(); - } - RefPtr<AndroidCaptureProvider> ret = AndroidCaptureProvider::sInstance; - return ret.forget(); -} diff --git a/netwerk/protocol/device/AndroidCaptureProvider.h b/netwerk/protocol/device/AndroidCaptureProvider.h deleted file mode 100644 index dd99ea541..000000000 --- a/netwerk/protocol/device/AndroidCaptureProvider.h +++ /dev/null @@ -1,68 +0,0 @@ -/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - -#ifndef AndroidDeviceCaptureProvide_h_ -#define AndroidDeviceCaptureProvide_h_ - -#include "nsDeviceCaptureProvider.h" -#include "nsIAsyncInputStream.h" -#include "nsCOMPtr.h" -#include "nsAutoPtr.h" -#include "nsString.h" -#include "mozilla/net/CameraStreamImpl.h" -#include "nsIEventTarget.h" -#include "nsDeque.h" -#include "mozilla/ReentrantMonitor.h" - -class AndroidCaptureProvider final : public nsDeviceCaptureProvider { - private: - ~AndroidCaptureProvider(); - - public: - AndroidCaptureProvider(); - - NS_DECL_THREADSAFE_ISUPPORTS - - MOZ_MUST_USE nsresult Init(nsACString& aContentType, nsCaptureParams* aParams, nsIInputStream** aStream) override; - static AndroidCaptureProvider* sInstance; -}; - -class AndroidCameraInputStream final : public nsIAsyncInputStream, mozilla::net::CameraStreamImpl::FrameCallback { - private: - ~AndroidCameraInputStream(); - - public: - AndroidCameraInputStream(); - - NS_IMETHODIMP Init(nsACString& aContentType, nsCaptureParams* aParams); - - NS_DECL_THREADSAFE_ISUPPORTS - NS_DECL_NSIINPUTSTREAM - NS_DECL_NSIASYNCINPUTSTREAM - - void ReceiveFrame(char* frame, uint32_t length) override; - - protected: - void NotifyListeners(); - void doClose(); - - uint32_t mAvailable; - nsCString mContentType; - uint32_t mWidth; - uint32_t mHeight; - uint32_t mCamera; - bool mHeaderSent; - bool mClosed; - nsDeque *mFrameQueue; - uint32_t mFrameSize; - mozilla::ReentrantMonitor mMonitor; - - nsCOMPtr<nsIInputStreamCallback> mCallback; - nsCOMPtr<nsIEventTarget> mCallbackTarget; -}; - -already_AddRefed<AndroidCaptureProvider> GetAndroidCaptureProvider(); - -#endif diff --git a/netwerk/protocol/device/CameraStreamImpl.cpp b/netwerk/protocol/device/CameraStreamImpl.cpp deleted file mode 100644 index f4a2cf4a4..000000000 --- a/netwerk/protocol/device/CameraStreamImpl.cpp +++ /dev/null @@ -1,114 +0,0 @@ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - -#include "CameraStreamImpl.h" -#include "GeneratedJNINatives.h" -#include "nsCRTGlue.h" -#include "nsThreadUtils.h" -#include "nsXULAppAPI.h" -#include "mozilla/Monitor.h" - -using namespace mozilla; - -namespace mozilla { -namespace net { - -static CameraStreamImpl* mCamera0 = nullptr; -static CameraStreamImpl* mCamera1 = nullptr; - -class CameraStreamImpl::Callback - : public java::GeckoAppShell::CameraCallback::Natives<Callback> -{ -public: - static void OnFrameData(int32_t aCamera, jni::ByteArray::Param aData) - { - MOZ_ASSERT(NS_IsMainThread()); - - CameraStreamImpl* impl = GetInstance(uint32_t(aCamera)); - if (impl) { - impl->TransmitFrame(aData); - } - } -}; - -/** - * CameraStreamImpl - */ - -void CameraStreamImpl::TransmitFrame(jni::ByteArray::Param aData) { - if (!mCallback) { - return; - } - - JNIEnv* const env = jni::GetGeckoThreadEnv(); - const size_t length = size_t(env->GetArrayLength(aData.Get())); - - if (!length) { - return; - } - - jbyte* const data = env->GetByteArrayElements(aData.Get(), nullptr); - mCallback->ReceiveFrame(reinterpret_cast<char*>(data), length); - env->ReleaseByteArrayElements(aData.Get(), data, JNI_ABORT); -} - -CameraStreamImpl* CameraStreamImpl::GetInstance(uint32_t aCamera) { - CameraStreamImpl* res = nullptr; - switch(aCamera) { - case 0: - if (mCamera0) - res = mCamera0; - else - res = mCamera0 = new CameraStreamImpl(aCamera); - break; - case 1: - if (mCamera1) - res = mCamera1; - else - res = mCamera1 = new CameraStreamImpl(aCamera); - break; - } - return res; -} - - -CameraStreamImpl::CameraStreamImpl(uint32_t aCamera) : - mInit(false), mCamera(aCamera) -{ - NS_WARNING("CameraStreamImpl::CameraStreamImpl()"); - mWidth = 0; - mHeight = 0; - mFps = 0; -} - -CameraStreamImpl::~CameraStreamImpl() -{ - NS_WARNING("CameraStreamImpl::~CameraStreamImpl()"); -} - -bool CameraStreamImpl::Init(const nsCString& contentType, const uint32_t& camera, const uint32_t& width, const uint32_t& height, FrameCallback* aCallback) -{ - mCallback = aCallback; - mWidth = width; - mHeight = height; - - Callback::Init(); - jni::IntArray::LocalRef retArray = java::GeckoAppShell::InitCamera( - contentType, int32_t(camera), int32_t(width), int32_t(height)); - nsTArray<int32_t> ret = retArray->GetElements(); - - mWidth = uint32_t(ret[1]); - mHeight = uint32_t(ret[2]); - mFps = uint32_t(ret[3]); - - return !!ret[0]; -} - -void CameraStreamImpl::Close() { - java::GeckoAppShell::CloseCamera(); - mCallback = nullptr; -} - -} // namespace net -} // namespace mozilla diff --git a/netwerk/protocol/device/CameraStreamImpl.h b/netwerk/protocol/device/CameraStreamImpl.h deleted file mode 100644 index 93037caf6..000000000 --- a/netwerk/protocol/device/CameraStreamImpl.h +++ /dev/null @@ -1,71 +0,0 @@ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - -#ifndef __CAMERASTREAMIMPL_H__ -#define __CAMERASTREAMIMPL_H__ - -#include "mozilla/jni/Refs.h" - -#include "nsString.h" - -/** - * This singleton class handles communication with the Android camera - * through JNI. It is used by the IPDL parent or directly from the chrome process - */ - -namespace mozilla { -namespace net { - -class CameraStreamImpl { -public: - class FrameCallback { - public: - virtual void ReceiveFrame(char* frame, uint32_t length) = 0; - }; - - /** - * instance bound to a given camera - */ - static CameraStreamImpl* GetInstance(uint32_t aCamera); - - bool initNeeded() { - return !mInit; - } - - FrameCallback* GetFrameCallback() { - return mCallback; - } - - MOZ_MUST_USE bool Init(const nsCString& contentType, const uint32_t& camera, const uint32_t& width, const uint32_t& height, FrameCallback* callback); - void Close(); - - uint32_t GetWidth() { return mWidth; } - uint32_t GetHeight() { return mHeight; } - uint32_t GetFps() { return mFps; } - - void takePicture(const nsAString& aFileName); - -private: - class Callback; - - CameraStreamImpl(uint32_t aCamera); - CameraStreamImpl(const CameraStreamImpl&); - CameraStreamImpl& operator=(const CameraStreamImpl&); - - ~CameraStreamImpl(); - - void TransmitFrame(jni::ByteArray::Param aData); - - bool mInit; - uint32_t mCamera; - uint32_t mWidth; - uint32_t mHeight; - uint32_t mFps; - FrameCallback* mCallback; -}; - -} // namespace net -} // namespace mozilla - -#endif diff --git a/netwerk/protocol/device/moz.build b/netwerk/protocol/device/moz.build index a18672220..3bb95930e 100644 --- a/netwerk/protocol/device/moz.build +++ b/netwerk/protocol/device/moz.build @@ -4,15 +4,6 @@ # License, v. 2.0. If a copy of the MPL was not distributed with this # file, You can obtain one at http://mozilla.org/MPL/2.0/. -if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'android': - EXPORTS.mozilla.net += [ - 'CameraStreamImpl.h', - ] - UNIFIED_SOURCES += [ - 'AndroidCaptureProvider.cpp', - 'CameraStreamImpl.cpp', - ] - UNIFIED_SOURCES += [ 'nsDeviceChannel.cpp', 'nsDeviceProtocolHandler.cpp', diff --git a/netwerk/protocol/device/nsDeviceChannel.cpp b/netwerk/protocol/device/nsDeviceChannel.cpp index 6c5788a56..d8b6900e8 100644 --- a/netwerk/protocol/device/nsDeviceChannel.cpp +++ b/netwerk/protocol/device/nsDeviceChannel.cpp @@ -7,11 +7,6 @@ #include "nsDeviceChannel.h" #include "nsDeviceCaptureProvider.h" -#ifdef MOZ_WIDGET_ANDROID -#include "mozilla/Preferences.h" -#include "AndroidCaptureProvider.h" -#endif - using namespace mozilla; // Copied from image/decoders/icon/nsIconURI.cpp @@ -112,9 +107,6 @@ nsDeviceChannel::OpenContentStream(bool aAsync, extractAttributeValue(spec.get(), "camera=", buffer); captureParams.camera = buffer.ToInteger(&err); captureParams.bpp = 32; -#ifdef MOZ_WIDGET_ANDROID - capture = GetAndroidCaptureProvider(); -#endif } else if (kNotFound != spec.Find(NS_LITERAL_CSTRING("type=video/x-raw-yuv"), true, 0, @@ -138,11 +130,6 @@ nsDeviceChannel::OpenContentStream(bool aAsync, captureParams.bpp = 32; captureParams.timeLimit = 0; captureParams.frameLimit = 60000; -#ifdef MOZ_WIDGET_ANDROID - // only enable if "device.camera.enabled" is true. - if (Preferences::GetBool("device.camera.enabled", false) == true) - capture = GetAndroidCaptureProvider(); -#endif } else { return NS_ERROR_NOT_IMPLEMENTED; } diff --git a/netwerk/protocol/http/UserAgentOverrides.jsm b/netwerk/protocol/http/UserAgentOverrides.jsm index 037aa575b..e106f817a 100644 --- a/netwerk/protocol/http/UserAgentOverrides.jsm +++ b/netwerk/protocol/http/UserAgentOverrides.jsm @@ -2,6 +2,10 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ +#ifdef XP_WIN +#define UA_SPARE_PLATFORM +#endif + "use strict"; this.EXPORTED_SYMBOLS = [ "UserAgentOverrides" ]; @@ -18,6 +22,14 @@ const PREF_OVERRIDES_ENABLED = "general.useragent.site_specific_overrides"; const DEFAULT_UA = Cc["@mozilla.org/network/protocol;1?name=http"] .getService(Ci.nsIHttpProtocolHandler) .userAgent; +const OSCPU = Cc["@mozilla.org/network/protocol;1?name=http"] + .getService(Ci.nsIHttpProtocolHandler) + .oscpu; +#ifndef UA_SPARE_PLATFORM +const PLATFORM = Cc["@mozilla.org/network/protocol;1?name=http"] + .getService(Ci.nsIHttpProtocolHandler) + .platform; +#endif const MAX_OVERRIDE_FOR_HOST_CACHE_SIZE = 250; XPCOMUtils.defineLazyServiceGetter(this, "ppmm", @@ -27,18 +39,27 @@ XPCOMUtils.defineLazyServiceGetter(this, "ppmm", var gPrefBranch; var gOverrides = new Map; var gUpdatedOverrides; +var gOldDynOverrides; var gOverrideForHostCache = new Map; var gInitialized = false; var gOverrideFunctions = [ function (aHttpChannel) { return UserAgentOverrides.getOverrideForURI(aHttpChannel.URI); } ]; var gBuiltUAs = new Map; +var gOSSlice; this.UserAgentOverrides = { init: function uao_init() { if (gInitialized) return; + gOSSlice = OSCPU + ";"; +#ifndef UA_SPARE_PLATFORM + if (PLATFORM != "") { + gOSSlice = PLATFORM + "; " + gOSSlice; + } +#endif + gPrefBranch = Services.prefs.getBranch("general.useragent.override."); gPrefBranch.addObserver("", buildOverrides, false); @@ -52,7 +73,10 @@ this.UserAgentOverrides = { } UserAgentUpdates.init(function(overrides) { - gOverrideForHostCache.clear(); + if (overrides == gOldDynOverrides) { + return; + } + gOldDynOverrides = overrides; if (overrides) { for (let domain in overrides) { overrides[domain] = getUserAgentFromOverride(overrides[domain]); @@ -60,6 +84,7 @@ this.UserAgentOverrides = { overrides.get = function(key) { return this[key]; }; } gUpdatedOverrides = overrides; + buildOverrides(); }); buildOverrides(); @@ -143,7 +168,7 @@ function getUserAgentFromOverride(override) if (search && replace) { userAgent = DEFAULT_UA.replace(new RegExp(search, "g"), replace); } else { - userAgent = override; + userAgent = override.replace(/%OS_SLICE%/g, gOSSlice); } gBuiltUAs.set(override, userAgent); return userAgent; @@ -156,15 +181,22 @@ function buildOverrides() { if (!Services.prefs.getBoolPref(PREF_OVERRIDES_ENABLED)) return; - let builtUAs = new Map; let domains = gPrefBranch.getChildList(""); + // Since the static override map has the highest priority, we build it so + // that it includes only domains with user-set overrides and domains with + // default pre-set overrides that are not overridden by dynamic updates. for (let domain of domains) { - let override = gPrefBranch.getCharPref(domain); - let userAgent = getUserAgentFromOverride(override); - - if (userAgent != DEFAULT_UA) { - gOverrides.set(domain, userAgent); + if (!(gUpdatedOverrides && gUpdatedOverrides.get(domain)) || + gPrefBranch.prefHasUserValue(domain)) { + // Here we selected domains that are not dynamically overridden + // or have a user-set override. + let override = gPrefBranch.getCharPref(domain); + let userAgent = getUserAgentFromOverride(override); + + if (userAgent != DEFAULT_UA) { + gOverrides.set(domain, userAgent); + } } } } diff --git a/netwerk/protocol/http/UserAgentUpdates.jsm b/netwerk/protocol/http/UserAgentUpdates.jsm index 602705ebe..cd21b78b3 100644 --- a/netwerk/protocol/http/UserAgentUpdates.jsm +++ b/netwerk/protocol/http/UserAgentUpdates.jsm @@ -10,7 +10,6 @@ const Ci = Components.interfaces; const Cc = Components.classes; const Cu = Components.utils; -Cu.import("resource://gre/modules/AppConstants.jsm"); Cu.import("resource://gre/modules/Services.jsm"); Cu.import("resource://gre/modules/XPCOMUtils.jsm"); @@ -18,15 +17,9 @@ XPCOMUtils.defineLazyModuleGetter( this, "FileUtils", "resource://gre/modules/FileUtils.jsm"); XPCOMUtils.defineLazyModuleGetter( - this, "NetUtil", "resource://gre/modules/NetUtil.jsm"); - -XPCOMUtils.defineLazyModuleGetter( this, "OS", "resource://gre/modules/osfile.jsm"); XPCOMUtils.defineLazyModuleGetter( - this, "Promise", "resource://gre/modules/Promise.jsm"); - -XPCOMUtils.defineLazyModuleGetter( this, "UpdateUtils", "resource://gre/modules/UpdateUtils.jsm"); XPCOMUtils.defineLazyServiceGetter( @@ -65,30 +58,6 @@ const PREF_APP_DISTRIBUTION_VERSION = "distribution.version"; var gInitialized = false; -function readChannel(url) { - return new Promise((resolve, reject) => { - try { - let channel = NetUtil.newChannel({uri: url, loadUsingSystemPrincipal: true}); - channel.contentType = "application/json"; - - NetUtil.asyncFetch(channel, (inputStream, status) => { - if (!Components.isSuccessCode(status)) { - reject(); - return; - } - - let data = JSON.parse( - NetUtil.readInputStreamToString(inputStream, inputStream.available()) - ); - resolve(data); - }); - } catch (ex) { - reject(new Error("UserAgentUpdates: Could not fetch " + url + " " + - ex + "\n" + ex.stack)); - } - }); -} - this.UserAgentUpdates = { init: function(callback) { if (gInitialized) { @@ -144,13 +113,9 @@ this.UserAgentUpdates = { // try to load next one if the previous load failed return prevLoad ? prevLoad.then(null, tryNext) : tryNext(); }, null).then(null, (ex) => { - if (AppConstants.platform !== "android") { - // All previous (non-Android) load attempts have failed, so we bail. - throw new Error("UserAgentUpdates: Failed to load " + FILE_UPDATES + - ex + "\n" + ex.stack); - } - // Make one last attempt to read from the Fennec APK root. - return readChannel("resource://android/" + FILE_UPDATES); + // All previous load attempts have failed, so we bail. + throw new Error("UserAgentUpdates: Failed to load " + FILE_UPDATES + + ex + "\n" + ex.stack); }).then((update) => { // Apply update if loading was successful this._applyUpdate(update); diff --git a/netwerk/protocol/http/moz.build b/netwerk/protocol/http/moz.build index 1368ee707..a1b57876b 100644 --- a/netwerk/protocol/http/moz.build +++ b/netwerk/protocol/http/moz.build @@ -99,10 +99,9 @@ IPDL_SOURCES += [ 'PHttpChannel.ipdl', ] -EXTRA_JS_MODULES += [ - 'UserAgentOverrides.jsm', - 'UserAgentUpdates.jsm', -] +EXTRA_JS_MODULES += ['UserAgentUpdates.jsm'] + +EXTRA_PP_JS_MODULES += ['UserAgentOverrides.jsm'] include('/ipc/chromium/chromium-config.mozbuild') diff --git a/netwerk/protocol/http/nsHttpChannel.cpp b/netwerk/protocol/http/nsHttpChannel.cpp index 05383916f..950b1a7ab 100644 --- a/netwerk/protocol/http/nsHttpChannel.cpp +++ b/netwerk/protocol/http/nsHttpChannel.cpp @@ -1530,7 +1530,7 @@ GetPKPConsoleErrorTag(uint32_t failureResult, nsAString& consoleErrorTag) } /** - * Process a single security header. Only two types are supported: HSTS and HPKP. + * Process a single security header. Only one type is supported: HSTS. */ nsresult nsHttpChannel::ProcessSingleSecurityHeader(uint32_t aType, @@ -1542,9 +1542,6 @@ nsHttpChannel::ProcessSingleSecurityHeader(uint32_t aType, case nsISiteSecurityService::HEADER_HSTS: atom = nsHttp::ResolveAtom("Strict-Transport-Security"); break; - case nsISiteSecurityService::HEADER_HPKP: - atom = nsHttp::ResolveAtom("Public-Key-Pins"); - break; default: NS_NOTREACHED("Invalid security header type"); return NS_ERROR_FAILURE; @@ -1568,10 +1565,6 @@ nsHttpChannel::ProcessSingleSecurityHeader(uint32_t aType, GetSTSConsoleErrorTag(failureResult, consoleErrorTag); consoleErrorCategory = NS_LITERAL_STRING("Invalid HSTS Headers"); break; - case nsISiteSecurityService::HEADER_HPKP: - GetPKPConsoleErrorTag(failureResult, consoleErrorTag); - consoleErrorCategory = NS_LITERAL_STRING("Invalid HPKP Headers"); - break; default: return NS_ERROR_FAILURE; } @@ -1641,10 +1634,6 @@ nsHttpChannel::ProcessSecurityHeaders() sslStatus, flags); NS_ENSURE_SUCCESS(rv, rv); - rv = ProcessSingleSecurityHeader(nsISiteSecurityService::HEADER_HPKP, - sslStatus, flags); - NS_ENSURE_SUCCESS(rv, rv); - return NS_OK; } diff --git a/netwerk/protocol/http/nsHttpHandler.cpp b/netwerk/protocol/http/nsHttpHandler.cpp index 0f4c94202..7a29e041b 100644 --- a/netwerk/protocol/http/nsHttpHandler.cpp +++ b/netwerk/protocol/http/nsHttpHandler.cpp @@ -127,30 +127,6 @@ NewURI(const nsACString &aSpec, return NS_OK; } -#ifdef ANDROID -static nsCString -GetDeviceModelId() { - // Assumed to be running on the main thread - // We need the device property in either case - nsAutoCString deviceModelId; - nsCOMPtr<nsIPropertyBag2> infoService = do_GetService("@mozilla.org/system-info;1"); - MOZ_ASSERT(infoService, "Could not find a system info service"); - nsAutoString androidDevice; - nsresult rv = infoService->GetPropertyAsAString(NS_LITERAL_STRING("device"), androidDevice); - if (NS_SUCCEEDED(rv)) { - deviceModelId = NS_LossyConvertUTF16toASCII(androidDevice); - } - nsAutoCString deviceString; - rv = Preferences::GetCString(UA_PREF("device_string"), &deviceString); - if (NS_SUCCEEDED(rv)) { - deviceString.Trim(" ", true, true); - deviceString.ReplaceSubstring(NS_LITERAL_CSTRING("%DEVICEID%"), deviceModelId); - return deviceString; - } - return deviceModelId; -} -#endif - //----------------------------------------------------------------------------- // nsHttpHandler <public> //----------------------------------------------------------------------------- @@ -198,8 +174,10 @@ nsHttpHandler::nsHttpHandler() , mLegacyAppName("Mozilla") , mLegacyAppVersion("5.0") , mProduct("Goanna") + , mCompatGeckoEnabled(false) + , mAppBuildID("20200101") , mCompatFirefoxEnabled(false) - , mCompatFirefoxVersion("52.9") + , mCompatFirefoxVersion("68.9") , mUserAgentIsDirty(true) , mAcceptLanguagesIsDirty(true) , mPromptTempRedirect(true) @@ -315,8 +293,13 @@ nsHttpHandler::Init() nsHttpChannelAuthProvider::InitializePrefs(); // rv: should have the Firefox/Gecko compatversion for web compatibility + // when in either compatmodes mMisc.AssignLiteral("rv:"); - mMisc += mCompatFirefoxVersion; + if (mCompatGeckoEnabled) { + mMisc += mCompatFirefoxVersion; + } else { + mMisc += MOZILLA_UAVERSION; + } mCompatGecko.AssignLiteral("Gecko/20100101"); mCompatFirefox.AssignLiteral("Firefox/"); @@ -325,6 +308,14 @@ nsHttpHandler::Init() nsCOMPtr<nsIXULAppInfo> appInfo = do_GetService("@mozilla.org/xre/app-info;1"); + nsCString dynamicBuildID; + if (appInfo) { + appInfo->GetPlatformBuildID(dynamicBuildID); + if (dynamicBuildID.Length() > 8 ) + dynamicBuildID.Left(dynamicBuildID, 8); + } + mAppBuildID.Assign(dynamicBuildID); + mAppName.AssignLiteral(MOZ_APP_UA_NAME); if (mAppName.Length() == 0 && appInfo) { // Try to get the UA name from appInfo, falling back to the name @@ -334,28 +325,9 @@ nsHttpHandler::Init() } mAppName.StripChars(R"( ()<>@,;:\"/[]?={})"); } - - nsCString dynamicBuildID; - if (appInfo) { - appInfo->GetPlatformBuildID(dynamicBuildID); - if (dynamicBuildID.Length() > 8 ) - dynamicBuildID.Left(dynamicBuildID, 8); - } - if (mAppVersionIsBuildID) { - // Override BuildID - mAppVersion.AssignLiteral(MOZ_UA_BUILDID); - } else if (appInfo) { - appInfo->GetVersion(mAppVersion); - } else { - // Fall back to platform if appInfo is unavailable - mAppVersion.AssignLiteral(MOZILLA_UAVERSION); - } + BuildAppVersion(); - // If there's no override set, set it to the dynamic BuildID - if (mAppVersion.IsEmpty()) - mAppVersion.Assign(dynamicBuildID); - mSessionStartTime = NowInSeconds(); mHandlerActive = true; @@ -372,10 +344,15 @@ nsHttpHandler::Init() do_GetService("@mozilla.org/network/request-context-service;1"); // Goanna slice version - mProductSub.AssignLiteral(MOZILLA_UAVERSION); - - if (mProductSub.IsEmpty()) - mProductSub.Assign(dynamicBuildID); + if (mCompatGeckoEnabled) { + mProductSub.AssignLiteral(MOZILLA_UAVERSION); + } else { + mProductSub.Assign(mAppBuildID); + } + // In case MOZILLA_UAVERSION is empty for some odd reason... + if (mProductSub.IsEmpty()) { + mProductSub.Assign(mAppBuildID); + } #if DEBUG // dump user agent prefs @@ -681,6 +658,30 @@ nsHttpHandler::GenerateHostPort(const nsCString& host, int32_t port, // nsHttpHandler <private> //----------------------------------------------------------------------------- +void +nsHttpHandler::BuildAppVersion() +{ + nsCOMPtr<nsIXULAppInfo> appInfo = do_GetService("@mozilla.org/xre/app-info;1"); + + if (mAppVersionIsBuildID) { + // Override with BuildID + mAppVersion.Assign(mAppBuildID); + } else if (appInfo) { + appInfo->GetVersion(mAppVersion); + } else { + // Fall back to platform if appInfo is unavailable + mAppVersion.AssignLiteral(MOZILLA_UAVERSION); + } + + // If there's still no version set, set it to a fixed BuildID + if (mAppVersion.IsEmpty()) { + mAppVersion.AssignLiteral(MOZ_UA_BUILDID); + } + if (mAppVersion.IsEmpty()) { + mAppVersion.AssignLiteral("20200101"); + } +} + const nsAFlatCString & nsHttpHandler::UserAgent() { @@ -792,9 +793,7 @@ nsHttpHandler::InitUserAgentComponents() #ifndef MOZ_UA_OS_AGNOSTIC // Gather platform. mPlatform.AssignLiteral( -#if defined(ANDROID) - "Android" -#elif defined(XP_WIN) +#if defined(XP_WIN) "Windows" #elif defined(XP_MACOSX) "Macintosh" @@ -808,64 +807,6 @@ nsHttpHandler::InitUserAgentComponents() ); #endif - -#ifdef ANDROID - nsCOMPtr<nsIPropertyBag2> infoService = do_GetService("@mozilla.org/system-info;1"); - MOZ_ASSERT(infoService, "Could not find a system info service"); - nsresult rv; - // Add the Android version number to the Fennec platform identifier. -#if defined MOZ_WIDGET_ANDROID -#ifndef MOZ_UA_OS_AGNOSTIC // Don't add anything to mPlatform since it's empty. - nsAutoString androidVersion; - rv = infoService->GetPropertyAsAString( - NS_LITERAL_STRING("release_version"), androidVersion); - if (NS_SUCCEEDED(rv)) { - mPlatform += " "; - // If the 2nd character is a ".", we know the major version is a single - // digit. If we're running on a version below 4 we pretend to be on - // Android KitKat (4.4) to work around scripts sniffing for low versions. - if (androidVersion[1] == 46 && androidVersion[0] < 52) { - mPlatform += "4.4"; - } else { - mPlatform += NS_LossyConvertUTF16toASCII(androidVersion); - } - } -#endif -#endif - // Add the `Mobile` or `Tablet` or `TV` token when running on device. - bool isTablet; - rv = infoService->GetPropertyAsBool(NS_LITERAL_STRING("tablet"), &isTablet); - if (NS_SUCCEEDED(rv) && isTablet) { - mCompatDevice.AssignLiteral("Tablet"); - } else { - bool isTV; - rv = infoService->GetPropertyAsBool(NS_LITERAL_STRING("tv"), &isTV); - if (NS_SUCCEEDED(rv) && isTV) { - mCompatDevice.AssignLiteral("TV"); - } else { - mCompatDevice.AssignLiteral("Mobile"); - } - } - - if (Preferences::GetBool(UA_PREF("use_device"), false)) { - mDeviceModelId = mozilla::net::GetDeviceModelId(); - } -#endif // ANDROID - -#ifdef MOZ_MULET - { - // Add the `Mobile` or `Tablet` or `TV` token when running in the b2g - // desktop simulator via preference. - nsCString deviceType; - nsresult rv = Preferences::GetCString("devtools.useragent.device_type", &deviceType); - if (NS_SUCCEEDED(rv)) { - mCompatDevice.Assign(deviceType); - } else { - mCompatDevice.AssignLiteral("Mobile"); - } - } -#endif // MOZ_MULET - #ifndef MOZ_UA_OS_AGNOSTIC // Gather OS/CPU. #if defined(XP_WIN) @@ -993,12 +934,34 @@ nsHttpHandler::PrefsChanged(nsIPrefBranch *prefs, const char *pref) if (PREF_CHANGED(UA_PREF("appVersionIsBuildID"))) { rv = prefs->GetBoolPref(UA_PREF("appVersionIsBuildID"), &cVar); mAppVersionIsBuildID = (NS_SUCCEEDED(rv) && cVar); + + // Rebuild application version string. + BuildAppVersion(); + mUserAgentIsDirty = true; } if (PREF_CHANGED(UA_PREF("compatMode.gecko"))) { rv = prefs->GetBoolPref(UA_PREF("compatMode.gecko"), &cVar); mCompatGeckoEnabled = (NS_SUCCEEDED(rv) && cVar); + + // Rebuild rv: and Goanna slice version + mMisc.AssignLiteral("rv:"); + if (mCompatGeckoEnabled) { + mMisc += mCompatFirefoxVersion; + } else { + mMisc += MOZILLA_UAVERSION; + } + + if (mCompatGeckoEnabled) { + mProductSub.AssignLiteral(MOZILLA_UAVERSION); + } else { + mProductSub.Assign(mAppBuildID); + } + // In case MOZILLA_UAVERSION is empty for some odd reason... + if (mProductSub.IsEmpty()) { + mProductSub.Assign(mAppBuildID); + } mUserAgentIsDirty = true; } @@ -1017,7 +980,11 @@ nsHttpHandler::PrefsChanged(nsIPrefBranch *prefs, const char *pref) // rebuild mMisc and compatMode slice mMisc.AssignLiteral("rv:"); - mMisc += mCompatFirefoxVersion; + if (mCompatGeckoEnabled) { + mMisc += mCompatFirefoxVersion; + } else { + mMisc += MOZILLA_UAVERSION; + } mCompatFirefox.AssignLiteral("Firefox/"); mCompatFirefox += mCompatFirefoxVersion; @@ -1031,18 +998,6 @@ nsHttpHandler::PrefsChanged(nsIPrefBranch *prefs, const char *pref) mUserAgentIsDirty = true; } -#ifdef ANDROID - // general.useragent.use_device - if (PREF_CHANGED(UA_PREF("use_device"))) { - if (Preferences::GetBool(UA_PREF("use_device"), false)) { - mDeviceModelId = mozilla::net::GetDeviceModelId(); - } else { - mDeviceModelId = EmptyCString(); - } - mUserAgentIsDirty = true; - } -#endif - // // HTTP options // diff --git a/netwerk/protocol/http/nsHttpHandler.h b/netwerk/protocol/http/nsHttpHandler.h index 402147577..4f632e078 100644 --- a/netwerk/protocol/http/nsHttpHandler.h +++ b/netwerk/protocol/http/nsHttpHandler.h @@ -391,6 +391,7 @@ private: // // Useragent/prefs helper methods // + void BuildAppVersion(); void BuildUserAgent(); void InitUserAgentComponents(); void PrefsChanged(nsIPrefBranch *prefs, const char *pref); @@ -500,6 +501,7 @@ private: nsCString mCompatFirefox; bool mCompatFirefoxEnabled; nsCString mCompatFirefoxVersion; + nsCString mAppBuildID; nsXPIDLCString mCompatDevice; nsCString mDeviceModelId; diff --git a/netwerk/sctp/datachannel/moz.build b/netwerk/sctp/datachannel/moz.build index fc59da229..18bb8533a 100644 --- a/netwerk/sctp/datachannel/moz.build +++ b/netwerk/sctp/datachannel/moz.build @@ -25,9 +25,7 @@ LOCAL_INCLUDES += [ DEFINES['INET'] = 1 DEFINES['SCTP_DEBUG'] = 1 - -if CONFIG['OS_TARGET'] != 'Android': - DEFINES['INET6'] = 1 +DEFINES['INET6'] = 1 if CONFIG['OS_TARGET'] == 'WINNT': DEFINES['__Userspace_os_Windows'] = 1 diff --git a/netwerk/sctp/src/ifaddrs-android-ext.h b/netwerk/sctp/src/ifaddrs-android-ext.h deleted file mode 100644 index abddae735..000000000 --- a/netwerk/sctp/src/ifaddrs-android-ext.h +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Copyright (C) 2009 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef IFADDRS_ANDROID_EXT_H_included -#define IFADDRS_ANDROID_EXT_H_included - -#include <arpa/inet.h> -#include <errno.h> -#include <net/if.h> -#include <netinet/in.h> -#include <sys/ioctl.h> -#include <sys/types.h> -#include <sys/socket.h> -#include <stdio.h> -#include <linux/netlink.h> -#include <linux/rtnetlink.h> - -// Android (bionic) doesn't have getifaddrs(3)/freeifaddrs(3). -// We fake it here, so java_net_NetworkInterface.cpp can use that API -// with all the non-portable code being in this file. - -// Source-compatible subset of the BSD struct. -typedef struct ifaddrs { - // Pointer to next struct in list, or NULL at end. - struct ifaddrs* ifa_next; - - // Interface name. - char* ifa_name; - - // Interface flags. - unsigned int ifa_flags; - - // Interface network address. - struct sockaddr* ifa_addr; - - // Interface netmask. - struct sockaddr* ifa_netmask; -} ifaddrs; - -#ifdef __cplusplus -extern "C" { -#endif - int getifaddrs(ifaddrs** result); - void freeifaddrs(ifaddrs* addresses); -#ifdef __cplusplus -} -#endif - -#endif // IFADDRS_ANDROID_H_included diff --git a/netwerk/sctp/src/ifaddrs_android.cpp b/netwerk/sctp/src/ifaddrs_android.cpp deleted file mode 100644 index 78eb90a1a..000000000 --- a/netwerk/sctp/src/ifaddrs_android.cpp +++ /dev/null @@ -1,189 +0,0 @@ -/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -/* vim: set ts=2 et sw=2 tw=80: */ -/* - * Copyright (C) 2009 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "ifaddrs-android-ext.h" - -#include <stdlib.h> -#include <string.h> -#include "ScopedFd.h" -#include "LocalArray.h" - -// Returns a pointer to the first byte in the address data (which is -// stored in network byte order). -uint8_t* sockaddrBytes(int family, sockaddr_storage* ss) { - if (family == AF_INET) { - sockaddr_in* ss4 = reinterpret_cast<sockaddr_in*>(ss); - return reinterpret_cast<uint8_t*>(&ss4->sin_addr); - } else if (family == AF_INET6) { - sockaddr_in6* ss6 = reinterpret_cast<sockaddr_in6*>(ss); - return reinterpret_cast<uint8_t*>(&ss6->sin6_addr); - } - return NULL; -} - -// Sadly, we can't keep the interface index for portability with BSD. -// We'll have to keep the name instead, and re-query the index when -// we need it later. -bool ifa_setNameAndFlagsByIndex(ifaddrs *self, int interfaceIndex) { - // Get the name. - char buf[IFNAMSIZ]; - char* name = if_indextoname(interfaceIndex, buf); - if (name == NULL) { - return false; - } - self->ifa_name = new char[strlen(name) + 1]; - strcpy(self->ifa_name, name); - - // Get the flags. - ScopedFd fd(socket(AF_INET, SOCK_DGRAM, 0)); - if (fd.get() == -1) { - return false; - } - ifreq ifr; - memset(&ifr, 0, sizeof(ifr)); - strcpy(ifr.ifr_name, name); - int rc = ioctl(fd.get(), SIOCGIFFLAGS, &ifr); - if (rc == -1) { - return false; - } - self->ifa_flags = ifr.ifr_flags; - return true; -} - -// Netlink gives us the address family in the header, and the -// sockaddr_in or sockaddr_in6 bytes as the payload. We need to -// stitch the two bits together into the sockaddr that's part of -// our portable interface. -void ifa_setAddress(ifaddrs *self, int family, void* data, size_t byteCount) { - // Set the address proper... - sockaddr_storage* ss = new sockaddr_storage; - memset(ss, 0, sizeof(*ss)); - self->ifa_addr = reinterpret_cast<sockaddr*>(ss); - ss->ss_family = family; - uint8_t* dst = sockaddrBytes(family, ss); - memcpy(dst, data, byteCount); -} - -// Netlink gives us the prefix length as a bit count. We need to turn -// that into a BSD-compatible netmask represented by a sockaddr*. -void ifa_setNetmask(ifaddrs *self, int family, size_t prefixLength) { - // ...and work out the netmask from the prefix length. - sockaddr_storage* ss = new sockaddr_storage; - memset(ss, 0, sizeof(*ss)); - self->ifa_netmask = reinterpret_cast<sockaddr*>(ss); - ss->ss_family = family; - uint8_t* dst = sockaddrBytes(family, ss); - memset(dst, 0xff, prefixLength / 8); - if ((prefixLength % 8) != 0) { - dst[prefixLength/8] = (0xff << (8 - (prefixLength % 8))); - } -} - -// FIXME: use iovec instead. -struct addrReq_struct { - nlmsghdr netlinkHeader; - ifaddrmsg msg; -}; - -inline bool sendNetlinkMessage(int fd, const void* data, size_t byteCount) { - ssize_t sentByteCount = TEMP_FAILURE_RETRY(send(fd, data, byteCount, 0)); - return (sentByteCount == static_cast<ssize_t>(byteCount)); -} - -inline ssize_t recvNetlinkMessage(int fd, char* buf, size_t byteCount) { - return TEMP_FAILURE_RETRY(recv(fd, buf, byteCount, 0)); -} - -// Source-compatible with the BSD function. -int getifaddrs(ifaddrs** result) -{ - // Simplify cleanup for callers. - *result = NULL; - - // Create a netlink socket. - ScopedFd fd(socket(AF_NETLINK, SOCK_DGRAM, NETLINK_ROUTE)); - if (fd.get() < 0) { - return -1; - } - - // Ask for the address information. - addrReq_struct addrRequest; - memset(&addrRequest, 0, sizeof(addrRequest)); - addrRequest.netlinkHeader.nlmsg_flags = NLM_F_REQUEST | NLM_F_MATCH; - addrRequest.netlinkHeader.nlmsg_type = RTM_GETADDR; - addrRequest.netlinkHeader.nlmsg_len = NLMSG_ALIGN(NLMSG_LENGTH(sizeof(addrRequest))); - addrRequest.msg.ifa_family = AF_UNSPEC; // All families. - addrRequest.msg.ifa_index = 0; // All interfaces. - if (!sendNetlinkMessage(fd.get(), &addrRequest, addrRequest.netlinkHeader.nlmsg_len)) { - return -1; - } - - // Read the responses. - LocalArray<0> buf(65536); // We don't necessarily have std::vector. - ssize_t bytesRead; - while ((bytesRead = recvNetlinkMessage(fd.get(), &buf[0], buf.size())) > 0) { - nlmsghdr* hdr = reinterpret_cast<nlmsghdr*>(&buf[0]); - for (; NLMSG_OK(hdr, (size_t)bytesRead); hdr = NLMSG_NEXT(hdr, bytesRead)) { - switch (hdr->nlmsg_type) { - case NLMSG_DONE: - return 0; - case NLMSG_ERROR: - return -1; - case RTM_NEWADDR: - { - ifaddrmsg* address = reinterpret_cast<ifaddrmsg*>(NLMSG_DATA(hdr)); - rtattr* rta = IFA_RTA(address); - size_t ifaPayloadLength = IFA_PAYLOAD(hdr); - while (RTA_OK(rta, ifaPayloadLength)) { - if (rta->rta_type == IFA_LOCAL) { - int family = address->ifa_family; - if (family == AF_INET || family == AF_INET6) { - ifaddrs *next = *result; - *result = new ifaddrs; - memset(*result, 0, sizeof(ifaddrs)); - (*result)->ifa_next = next; - if (!ifa_setNameAndFlagsByIndex(*result, address->ifa_index)) { - return -1; - } - ifa_setAddress(*result, family, RTA_DATA(rta), RTA_PAYLOAD(rta)); - ifa_setNetmask(*result, family, address->ifa_prefixlen); - } - } - rta = RTA_NEXT(rta, ifaPayloadLength); - } - } - break; - } - } - } - // We only get here if recv fails before we see a NLMSG_DONE. - return -1; -} - -// Source-compatible with the BSD function. -void freeifaddrs(ifaddrs* addresses) { - ifaddrs* self = addresses; - while (self != NULL) { - delete[] self->ifa_name; - delete self->ifa_addr; - delete self->ifa_netmask; - ifaddrs* next = self->ifa_next; - delete self; - self = next; - } -} diff --git a/netwerk/sctp/src/moz.build b/netwerk/sctp/src/moz.build index f24702fee..40a91eec1 100644 --- a/netwerk/sctp/src/moz.build +++ b/netwerk/sctp/src/moz.build @@ -34,11 +34,6 @@ SOURCES += [ 'user_socket.c', ] -if CONFIG['OS_TARGET'] == 'Android': - SOURCES += [ - 'ifaddrs_android.cpp', - ] - Library('nksctp_s') include('/ipc/chromium/chromium-config.mozbuild') @@ -58,16 +53,11 @@ for var in ('SCTP_SIMPLE_ALLOCATOR', 'CALLBACK_API', 'SCTP_DEBUG'): DEFINES[var] = 1 -# Android NDK r5c, used on the builders at the time of this writing, doesn't -# have the headers we need for IPv6 -if CONFIG['OS_TARGET'] != 'Android': - DEFINES['INET6'] = 1 +DEFINES['INET6'] = 1 if CONFIG['OS_TARGET'] == 'WINNT': DEFINES['__Userspace_os_Windows'] = 1 DEFINES['_LIB'] = 1 -elif CONFIG['OS_TARGET'] == 'Android': - DEFINES['__Userspace_os_Linux'] = 1 else: DEFINES['__Userspace_os_%s' % CONFIG['OS_TARGET']] = 1 @@ -75,7 +65,7 @@ if CONFIG['OS_TARGET'] == 'Darwin': DEFINES['__APPLE_USE_RFC_2292'] = 1 DEFINES['__APPLE__'] = False -if CONFIG['OS_TARGET'] in ('Linux', 'Android'): +if CONFIG['OS_TARGET'] == 'Linux': # to make sure that in6_pktinfo gets defined on all distros DEFINES['_GNU_SOURCE'] = True diff --git a/netwerk/sctp/src/netinet/sctp.h b/netwerk/sctp/src/netinet/sctp.h index a5ff4eb0b..962ce1140 100755 --- a/netwerk/sctp/src/netinet/sctp.h +++ b/netwerk/sctp/src/netinet/sctp.h @@ -32,7 +32,7 @@ #ifdef __FreeBSD__ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: head/sys/netinet/sctp.h 279859 2015-03-10 19:49:25Z tuexen $"); +__FBSDID("$FreeBSD: head/sys/netinet/sctp.h 356270 2020-01-02 13:55:10Z tuexen $"); #endif #ifndef _NETINET_SCTP_H_ @@ -598,7 +598,10 @@ struct sctp_error_no_user_data { #define SCTP_MOBILITY_PRIM_DELETED 0x00000004 -#define SCTP_SMALLEST_PMTU 512 /* smallest pmtu allowed when disabling PMTU discovery */ +/* Smallest PMTU allowed when disabling PMTU discovery */ +#define SCTP_SMALLEST_PMTU 512 +/* Largest PMTU allowed when disabling PMTU discovery */ +#define SCTP_LARGEST_PMTU 65536 #if defined(__Userspace_os_Windows) #pragma pack() diff --git a/netwerk/sctp/src/netinet/sctp_auth.c b/netwerk/sctp/src/netinet/sctp_auth.c index ee5ca36ce..4e9f7e4cd 100755 --- a/netwerk/sctp/src/netinet/sctp_auth.c +++ b/netwerk/sctp/src/netinet/sctp_auth.c @@ -32,7 +32,7 @@ #ifdef __FreeBSD__ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: head/sys/netinet/sctp_auth.c 271673 2014-09-16 14:20:33Z tuexen $"); +__FBSDID("$FreeBSD: head/sys/netinet/sctp_auth.c 355931 2019-12-20 15:25:08Z tuexen $"); #endif #include <netinet/sctp_os.h> @@ -1450,7 +1450,8 @@ sctp_auth_get_cookie_params(struct sctp_tcb *stcb, struct mbuf *m, ptype = ntohs(phdr->param_type); plen = ntohs(phdr->param_length); - if ((plen == 0) || (offset + plen > length)) + if ((plen < sizeof(struct sctp_paramhdr)) || + (offset + plen > length)) break; if (ptype == SCTP_RANDOM) { diff --git a/netwerk/sctp/src/netinet/sctp_bsd_addr.c b/netwerk/sctp/src/netinet/sctp_bsd_addr.c index 292941b53..f79b9ebb1 100755 --- a/netwerk/sctp/src/netinet/sctp_bsd_addr.c +++ b/netwerk/sctp/src/netinet/sctp_bsd_addr.c @@ -48,14 +48,10 @@ __FBSDID("$FreeBSD: head/sys/netinet/sctp_bsd_addr.c 276914 2015-01-10 20:49:57Z #include <netinet/sctp_asconf.h> #include <netinet/sctp_sysctl.h> #include <netinet/sctp_indata.h> -#if defined(ANDROID) -#include <unistd.h> -#include <ifaddrs-android-ext.h> -#else + #if defined(__FreeBSD__) #include <sys/unistd.h> #endif -#endif /* Declare all of our malloc named types */ #ifndef __Panda__ diff --git a/netwerk/sctp/src/netinet/sctp_os_userspace.h b/netwerk/sctp/src/netinet/sctp_os_userspace.h index bf4a3b519..13df42423 100755 --- a/netwerk/sctp/src/netinet/sctp_os_userspace.h +++ b/netwerk/sctp/src/netinet/sctp_os_userspace.h @@ -495,7 +495,7 @@ struct sx {int dummy;}; /* for getifaddrs */ #include <sys/types.h> #if !defined(__Userspace_os_Windows) -#if !defined(ANDROID) && (defined(INET) || defined(INET6)) +#if defined(INET) || defined(INET6) #include <ifaddrs.h> #endif diff --git a/netwerk/sctp/src/netinet/sctp_pcb.c b/netwerk/sctp/src/netinet/sctp_pcb.c index 58c164f50..ea5725c85 100755 --- a/netwerk/sctp/src/netinet/sctp_pcb.c +++ b/netwerk/sctp/src/netinet/sctp_pcb.c @@ -32,7 +32,7 @@ #ifdef __FreeBSD__ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: head/sys/netinet/sctp_pcb.c 280459 2015-03-24 21:12:45Z tuexen $"); +__FBSDID("$FreeBSD: head/sys/netinet/sctp_pcb.c 355931 2019-12-20 15:25:08Z tuexen $"); #endif #include <netinet/sctp_os.h> @@ -7213,7 +7213,7 @@ sctp_load_addresses_from_init(struct sctp_tcb *stcb, struct mbuf *m, if (offset + plen > limit) { break; } - if (plen == 0) { + if (plen < sizeof(struct sctp_paramhdr)) { break; } #ifdef INET @@ -7413,6 +7413,9 @@ sctp_load_addresses_from_init(struct sctp_tcb *stcb, struct mbuf *m, if (plen > sizeof(lstore)) { return (-23); } + if (plen < sizeof(struct sctp_asconf_addrv4_param)) { + return (-101); + } phdr = sctp_get_next_param(m, offset, (struct sctp_paramhdr *)&lstore, min(plen,sizeof(lstore))); diff --git a/netwerk/sctp/src/netinet/sctp_usrreq.c b/netwerk/sctp/src/netinet/sctp_usrreq.c index d24a21815..7ffd8e8c8 100755 --- a/netwerk/sctp/src/netinet/sctp_usrreq.c +++ b/netwerk/sctp/src/netinet/sctp_usrreq.c @@ -32,7 +32,7 @@ #ifdef __FreeBSD__ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: head/sys/netinet/sctp_usrreq.c 280459 2015-03-24 21:12:45Z tuexen $"); +__FBSDID("$FreeBSD: head/sys/netinet/sctp_usrreq.c 356270 2020-01-02 13:55:10Z tuexen $"); #endif #include <netinet/sctp_os.h> @@ -5995,6 +5995,14 @@ sctp_setopt(struct socket *so, int optname, void *optval, size_t optsize, SCTP_LTRACE_ERR_RET(inp, NULL, NULL, SCTP_FROM_SCTP_USRREQ, EINVAL); return (EINVAL); } + if ((paddrp->spp_flags & SPP_PMTUD_DISABLE) && + ((paddrp->spp_pathmtu < SCTP_SMALLEST_PMTU) || + (paddrp->spp_pathmtu > SCTP_LARGEST_PMTU))) { + if (stcb) + SCTP_TCB_UNLOCK(stcb); + SCTP_LTRACE_ERR_RET(inp, NULL, NULL, SCTP_FROM_SCTP_USRREQ, EINVAL); + return (EINVAL); + } if (stcb != NULL) { /************************TCB SPECIFIC SET ******************/ @@ -6038,7 +6046,7 @@ sctp_setopt(struct socket *so, int optname, void *optval, size_t optsize, sctp_chunk_output(inp, stcb, SCTP_OUTPUT_FROM_SOCKOPT, SCTP_SO_LOCKED); sctp_timer_start(SCTP_TIMER_TYPE_HEARTBEAT, inp, stcb, net); } - if ((paddrp->spp_flags & SPP_PMTUD_DISABLE) && (paddrp->spp_pathmtu >= SCTP_SMALLEST_PMTU)) { + if (paddrp->spp_flags & SPP_PMTUD_DISABLE) { if (SCTP_OS_TIMER_PENDING(&net->pmtu_timer.timer)) { sctp_timer_stop(SCTP_TIMER_TYPE_PATHMTURAISE, inp, stcb, net, SCTP_FROM_SCTP_USRREQ+SCTP_LOC_10); @@ -6160,7 +6168,7 @@ sctp_setopt(struct socket *so, int optname, void *optval, size_t optsize, } sctp_stcb_feature_on(inp, stcb, SCTP_PCB_FLAGS_DONOT_HEARTBEAT); } - if ((paddrp->spp_flags & SPP_PMTUD_DISABLE) && (paddrp->spp_pathmtu >= SCTP_SMALLEST_PMTU)) { + if (paddrp->spp_flags & SPP_PMTUD_DISABLE) { TAILQ_FOREACH(net, &stcb->asoc.nets, sctp_next) { if (SCTP_OS_TIMER_PENDING(&net->pmtu_timer.timer)) { sctp_timer_stop(SCTP_TIMER_TYPE_PATHMTURAISE, inp, stcb, net, diff --git a/netwerk/system/android/moz.build b/netwerk/system/android/moz.build deleted file mode 100644 index 68288ad10..000000000 --- a/netwerk/system/android/moz.build +++ /dev/null @@ -1,14 +0,0 @@ -# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*- -# vim: set filetype=python: -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. - -SOURCES += [ - 'nsAndroidNetworkLinkService.cpp', -] - -FINAL_LIBRARY = 'xul' -LOCAL_INCLUDES += [ - '/netwerk/base', -] diff --git a/netwerk/system/android/nsAndroidNetworkLinkService.cpp b/netwerk/system/android/nsAndroidNetworkLinkService.cpp deleted file mode 100644 index 692b69a7e..000000000 --- a/netwerk/system/android/nsAndroidNetworkLinkService.cpp +++ /dev/null @@ -1,63 +0,0 @@ -/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -/* vim: set ts=2 et sw=2 tw=80: */ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - -#include "nsAndroidNetworkLinkService.h" -#include "nsServiceManagerUtils.h" -#include "mozilla/Services.h" - -#include "AndroidBridge.h" - -namespace java = mozilla::java; - -NS_IMPL_ISUPPORTS(nsAndroidNetworkLinkService, - nsINetworkLinkService) - -nsAndroidNetworkLinkService::nsAndroidNetworkLinkService() -{ -} - -nsAndroidNetworkLinkService::~nsAndroidNetworkLinkService() -{ -} - -NS_IMETHODIMP -nsAndroidNetworkLinkService::GetIsLinkUp(bool *aIsUp) -{ - if (!mozilla::AndroidBridge::Bridge()) { - // Fail soft here and assume a connection exists - NS_WARNING("GetIsLinkUp is not supported without a bridge connection"); - *aIsUp = true; - return NS_OK; - } - - *aIsUp = java::GeckoAppShell::IsNetworkLinkUp(); - return NS_OK; -} - -NS_IMETHODIMP -nsAndroidNetworkLinkService::GetLinkStatusKnown(bool *aIsKnown) -{ - NS_ENSURE_TRUE(mozilla::AndroidBridge::Bridge(), NS_ERROR_NOT_IMPLEMENTED); - - *aIsKnown = java::GeckoAppShell::IsNetworkLinkKnown(); - return NS_OK; -} - -NS_IMETHODIMP -nsAndroidNetworkLinkService::GetLinkType(uint32_t *aLinkType) -{ - NS_ENSURE_ARG_POINTER(aLinkType); - - if (!mozilla::AndroidBridge::Bridge()) { - // Fail soft here and assume a connection exists - NS_WARNING("GetLinkType is not supported without a bridge connection"); - *aLinkType = nsINetworkLinkService::LINK_TYPE_UNKNOWN; - return NS_OK; - } - - *aLinkType = java::GeckoAppShell::GetNetworkLinkType(); - return NS_OK; -} diff --git a/netwerk/system/android/nsAndroidNetworkLinkService.h b/netwerk/system/android/nsAndroidNetworkLinkService.h deleted file mode 100644 index 9fdda7cae..000000000 --- a/netwerk/system/android/nsAndroidNetworkLinkService.h +++ /dev/null @@ -1,24 +0,0 @@ -/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -/* vim: set ts=2 et sw=2 tw=80: */ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - -#ifndef NSANDROIDNETWORKLINKSERVICE_H_ -#define NSANDROIDNETWORKLINKSERVICE_H_ - -#include "nsINetworkLinkService.h" - -class nsAndroidNetworkLinkService: public nsINetworkLinkService -{ -public: - NS_DECL_ISUPPORTS - NS_DECL_NSINETWORKLINKSERVICE - - nsAndroidNetworkLinkService(); - -private: - virtual ~nsAndroidNetworkLinkService(); -}; - -#endif /* NSANDROIDNETWORKLINKSERVICE_H_ */ diff --git a/netwerk/system/moz.build b/netwerk/system/moz.build index 08c41342b..66360bb63 100644 --- a/netwerk/system/moz.build +++ b/netwerk/system/moz.build @@ -6,12 +6,7 @@ if CONFIG['OS_ARCH'] == 'WINNT': DIRS += ['win32'] - -if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'cocoa': +elif CONFIG['MOZ_WIDGET_TOOLKIT'] == 'cocoa': DIRS += ['mac'] - -if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'android': - DIRS += ['android'] - elif CONFIG['OS_ARCH'] == 'Linux': DIRS += ['linux'] |