Bug 562740 combined nsMenuFrame::DoLayout and nsPopupSetFrame::DoLayout to create nsMenuPopupFrame::LayoutPopup.
nsMenuPopupFrame::LayoutPopup called SetPopupPosition with this (the nsMenuFrame) as the anchor and then laid out the menu popup frame. nsPopupSetFrame::DoLayout laid out the menu popup frame and then called SetPopupPosition with the anchor argument as null.
When these were combined into nsMenuPopupFrame::LayoutPopup both SetPopupPosition call were included, the second one always passing null for the anchor even though there may be a non-null anchor passed in from the caller.
This patch simply passes the passed in anchor frame to SetPopupPosition.
The added test only tests the position of ruby text and ruby text container. The position of text inside is not correct yet, which will be fixed in bug 1141931.
This patch uses the logical version of FinishReflowChild instead, so that we are able to keep the consistent logical rect, and then fix the rect with correct container width after the whole line is reflowed.
Note that this adds a parameter to the callback function so that we can
keep track of which canvas is for the test and which is for the
reference; previously we didn't care.
It also puts testfile and reffile in local variables so that they can be
reused, and then appends the extra bidi numeral information to reffile
when calling assertSnapshots so that the messages contain the same (or
more) data as before.
This adds support for class="reftest-opaque-layer" and for
reftest-assigned-layer="some-layer-name" to the reftest harness.
From reftest/README.txt:
Opaque Layer Tests: class="reftest-opaque-layer"
================================================
If an element should be assigned to a PaintedLayer that's opaque, set the class
"reftest-opaque-layer" on it. This checks whether the layer is opaque during
the last paint of the test, and it works whether your test is an invalidation
test or not. In order to pass the test, the element has to have a primary
frame, and that frame's display items must all be assigned to a single painted
layer and no other layers, so it can't be used on elements that create stacking
contexts (active or inactive).
Layerization Tests: reftest-assigned-layer="layer-name"
=======================================================
If two elements should be assigned to the same PaintedLayer, choose any string
value as the layer name and set the attribute reftest-assigned-layer="yourname"
on both elements. Reftest will check whether all elements with the same
reftest-assigned-layer value share the same layer. It will also test whether
elements with different reftest-assigned-layer values are assigned to different
layers.
The same restrictions as with class="reftest-opaque-layer" apply: All elements
must have a primary frame, and that frame's display items must all be assigned
to the same PaintedLayer and no other layers. If these requirements are not
met, the test will fail.