Commit Graph

250 Commits

Author SHA1 Message Date
Xidorn Quan
737b089de2 Bug 1406562 - Return first continuation for parent of first-letter in ExpectedOwnerForChild. r=emilio
MozReview-Commit-ID: KkBDMStwQ6r
2017-10-09 11:07:17 +11:00
Nicholas Nethercote
7dbfdaf890 Bug 1400460 - Rename nsIAtom as nsAtom. r=hiro.
(Path is actually r=froydnj.)

Bug 1400459 devirtualized nsIAtom so that it is no longer a subclass of
nsISupports. This means that nsAtom is now a better name for it than nsIAtom.

MozReview-Commit-ID: 91U22X2NydP
2017-10-03 09:05:19 +11:00
Boris Zbarsky
c4708237c3 Bug 1391736. Relax the ExpectedOwnerForChild assert in the ServoRestyleState constructor. r=emilio 2017-10-02 16:36:49 -04:00
Boris Zbarsky
9a88d323f3 Bug 1402476. ExpectedOwnerForChild should not return a first-letter frame for a text child. r=emilio
The expected owner is the DOM parent.  The first-letter then does some reparenting of the text style later.
2017-10-02 16:36:47 -04:00
Emilio Cobos Álvarez
b2aa7a1c88 Bug 1404167: Properly update the styles of first-letter childs of anon boxes. r=bz
MozReview-Commit-ID: Cyxs4FxGj6B
Signed-off-by: Emilio Cobos Álvarez <emilio@crisal.io>
2017-09-29 13:14:37 +02:00
Sebastian Hengst
66853fcbf8 Backed out changeset 710b592482ee (bug 1404167) for asserting mOwner == ExpectedOwnerForChild(aFrame) at ServoRestyleManager.cpp:125. r=backout 2017-09-29 11:39:12 +02:00
Emilio Cobos Álvarez
9fcda800c4 Bug 1404167: Properly update the styles of first-letter childs of anon boxes. r=bz
MozReview-Commit-ID: Cyxs4FxGj6B
Signed-off-by: Emilio Cobos Álvarez <emilio@crisal.io>
2017-09-29 08:50:47 +02:00
Emilio Cobos Álvarez
cc9ac260ec Bug 1403615: Also follow the NODE_DESCENDANTS_NEED_FRAMES bit in ClearRestyleStateFromSubtree. r=bholley
We don't follow this bit intentionally because we know that even if it's set,
when none of the other two bits are set there are no other restyle / change
hints down the tree.

We rely on the frame constructor to clean the mess up, though, and it doesn't
really do a good work about it.

In particular, the case we're hitting on the test-case is:

<body descendant-need-frames change=reconstruct style="display: table-column-group">
  <div descendant-need-frames>
    <div descendant-need-frames>
      <span needs-frame></span>
    </div>
  </div>
</body>

When we see we need to reconstruct the body, we call
ClearRestyleStateFromSubtree, but that doesn't do much now, since we don't
follow the descendant-need-frames bits.

Then, when we reconstruct the content, we arrive at[1] when constructing the
first child <div>. The <div> flags have been cleared, but not the children's!

Then a text-node is inserted in a <div>, breaking all sorts of invariants.

This is the easiest fix. Other fixes include clearing the flags on
SetAsUndisplayedContent. But that implies not clearing them in
ShouldCreateItemsForChild, and doing that somewhere more sensible.

I suspect it's not too hard, but that's a slightly more risky change, will do it
if you prefer it.

[1]: http://searchfox.org/mozilla-central/rev/3dbb47302e114219c53e99ebaf50c5cb727358ab/layout/base/nsCSSFrameConstructor.cpp#6092

MozReview-Commit-ID: 7026wkQLQkz
2017-09-28 08:53:51 +02:00
Sebastian Hengst
a653c1cfbd Backed out changeset 379e7e7bf80d (bug 1403615) for failing own crashtest. r=backout 2017-09-27 21:27:08 +02:00
Emilio Cobos Álvarez
4e7215a9e2 Bug 1403615: Also follow the NODE_DESCENDANTS_NEED_FRAMES bit in ClearRestyleStateFromSubtree. r=bholley
We don't follow this bit intentionally because we know that even if it's set,
when none of the other two bits are set there are no other restyle / change
hints down the tree.

We rely on the frame constructor to clean the mess up, though, and it doesn't
really do a good work about it.

In particular, the case we're hitting on the test-case is:

<body descendant-need-frames change=reconstruct style="display: table-column-group">
  <div descendant-need-frames>
    <div descendant-need-frames>
      <span needs-frame></span>
    </div>
  </div>
</body>

