Bug 1299154 - added Set/GetOverrideDPPX to restorefromHistory; r=mstange draft
authorMatteo Ferretti <mferretti@mozilla.com>
Wed, 31 Aug 2016 09:51:46 +0200
changeset 407900 2c3b109fd52b2e25bc1a80811bd2c2996a3477a8
parent 407496 b18c8bcdc116eef8799880b7c50317bf54218474
child 529985 d87b309f7742b964a237c39906c8f73bd7add374
push id28082
push userbmo:zer0@mozilla.com
push dateWed, 31 Aug 2016 07:54:51 +0000
reviewersmstange
bugs1299154
milestone51.0a1
Bug 1299154 - added Set/GetOverrideDPPX to restorefromHistory; r=mstange MozReview-Commit-ID: AsyAcG3Igbn
docshell/base/nsDocShell.cpp
dom/tests/mochitest/general/test_contentViewer_overrideDPPX.html
--- a/docshell/base/nsDocShell.cpp
+++ b/docshell/base/nsDocShell.cpp
@@ -8538,21 +8538,24 @@ nsDocShell::RestoreFromHistory()
     mSavingOldViewer = CanSavePresentation(mLoadType, request, doc);
   }
 
   nsCOMPtr<nsIContentViewer> oldCv(mContentViewer);
   nsCOMPtr<nsIContentViewer> newCv(viewer);
   int32_t minFontSize = 0;
   float textZoom = 1.0f;
   float pageZoom = 1.0f;
+  float overrideDPPX = 0.0f;
+
   bool styleDisabled = false;
   if (oldCv && newCv) {
     oldCv->GetMinFontSize(&minFontSize);
     oldCv->GetTextZoom(&textZoom);
     oldCv->GetFullZoom(&pageZoom);
+    oldCv->GetOverrideDPPX(&overrideDPPX);
     oldCv->GetAuthorStyleDisabled(&styleDisabled);
   }
 
   // Protect against mLSHE going away via a load triggered from
   // pagehide or unload.
   nsCOMPtr<nsISHEntry> origLSHE = mLSHE;
 
   // Make sure to blow away our mLoadingURI just in case.  No loads
