Bug 1363361 - Add ability to dirty root frame from nsIDOMWindowUtils. r?dholbert draft
authorMike Conley <mconley@mozilla.com>
Wed, 28 Jun 2017 21:38:53 -0700
changeset 613231 829509c4a4f0f50a4c452dd75cdd6f6f09366076
parent 613116 e99e3e62cfa8bbc7d430f64d4fbdf77ffb81e979
child 613232 9322082ca1c33126cfe55d1c4429d81913118be6
push id69760
push usermconley@mozilla.com
push dateFri, 21 Jul 2017 19:18:20 +0000
reviewersdholbert
bugs1363361
milestone56.0a1
Bug 1363361 - Add ability to dirty root frame from nsIDOMWindowUtils. r?dholbert MozReview-Commit-ID: Jy6PICTkq4l
dom/base/nsDOMWindowUtils.cpp
dom/interfaces/base/nsIDOMWindowUtils.idl
--- a/dom/base/nsDOMWindowUtils.cpp
+++ b/dom/base/nsDOMWindowUtils.cpp
@@ -4437,16 +4437,36 @@ nsDOMWindowUtils::GetDirectionFromText(c
     case eDir_Auto:
       MOZ_ASSERT_UNREACHABLE("GetDirectionFromText should never return this value");
       return NS_ERROR_FAILURE;
   }
   return NS_OK;
 }
 
 NS_IMETHODIMP
+nsDOMWindowUtils::EnsureDirtyRootFrame()
+{
+  nsIDocument* doc = GetDocument();
+  nsIPresShell* presShell = doc ? doc->GetShell() : nullptr;
+
+  if (!presShell) {
+    return NS_ERROR_FAILURE;
+  }
+
+  nsIFrame* frame = presShell->GetRootFrame();
+  if (!frame) {
+    return NS_ERROR_FAILURE;
+  }
+
+  presShell->FrameNeedsReflow(frame, nsIPresShell::eStyleChange,
+                              NS_FRAME_IS_DIRTY);
+  return NS_OK;
+}
+
+NS_IMETHODIMP
 nsDOMWindowUtils::GetIsStyledByServo(bool* aStyledByServo)
 {
   nsIDocument* doc = GetDocument();
   *aStyledByServo = doc && doc->IsStyledByServo();
   return NS_OK;
 }
 
 NS_INTERFACE_MAP_BEGIN(nsTranslationNodeList)
--- a/dom/interfaces/base/nsIDOMWindowUtils.idl
+++ b/dom/interfaces/base/nsIDOMWindowUtils.idl
@@ -2019,16 +2019,24 @@ interface nsIDOMWindowUtils : nsISupport
    *
    * @param aString the string to retrieve the direction for.
    * @return one of DIRECTION_LTR, DIRECTION_RTL or DIRECTION_NOT_SET depending
    *         on the first-strong character found in the string.
    */
   long getDirectionFromText(in AString aString);
 
   /**
+   * Calls FrameNeedsReflow on that root frame so that a layout flush
+   * will be necessary.
+   *
+   * This should only be used for testing.
+   */
+  void ensureDirtyRootFrame();
+
+  /**
    * Whether the current document is styled by Servo's style engine.
    *
    * This calls nsIDocument::IsStyledByServo().
    */
   readonly attribute boolean isStyledByServo;
 
   // These consts are only for testing purposes.
   const long DEFAULT_MOUSE_POINTER_ID = 0;