When we see we need to reconstruct the body, we call
ClearRestyleStateFromSubtree, but that doesn't do much now, since we don't
follow the descendant-need-frames bits.

Then, when we reconstruct the content, we arrive at[1] when constructing the
first child <div>. The <div> flags have been cleared, but not the children's!

Then a text-node is inserted in a <div>, breaking all sorts of invariants.

This is the easiest fix. Other fixes include clearing the flags on
SetAsUndisplayedContent. But that implies not clearing them in
ShouldCreateItemsForChild, and doing that somewhere more sensible.

I suspect it's not too hard, but that's a slightly more risky change, will do it
if you prefer it.

[1]: http://searchfox.org/mozilla-central/rev/3dbb47302e114219c53e99ebaf50c5cb727358ab/layout/base/nsCSSFrameConstructor.cpp#6092

MozReview-Commit-ID: 7026wkQLQkz
2017-09-27 20:02:04 +02:00
Emilio Cobos Álvarez
aa36c63d88 Bug 1403078: Lazily tweak the traversal root to account for sibling invalidations. r=heycam
MozReview-Commit-ID: Ij3nMOKu5FO
2017-09-26 14:20:11 +02:00
Emilio Cobos Álvarez
9d1af3e1f1 Bug 1403028: Ensure the parent is in the composed doc before marking it as dirty. r=heycam
We could do the check earlier, but the end result is effectively the same, and
this makes it easier to remove.

MozReview-Commit-ID: 5c8TFHK1ciD
2017-09-26 10:02:23 +02:00
Wes Kocher
8d855f04ce Merge inbound to central, a=merge
MozReview-Commit-ID: 7EzhCCVVn7n
2017-09-25 16:41:34 -07:00
Boris Zbarsky
62dc7f7f47 Bug 1401739. Make sure to always call UpdateStyleOfChildAnonBox with the first continuation as "this". r=emilio
MozReview-Commit-ID: KhfvBuCeoex
2017-09-25 10:58:39 -04:00
Emilio Cobos Álvarez
c10bb124e6 Bug 1387942: Relax backdrop frame parenthood assertion, and re-enable test. r=xidorn
MozReview-Commit-ID: 99I3apwe52l
2017-09-12 08:41:17 +02:00
Wei-Cheng Pan
77a3e6f43a Bug 1397168 - Add a function to find out if a node has any ancestor that is pending for restyling. r=emilio
MozReview-Commit-ID: DXcodMcQP59
2017-09-06 15:42:05 +08:00
Brian Birtles
8c77871398 Bug 1365855 - Drop comment about needing to update SMIL animation styles in ServoRestyleManager::UpdateOnlyAnimationStyles; r=hiro; DONTBUILD
Unlike GeckoRestyleManager::UpdateOnlyAnimationStyles which is called from
*both* GeckoRestyleManager::ProcessPendingRestyles and FlushThrottledStyles,
ServoRestyleManager::UpdateOnlyAnimationStyles is only called from
FlushThrottledStyles which is what we use to update transform animations before
doing hit-testing. In this case, there doesn't appear to be any situation where
throttled SMIL animations need to be updated since SMIL animations are only
throttled when they apply to display:none content (bug 1209405 and bug 1322970)
in which case they should not affect hit testing.

MozReview-Commit-ID: 4bt7hCSa7Xr
2017-09-07 16:24:12 +09:00
Wei-Cheng Pan
ed39aa0d16 Bug 1363805 - Part 3: Do lazy flushing if possible. r=heycam
Skips flushing current document if the target of getComputedDOMStyle cannot be
affected by any pending restyles.

MozReview-Commit-ID: C87HDIDvOth
2017-05-23 12:02:11 +08:00
Boris Zbarsky
c62dc63d66 Bug 1395650. Make anonymous column groups into non-inheriting anon boxes, to better match the behavior of other browsers. r=heycam 2017-09-01 00:53:33 -04:00
Boris Zbarsky
c3557b38fb Bug 1395591. When looking for our layout parent style, make sure to start with the placeholder if we're out of flow. r=emilio
MozReview-Commit-ID: 1M52bi3oQFX
2017-08-31 22:46:35 -04:00
Boris Zbarsky
78dee00e63 Bug 1390389. Fix anon box restyling assertions to correctly handle ib splits. r=xidorn
MozReview-Commit-ID: AtBFlvLyg6b
2017-08-31 09:12:13 -04:00
Brad Werth
e2b3b127d6 Bug 1385789: Refactor RestyleManager::ContentStateChangedInternal to move nsRestyleHint calculation out to GeckoRestyleManager. r=bholley
MozReview-Commit-ID: 7GXkPcjfYe6
2017-08-29 15:50:50 -07:00
Xidorn Quan
b7b6efba24 Bug 1390409 part 3 - Send a11y notification for visibility changes. r=emilio
MozReview-Commit-ID: I48OhzekXvD
2017-08-28 16:58:25 +10:00
Xidorn Quan
94ca520e89 Bug 1390409 part 2 - Replace aParentWasRestyled with a bitflag. r=emilio
MozReview-Commit-ID: 49C1N6LNXi7
2017-08-28 14:53:35 +10:00
Xidorn Quan
7db47583d5 Bug 1390409 part 1 - Remove unused ServoTraversalFlags param from ServoRestyleManager::ProcessPostTraversal. r=emilio
This was added in bug 1384769 for passing into Servo_TakeChangeHint,
but bug 1388031 changed Servo_TakeChangeHint to no longer take it, and
there is nothing else in the function which uses the flags.

