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:
Honza Bambas
2020-05-11 14:15:30 +00:00
parent 58712a68b4
commit a075a49397
9 changed files with 12 additions and 111 deletions

View File

@@ -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,

View File

@@ -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";
});

View File

@@ -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()

View File

@@ -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

View File

@@ -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

View File

@@ -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);

View File

@@ -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)) {

View File

@@ -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.

View File

@@ -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;
}