Bug 1353013 - Ensure there's a large enough idle period to load the preloaded about:newtab. r?florian draft
authorMike Conley <mconley@mozilla.com>
Thu, 24 Aug 2017 15:23:18 -0700
changeset 652496 54a5efda1739b52b22e9ab2c4b103873207be3c1
parent 652495 1570202daad22cf1631ae2ca29e8cb5ba24d7954
child 728105 81f837077f1be14f7ab553663b239c0ba0cccaf3
push id76076
push userbmo:mconley@mozilla.com
push dateThu, 24 Aug 2017 22:25:38 +0000
reviewersflorian
bugs1353013
milestone57.0a1
Bug 1353013 - Ensure there's a large enough idle period to load the preloaded about:newtab. r?florian MozReview-Commit-ID: GODsMgG8SST
browser/base/content/tabbrowser.xml
--- a/browser/base/content/tabbrowser.xml
+++ b/browser/base/content/tabbrowser.xml
@@ -2040,36 +2040,44 @@
             // custom newtab URLs.
             return Services.prefs.getBoolPref("browser.newtab.preload") &&
                    !aboutNewTabService.overridden;
           ]]>
         </body>
       </method>
 
       <field name="_preloadBrowserMinUserIdleSeconds">1</field>
+      <field name="_preloadBrowserMinIdlePeriodMs">40</field>
       <method name="requestPreloadBrowser">
         <body><![CDATA[
           // Do nothing if we have a preloaded browser already or we're about
           // to create one or preloading is disabled.
           if (this._preloadedBrowser ||
               this._preloadBrowserIdleObserver ||
               !this._isPreloadingEnabled()) {
             return;
           }
 
           this._preloadBrowserIdleObserver = (aSubject, aTopic) => {
             if (aTopic == "idle") {
               Services.idle.removeIdleObserver(this._preloadBrowserIdleObserver,
                                                this._preloadBrowserMinUserIdleSeconds);
               this._preloadBrowserIdleObserver = null;
 
-              window.requestIdleCallback(() => this._createPreloadBrowser());
+              let idleCallback = (deadline) => {
+                if (deadline.timeRemaining() < this._preloadBrowserMinIdlePeriodMs) {
+                  window.requestIdleCallback(idleCallback);
+                } else {
+                  this._createPreloadBrowser();
+                }
+              };
+              window.requestIdleCallback(idleCallback);
             }
           };
-          Services.idle.addIdleObserver(this._preloadBrowserIdleObserver, 1);
+          Services.idle.addIdleObserver(this._preloadBrowserIdleObserver, this._preloadBrowserMinUserIdleSeconds);
         ]]></body>
       </method>
 
       <method name="_createPreloadBrowser">
         <body>
           <![CDATA[
             // Do nothing if we have a preloaded browser already
             // or preloading of newtab pages is disabled.