@@ -8775,16 +8778,17 @@ nsDocShell::RestoreFromHistory()
   if (++gNumberOfDocumentsLoading == 1) {
     FavorPerformanceHint(true);
   }
 
   if (oldCv && newCv) {
     newCv->SetMinFontSize(minFontSize);
     newCv->SetTextZoom(textZoom);
     newCv->SetFullZoom(pageZoom);
+    newCv->SetOverrideDPPX(overrideDPPX);
     newCv->SetAuthorStyleDisabled(styleDisabled);
   }
 
   nsCOMPtr<nsIDocument> document = do_QueryInterface(domDoc);
   uint32_t parentSuspendCount = 0;
   if (document) {
     RefPtr<nsDocShell> parent = GetParentDocshell();
     if (parent) {
@@ -9268,16 +9272,17 @@ nsDocShell::SetupNewViewer(nsIContentVie
   nsCOMPtr<nsIDocShell> parent(do_QueryInterface(parentAsItem));
 
   nsAutoCString forceCharset;
   nsAutoCString hintCharset;
   int32_t hintCharsetSource;
   int32_t minFontSize;
   float textZoom;
   float pageZoom;
+  float overrideDPPX;
   bool styleDisabled;
   // |newMUDV| also serves as a flag to set the data from the above vars
   nsCOMPtr<nsIContentViewer> newCv;
 
   if (mContentViewer || parent) {
     nsCOMPtr<nsIContentViewer> oldCv;
     if (mContentViewer) {
       // Get any interesting state from old content viewer
@@ -9309,16 +9314,18 @@ nsDocShell::SetupNewViewer(nsIContentVie
         NS_ENSURE_SUCCESS(oldCv->GetHintCharacterSetSource(&hintCharsetSource),
                           NS_ERROR_FAILURE);
         NS_ENSURE_SUCCESS(oldCv->GetMinFontSize(&minFontSize),
                           NS_ERROR_FAILURE);
         NS_ENSURE_SUCCESS(oldCv->GetTextZoom(&textZoom),
                           NS_ERROR_FAILURE);
         NS_ENSURE_SUCCESS(oldCv->GetFullZoom(&pageZoom),
                           NS_ERROR_FAILURE);
+        NS_ENSURE_SUCCESS(oldCv->GetOverrideDPPX(&overrideDPPX),
+                          NS_ERROR_FAILURE);
         NS_ENSURE_SUCCESS(oldCv->GetAuthorStyleDisabled(&styleDisabled),
                           NS_ERROR_FAILURE);
       }
     }
   }
 
   nscolor bgcolor = NS_RGBA(0, 0, 0, 0);
   // Ensure that the content viewer is destroyed *after* the GC - bug 71515
@@ -9377,16 +9384,18 @@ nsDocShell::SetupNewViewer(nsIContentVie
     NS_ENSURE_SUCCESS(newCv->SetHintCharacterSetSource(hintCharsetSource),
                       NS_ERROR_FAILURE);
     NS_ENSURE_SUCCESS(newCv->SetMinFontSize(minFontSize),
                       NS_ERROR_FAILURE);
     NS_ENSURE_SUCCESS(newCv->SetTextZoom(textZoom),
                       NS_ERROR_FAILURE);
     NS_ENSURE_SUCCESS(newCv->SetFullZoom(pageZoom),
                       NS_ERROR_FAILURE);
+    NS_ENSURE_SUCCESS(newCv->SetOverrideDPPX(overrideDPPX),
+                      NS_ERROR_FAILURE);
     NS_ENSURE_SUCCESS(newCv->SetAuthorStyleDisabled(styleDisabled),
                       NS_ERROR_FAILURE);
   }
 
   // Stuff the bgcolor from the old pres shell into the new
   // pres shell. This improves page load continuity.
   nsCOMPtr<nsIPresShell> shell;
   mContentViewer->GetPresShell(getter_AddRefs(shell));
--- a/dom/tests/mochitest/general/test_contentViewer_overrideDPPX.html
+++ b/dom/tests/mochitest/general/test_contentViewer_overrideDPPX.html
@@ -279,16 +279,60 @@ const gTests = {
     promises[0]
       .then(() => setOverrideDPPX(0))
       .then(promises[1])
       .then(() => setFullZoom(originalZoom))
       .then(done, e => {throw e});
 
     setOverrideDPPX(dppx);
     setFullZoom(zoom);
+  },
+  "test OverrideDPPX is kept on document navigation": (done) => {
+    assertValuesAreInitial();
+
+    let frameOriginalFontSize = getBodyFontSize(frameWindow);
+    let frameStyle = createFontStyleForDPPX(frameWindow.document, dppx, "32");
+    let frameCurrentFontSize = getBodyFontSize(frameWindow);
+
+    is(frameCurrentFontSize, frameOriginalFontSize,
+      "frame's media queries are not applied yet");
+
+    setOverrideDPPX(dppx);
+
+    frameCurrentFontSize = getBodyFontSize(frameWindow);
+
+    is(frameWindow.devicePixelRatio, dppx,
+      "frame's devicePixelRatio overridden.");
+    isnot(frameCurrentFontSize, frameOriginalFontSize,
+      "frame's media queries are applied.");
+    is(frameCurrentFontSize, "32px",
+      "frame's font size has the expected value.");
+
+    frameWindow.frameElement.addEventListener("load", function listener() {
+      this.removeEventListener("load", listener);
+
+      frameStyle = createFontStyleForDPPX(frameWindow.document, dppx, "32");
+
+      frameCurrentFontSize = getBodyFontSize(frameWindow);
+
+      is(frameWindow.devicePixelRatio, dppx,
+        "frame's devicePixelRatio is still overridden.");
+      isnot(frameCurrentFontSize, frameOriginalFontSize,
+        "frame's media queries are still applied.");
+      is(frameCurrentFontSize, "32px",
+        "frame's font size has still the expected value.");
+
+      frameStyle.remove();
+
+      setOverrideDPPX(0);
+
+      done();
+    });
+
+    frameWindow.location.reload(true);
   }
 };
 
 function* runner(tests) {
   for (let name of Object.keys(tests)) {
     info(name);
     tests[name](next);
     yield undefined;