Bug 1618322 - Merge network.preload.experimental pref to network.preload, r=dragana
Depends on D70235 Differential Revision: https://phabricator.services.mozilla.com/D70526
This commit is contained in:
@@ -409,8 +409,7 @@ static const DOMTokenListSupportedToken sSupportedRelValuesWithManifest[] = {
|
||||
|
||||
nsDOMTokenList* HTMLLinkElement::RelList() {
|
||||
if (!mRelList) {
|
||||
auto preload = Preferences::GetBool("network.preload") ||
|
||||
StaticPrefs::network_preload_experimental();
|
||||
auto preload = StaticPrefs::network_preload();
|
||||
auto manifest = StaticPrefs::dom_manifest_enabled();
|
||||
if (manifest && preload) {
|
||||
mRelList = new nsDOMTokenList(this, nsGkAtoms::rel,
|
||||
|
||||
@@ -67,7 +67,7 @@ function checkFinished() {
|
||||
SimpleTest.waitForExplicitFinish();
|
||||
|
||||
SpecialPowers.pushPrefEnv(
|
||||
{'set':[["network.preload-experimental", true]]},
|
||||
{'set':[["network.preload", true]]},
|
||||
function() {
|
||||
document.getElementById("testframe").src = "file_link_rel_preload.html";
|
||||
});
|
||||
|
||||
@@ -2187,8 +2187,7 @@ nsresult imgLoader::LoadImage(
|
||||
}
|
||||
|
||||
// Look in the preloaded images of loading document first.
|
||||
if (StaticPrefs::network_preload_experimental() && !aLinkPreload &&
|
||||
aLoadingDocument) {
|
||||
if (StaticPrefs::network_preload() && !aLinkPreload && aLoadingDocument) {
|
||||
auto key = PreloadHashKey::CreateAsImage(
|
||||
aURI, aTriggeringPrincipal, ConvertToCORSMode(corsmode),
|
||||
aReferrerInfo ? aReferrerInfo->ReferrerPolicy()
|
||||
|
||||
@@ -7683,9 +7683,8 @@
|
||||
value: false
|
||||
mirror: always
|
||||
|
||||
# Whether to use the new experimental preload code based on the speculative loader
|
||||
# inside the html5 parser.
|
||||
- name: network.preload-experimental
|
||||
# Enables <link rel="preload"> tag and `Link:` respose header handling.
|
||||
- name: network.preload
|
||||
type: RelaxedAtomicBool
|
||||
value: false
|
||||
mirror: always
|
||||
|
||||
@@ -1848,8 +1848,6 @@ pref("network.ftp.idleConnectionTimeout", 300);
|
||||
// enables the prefetch service (i.e., prefetching of <link rel="next"> and
|
||||
// <link rel="prefetch"> URLs).
|
||||
pref("network.prefetch-next", true);
|
||||
// enables the preloading (i.e., preloading of <link rel="preload"> URLs).
|
||||
pref("network.preload", false);
|
||||
|
||||
// The following prefs pertain to the negotiate-auth extension (see bug 17578),
|
||||
// which provides transparent Kerberos or NTLM authentication using the SPNEGO
|
||||
|
||||
@@ -272,7 +272,7 @@ nsIContentHandle* nsHtml5TreeBuilder::createElement(
|
||||
mSpeculativeLoadQueue.AppendElement()->InitPreconnect(
|
||||
url, crossOrigin);
|
||||
}
|
||||
} else if (StaticPrefs::network_preload_experimental() &&
|
||||
} else if (StaticPrefs::network_preload() &&
|
||||
rel.LowerCaseEqualsASCII("preload")) {
|
||||
nsHtml5String url =
|
||||
aAttributes->getValue(nsHtml5AttributeName::ATTR_HREF);
|
||||
|
||||
@@ -55,7 +55,6 @@ static LazyLogModule gPrefetchLog("nsPrefetch");
|
||||
#define LOG_ENABLED() MOZ_LOG_TEST(gPrefetchLog, mozilla::LogLevel::Debug)
|
||||
|
||||
#define PREFETCH_PREF "network.prefetch-next"
|
||||
#define PRELOAD_PREF "network.preload"
|
||||
#define PARALLELISM_PREF "network.prefetch-next.parallelism"
|
||||
#define AGGRESSIVE_PREF "network.prefetch-next.aggressive"
|
||||
|
||||
@@ -325,12 +324,10 @@ nsPrefetchService::nsPrefetchService()
|
||||
mStopCount(0),
|
||||
mHaveProcessed(false),
|
||||
mPrefetchDisabled(true),
|
||||
mPreloadDisabled(true),
|
||||
mAggressive(false) {}
|
||||
|
||||
nsPrefetchService::~nsPrefetchService() {
|
||||
Preferences::RemoveObserver(this, PREFETCH_PREF);
|
||||
Preferences::RemoveObserver(this, PRELOAD_PREF);
|
||||
Preferences::RemoveObserver(this, PARALLELISM_PREF);
|
||||
Preferences::RemoveObserver(this, AGGRESSIVE_PREF);
|
||||
// cannot reach destructor if prefetch in progress (listener owns reference
|
||||
@@ -345,9 +342,6 @@ nsresult nsPrefetchService::Init() {
|
||||
mPrefetchDisabled = !Preferences::GetBool(PREFETCH_PREF, !mPrefetchDisabled);
|
||||
Preferences::AddWeakObserver(this, PREFETCH_PREF);
|
||||
|
||||
mPreloadDisabled = !Preferences::GetBool(PRELOAD_PREF, !mPreloadDisabled);
|
||||
Preferences::AddWeakObserver(this, PRELOAD_PREF);
|
||||
|
||||
mMaxParallelism = Preferences::GetInt(PARALLELISM_PREF, mMaxParallelism);
|
||||
if (mMaxParallelism < 1) {
|
||||
mMaxParallelism = 1;
|
||||
@@ -365,7 +359,7 @@ nsresult nsPrefetchService::Init() {
|
||||
rv = observerService->AddObserver(this, NS_XPCOM_SHUTDOWN_OBSERVER_ID, true);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
if (!mPrefetchDisabled || !mPreloadDisabled) {
|
||||
if (!mPrefetchDisabled) {
|
||||
AddProgressListener();
|
||||
}
|
||||
|
||||
@@ -597,71 +591,8 @@ nsresult nsPrefetchService::Preload(nsIURI* aURI,
|
||||
LOG(("PreloadURI [%s]\n", aURI->GetSpecOrDefault().get()));
|
||||
}
|
||||
|
||||
if (mPreloadDisabled) {
|
||||
LOG(("rejected: preload service is disabled\n"));
|
||||
return NS_ERROR_ABORT;
|
||||
}
|
||||
|
||||
nsresult rv = CheckURIScheme(aURI, aReferrerInfo);
|
||||
if (NS_FAILED(rv)) {
|
||||
return rv;
|
||||
}
|
||||
|
||||
// XXX we might want to either leverage nsIProtocolHandler::protocolFlags
|
||||
// or possibly nsIRequest::loadFlags to determine if this URI should be
|
||||
// prefetched.
|
||||
//
|
||||
|
||||
if (aPolicyType == nsIContentPolicy::TYPE_INVALID) {
|
||||
if (aSource && aSource->IsInComposedDoc()) {
|
||||
RefPtr<AsyncEventDispatcher> asyncDispatcher =
|
||||
new AsyncEventDispatcher(aSource, NS_LITERAL_STRING("error"),
|
||||
CanBubble::eNo, ChromeOnlyDispatch::eNo);
|
||||
asyncDispatcher->RunDOMEventWhenSafe();
|
||||
}
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
//
|
||||
// Check whether it is being preloaded.
|
||||
//
|
||||
for (uint32_t i = 0; i < mCurrentNodes.Length(); ++i) {
|
||||
bool equals;
|
||||
if ((mCurrentNodes[i]->mPolicyType == aPolicyType) &&
|
||||
NS_SUCCEEDED(mCurrentNodes[i]->mURI->Equals(aURI, &equals)) && equals) {
|
||||
nsWeakPtr source = do_GetWeakReference(aSource);
|
||||
if (mCurrentNodes[i]->mSources.IndexOf(source) ==
|
||||
mCurrentNodes[i]->mSources.NoIndex) {
|
||||
LOG(
|
||||
("URL is already being preloaded, add a new reference "
|
||||
"document\n"));
|
||||
mCurrentNodes[i]->mSources.AppendElement(source);
|
||||
return NS_OK;
|
||||
} else {
|
||||
LOG(("URL is already being preloaded by this document"));
|
||||
return NS_ERROR_ABORT;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
LOG(("This is a preload, so start loading immediately.\n"));
|
||||
RefPtr<nsPrefetchNode> enqueuedNode;
|
||||
enqueuedNode =
|
||||
new nsPrefetchNode(this, aURI, aReferrerInfo, aSource, aPolicyType, true);
|
||||
|
||||
NotifyLoadRequested(enqueuedNode);
|
||||
rv = enqueuedNode->OpenChannel();
|
||||
if (NS_SUCCEEDED(rv)) {
|
||||
mCurrentNodes.AppendElement(enqueuedNode);
|
||||
} else {
|
||||
if (aSource && aSource->IsInComposedDoc()) {
|
||||
RefPtr<AsyncEventDispatcher> asyncDispatcher =
|
||||
new AsyncEventDispatcher(aSource, NS_LITERAL_STRING("error"),
|
||||
CanBubble::eNo, ChromeOnlyDispatch::eNo);
|
||||
asyncDispatcher->RunDOMEventWhenSafe();
|
||||
}
|
||||
}
|
||||
return NS_OK;
|
||||
LOG(("rejected: preload service is deprecated\n"));
|
||||
return NS_ERROR_ABORT;
|
||||
}
|
||||
|
||||
nsresult nsPrefetchService::Prefetch(nsIURI* aURI,
|
||||
@@ -912,7 +843,6 @@ nsPrefetchService::Observe(nsISupports* aSubject, const char* aTopic,
|
||||
if (!strcmp(aTopic, NS_XPCOM_SHUTDOWN_OBSERVER_ID)) {
|
||||
StopAll();
|
||||
mPrefetchDisabled = true;
|
||||
mPreloadDisabled = true;
|
||||
} else if (!strcmp(aTopic, NS_PREFBRANCH_PREFCHANGE_TOPIC_ID)) {
|
||||
const nsCString converted = NS_ConvertUTF16toUTF8(aData);
|
||||
const char* pref = converted.get();
|
||||
@@ -921,37 +851,14 @@ nsPrefetchService::Observe(nsISupports* aSubject, const char* aTopic,
|
||||
if (mPrefetchDisabled) {
|
||||
LOG(("enabling prefetching\n"));
|
||||
mPrefetchDisabled = false;
|
||||
if (mPreloadDisabled) {
|
||||
AddProgressListener();
|
||||
}
|
||||
AddProgressListener();
|
||||
}
|
||||
} else {
|
||||
if (!mPrefetchDisabled) {
|
||||
LOG(("disabling prefetching\n"));
|
||||
StopCurrentPrefetchsPreloads(false);
|
||||
mPrefetchDisabled = true;
|
||||
if (mPreloadDisabled) {
|
||||
RemoveProgressListener();
|
||||
}
|
||||
}
|
||||
}
|
||||
} else if (!strcmp(pref, PRELOAD_PREF)) {
|
||||
if (Preferences::GetBool(PRELOAD_PREF, false)) {
|
||||
if (mPreloadDisabled) {
|
||||
LOG(("enabling preloading\n"));
|
||||
mPreloadDisabled = false;
|
||||
if (mPrefetchDisabled) {
|
||||
AddProgressListener();
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (!mPreloadDisabled) {
|
||||
LOG(("disabling preloading\n"));
|
||||
StopCurrentPrefetchsPreloads(true);
|
||||
mPreloadDisabled = true;
|
||||
if (mPrefetchDisabled) {
|
||||
RemoveProgressListener();
|
||||
}
|
||||
RemoveProgressListener();
|
||||
}
|
||||
}
|
||||
} else if (!strcmp(pref, PARALLELISM_PREF)) {
|
||||
|
||||
@@ -74,7 +74,6 @@ class nsPrefetchService final : public nsIPrefetchService,
|
||||
int32_t mStopCount;
|
||||
bool mHaveProcessed;
|
||||
bool mPrefetchDisabled;
|
||||
bool mPreloadDisabled;
|
||||
|
||||
// In usual case prefetch does not start until all normal loads are done.
|
||||
// Aggressive mode ignores normal loads and just start prefetch ASAP.
|
||||
|
||||
@@ -59,7 +59,7 @@ already_AddRefed<nsIURI> PreloadService::GetPreloadURI(const nsAString& aURL) {
|
||||
already_AddRefed<PreloaderBase> PreloadService::PreloadLinkElement(
|
||||
dom::HTMLLinkElement* aLinkElement, nsContentPolicyType aPolicyType,
|
||||
nsIReferrerInfo* aReferrerInfo) {
|
||||
if (!StaticPrefs::network_preload_experimental()) {
|
||||
if (!StaticPrefs::network_preload()) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user