Bug 1471243 - Do not prerender ActivityStream for about:welcome
MozReview-Commit-ID: IDyWGnuMndy
--- a/browser/components/about/AboutRedirector.cpp
+++ b/browser/components/about/AboutRedirector.cpp
@@ -160,25 +160,32 @@ AboutRedirector::NewChannel(nsIURI* aURI
for (auto & redir : kRedirMap) {
if (!strcmp(path.get(), redir.id)) {
nsAutoCString url;
// Let the aboutNewTabService decide where to redirect for about:home and
// enabled about:newtab. Disabledx about:newtab page uses fallback.
if (path.EqualsLiteral("home") ||
- (sNewTabPageEnabled && path.EqualsLiteral("newtab")) ||
- path.EqualsLiteral("welcome")) {
+ (sNewTabPageEnabled && path.EqualsLiteral("newtab"))) {
nsCOMPtr<nsIAboutNewTabService> aboutNewTabService =
do_GetService("@mozilla.org/browser/aboutnewtab-service;1", &rv);
NS_ENSURE_SUCCESS(rv, rv);
rv = aboutNewTabService->GetDefaultURL(url);
NS_ENSURE_SUCCESS(rv, rv);
}
+ if (path.EqualsLiteral("welcome")) {
+ nsCOMPtr<nsIAboutNewTabService> aboutNewTabService =
+ do_GetService("@mozilla.org/browser/aboutnewtab-service;1", &rv);
+ NS_ENSURE_SUCCESS(rv, rv);
+ rv = aboutNewTabService->GetWelcomeURL(url);
+ NS_ENSURE_SUCCESS(rv, rv);
+ }
+
if (sNewCertErrorPageEnabled && path.EqualsLiteral("certerror")) {
url.AssignASCII("chrome://browser/content/aboutNetError-new.xhtml");
}
// fall back to the specified url in the map
if (url.IsEmpty()) {
url.AssignASCII(redir.url);
}
--- a/browser/components/newtab/aboutNewTabService.js
+++ b/browser/components/newtab/aboutNewTabService.js
@@ -181,16 +181,30 @@ AboutNewTabService.prototype = {
this._activityStreamPath,
"activity-stream",
this._activityStreamPrerender ? "-prerendered" : "",
this._activityStreamDebug ? "-debug" : "",
".html"
].join("");
},
+ /*
+ * Returns the about:welcome URL
+ *
+ * This is calculated in the same way the default URL is, except that we don't
+ * allow prerendering.
+ */
+ get welcomeURL() {
+ const prerenderEnabled = this._activityStreamPrerender;
+ this._activityStreamPrerender = false;
+ const url = this.defaultURL;
+ this._activityStreamPrerender = prerenderEnabled;
+ return url;
+ },
+
get newTabURL() {
return this._newTabURL;
},
set newTabURL(aNewTabURL) {
aNewTabURL = aNewTabURL.trim();
if (aNewTabURL === ABOUT_URL) {
// avoid infinite redirects in case one sets the URL to about:newtab
--- a/browser/components/newtab/nsIAboutNewTabService.idl
+++ b/browser/components/newtab/nsIAboutNewTabService.idl
@@ -19,16 +19,21 @@ interface nsIAboutNewTabService : nsISup
attribute ACString newTabURL;
/**
* Returns the default URL (local or activity stream depending on pref)
*/
attribute ACString defaultURL;
/**
+ * Returns the about:welcome URL.
+ */
+ attribute ACString welcomeURL;
+
+ /**
* Returns true if opening the New Tab page will notify the user of a change.
*/
attribute bool willNotifyUser;
/**
* Returns true if the default resource got overridden.
*/
readonly attribute bool overridden;
--- a/browser/components/newtab/tests/xpcshell/test_AboutNewTabService.js
+++ b/browser/components/newtab/tests/xpcshell/test_AboutNewTabService.js
@@ -124,16 +124,43 @@ add_task(async function test_default_url
}
Assert.equal(aboutNewTabService.defaultURL, ACTIVITY_STREAM_URL,
"Newtab defaultURL set to un-prerendered AS if prerender is false and debug is false");
cleanup();
});
+add_task(async function test_welcome_url() {
+ await setupASPrerendered();
+
+ Assert.equal(aboutNewTabService.activityStreamPrerender, true,
+ "Prerendering is enabled by default.");
+ Assert.equal(aboutNewTabService.welcomeURL, ACTIVITY_STREAM_URL,
+ "Newtab welcomeURL set to un-prerendered AS when prerendering enabled and debug disabled.");
+ await setBoolPrefAndWaitForChange(ACTIVITY_STREAM_PRERENDER_PREF, false,
+ "A notification occurs after changing the prerender pref to false.");
+ Assert.equal(aboutNewTabService.welcomeURL, aboutNewTabService.defaultURL,
+ "Newtab welcomeURL is equal to defaultURL when prerendering disabled and debug disabled.");
+
+ // Only debug variants aren't available on release/beta
+ if (!IS_RELEASE_OR_BETA) {
+ await setBoolPrefAndWaitForChange(ACTIVITY_STREAM_DEBUG_PREF, true,
+ "A notification occurs after changing the debug pref to true.");
+ Assert.equal(aboutNewTabService.welcomeURL, aboutNewTabService.welcomeURL,
+ "Newtab welcomeURL is equal to defaultURL when prerendering disabled and debug enabled.");
+ await setBoolPrefAndWaitForChange(ACTIVITY_STREAM_PRERENDER_PREF, true,
+ "A notification occurs after changing the prerender pref to true.");
+ Assert.equal(aboutNewTabService.welcomeURL, ACTIVITY_STREAM_DEBUG_URL,
+ "Newtab welcomeURL set to un-prerendered debug AS when prerendering enabled and debug enabled");
+ }
+
+ cleanup();
+});
+
add_task(function test_locale() {
Assert.equal(aboutNewTabService.activityStreamLocale, "en-US",
"The locale for testing should be en-US");
});
/**
* Tests reponse to updates to prefs
*/