Backed out 3 changesets (bug 1204983) for talos(g2) failures
authorWes Kocher <wkocher@mozilla.com>
Mon, 19 Oct 2015 16:09:33 -0700
changeset 268436 1e2fc068682e617ec5d72784cd2e34264157c88b
parent 268435 eab04490a2249f933ccc22b21fd9c5a57ca8ad89
child 268437 1f8cd027929b4808ea2f7c121261d47a81839cff
push id29551
push usercbook@mozilla.com
push dateTue, 20 Oct 2015 10:01:15 +0000
treeherdermozilla-central@f7b746b4e913 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
bugs1204983
milestone44.0a1
backs out00c07b02c8a8d1d906202ff88a9e57f494bb36b1
a4879b180d2de325a10a34882d17cd3f20bd85c9
38b6f878608af50ffecf359aaf4e289bf01ff8b2
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Backed out 3 changesets (bug 1204983) for talos(g2) failures Backed out changeset 00c07b02c8a8 (bug 1204983) Backed out changeset a4879b180d2d (bug 1204983) Backed out changeset 38b6f878608a (bug 1204983)
browser/base/content/tabbrowser.xml
browser/base/content/test/general/browser_bug763468_perwindowpb.js
browser/base/content/test/general/browser_bug767836_perwindowpb.js
browser/base/content/test/newtab/browser.ini
browser/base/content/test/newtab/browser_newtab_external_resource.js
browser/base/content/test/newtab/external_newtab.html
browser/base/content/utilityOverlay.js
browser/components/BrowserComponents.manifest
browser/components/about/AboutRedirector.cpp
browser/components/extensions/ext-tabs.js
browser/components/extensions/ext-windows.js
browser/components/moz.build
browser/components/newtab/NewTabURL.jsm
browser/components/newtab/tests/xpcshell/test_AboutNewTabService.js
browser/components/newtab/tests/xpcshell/xpcshell.ini
browser/components/nsBrowserGlue.js
browser/components/nsIAboutNewTabService.idl
browser/components/privatebrowsing/test/browser/browser_privatebrowsing_urlbarfocus.js
docshell/base/nsAboutRedirector.cpp
netwerk/base/nsNetUtil.cpp
netwerk/base/nsNetUtil.inl
testing/talos/talos/tests/tabswitch/bootstrap.js
testing/talos/talos/tests/tabswitch/content/test.html
testing/talos/talos/tests/tart/addon/content/tart.js
--- a/browser/base/content/tabbrowser.xml
+++ b/browser/base/content/tabbrowser.xml
@@ -1648,17 +1648,17 @@
 
       <method name="_isPreloadingEnabled">
         <body>
           <![CDATA[
             // Preloading for the newtab page is enabled when the pref is true
             // and the URL is "about:newtab". We do not support preloading for
             // custom newtab URLs.
             return Services.prefs.getBoolPref("browser.newtab.preload") &&
-                   !aboutNewTabService.overridden;
+                   !NewTabURL.overridden;
           ]]>
         </body>
       </method>
 
       <method name="_createPreloadBrowser">
         <body>
           <![CDATA[
             // Do nothing if we have a preloaded browser already
--- a/browser/base/content/test/general/browser_bug763468_perwindowpb.js
+++ b/browser/base/content/test/general/browser_bug763468_perwindowpb.js
@@ -1,32 +1,29 @@
 /* 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/. */
 
 // This test makes sure that opening a new tab in private browsing mode opens about:privatebrowsing
 function test() {
   // initialization
   waitForExplicitFinish();
-  let aboutNewTabService = Components.classes["@mozilla.org/browser/aboutnewtab-service;1"]
-                                     .getService(Components.interfaces.nsIAboutNewTabService);
-
   let windowsToClose = [];
   let newTab;
   let newTabURL;
   let mode;
 
   function doTest(aIsPrivateMode, aWindow, aCallback) {
     whenNewTabLoaded(aWindow, function () {
       if (aIsPrivateMode) {
         mode = "per window private browsing";
         newTabURL = "about:privatebrowsing";
       } else {
         mode = "normal";
-        newTabURL = aboutNewTabService.newTabURL;
+        newTabURL = NewTabURL.get();
       }
 
       is(aWindow.gBrowser.currentURI.spec, newTabURL,
         "URL of NewTab should be " + newTabURL + " in " + mode +  " mode");
 
       aWindow.gBrowser.removeTab(aWindow.gBrowser.selectedTab);
       aCallback()
     });
--- a/browser/base/content/test/general/browser_bug767836_perwindowpb.js
+++ b/browser/base/content/test/general/browser_bug767836_perwindowpb.js
@@ -1,63 +1,61 @@
 /* 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/. */
 
 function test() {
   //initialization
   waitForExplicitFinish();
-  let aboutNewTabService = Components.classes["@mozilla.org/browser/aboutnewtab-service;1"]
-                                     .getService(Components.interfaces.nsIAboutNewTabService);
   let newTabURL;
   let testURL = "http://example.com/";
   let mode;
 
   function doTest(aIsPrivateMode, aWindow, aCallback) {
     openNewTab(aWindow, function () {
       if (aIsPrivateMode) {
         mode = "per window private browsing";
         newTabURL = "about:privatebrowsing";
       } else {
         mode = "normal";
-        newTabURL = aboutNewTabService.newTabURL;
+        newTabURL = NewTabURL.get();
       }
 
       // Check the new tab opened while in normal/private mode
       is(aWindow.gBrowser.selectedBrowser.currentURI.spec, newTabURL,
         "URL of NewTab should be " + newTabURL + " in " + mode +  " mode");
       // Set the custom newtab url
-      aboutNewTabService.newTabURL = testURL;
-      is(aboutNewTabService.newTabURL, testURL, "Custom newtab url is set");
+      NewTabURL.override(testURL);
+      is(NewTabURL.get(), testURL, "Custom newtab url is set");
 
       // Open a newtab after setting the custom newtab url
       openNewTab(aWindow, function () {
         is(aWindow.gBrowser.selectedBrowser.currentURI.spec, testURL,
            "URL of NewTab should be the custom url");
 
         // Clear the custom url.
-        aboutNewTabService.resetNewTabURL();
-        is(aboutNewTabService.newTabURL, "about:newtab", "No custom newtab url is set");
+        NewTabURL.reset();
+        is(NewTabURL.get(), "about:newtab", "No custom newtab url is set");
 
         aWindow.gBrowser.removeTab(aWindow.gBrowser.selectedTab);
         aWindow.gBrowser.removeTab(aWindow.gBrowser.selectedTab);
         aWindow.close();
         aCallback()
       });
     });
   }
 
   function testOnWindow(aIsPrivate, aCallback) {
     whenNewWindowLoaded({private: aIsPrivate}, function(win) {
       executeSoon(() => aCallback(win));
     });
   }
 
   // check whether any custom new tab url has been configured
-  ok(!aboutNewTabService.overridden, "No custom newtab url is set");
+  ok(!NewTabURL.overridden, "No custom newtab url is set");
 
   // test normal mode
   testOnWindow(false, function(aWindow) {
     doTest(false, aWindow, function() {
       // test private mode
       testOnWindow(true, function(aWindow) {
         doTest(true, aWindow, function() {
           finish();
--- a/browser/base/content/test/newtab/browser.ini
+++ b/browser/base/content/test/newtab/browser.ini
@@ -46,11 +46,8 @@ support-files =
 [browser_newtab_sponsored_icon_click.js]
 [browser_newtab_undo.js]
 [browser_newtab_unpin.js]
 [browser_newtab_update.js]
 [browser_newtab_bug1145428.js]
 [browser_newtab_bug1178586.js]
 [browser_newtab_bug1194895.js]
 [browser_newtab_1188015.js]
-[browser_newtab_external_resource.js]
-support-files =
-  external_newtab.html
deleted file mode 100644
--- a/browser/base/content/test/newtab/browser_newtab_external_resource.js
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * Description of the Tests for
- *  - Bug 1204983 - Allow about: pages to load remote content
- *
- * We perform two tests:
- * (1) We load a new tab (about:newtab) using the default url and make sure that URL
- *     of the doucment matches about:newtab and the principal is the systemPrincipal.
- * (2) We load a new tab (about:newtab) and make sure that document.location as well
- *     as the nodePrincipal match the URL in the URL bar.
- */
-
-const ABOUT_NEWTAB_URI = "about:newtab";
-const PREF_URI = "http://example.com/browser/browser/base/content/test/newtab/external_newtab.html";
-
-var browser = null;
-var aboutNewTabService = Cc["@mozilla.org/browser/aboutnewtab-service;1"]
-                           .getService(Ci.nsIAboutNewTabService);
-
-function testPref() {
-  // set the pref for about:newtab to point to an exteranl resource
-  aboutNewTabService.newTabURL = PREF_URI;
-  ok(aboutNewTabService.overridden,
-     "sanity check: default URL for about:newtab should be overriden");
-  is(aboutNewTabService.newTabURL, PREF_URI,
-     "sanity check: default URL for about:newtab should return the new URL");
-
-  browser.contentWindow.location = ABOUT_NEWTAB_URI;
-
-  browser.addEventListener("load", function onLoad() {
-    browser.removeEventListener("load", onLoad, true);
-    is(content.document.location, PREF_URI, "document.location should match the external resource");
-    is(content.document.documentURI, PREF_URI, "document.documentURI should match the external resource");
-    is(content.document.nodePrincipal.URI.spec, PREF_URI, "nodePrincipal should match the external resource");
-
-    // reset to about:newtab and perform sanity check
-    aboutNewTabService.resetNewTabURL();
-    is(aboutNewTabService.newTabURL, ABOUT_NEWTAB_URI,
-       "sanity check: resetting the URL to about:newtab should return about:newtab");
-
-    // remove the tab and move on
-    gBrowser.removeCurrentTab();
-    TestRunner.next();
-  }, true);
-}
-
-function runTests() {
-  // test the default behavior
-  yield addNewTabPageTab();
-  browser = gWindow.gBrowser.selectedBrowser;
-
-  ok(!aboutNewTabService.overridden,
-     "sanity check: default URL for about:newtab should not be overriden");
-  browser.contentWindow.location = ABOUT_NEWTAB_URI;
-
-  browser.addEventListener("load", function onLoad() {
-    browser.removeEventListener("load", onLoad, true);
-    is(content.document.location, ABOUT_NEWTAB_URI, "document.location should match about:newtab");
-    is(content.document.documentURI, ABOUT_NEWTAB_URI, "document.documentURI should match about:newtab");
-    is(content.document.nodePrincipal,
-       Services.scriptSecurityManager.getSystemPrincipal(),
-       "nodePrincipal should match systemPrincipal");
-
-    // also test the pref
-    testPref();
-  }, true);
-
-  info("Waiting for about:newtab to load ...");
-  yield true;
-}
deleted file mode 100644
--- a/browser/base/content/test/newtab/external_newtab.html
+++ /dev/null
@@ -1,11 +0,0 @@
-<!DOCTYPE HTML>
-<html>
-<!-- https://bugzilla.mozilla.org/show_bug.cgi?id=1204983 -->
-<head>
-  <meta charset="utf-8">
-  <title>Testpage for bug 1204983</title>
-</head>
-<body>
-  Just a testpage for Bug 1204983<br/>
-</body>
-</html>
--- a/browser/base/content/utilityOverlay.js
+++ b/browser/base/content/utilityOverlay.js
@@ -4,27 +4,26 @@
 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
 
 // Services = object with smart getters for common XPCOM services
 Components.utils.import("resource://gre/modules/Services.jsm");
 Components.utils.import("resource://gre/modules/XPCOMUtils.jsm");
 Components.utils.import("resource://gre/modules/PrivateBrowsingUtils.jsm");
 Components.utils.import("resource:///modules/RecentWindow.jsm");
 
-XPCOMUtils.defineLazyServiceGetter(this, "aboutNewTabService",
-                                   "@mozilla.org/browser/aboutnewtab-service;1",
-                                   "nsIAboutNewTabService");
+XPCOMUtils.defineLazyModuleGetter(this, "NewTabURL",
+  "resource:///modules/NewTabURL.jsm");
 
 this.__defineGetter__("BROWSER_NEW_TAB_URL", () => {
   if (PrivateBrowsingUtils.isWindowPrivate(window) &&
       !PrivateBrowsingUtils.permanentPrivateBrowsing &&
-      !aboutNewTabService.overridden) {
+      !NewTabURL.overridden) {
     return "about:privatebrowsing";
   }
-  return aboutNewTabService.newTabURL;
+  return NewTabURL.get();
 });
 
 var TAB_DROP_TYPE = "application/x-moz-tabbrowser-tab";
 
 var gBidiUI = false;
 
 /**
  * Determines whether the given url is considered a special URL for new tabs.
--- a/browser/components/BrowserComponents.manifest
+++ b/browser/components/BrowserComponents.manifest
@@ -41,10 +41,8 @@ category command-line-validator b-browse
 
 component {eab9012e-5f74-4cbc-b2b5-a590235513cc} nsBrowserGlue.js
 contract @mozilla.org/browser/browserglue;1 {eab9012e-5f74-4cbc-b2b5-a590235513cc}
 category app-startup nsBrowserGlue service,@mozilla.org/browser/browserglue;1 application={3c2e2abc-06d4-11e1-ac3b-374f68613e61} application={ec8030f7-c20a-464f-9b0e-13a3a9e97384} application={aa3c5121-dab2-40e2-81ca-7ea25febc110} application={a23983c0-fd0e-11dc-95ff-0800200c9a66} application={d1bfe7d9-c01e-4237-998b-7b5f960a4314}
 component {d8903bf6-68d5-4e97-bcd1-e4d3012f721a} nsBrowserGlue.js
 #ifndef MOZ_MULET
 contract @mozilla.org/content-permission/prompt;1 {d8903bf6-68d5-4e97-bcd1-e4d3012f721a}
 #endif
-component {97eea4bb-db50-4ae0-9147-1e5ed55b4ed5} nsBrowserGlue.js
-contract @mozilla.org/browser/aboutnewtab-service;1 {97eea4bb-db50-4ae0-9147-1e5ed55b4ed5}
--- a/browser/components/about/AboutRedirector.cpp
+++ b/browser/components/about/AboutRedirector.cpp
@@ -2,24 +2,21 @@
 /* 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/. */
 
 // See also: docshell/base/nsAboutRedirector.cpp
 
 #include "AboutRedirector.h"
 #include "nsNetUtil.h"
-#include "nsIAboutNewTabService.h"
 #include "nsIChannel.h"
 #include "nsIURI.h"
 #include "nsIScriptSecurityManager.h"
-#include "nsIProtocolHandler.h"
 #include "mozilla/ArrayUtils.h"
 #include "nsDOMString.h"
-#include "nsServiceManagerUtils.h"
 
 namespace mozilla {
 namespace browser {
 
 NS_IMPL_ISUPPORTS(AboutRedirector, nsIAboutModule)
 
 struct RedirEntry {
   const char* id;
@@ -174,60 +171,24 @@ AboutRedirector::NewChannel(nsIURI* aURI
   nsAutoCString path = GetAboutModuleName(aURI);
 
   nsresult rv;
   nsCOMPtr<nsIIOService> ioService = do_GetIOService(&rv);
   NS_ENSURE_SUCCESS(rv, rv);
 
   for (int i = 0; i < kRedirTotal; i++) {
     if (!strcmp(path.get(), kRedirMap[i].id)) {
-      nsAutoCString url;
-
-      // check if about:newtab got overridden
-      if (path.EqualsLiteral("newtab")) {
-        nsCOMPtr<nsIAboutNewTabService> aboutNewTabService =
-          do_GetService("@mozilla.org/browser/aboutnewtab-service;1", &rv);
-        NS_ENSURE_SUCCESS(rv, rv);
-        bool overridden = false;
-        rv = aboutNewTabService->GetOverridden(&overridden);
-        NS_ENSURE_SUCCESS(rv, rv);
-        if (overridden) {
-          rv = aboutNewTabService->GetNewTabURL(url);
-          NS_ENSURE_SUCCESS(rv, rv);
-        }
-      }
-      // fall back to the specified url in the map
-      if (url.IsEmpty()) {
-        url.AssignASCII(kRedirMap[i].url);
-      }
-
       nsCOMPtr<nsIChannel> tempChannel;
       nsCOMPtr<nsIURI> tempURI;
-      rv = NS_NewURI(getter_AddRefs(tempURI), url);
+      rv = NS_NewURI(getter_AddRefs(tempURI),
+                     nsDependentCString(kRedirMap[i].url));
       NS_ENSURE_SUCCESS(rv, rv);
-
-      // If tempURI links to an external URI (i.e. something other than
-      // chrome:// or resource://) then set the LOAD_REPLACE flag on the
-      // channel which forces the channel owner to reflect the displayed
-      // URL rather then being the systemPrincipal.
-      bool isUIResource = false;
-      rv = NS_URIChainHasFlags(tempURI, nsIProtocolHandler::URI_IS_UI_RESOURCE,
-                               &isUIResource);
-      NS_ENSURE_SUCCESS(rv, rv);
-
-      nsLoadFlags loadFlags =
-        isUIResource ? static_cast<nsLoadFlags>(nsIChannel::LOAD_NORMAL)
-                     : static_cast<nsLoadFlags>(nsIChannel::LOAD_REPLACE);
-
       rv = NS_NewChannelInternal(getter_AddRefs(tempChannel),
                                  tempURI,
-                                 aLoadInfo,
-                                 nullptr, // aLoadGroup
-                                 nullptr, // aCallbacks
-                                 loadFlags);
+                                 aLoadInfo);
       NS_ENSURE_SUCCESS(rv, rv);
 
       tempChannel->SetOriginalURI(aURI);
 
       NS_ADDREF(*result = tempChannel);
       return rv;
     }
   }
--- a/browser/components/extensions/ext-tabs.js
+++ b/browser/components/extensions/ext-tabs.js
@@ -1,11 +1,10 @@
-XPCOMUtils.defineLazyServiceGetter(this, "aboutNewTabService",
-                                   "@mozilla.org/browser/aboutnewtab-service;1",
-                                   "nsIAboutNewTabService");
+XPCOMUtils.defineLazyModuleGetter(this, "NewTabURL",
+                                  "resource:///modules/NewTabURL.jsm");
 
 Cu.import("resource://gre/modules/ExtensionUtils.jsm");
 var {
   EventManager,
   ignoreEvent,
   runSafe,
 } = ExtensionUtils;
 
@@ -242,17 +241,17 @@ extensions.registerAPI((extension, conte
         };
       }).api(),
 
       create: function(createProperties, callback) {
         if (!createProperties) {
           createProperties = {};
         }
 
-        let url = createProperties.url || aboutNewTabService.newTabURL;
+        let url = createProperties.url || NewTabURL.get();
         url = extension.baseURI.resolve(url);
 
         function createInWindow(window) {
           let tab = window.gBrowser.addTab(url);
 
           let active = true;
           if ("active" in createProperties) {
             active = createProperties.active;
--- a/browser/components/extensions/ext-windows.js
+++ b/browser/components/extensions/ext-windows.js
@@ -1,11 +1,10 @@
-XPCOMUtils.defineLazyServiceGetter(this, "aboutNewTabService",
-                                   "@mozilla.org/browser/aboutnewtab-service;1",
-                                   "nsIAboutNewTabService");
+XPCOMUtils.defineLazyModuleGetter(this, "NewTabURL",
+                                  "resource:///modules/NewTabURL.jsm");
 
 Cu.import("resource://gre/modules/ExtensionUtils.jsm");
 var {
   EventManager,
   ignoreEvent,
   runSafe,
 } = ExtensionUtils;
 
@@ -91,17 +90,17 @@ extensions.registerAPI((extension, conte
             for (let url of createData.url) {
               array.AppendElement(mkstr(url));
             }
             args.AppendElement(array);
           } else {
             args.AppendElement(mkstr(createData.url));
           }
         } else {
-          args.AppendElement(mkstr(aboutNewTabService.newTabURL));
+          args.AppendElement(mkstr(NewTabURL.get()));
         }
 
         let extraFeatures = "";
         if ("incognito" in createData) {
           if (createData.incognito) {
             extraFeatures += ",private";
           } else {
             extraFeatures += ",non-private";
--- a/browser/components/moz.build
+++ b/browser/components/moz.build
@@ -25,17 +25,16 @@ DIRS += [
     'tabview',
     'uitour',
     'translation',
 ]
 
 DIRS += ['build']
 
 XPIDL_SOURCES += [
-    'nsIAboutNewTabService.idl',
     'nsIBrowserGlue.idl',
     'nsIBrowserHandler.idl',
 ]
 
 XPIDL_MODULE = 'browsercompsbase'
 
 EXTRA_PP_COMPONENTS += [
     'BrowserComponents.manifest',
--- a/browser/components/newtab/NewTabURL.jsm
+++ b/browser/components/newtab/NewTabURL.jsm
@@ -5,39 +5,39 @@
 "use strict";
 
 var Cc = Components.classes;
 var Ci = Components.interfaces;
 var Cu = Components.utils;
 
 this.EXPORTED_SYMBOLS = [ "NewTabURL" ];
 
-Cu.import("resource://gre/modules/XPCOMUtils.jsm");
-XPCOMUtils.defineLazyServiceGetter(this, "aboutNewTabService",
-                                   "@mozilla.org/browser/aboutnewtab-service;1",
-                                   "nsIAboutNewTabService");
-XPCOMUtils.defineLazyModuleGetter(this, "Deprecated",
-                                  "resource://gre/modules/Deprecated.jsm");
-
-const DepecationURL = "https://bugzilla.mozilla.org/show_bug.cgi?id=1204983#c89";
+Components.utils.import("resource://gre/modules/Services.jsm");
 
 this.NewTabURL = {
+  _url: "about:newtab",
+  _remoteUrl: "about:remote-newtab",
+  _overridden: false,
 
   get: function() {
-    Deprecated.warning("NewTabURL.get is deprecated, please query aboutNewTabService.newTabURL", DepecationURL);
-    return aboutNewTabService.newTabURL;
+    let output = this._url;
+    if (Services.prefs.getBoolPref("browser.newtabpage.remote")) {
+      output = this._remoteUrl;
+    }
+    return output;
   },
 
   get overridden() {
-    Deprecated.warning("NewTabURL.overridden is deprecated, please query aboutNewTabService.overridden", DepecationURL);
-    return aboutNewTabService.overridden;
+    return this._overridden;
   },
 
   override: function(newURL) {
-    Deprecated.warning("NewTabURL.override is deprecated, please set aboutNewTabService.newTabURL", DepecationURL);
-    aboutNewTabService.newTabURL = newURL;
+    this._url = newURL;
+    this._overridden = true;
+    Services.obs.notifyObservers(null, "newtab-url-changed", this._url);
   },
 
   reset: function() {
-    Deprecated.warning("NewTabURL.reset is deprecated, please use aboutNewTabService.resetNewTabURL()", DepecationURL);
-    aboutNewTabService.resetNewTabURL();
+    this._url = "about:newtab";
+    this._overridden = false;
+    Services.obs.notifyObservers(null, "newtab-url-changed", this._url);
   }
 };
deleted file mode 100644
--- a/browser/components/newtab/tests/xpcshell/test_AboutNewTabService.js
+++ /dev/null
@@ -1,39 +0,0 @@
-/* Any copyright is dedicated to the Public Domain.
- * http://creativecommons.org/publicdomain/zero/1.0/
- */
-"use strict";
-
-Components.utils.import("resource://gre/modules/Services.jsm");
-let aboutNewTabService = Components.classes["@mozilla.org/browser/aboutnewtab-service;1"]
-                                   .getService(Components.interfaces.nsIAboutNewTabService);
-
-add_task(function* () {
-  Assert.equal(aboutNewTabService.newTabURL, "about:newtab", "Default newtab URL should be about:newtab");
-  let url = "http://example.com/";
-  let notificationPromise = promiseNewtabURLNotification(url);
-  aboutNewTabService.newTabURL = url;
-  yield notificationPromise;
-  Assert.ok(aboutNewTabService.overridden, "Newtab URL should be overridden");
-  Assert.equal(aboutNewTabService.newTabURL, url, "Newtab URL should be the custom URL");
-
-  notificationPromise = promiseNewtabURLNotification("about:newtab");
-  aboutNewTabService.resetNewTabURL();
-  yield notificationPromise;
-  Assert.ok(!aboutNewTabService.overridden, "Newtab URL should not be overridden");
-  Assert.equal(aboutNewTabService.newTabURL, "about:newtab", "Newtab URL should be the about:newtab");
-
-  // change newtab page to remote
-  Services.prefs.setBoolPref("browser.newtabpage.remote", true);
-  Assert.equal(aboutNewTabService.newTabURL, "about:remote-newtab", "Newtab URL should be the about:remote-newtab");
-  Assert.ok(!aboutNewTabService.overridden, "Newtab URL should not be overridden");
-});
-
-function promiseNewtabURLNotification(aNewURL) {
-  return new Promise(resolve => {
-    Services.obs.addObserver(function observer(aSubject, aTopic, aData) {
-      Services.obs.removeObserver(observer, aTopic);
-      Assert.equal(aData, aNewURL, "Data for newtab-url-changed notification should be new URL.");
-      resolve();
-    }, "newtab-url-changed", false);
-  });
-}
--- a/browser/components/newtab/tests/xpcshell/xpcshell.ini
+++ b/browser/components/newtab/tests/xpcshell/xpcshell.ini
@@ -1,12 +1,11 @@
 [DEFAULT]
 head =
 tail =
 firefox-appdir = browser
 skip-if = toolkit == 'android' || toolkit == 'gonk'
 
-[test_AboutNewTabService.js]
 [test_NewTabURL.js]
 [test_PlacesProvider.js]
 [test_RemoteDirectoryLinksProvider.js]
 [test_RemoteNewTabLocation.js]
 [test_RemoteNewTabUtils.js]
--- a/browser/components/nsBrowserGlue.js
+++ b/browser/components/nsBrowserGlue.js
@@ -182,18 +182,16 @@ XPCOMUtils.defineLazyModuleGetter(this, 
                                   "resource://gre/modules/ExtensionManagement.jsm");
 
 XPCOMUtils.defineLazyModuleGetter(this, "AppConstants",
                                   "resource://gre/modules/AppConstants.jsm");
 
 XPCOMUtils.defineLazyServiceGetter(this, "WindowsUIUtils",
                                    "@mozilla.org/windows-ui-utils;1", "nsIWindowsUIUtils");
 
-const ABOUT_NEWTAB = "about:newtab";
-
 const PREF_PLUGINS_NOTIFYUSER = "plugins.update.notifyUser";
 const PREF_PLUGINS_UPDATEURL  = "plugins.update.url";
 
 // Seconds of idle before trying to create a bookmarks backup.
 const BOOKMARKS_BACKUP_IDLE_TIME_SEC = 8 * 60;
 // Minimum interval between backups.  We try to not create more than one backup
 // per interval.
 const BOOKMARKS_BACKUP_MIN_INTERVAL_DAYS = 1;
@@ -2471,58 +2469,16 @@ BrowserGlue.prototype = {
   QueryInterface: XPCOMUtils.generateQI([Ci.nsIObserver,
                                          Ci.nsISupportsWeakReference,
                                          Ci.nsIBrowserGlue]),
 
   // redefine the default factory for XPCOMUtils
   _xpcom_factory: BrowserGlueServiceFactory,
 }
 
-// ------------------------------------
-// nsIAboutNewTabService implementation
-//-------------------------------------
-
-function AboutNewTabService()
-{
-  this._newTabURL = ABOUT_NEWTAB;
-  this._overridden = false;
-}
-
-AboutNewTabService.prototype = {
-  classID: Components.ID("{97eea4bb-db50-4ae0-9147-1e5ed55b4ed5}"),
-  QueryInterface: XPCOMUtils.generateQI([Ci.nsIAboutNewTabService]),
-
-  get newTabURL() {
-    if (Services.prefs.getBoolPref("browser.newtabpage.remote")) {
-      return "about:remote-newtab";
-    }
-    return this._newTabURL;
-  },
-
-  set newTabURL(aNewTabURL) {
-    if (aNewTabURL === ABOUT_NEWTAB) {
-      this.resetNewTabURL();
-      return;
-    }
-    this._newTabURL = aNewTabURL;
-    this._overridden = true;
-    Services.obs.notifyObservers(null, "newtab-url-changed", this._newTabURL);
-  },
-
-  get overridden() {
-    return this._overridden;
-  },
-
-  resetNewTabURL: function() {
-    this._newTabURL = ABOUT_NEWTAB;
-    this._overridden = false;
-    Services.obs.notifyObservers(null, "newtab-url-changed", this._newTabURL);
-   }
-};
-
 function ContentPermissionPrompt() {}
 
 ContentPermissionPrompt.prototype = {
   classID:          Components.ID("{d8903bf6-68d5-4e97-bcd1-e4d3012f721a}"),
 
   QueryInterface: XPCOMUtils.generateQI([Ci.nsIContentPermissionPrompt]),
 
   _getBrowserForRequest: function (aRequest) {
@@ -3257,17 +3213,17 @@ var E10SUINotification = {
       persistWhileVisible: true
     };
 
     win.PopupNotifications.show(browser, "a11y_enabled_with_e10s", promptMessage, null, mainAction, secondaryActions, options);
   },
 };
 #endif
 
-var components = [BrowserGlue, ContentPermissionPrompt, AboutNewTabService];
+var components = [BrowserGlue, ContentPermissionPrompt];
 this.NSGetFactory = XPCOMUtils.generateNSGetFactory(components);
 
 
 // Listen for UITour messages.
 // Do it here instead of the UITour module itself so that the UITour module is lazy loaded
 // when the first message is received.
 var globalMM = Cc["@mozilla.org/globalmessagemanager;1"].getService(Ci.nsIMessageListenerManager);
 globalMM.addMessageListener("UITour:onPageEvent", function(aMessage) {
deleted file mode 100644
--- a/browser/components/nsIAboutNewTabService.idl
+++ /dev/null
@@ -1,32 +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 "nsISupports.idl"
-
-/**
- * Allows to override about:newtab to point to a different location
- * than the one specified within AboutRedirector.cpp
- */
-
-[scriptable, uuid(6c66f022-beb1-46ea-8af6-c6c6dd937ea9)]
-interface nsIAboutNewTabService : nsISupports
-{
-  /**
-   * Returns "about:newtab" if not overridden, otherwise
-   * a string represenation of the new URL.
-   */
-  attribute ACString newTabURL;
-
-  /**
-   * Returns true if the default of "about:newtab" got
-   * overridden.
-   */
-  readonly attribute bool overridden;
-
-  /**
-   * Resets "about:newtab" to the default and also resets the
-   * overridden attribute to false.
-   */
-  void resetNewTabURL();
-};
--- a/browser/components/privatebrowsing/test/browser/browser_privatebrowsing_urlbarfocus.js
+++ b/browser/components/privatebrowsing/test/browser/browser_privatebrowsing_urlbarfocus.js
@@ -1,18 +1,16 @@
 /* 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/. */
 
 // This test makes sure that the URL bar is focused when entering the private window.
 
 "use strict";
 Components.utils.import("resource://gre/modules/Promise.jsm", this);
-let aboutNewTabService = Components.classes["@mozilla.org/browser/aboutnewtab-service;1"]
-                                   .getService(Components.interfaces.nsIAboutNewTabService);
 
 function checkUrlbarFocus(win) {
   let urlbar = win.gURLBar;
   is(win.document.activeElement, urlbar.inputField, "URL Bar should be focused");
   is(urlbar.value, "", "URL Bar should be empty");
 }
 
 function openNewPrivateWindow() {
@@ -25,19 +23,19 @@ function openNewPrivateWindow() {
 
 add_task(function* () {
   let win = yield openNewPrivateWindow();
   checkUrlbarFocus(win);
   win.close();
 });
 
 add_task(function* () {
-  aboutNewTabService.newTabURL = "about:blank";
+  NewTabURL.override("about:blank");
   registerCleanupFunction(() => {
-    aboutNewTabService.resetNewTabURL();
+    NewTabURL.reset();
   });
 
   let win = yield openNewPrivateWindow();
   checkUrlbarFocus(win);
   win.close();
 
-  aboutNewTabService.resetNewTabURL();
+  NewTabURL.reset();
 });
--- a/docshell/base/nsAboutRedirector.cpp
+++ b/docshell/base/nsAboutRedirector.cpp
@@ -4,17 +4,16 @@
  * 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 "nsAboutRedirector.h"
 #include "nsNetUtil.h"
 #include "nsAboutProtocolUtils.h"
 #include "mozilla/ArrayUtils.h"
 #include "nsDOMString.h"
-#include "nsIProtocolHandler.h"
 
 NS_IMPL_ISUPPORTS(nsAboutRedirector, nsIAboutModule)
 
 struct RedirEntry
 {
   const char* id;
   const char* url;
   uint32_t flags;
@@ -44,17 +43,17 @@ static RedirEntry kRedirMap[] = {
     "buildconfig", "chrome://global/content/buildconfig.html",
     nsIAboutModule::URI_SAFE_FOR_UNTRUSTED_CONTENT
   },
   { "config", "chrome://global/content/config.xul", 0 },
 #ifdef MOZ_CRASHREPORTER
   { "crashes", "chrome://global/content/crashes.xhtml", 0 },
 #endif
   {
-    "credits", "https://www.mozilla.org/credits/",
+    "credits", "http://www.mozilla.org/credits/",
     nsIAboutModule::URI_SAFE_FOR_UNTRUSTED_CONTENT
   },
   {
     "license", "chrome://global/content/license.html",
     nsIAboutModule::URI_SAFE_FOR_UNTRUSTED_CONTENT
   },
   {
     "logo", "chrome://branding/content/about.png",
@@ -139,37 +138,22 @@ nsAboutRedirector::NewChannel(nsIURI* aU
   NS_ENSURE_SUCCESS(rv, rv);
 
   for (int i = 0; i < kRedirTotal; i++) {
     if (!strcmp(path.get(), kRedirMap[i].id)) {
       nsCOMPtr<nsIChannel> tempChannel;
       nsCOMPtr<nsIURI> tempURI;
       rv = NS_NewURI(getter_AddRefs(tempURI), kRedirMap[i].url);
       NS_ENSURE_SUCCESS(rv, rv);
-
-      // If tempURI links to an external URI (i.e. something other than
-      // chrome:// or resource://) then set the LOAD_REPLACE flag on the
-      // channel which forces the channel owner to reflect the displayed
-      // URL rather then being the systemPrincipal.
-      bool isUIResource = false;
-      rv = NS_URIChainHasFlags(tempURI, nsIProtocolHandler::URI_IS_UI_RESOURCE,
-                               &isUIResource);
-      NS_ENSURE_SUCCESS(rv, rv);
-
-      nsLoadFlags loadFlags =
-        isUIResource ? static_cast<nsLoadFlags>(nsIChannel::LOAD_NORMAL)
-                     : static_cast<nsLoadFlags>(nsIChannel::LOAD_REPLACE);
-
       rv = NS_NewChannelInternal(getter_AddRefs(tempChannel),
                                  tempURI,
-                                 aLoadInfo,
-                                 nullptr, // aLoadGroup
-                                 nullptr, // aCallbacks
-                                 loadFlags);
-      NS_ENSURE_SUCCESS(rv, rv);
+                                 aLoadInfo);
+      if (NS_FAILED(rv)) {
+        return rv;
+      }
 
       tempChannel->SetOriginalURI(aURI);
 
       tempChannel.forget(aResult);
       return rv;
     }
   }
 
--- a/netwerk/base/nsNetUtil.cpp
+++ b/netwerk/base/nsNetUtil.cpp
@@ -1528,16 +1528,28 @@ NS_TryToMakeImmutable(nsIURI *uri,
 
     if (outRv) {
         *outRv = rv;
     }
 
     return result.forget();
 }
 
+nsresult
+NS_URIChainHasFlags(nsIURI   *uri,
+                    uint32_t  flags,
+                    bool     *result)
+{
+    nsresult rv;
+    nsCOMPtr<nsINetUtil> util = do_GetNetUtil(&rv);
+    NS_ENSURE_SUCCESS(rv, rv);
+
+    return util->URIChainHasFlags(uri, flags, result);
+}
+
 already_AddRefed<nsIURI>
 NS_GetInnermostURI(nsIURI *aURI)
 {
     NS_PRECONDITION(aURI, "Must have URI");
 
     nsCOMPtr<nsIURI> uri = aURI;
 
     nsCOMPtr<nsINestedURI> nestedURI(do_QueryInterface(uri));
--- a/netwerk/base/nsNetUtil.inl
+++ b/netwerk/base/nsNetUtil.inl
@@ -84,28 +84,16 @@ net_EnsureIOService(nsIIOService **ios, 
     if (!*ios) {
         grip = do_GetIOService(&rv);
         *ios = grip;
     }
     return rv;
 }
 
 INLINE_IF_EXTERN nsresult
-NS_URIChainHasFlags(nsIURI   *uri,
-                    uint32_t  flags,
-                    bool     *result)
-{
-    nsresult rv;
-    nsCOMPtr<nsINetUtil> util = do_GetNetUtil(&rv);
-    NS_ENSURE_SUCCESS(rv, rv);
-
-    return util->URIChainHasFlags(uri, flags, result);
-}
-
-INLINE_IF_EXTERN nsresult
 NS_NewURI(nsIURI **result,
           const nsACString &spec,
           const char *charset /* = nullptr */,
           nsIURI *baseURI /* = nullptr */,
           nsIIOService *ioService /* = nullptr */)     // pass in nsIIOService to optimize callers
 {
     nsresult rv;
     nsCOMPtr<nsIIOService> grip;
--- a/testing/talos/talos/tests/tabswitch/bootstrap.js
+++ b/testing/talos/talos/tests/tabswitch/bootstrap.js
@@ -1,38 +1,36 @@
 
 // -*- Mode: js; tab-width: 2; indent-tabs-mode: nil; js2-basic-offset: 2; js2-skip-preprocessor-directives: t; -*-
 
 var { classes: Cc, interfaces: Ci, utils: Cu } = Components;
+Cu.import("resource:///modules/NewTabURL.jsm");
 Cu.import("resource://gre/modules/Services.jsm");
 Cu.import("resource://gre/modules/Promise.jsm");
 Cu.import("resource://gre/modules/XPCOMUtils.jsm");
 
-let aboutNewTabService = Cc["@mozilla.org/browser/aboutnewtab-service;1"]
-                           .getService(Ci.nsIAboutNewTabService);
-
 var aboutBlankTab = null;
 var Profiler = null;
 
 var windowListener = {
   onOpenWindow: function(aWindow) {
     // Ensure we don't get tiles which contact the network
-    aboutNewTabService.newTabURL = "about:blank";
+    NewTabURL.override("about:blank")
 
     // Wait for the window to finish loading
     let window = aWindow.QueryInterface(Ci.nsIInterfaceRequestor).getInterface(Ci.nsIDOMWindowInternal || Ci.nsIDOMWindow);
     let cb = function() {
       window.removeEventListener("load", cb, false);
       loadIntoWindow(window);
     };
     window.addEventListener("load", cb, false);
   },
 
   onCloseWindow: function(aWindow) {
-    aboutNewTabService.resetNewTabURL();
+    NewTabURL.reset()
   },
 
   onWindowTitleChange: function(aWindow, aTitle) {
   }
 };
 
 function promiseOneEvent(target, eventName, capture) {
   let deferred = Promise.defer();
--- a/testing/talos/talos/tests/tabswitch/content/test.html
+++ b/testing/talos/talos/tests/tabswitch/content/test.html
@@ -1,15 +1,14 @@
 <html>
   <head>
     <script>
       const { classes: Cc, interfaces: Ci, utils: Cu } = Components;
       Cu.import("resource://gre/modules/Services.jsm");
-      let aboutNewTabService = Cc["@mozilla.org/browser/aboutnewtab-service;1"]
-                                 .getService(Ci.nsIAboutNewTabService);
+      Cu.import("resource:///modules/NewTabURL.jsm");
       function do_test(override) {
         if (override || document.location.hash.indexOf("#auto") == 0) {
           var mainWindow = window.QueryInterface(Components.interfaces.nsIInterfaceRequestor)
                    .getInterface(Components.interfaces.nsIWebNavigation)
                    .QueryInterface(Components.interfaces.nsIDocShellTreeItem)
                    .rootTreeItem
                    .QueryInterface(Components.interfaces.nsIInterfaceRequestor)
                    .getInterface(Components.interfaces.nsIDOMWindow);
--- a/testing/talos/talos/tests/tart/addon/content/tart.js
+++ b/testing/talos/talos/tests/tart/addon/content/tart.js
@@ -22,19 +22,16 @@
 // X - have preview images: hard to make work across versions
 // - Tests:
 //   V - With favicon
 //   V - Different DPIs
 //   V - with fade only (no tab open/close overhead)
 //   X - tab drag
 //   X - tab remove from the middle
 //   X - Without add-tab button -> can be hidden while testing manually. in talos always with the button
-let aboutNewTabService = Components.classes["@mozilla.org/browser/aboutnewtab-service;1"]
-                                   .getService(Components.interfaces.nsIAboutNewTabService);
-
 function Tart() {
 }
 
 Tart.prototype = {
   // Detector methods expect 'this' to be the detector object.
   // Detectors must support measureNow(e) which indicates to collect the intervals and stop the recording.
   // Detectors may support keepListening(e) to indicate to keep waiting before continuing to the next animation.
 
@@ -469,29 +466,29 @@ Tart.prototype = {
       // Hardcoded fallback in case the value doesn't make sense as tab animation duration.
       tabRefDuration = 250;
     }
 
     var custRefDuration = getReferenceCustomizationDuration();
 
     var subtests = {
       init: [ // This is called before each subtest, so it's safe to assume the following prefs:
-        function(){aboutNewTabService.newTabURL = "about:blank";
+        function(){NewTabURL.override("about:blank");
                    Services.prefs.setBoolPref("browser.newtabpage.enabled", true); // preview images if using about:newtab
                    Services.prefs.setBoolPref("browser.newtab.preload", false);
                    //Services.prefs.setCharPref("layout.css.devPixelsPerPx", "-1");
                    self.pinTart();
                    //Services.prefs.setIntPref ("docshell.event_starvation_delay_hint", 1);
                    next();
         }
       ],
 
       restore: [
         // Restore prefs which were modified during the test
-        function(){aboutNewTabService.resetNewTabURL();
+        function(){NewTabURL.reset();
                    Services.prefs.setBoolPref("browser.newtabpage.enabled", origNewtabEnabled);
                    Services.prefs.setBoolPref("browser.newtab.preload", origPreload);
                    Services.prefs.setCharPref("layout.css.devPixelsPerPx", origDpi);
                    if (origPinned) self.pinTart(); else self.unpinTart();
                    //if (origStarveHint != -9999) Services.prefs.setIntPref("docshell.event_starvation_delay_hint", origStarveHint);
                    next();
         }
       ],
@@ -502,48 +499,48 @@ Tart.prototype = {
         function(){animate(0, addTab, next);},
         function(){animate(0, closeCurrentTab, next);},
         function(){animate(rest, addTab, next, true, "simple-open-DPI1", tabRefDuration);},
         function(){animate(rest, closeCurrentTab, next, true, "simple-close-DPI1", tabRefDuration);}
       ],
 
       iconDpi1: [
         function(){Services.prefs.setCharPref("layout.css.devPixelsPerPx", "1"); next();},
-        function(){aboutNewTabService.newTabURL = "chrome://tart/content/blank.icon.html"; next();},
+        function(){NewTabURL.override("chrome://tart/content/blank.icon.html"); next();},
 
         function(){animate(0, addTab, next);},
         function(){animate(0, closeCurrentTab, next);},
         function(){animate(rest, addTab, next, true, "icon-open-DPI1", tabRefDuration);},
         function(){animate(rest, closeCurrentTab, next, true, "icon-close-DPI1", tabRefDuration);}
       ],
 
       iconDpi2: [
         function(){Services.prefs.setCharPref("layout.css.devPixelsPerPx", "2"); next();},
-        function(){aboutNewTabService.newTabURL = "chrome://tart/content/blank.icon.html"; next();},
+        function(){NewTabURL.override("chrome://tart/content/blank.icon.html"); next();},
 
         function(){animate(0, addTab, next);},
         function(){animate(0, closeCurrentTab, next);},
         function(){animate(rest, addTab, next, true, "icon-open-DPI2", tabRefDuration);},
         function(){animate(rest, closeCurrentTab, next, true, "icon-close-DPI2", tabRefDuration);}
       ],
 
       newtabNoPreload: [
-        function(){aboutNewTabService.newTabURL = "about:newtab";
+        function(){NewTabURL.override("about:newtab");
                    Services.prefs.setCharPref("layout.css.devPixelsPerPx", "-1");
                    Services.prefs.setBoolPref("browser.newtab.preload", false);
                    next();
         },
 
         function(){animate(rest, addTab, next, true, "newtab-open-preload-no", tabRefDuration);},
 
         function(){animate(0, closeCurrentTab, next);}
       ],
 
       newtabYesPreload: [
-        function(){aboutNewTabService.newTabURL = "about:newtab";
+        function(){NewTabURL.override("about:newtab");
                    Services.prefs.setCharPref("layout.css.devPixelsPerPx", "-1");
                    Services.prefs.setBoolPref("browser.newtab.preload", true);
                    next();
         },
 
         function(){animate(0, addTab, next);},
         function(){animate(0, closeCurrentTab, next);},
 
@@ -559,17 +556,17 @@ Tart.prototype = {
 
         function(){animate(rest, closeCurrentTab, next, true, "simple3-3-close-DPIcurrent", tabRefDuration);},
         function(){animate(rest, closeCurrentTab, next, true, "simple3-2-close-DPIcurrent", tabRefDuration);},
         function(){animate(rest, closeCurrentTab, next, true, "simple3-1-close-DPIcurrent", tabRefDuration);}
       ],
 
       multi: [
         function(){Services.prefs.setCharPref("layout.css.devPixelsPerPx", "1.0"); next();},
-        function(){aboutNewTabService.newTabURL = "chrome://tart/content/blank.icon.html"; next();},
+        function(){NewTabURL.override("chrome://tart/content/blank.icon.html"); next();},
 
         function(){animate(0, addTab, next);},
         function(){animate(0, addTab, next);},
         function(){animate(0, addTab, next);},
         function(){animate(0, addTab, next);},
         function(){animate(0, addTab, next);},
         function(){animate(0, addTab, next);},
 
@@ -588,36 +585,36 @@ Tart.prototype = {
         function(){animate(0, closeCurrentTab, next);},
         function(){animate(0, closeCurrentTab, next);},
         function(){animate(0, closeCurrentTab, next);},
         function(){animate(0, closeCurrentTab, next);},
         function(){animate(0, closeCurrentTab, next);},
       ],
 
       simpleFadeDpiCurrent: [
-        function(){aboutNewTabService.newTabURL = "about:blank"; next();},
+        function(){NewTabURL.override("about:blank"); next();},
 
         function(){animate(0, addTab, next);},
         function(){animate(rest, fadeout, next, true, "simpleFade-close-DPIcurrent", tabRefDuration);},
         function(){animate(rest, fadein, next, true, "simpleFade-open-DPIcurrent", tabRefDuration);},
         function(){animate(0, closeCurrentTab, next);},
       ],
 
       iconFadeDpiCurrent: [
-        function(){aboutNewTabService.newTabURL = "chrome://tart/content/blank.icon.html"; next();},
+        function(){NewTabURL.override("chrome://tart/content/blank.icon.html"); next();},
 
         function(){animate(0, addTab, next);},
         function(){animate(rest, fadeout, next, true, "iconFade-close-DPIcurrent", tabRefDuration);},
         function(){animate(rest, fadein, next, true, "iconFade-open-DPIcurrent", tabRefDuration);},
         function(){animate(0, closeCurrentTab, next);},
       ],
 
       iconFadeDpi2: [
         function(){Services.prefs.setCharPref("layout.css.devPixelsPerPx", "2"); next();},
-        function(){aboutNewTabService.newTabURL = "chrome://tart/content/blank.icon.html"; next();},
+        function(){NewTabURL.override("chrome://tart/content/blank.icon.html"); next();},
 
         function(){animate(0, addTab, next);},
         function(){animate(rest, fadeout, next, true, "iconFade-close-DPI2", tabRefDuration);},
         function(){animate(rest, fadein, next, true, "iconFade-open-DPI2", tabRefDuration);},
         function(){animate(0, closeCurrentTab, next);},
       ],
 
       lastTabFadeDpiCurrent: [