зеркало из https://github.com/mozilla/gecko-dev.git
Merge mozilla-inbound to mozilla-central. a=merge
This commit is contained in:
Коммит
c581ba2f76
|
@ -474,7 +474,7 @@ async function interactiveUpdateTest(autoUpdate, checkFn) {
|
|||
await checkPromise;
|
||||
|
||||
BrowserTestUtils.removeTab(gBrowser.selectedTab);
|
||||
addon.uninstall();
|
||||
await addon.uninstall();
|
||||
await SpecialPowers.popPrefEnv();
|
||||
}
|
||||
|
||||
|
@ -501,7 +501,7 @@ add_task(async function() {
|
|||
for (let addon of await AddonManager.getAllAddons()) {
|
||||
if (!existingAddons.has(addon.id)) {
|
||||
ok(false, `Addon ${addon.id} was left installed at the end of the test`);
|
||||
addon.uninstall();
|
||||
await addon.uninstall();
|
||||
}
|
||||
}
|
||||
});
|
||||
|
|
|
@ -1617,15 +1617,15 @@ protected:
|
|||
bool DetermineFontSizeInflationState();
|
||||
|
||||
void RecordAlloc(void* aPtr) {
|
||||
#ifdef DEBUG
|
||||
MOZ_ASSERT(!mAllocatedPointers.Contains(aPtr));
|
||||
#ifdef MOZ_DIAGNOSTIC_ASSERT_ENABLED
|
||||
MOZ_DIAGNOSTIC_ASSERT(!mAllocatedPointers.Contains(aPtr));
|
||||
mAllocatedPointers.PutEntry(aPtr);
|
||||
#endif
|
||||
}
|
||||
|
||||
void RecordFree(void* aPtr) {
|
||||
#ifdef DEBUG
|
||||
MOZ_ASSERT(mAllocatedPointers.Contains(aPtr));
|
||||
#ifdef MOZ_DIAGNOSTIC_ASSERT_ENABLED
|
||||
MOZ_DIAGNOSTIC_ASSERT(mAllocatedPointers.Contains(aPtr));
|
||||
mAllocatedPointers.RemoveEntry(aPtr);
|
||||
#endif
|
||||
}
|
||||
|
@ -1717,7 +1717,9 @@ protected:
|
|||
|
||||
#ifdef DEBUG
|
||||
nsIFrame* mDrawEventTargetFrame;
|
||||
#endif
|
||||
|
||||
#ifdef MOZ_DIAGNOSTIC_ASSERT_ENABLED
|
||||
// We track allocated pointers in a debug-only hashtable to assert against
|
||||
// missing/double frees.
|
||||
nsTHashtable<nsPtrHashKey<void>> mAllocatedPointers;
|
||||
|
|
|
@ -612,6 +612,7 @@ nsFrame::Init(nsIContent* aContent,
|
|||
|
||||
mContent = aContent;
|
||||
mParent = aParent;
|
||||
MOZ_DIAGNOSTIC_ASSERT(!mParent || PresShell() == mParent->PresShell());
|
||||
|
||||
if (aPrevInFlow) {
|
||||
mWritingMode = aPrevInFlow->GetWritingMode();
|
||||
|
@ -10914,6 +10915,7 @@ nsIFrame::SetParent(nsContainerFrame* aParent)
|
|||
|
||||
// Note that the current mParent may already be destroyed at this point.
|
||||
mParent = aParent;
|
||||
MOZ_DIAGNOSTIC_ASSERT(!mParent || PresShell() == mParent->PresShell());
|
||||
if (::IsXULBoxWrapped(this)) {
|
||||
::InitBoxMetrics(this, true);
|
||||
} else {
|
||||
|
|
|
@ -780,6 +780,7 @@ public:
|
|||
void SetComputedStyle(ComputedStyle* aStyle)
|
||||
{
|
||||
if (aStyle != mComputedStyle) {
|
||||
MOZ_DIAGNOSTIC_ASSERT(PresShell() == aStyle->PresContextForFrame()->PresShell());
|
||||
RefPtr<ComputedStyle> oldComputedStyle = mComputedStyle.forget();
|
||||
mComputedStyle = aStyle;
|
||||
DidSetComputedStyle(oldComputedStyle);
|
||||
|
@ -795,6 +796,7 @@ public:
|
|||
void SetComputedStyleWithoutNotification(ComputedStyle* aStyle)
|
||||
{
|
||||
if (aStyle != mComputedStyle) {
|
||||
MOZ_DIAGNOSTIC_ASSERT(PresShell() == aStyle->PresContextForFrame()->PresShell());
|
||||
mComputedStyle = aStyle;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -106,10 +106,6 @@ pref("network.http.max-persistent-connections-per-proxy", 20);
|
|||
pref("network.http.spdy.push-allowance", 32768);
|
||||
pref("network.http.spdy.default-hpack-buffer", 4096); // 4k
|
||||
|
||||
// Racing the cache with the network should be disabled to prevent accidental
|
||||
// data usage.
|
||||
pref("network.http.rcwn.enabled", false);
|
||||
|
||||
// See bug 545869 for details on why these are set the way they are
|
||||
pref("network.buffer.cache.count", 24);
|
||||
pref("network.buffer.cache.size", 16384);
|
||||
|
|
|
@ -1322,10 +1322,11 @@ pref("dom.event.clipboardevents.enabled", true);
|
|||
pref("dom.event.highrestimestamp.enabled", true);
|
||||
pref("dom.event.coalesce_mouse_move", true);
|
||||
|
||||
pref("dom.webcomponents.shadowdom.enabled", false);
|
||||
#ifdef NIGHTLY_BUILD
|
||||
pref("dom.webcomponents.shadowdom.enabled", true);
|
||||
pref("dom.webcomponents.customelements.enabled", true);
|
||||
#else
|
||||
pref("dom.webcomponents.shadowdom.enabled", false);
|
||||
pref("dom.webcomponents.customelements.enabled", false);
|
||||
#endif
|
||||
|
||||
|
|
|
@ -112,6 +112,7 @@
|
|||
#include "nsIMIMEInputStream.h"
|
||||
#include "nsIMultiplexInputStream.h"
|
||||
#include "../../cache2/CacheFileUtils.h"
|
||||
#include "nsINetworkLinkService.h"
|
||||
|
||||
#ifdef MOZ_TASK_TRACER
|
||||
#include "GeckoTaskTracer.h"
|
||||
|
@ -9122,6 +9123,23 @@ nsHttpChannel::TriggerNetwork()
|
|||
nsresult
|
||||
nsHttpChannel::MaybeRaceCacheWithNetwork()
|
||||
{
|
||||
nsresult rv;
|
||||
|
||||
nsCOMPtr<nsINetworkLinkService> netLinkSvc =
|
||||
do_GetService(NS_NETWORK_LINK_SERVICE_CONTRACTID, &rv);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
uint32_t linkType;
|
||||
rv = netLinkSvc->GetLinkType(&linkType);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
if (!(linkType == nsINetworkLinkService::LINK_TYPE_UNKNOWN ||
|
||||
linkType == nsINetworkLinkService::LINK_TYPE_ETHERNET ||
|
||||
linkType == nsINetworkLinkService::LINK_TYPE_USB ||
|
||||
linkType == nsINetworkLinkService::LINK_TYPE_WIFI)) {
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
// Don't trigger the network if the load flags say so.
|
||||
if (mLoadFlags & (LOAD_ONLY_FROM_CACHE | LOAD_NO_NETWORK_IO)) {
|
||||
return NS_OK;
|
||||
|
|
|
@ -640,11 +640,9 @@ SpecialPowersObserverAPI.prototype = {
|
|||
let id = aMessage.data.id;
|
||||
let extension = this._extensions.get(id);
|
||||
this._extensions.delete(id);
|
||||
let {setTimeout} = ChromeUtils.import("resource://gre/modules/Timer.jsm", null);
|
||||
let done = () => {
|
||||
setTimeout(() => {
|
||||
let done = async () => {
|
||||
await extension._uninstallPromise;
|
||||
this._sendReply(aMessage, "SPExtensionMessage", {id, type: "extensionUnloaded", args: []});
|
||||
}, 0);
|
||||
};
|
||||
extension.shutdown().then(done, done);
|
||||
return undefined;
|
||||
|
|
|
@ -2,5 +2,3 @@
|
|||
[ImageBitmapRenderingContext interface: existence and properties of interface object]
|
||||
expected: FAIL
|
||||
|
||||
|
||||
[interfaces.any.html]
|
||||
|
|
|
@ -298645,6 +298645,26 @@
|
|||
{}
|
||||
]
|
||||
],
|
||||
"service-workers/service-worker/resources/service-worker-interception-dynamic-import-worker.js": [
|
||||
[
|
||||
{}
|
||||
]
|
||||
],
|
||||
"service-workers/service-worker/resources/service-worker-interception-network-worker.js": [
|
||||
[
|
||||
{}
|
||||
]
|
||||
],
|
||||
"service-workers/service-worker/resources/service-worker-interception-service-worker.js": [
|
||||
[
|
||||
{}
|
||||
]
|
||||
],
|
||||
"service-workers/service-worker/resources/service-worker-interception-static-import-worker.js": [
|
||||
[
|
||||
{}
|
||||
]
|
||||
],
|
||||
"service-workers/service-worker/resources/shared-worker-controlled.js": [
|
||||
[
|
||||
{}
|
||||
|
@ -369622,6 +369642,12 @@
|
|||
{}
|
||||
]
|
||||
],
|
||||
"service-workers/service-worker/dedicated-worker-service-worker-interception.https.html": [
|
||||
[
|
||||
"/service-workers/service-worker/dedicated-worker-service-worker-interception.https.html",
|
||||
{}
|
||||
]
|
||||
],
|
||||
"service-workers/service-worker/detached-context.https.html": [
|
||||
[
|
||||
"/service-workers/service-worker/detached-context.https.html",
|
||||
|
@ -579452,11 +579478,11 @@
|
|||
"testharness"
|
||||
],
|
||||
"html/semantics/embedded-content/the-img-element/sizes/sizes-dynamic-001-ref.html": [
|
||||
"d2a087e2d55f7d0a2de3a0008c149932151a69f0",
|
||||
"497a115d29e597db7ef08aff11534fd69c449130",
|
||||
"support"
|
||||
],
|
||||
"html/semantics/embedded-content/the-img-element/sizes/sizes-dynamic-001.html": [
|
||||
"0256768b16722bf4a8e6e1fb41b48e321509610f",
|
||||
"c25df42c0fa9b20cfac886da13c74801c63d8d40",
|
||||
"reftest"
|
||||
],
|
||||
"html/semantics/embedded-content/the-img-element/sizes/sizes-iframed.sub.html": [
|
||||
|
@ -606627,6 +606653,10 @@
|
|||
"8402c159967bb6e91903adc52e7d68c8d2443a72",
|
||||
"testharness"
|
||||
],
|
||||
"service-workers/service-worker/dedicated-worker-service-worker-interception.https.html": [
|
||||
"f0eefc8b5ca0e26d87bddd7821bcfcb2a387d6f8",
|
||||
"testharness"
|
||||
],
|
||||
"service-workers/service-worker/detached-context.https.html": [
|
||||
"81fc149311b54f92a2daedd81ffaba33fb88e831",
|
||||
"testharness"
|
||||
|
@ -608075,6 +608105,22 @@
|
|||
"f7c6bb3ba222dc35a09ef806a7c6d145339f9eb2",
|
||||
"support"
|
||||
],
|
||||
"service-workers/service-worker/resources/service-worker-interception-dynamic-import-worker.js": [
|
||||
"4b123607e3cb215ed6ebcb1d6c88793c2245be50",
|
||||
"support"
|
||||
],
|
||||
"service-workers/service-worker/resources/service-worker-interception-network-worker.js": [
|
||||
"d14febde5e8eceecc45e6104bb91fbe41ae6dea7",
|
||||
"support"
|
||||
],
|
||||
"service-workers/service-worker/resources/service-worker-interception-service-worker.js": [
|
||||
"323d1116c23cd9bfb9d6b14e7d815dfb132e36d0",
|
||||
"support"
|
||||
],
|
||||
"service-workers/service-worker/resources/service-worker-interception-static-import-worker.js": [
|
||||
"0f321563c9d64c45859f548988d0701e4e6373c5",
|
||||
"support"
|
||||
],
|
||||
"service-workers/service-worker/resources/shared-worker-controlled.js": [
|
||||
"9ae937c2e8499991432caa4587eb68fe2998f503",
|
||||
"support"
|
||||
|
@ -608684,7 +608730,7 @@
|
|||
"testharness"
|
||||
],
|
||||
"shadow-dom/input-element-list.html": [
|
||||
"79b4a278f0e35646cfdffeebf8f0523e2772bc9b",
|
||||
"fcfa6fee4ecc1391a457880bad3564778a76127a",
|
||||
"testharness"
|
||||
],
|
||||
"shadow-dom/layout-slot-no-longer-assigned.html": [
|
||||
|
|
|
@ -2,5 +2,3 @@
|
|||
[Untitled]
|
||||
expected: FAIL
|
||||
|
||||
|
||||
[successes_AES-CTR.https.any.html]
|
||||
|
|
|
@ -2,5 +2,3 @@
|
|||
[Untitled]
|
||||
expected: FAIL
|
||||
|
||||
|
||||
[successes_HMAC.https.any.html]
|
||||
|
|
|
@ -1,2 +1 @@
|
|||
prefs: [network.http.rcwn.enabled:false]
|
||||
[304.htm]
|
||||
|
|
|
@ -1,2 +1 @@
|
|||
prefs: [layout.css.getBoxQuads.enabled:true, layout.css.convertFromNode.enabled:true]
|
||||
[cssom-getBoxQuads-001.html]
|
||||
|
|
|
@ -29,5 +29,3 @@
|
|||
[SVGFEImageElement interface: attribute crossOrigin]
|
||||
expected: FAIL
|
||||
|
||||
|
||||
[interfaces.any.worker.html]
|
||||
|
|
|
@ -330,3 +330,5 @@
|
|||
[dialog: Operator 'new' should instantiate a customized built-in element]
|
||||
expected: FAIL
|
||||
|
||||
[slot: Operator 'new' should instantiate a customized built-in element]
|
||||
expected: FAIL
|
||||
|
|
|
@ -2,5 +2,3 @@
|
|||
[HTMLIFrameElement interface: attribute allow]
|
||||
expected: FAIL
|
||||
|
||||
|
||||
[interfaces.any.worker.html]
|
||||
|
|
|
@ -1,2 +1 @@
|
|||
prefs: [network.http.rcwn.enabled:false]
|
||||
[conditional-get.html]
|
||||
|
|
|
@ -1,2 +1 @@
|
|||
prefs: [network.http.rcwn.enabled:false]
|
||||
[request-cache-default.html]
|
||||
|
|
|
@ -1,2 +1 @@
|
|||
prefs: [network.http.rcwn.enabled:false]
|
||||
[request-cache-force-cache.html]
|
||||
|
|
|
@ -1,2 +1 @@
|
|||
prefs: [network.http.rcwn.enabled:false]
|
||||
[request-cache-reload.html]
|
||||
|
|
|
@ -11,7 +11,3 @@
|
|||
[html5lib_tests15.html 938af694979b4eae59e7bd3ab71d76e5254192a0]
|
||||
expected: FAIL
|
||||
|
||||
|
||||
[html5lib_tests15.html?run_type=write]
|
||||
|
||||
[html5lib_tests15.html?run_type=uri]
|
||||
|
|
|
@ -1,2 +1 @@
|
|||
prefs: [privacy.reduceTimerPrecision:false]
|
||||
[timestamp.html]
|
||||
|
|
|
@ -1,2 +1,2 @@
|
|||
local: ac31e7b4fddc20a83d3675d2ac27672007892a63
|
||||
upstream: 232137f0fdacdeed99a7df5dd229d23020b0bccc
|
||||
local: de011ba330ecaed7db2db6c6eccb647cf75ddd41
|
||||
upstream: 347a7974c93326910109cd0f3386cc427add4ec5
|
||||
|
|
|
@ -1,2 +1 @@
|
|||
prefs: [privacy.reduceTimerPrecision:false]
|
||||
[nav2_test_redirect_server.html]
|
||||
|
|
|
@ -1,2 +1 @@
|
|||
prefs: [privacy.reduceTimerPrecision:false]
|
||||
[basic.html]
|
||||
|
|
|
@ -0,0 +1,8 @@
|
|||
[dedicated-worker-service-worker-interception.https.html]
|
||||
expected: ERROR
|
||||
[Static import should be intercepted by a service worker.]
|
||||
expected: TIMEOUT
|
||||
|
||||
[Dynamic import should be intercepted by a service worker.]
|
||||
expected: NOTRUN
|
||||
|
|
@ -1,2 +1 @@
|
|||
prefs: [privacy.reduceTimerPrecision:false]
|
||||
[resource-timing.https.html]
|
||||
|
|
|
@ -2,5 +2,3 @@
|
|||
[URL interface: legacy window alias]
|
||||
expected: FAIL
|
||||
|
||||
|
||||
[interfaces.any.worker.html]
|
||||
|
|
|
@ -1,2 +1 @@
|
|||
prefs: [layout.css.font-variations.enabled:true, layout.css.overflow-clip-box.enabled:true, layout.css.individual-transform.enabled:true]
|
||||
[accumulation-per-property.html]
|
||||
|
|
|
@ -1,2 +1 @@
|
|||
prefs: [layout.css.font-variations.enabled:true, layout.css.overflow-clip-box.enabled:true, layout.css.individual-transform.enabled:true]
|
||||
[addition-per-property.html]
|
||||
|
|
|
@ -2,5 +2,3 @@
|
|||
disabled:
|
||||
if (os == "win") and (version == "5.1.2600"): https://bugzilla.mozilla.org/show_bug.cgi?id=1090198
|
||||
if e10s and debug: https://bugzilla.mozilla.org/show_bug.cgi?id=1090198
|
||||
|
||||
[014.html?wss]
|
||||
|
|
|
@ -2,5 +2,3 @@
|
|||
[WebSockets: setting Secure cookie with document.cookie, checking ws request]
|
||||
expected: FAIL
|
||||
|
||||
|
||||
[006.html]
|
||||
|
|
|
@ -1,5 +1,3 @@
|
|||
[001.html]
|
||||
disabled:
|
||||
if (os == "linux") and debug and webrender: https://bugzilla.mozilla.org/show_bug.cgi?id=1372789
|
||||
|
||||
[001.html?wss]
|
||||
|
|
|
@ -1,2 +1 @@
|
|||
prefs: [privacy.reduceTimerPrecision:false]
|
||||
[WorkerPerformanceNow.html]
|
||||
|
|
|
@ -1,2 +1 @@
|
|||
prefs: [privacy.reduceTimerPrecision:false]
|
||||
[002.html]
|
||||
|
|
|
@ -2,5 +2,3 @@
|
|||
[progress event should not be fired by sync XHR]
|
||||
expected: FAIL
|
||||
|
||||
|
||||
[sync-no-progress.any.html]
|
||||
|
|
|
@ -0,0 +1,40 @@
|
|||
<!DOCTYPE html>
|
||||
<title>DedicatedWorker: ServiceWorker interception</title>
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<script src="resources/test-helpers.sub.js"></script>
|
||||
<script>
|
||||
|
||||
// Note that Chrome cannot pass these tests because of https://crbug.com/731599.
|
||||
|
||||
function service_worker_interception_test(url, description) {
|
||||
promise_test(async t => {
|
||||
// Register a service worker whose scope includes |url|.
|
||||
const kServiceWorkerScriptURL =
|
||||
'resources/service-worker-interception-service-worker.js';
|
||||
const registration = await service_worker_unregister_and_register(
|
||||
t, kServiceWorkerScriptURL, url);
|
||||
add_result_callback(() => registration.unregister());
|
||||
await wait_for_state(t, registration.installing, 'activated');
|
||||
|
||||
// Start a dedicated worker for |url|. The top-level script request and any
|
||||
// module imports should be intercepted by the service worker.
|
||||
const worker = new Worker(url, { type: 'module' });
|
||||
const msg_event = await new Promise(resolve => worker.onmessage = resolve);
|
||||
assert_equals(msg_event.data, 'LOADED_FROM_SERVICE_WORKER');
|
||||
}, description);
|
||||
}
|
||||
|
||||
service_worker_interception_test(
|
||||
'resources/service-worker-interception-network-worker.js',
|
||||
'Top-level module loading should be intercepted by a service worker.');
|
||||
|
||||
service_worker_interception_test(
|
||||
'resources/service-worker-interception-static-import-worker.js',
|
||||
'Static import should be intercepted by a service worker.');
|
||||
|
||||
service_worker_interception_test(
|
||||
'resources/service-worker-interception-dynamic-import-worker.js',
|
||||
'Dynamic import should be intercepted by a service worker.');
|
||||
|
||||
</script>
|
|
@ -0,0 +1 @@
|
|||
import('./service-worker-interception-network-worker.js');
|
|
@ -0,0 +1 @@
|
|||
postMessage('LOADED_FROM_NETWORK');
|
|
@ -0,0 +1,9 @@
|
|||
const kURL = '/service-worker-interception-network-worker.js';
|
||||
const kScript = 'postMessage("LOADED_FROM_SERVICE_WORKER")';
|
||||
const kHeaders = [['content-type', 'text/javascript']];
|
||||
|
||||
self.addEventListener('fetch', e => {
|
||||
// Serve a generated response for kURL.
|
||||
if (e.request.url.indexOf(kURL) != -1)
|
||||
e.respondWith(new Response(kScript, { headers: kHeaders }));
|
||||
});
|
|
@ -0,0 +1 @@
|
|||
import './service-worker-interception-network-worker.js';
|
|
@ -1155,7 +1155,9 @@ class BootstrapScope {
|
|||
uninstall(data, reason) {
|
||||
AsyncShutdown.profileChangeTeardown.addBlocker(
|
||||
`Uninstalling add-on: ${data.id}`,
|
||||
Management.emit("uninstall", {id: data.id}));
|
||||
Management.emit("uninstall", {id: data.id}).then(() => {
|
||||
Management.emit("uninstall-complete", {id: data.id});
|
||||
}));
|
||||
}
|
||||
|
||||
update(data, reason) {
|
||||
|
|
|
@ -56,9 +56,10 @@ XPCOMUtils.defineLazyGetter(this, "console", ExtensionUtils.getConsole);
|
|||
* @param {nsIFile} file
|
||||
* @param {nsIURI} rootURI
|
||||
* @param {string} installType
|
||||
* @param {boolean} [embedded = false]
|
||||
*/
|
||||
class MockExtension {
|
||||
constructor(file, rootURI, installType) {
|
||||
constructor(file, rootURI, installType, embedded) {
|
||||
this.id = null;
|
||||
this.file = file;
|
||||
this.rootURI = rootURI;
|
||||
|
@ -84,6 +85,9 @@ class MockExtension {
|
|||
this._extension = null;
|
||||
this._extensionPromise = promiseEvent("startup");
|
||||
this._readyPromise = promiseEvent("ready");
|
||||
if (!embedded) {
|
||||
this._uninstallPromise = promiseEvent("uninstall-complete");
|
||||
}
|
||||
}
|
||||
|
||||
maybeSetID(uri, id) {
|
||||
|
@ -374,7 +378,7 @@ var ExtensionTestCommon = class ExtensionTestCommon {
|
|||
|
||||
// This may be "temporary" or "permanent".
|
||||
if (data.useAddonManager) {
|
||||
return new MockExtension(file, jarURI, data.useAddonManager);
|
||||
return new MockExtension(file, jarURI, data.useAddonManager, data.embedded);
|
||||
}
|
||||
|
||||
let id;
|
||||
|
|
|
@ -12,6 +12,8 @@ const gDashboard = Cc["@mozilla.org/network/dashboard;1"]
|
|||
.getService(Ci.nsIDashboard);
|
||||
const gDirServ = Cc["@mozilla.org/file/directory_service;1"]
|
||||
.getService(Ci.nsIDirectoryServiceProvider);
|
||||
const gNetLinkSvc = Cc["@mozilla.org/network/network-link-service;1"]
|
||||
.getService(Ci.nsINetworkLinkService);
|
||||
|
||||
const gRequestNetworkingData = {
|
||||
"http": gDashboard.requestHttpConnections,
|
||||
|
@ -127,6 +129,14 @@ function displayWebsockets(data) {
|
|||
|
||||
function displayRcwnStats(data) {
|
||||
let status = Services.prefs.getBoolPref("network.http.rcwn.enabled");
|
||||
let linkType = gNetLinkSvc.linkType;
|
||||
if (!(linkType == Ci.nsINetworkLinkService.LINK_TYPE_UNKNOWN ||
|
||||
linkType == Ci.nsINetworkLinkService.LINK_TYPE_ETHERNET ||
|
||||
linkType == Ci.nsINetworkLinkService.LINK_TYPE_USB ||
|
||||
linkType == Ci.nsINetworkLinkService.LINK_TYPE_WIFI)) {
|
||||
status = false;
|
||||
}
|
||||
|
||||
let cacheWon = data.rcwnCacheWonCount;
|
||||
let netWon = data.rcwnNetWonCount;
|
||||
let total = data.totalNetworkRequests;
|
||||
|
|
Загрузка…
Ссылка в новой задаче