MozReview-Commit-ID: LvZkJZHENUB
2017-08-28 14:27:46 +10:00
Wei-Cheng Pan
0acd30eafe Bug 1388298 - Add an API to process all invalidations on the main thread. r=emilio
MozReview-Commit-ID: I7rBwvPQykR
2017-08-24 15:36:48 +08:00
Bobby Holley
d5613cdb36 Bug 1392863 - Clean up DoProcessPendingRestyles. r=emilio
MozReview-Commit-ID: 4JhWFNPVvGn
2017-08-26 12:28:25 -07:00
Emilio Cobos Álvarez
c67ad4f06c Bug 1392170: Don't call ResolveServoStyle unnecessarily for undisplayed and not restyled stuff. r=heycam
In particular, this avoids the stupid calls in display: none roots.

The cache stuff should be unnecessary, but there's still some fishy stuff going
on.

MozReview-Commit-ID: LgnW0k1gmsN
2017-08-23 13:34:17 +02:00
Bobby Holley
cb7ab9b1ae Bug 1383332 - Track the restyle root and use it to do less work during the traversal. r=emilio
MozReview-Commit-ID: A8O3JOpsv4E
2017-08-22 21:19:24 -07:00
Emilio Cobos Álvarez
0d18b49379 Bug 1392093: Remove dead code to get the old style context. r=heycam
Unused since https://github.com/servo/servo/pull/18153.

MozReview-Commit-ID: DtQdm3ONS5E
2017-08-20 18:01:25 +02:00
J. Ryan Stinnett
6939d69049 Bug 1390691 - Fix up Servo_TakeChangeHint for Linux 32-bit ABI. r=manishearth
Bindgen bitfield enums don't work as return values with the Linux 32-bit ABI at
the moment because they wrap the value in a struct.

This causes the Rust side to believe the caller will pass along space for the
struct return value, while C++ believes it's just an integer value.

MozReview-Commit-ID: 6qqVVfU8Mb2
2017-08-14 22:11:53 -05:00
Sebastian Hengst
a950bd84b0 Backed out changeset 27e08c76b767 (bug 1388692) for failing mochitest layout/style/test/test_animations_styles_on_event.html on Android. r=backout 2017-08-14 15:16:28 +02:00
Hiroyuki Ikezoe
5e02184d29 Bug 1388692 - When doing hit testing, only flush animations if there are throttled compositor animations. r=birtles
This patch changes UpdateAnimationOnlyStyles to only flush animation styles if
there are throttled animation styles that could affect hit-testing and renames
the function to UpdateAnimationStylesForHitTesting at the same time.

For GeckoRestyleManager, the original UpdateAnimationOnlyStyles which flushes
animation styles if there are any pending animation styles, is renamed to
UpdateAnimationStyles for consistency.

MozReview-Commit-ID: 89UleXjI2OE
2017-08-14 19:59:59 +09:00
Emilio Cobos Álvarez
f09326914a Bug 1389790: Ensure we always have an up-to-date style context even if we have no frame. r=heycam
I'm still not quite sure how may we end up restyling a text node under there,
but all my attempts to build a test-case have failed.

Anyway this is the right thing to do.

MozReview-Commit-ID: FitqSKhNt2n
2017-08-12 22:17:44 +02:00
Hiroyuki Ikezoe
67fbc6ef1e Bug 1388031 - Cleanup code that was used for verifying styling results for throttled animation flush in post traversal. r=bholley
Now that we do process normal traversal even in the case of throttled animation
flush so that we don't need to do special handling for the case.

Note about the comment in has_current_styles():
the remaining animation hints is not caused by either this patch or the
previous patch in this patch series, it's been there in the first place, but
it should be fixed somehow later. See bug 1389675.

MozReview-Commit-ID: JojHufxNCiS
2017-08-11 20:34:08 -07:00
Hiroyuki Ikezoe
20b1e23fbf Bug 1388031 - Process normal traversal for throttled animation flush as well. r=bholley
MozReview-Commit-ID: BirD8BDMifp
2017-08-11 20:34:06 -07:00
Bobby Holley
10dcbf2a9d Bug 1389385 - Rearrange dirty noting to operate on the element rather than the parent. r=emilio
This will allow us to scope restyle roots more tightly.

MozReview-Commit-ID: 2t2lp5sKBHH
2017-08-11 18:18:22 -07:00
Boris Zbarsky
e2ae165a46 Bug 1388877. Fix insertions under a ::first-line in stylo. r=heycam
MozReview-Commit-ID: CDolJpTtGki
2017-08-11 09:11:23 -04:00
Boris Zbarsky
14690c54ee Bug 1388625 part 5. Implement wrapper anonymous box restyling in ServoRestyleManager. r=heycam
MozReview-Commit-ID: FRW4RCR1GT4
2017-08-11 00:10:26 -04:00
Hiroyuki Ikezoe
e85ec19021 Bug 1379516 - Mark animation timerline marker for stylo. r=birtles
MozReview-Commit-ID: GkPSXEk4xua
2017-08-11 08:44:11 +09:00
Sebastian Hengst
c7240206e3 merge mozilla-central to mozilla-inbound. r=merge a=merge 2017-08-10 17:41:11 +02:00
Jonathan Watt
cac0f85302 Bug 1388939, part 8 - Remove nsFrameManager::GetDisplayContentsNodeFor and rewrite its caller to use other APIs. r=dholbert
MozReview-Commit-ID: 6S4MpwBlrjj
2017-08-02 09:56:28 +01:00
Bobby Holley
f03e2baf2f Bug 1387499 - Clear the servo bits when dropping servo data. r=emilio
This fixes the testcase in the bug, which removes and reinserts
some elements. Our invariants require us not to set the dirty
descendants bits on unstyled elements.

MozReview-Commit-ID: 1eESZjNSURG
2017-08-09 09:20:59 -07:00
Emilio Cobos Álvarez
f09ce66dde Bug 1386602: Avoid recreating the stylist in RebuildAllStyleData. r=heycam
MozReview-Commit-ID: 31G9BLgqEmm
2017-08-03 18:10:06 +02:00
Boris Chiou
ca91226cac Bug 1383998 - Increase animation generation if attributes are changed. r=heycam
We have to set mHaveNonAnimationRestyles if we have attributes changed
(note: we increase the animation generation only if mHaveNonAnimationRestyles
is set). Attributes changed may create a new transition, and we use the
animation generation as the order of the transition, so
Element::GetAnimations() can return transitions with correct order.

Besides, I think ContentStateChanged() will not trigger a new
transition, so we don't need to make mHaveNonAnimationRestyles there.

MozReview-Commit-ID: J5XgW8nqeLH
2017-08-02 11:43:41 +08:00
Boris Zbarsky
65cda04e48 Bug 1324619 part 6. Handle dynamic restyles of ::first-line in stylo. r=emilio
MozReview-Commit-ID: 3jQhIqPuL1g
2017-07-28 21:20:47 -04:00
Boris Zbarsky
061a63c8da Bug 1324619 part 5. Implement FrameForPseudoElement for ::first-line. r=emilio
MozReview-Commit-ID: JXcV58peI7T
2017-07-28 21:20:46 -04:00
Boris Zbarsky
ab822a31fe Bug 1324619 part 3. Implement ReparentStyleContext in ServoRestyleManager, for ::first-line use. r=emilio
This doesn't actually implement style context reparenting in the style set yet; that part is next.

There is one behavior difference being introduced here compared to Gecko: we
don't reparent the first block piece of an {ib} (block-inside-inline) split
whose first inline piece is being reparented.  This is actually a correctness
fix.  In this testcase:

  <style>
    #target { color: green; }
    #target::first-line { color: red; }
  </style>
  <div id="target">
    <span>
      <div>This should be green</div>
    </span>
  </div>

Gecko makes the text red, while every other browser makes it green.

We're preserving Gecko's behavior for out-of-flows in first-line so far, but
arguably it's wrong per spec and doesn't match other browsers either.  We can
look into changing it later.

MozReview-Commit-ID: 5eC6G449Mlh
2017-07-28 21:11:18 -04:00
Bobby Holley
cca4b9e30a Bug 1384769 - Clean up ForThrottledAnimationFlush stuff. r=hiro
MozReview-Commit-ID: I6xeHv65nH2
2017-07-27 17:49:40 -07:00
Bobby Holley
9b25ccada2 Bug 1384769 - Pass TraversalFlags from C++ into Rust. r=emilio
MozReview-Commit-ID: EVUzgnL5coN
2017-07-27 17:49:38 -07:00