Backed out 3 changesets (bug 961887) for reftest failures on a CLOSED TREE

Backed out changeset 1684d29858e1 (bug 961887)
Backed out changeset 97c8184c3058 (bug 961887)
Backed out changeset f02c5c1f7704 (bug 961887)
This commit is contained in:
Wes Kocher 2015-02-24 17:32:37 -08:00
Родитель 8ff3b04a7f
Коммит 84d0eb7968
11 изменённых файлов: 111 добавлений и 400 удалений

Просмотреть файл

@ -242,56 +242,6 @@ static inline MaskLayerImageCache* GetMaskLayerImageCache()
return gMaskLayerImageCache;
}
/**
* A wrapper for nsIntRegion that can express infinite regions.
*/
struct PossiblyInfiniteRegion
{
PossiblyInfiniteRegion() : mIsInfinite(false) {}
MOZ_IMPLICIT PossiblyInfiniteRegion(const nsIntRegion& aRegion)
: mRegion(aRegion)
, mIsInfinite(false)
{}
MOZ_IMPLICIT PossiblyInfiniteRegion(const nsIntRect& aRect)
: mRegion(aRect)
, mIsInfinite(false)
{}
// Create an infinite region.
static PossiblyInfiniteRegion InfiniteRegion()
{
PossiblyInfiniteRegion r;
r.mIsInfinite = true;
return r;
}
bool IsInfinite() const { return mIsInfinite; }
bool Intersects(const nsIntRegion& aRegion) const
{
if (IsInfinite()) {
return true;
}
return !mRegion.Intersect(aRegion).IsEmpty();
}
void AccumulateAndSimplifyOutward(const PossiblyInfiniteRegion& aRegion)
{
if (!IsInfinite()) {
if (aRegion.IsInfinite()) {
mIsInfinite = true;
mRegion.SetEmpty();
} else {
mRegion.OrWith(aRegion.mRegion);
mRegion.SimplifyOutward(8);
}
}
}
protected:
nsIntRegion mRegion;
bool mIsInfinite;
};
/**
* We keep a stack of these to represent the PaintedLayers that are
* currently available to have display items added to.
@ -318,7 +268,8 @@ public:
mOpaqueForAnimatedGeometryRootParent(false),
mImage(nullptr),
mCommonClipCount(-1),
mNewChildLayersIndex(-1)
mNewChildLayersIndex(-1),
mVisibleAboveRegionIsInfinite(false)
{}
#ifdef MOZ_DUMP_PAINTING
@ -370,9 +321,52 @@ public:
*/
already_AddRefed<ImageContainer> CanOptimizeImageLayer(nsDisplayListBuilder* aBuilder);
void AddVisibleAboveRegion(const nsIntRegion& aAbove)
{
if (!mVisibleAboveRegionIsInfinite) {
mVisibleAboveRegion.Or(mVisibleAboveRegion, aAbove);
mVisibleAboveRegion.SimplifyOutward(8);
}
}
void CopyAboveRegion(PaintedLayerData* aOther)
{
if (mVisibleAboveRegionIsInfinite) {
return;
}
// If aOther has a draw region and is subject to async transforms then the
// layer can potentially be moved arbitrarily on the compositor. So we
// should avoid moving display items from on top of the layer to below the
// layer, which we do by calling SetVisibleAboveRegionIsInfinite. Note that
// if the draw region is empty (such as when aOther has only event-regions
// items) then we don't need to do this.
bool aOtherCanDrawAnywhere = aOther->IsSubjectToAsyncTransforms()
&& !aOther->mVisibleRegion.IsEmpty();
if (aOther->mVisibleAboveRegionIsInfinite || aOtherCanDrawAnywhere) {
SetVisibleAboveRegionIsInfinite();
} else {
mVisibleAboveRegion.Or(mVisibleAboveRegion, aOther->mVisibleAboveRegion);
mVisibleAboveRegion.Or(mVisibleAboveRegion, aOther->mVisibleRegion);
mVisibleAboveRegion.SimplifyOutward(8);
}
}
void SetVisibleAboveRegionIsInfinite()
{
mVisibleAboveRegionIsInfinite = true;
mVisibleAboveRegion.SetEmpty();
}
bool VisibleAboveRegionIntersects(const nsIntRect& aRect) const
{
return mVisibleAboveRegionIsInfinite || mVisibleAboveRegion.Intersects(aRect);
}
bool VisibleAboveRegionIntersects(const nsIntRegion& aRegion) const
{
return mVisibleAboveRegion.Intersects(aRegion);
return mVisibleAboveRegionIsInfinite || !mVisibleAboveRegion.Intersect(aRegion).IsEmpty();
}
bool VisibleRegionIntersects(const nsIntRect& aRect) const
@ -508,6 +502,8 @@ public:
* The union of all the bounds of the display items in this layer.
*/
nsIntRect mBounds;
private:
/**
* The region of visible content above the layer and below the
* next PaintedLayerData currently in the stack, if any. Note that not
@ -515,7 +511,12 @@ public:
* Same coordinate system as mVisibleRegion.
* This is a conservative approximation: it contains the true region.
*/
PossiblyInfiniteRegion mVisibleAboveRegion;
nsIntRegion mVisibleAboveRegion;
/**
* True if mVisibleAboveRegion should be treated as infinite, and all
* display items should be considered 'above' this layer.
*/
bool mVisibleAboveRegionIsInfinite;
};
@ -574,8 +575,7 @@ public:
const nsRect& aContainerBounds,
ContainerLayer* aContainerLayer,
const ContainerLayerParameters& aParameters,
bool aFlattenToSingleLayer,
nscolor aBackgroundColor) :
bool aFlattenToSingleLayer) :
mBuilder(aBuilder), mManager(aManager),
mLayerBuilder(aLayerBuilder),
mContainerFrame(aContainerFrame),
@ -583,7 +583,6 @@ public:
mContainerBounds(aContainerBounds),
mParameters(aParameters),
mNextFreeRecycledPaintedLayer(0),
mContainerUniformBackgroundColor(aBackgroundColor),
mFlattenToSingleLayer(aFlattenToSingleLayer)
{
nsPresContext* presContext = aContainerFrame->PresContext();
@ -734,15 +733,12 @@ protected:
PaintedLayer* aNewLayer);
/**
* Try to determine whether a layer with visible region aTargetVisibleRegion
* Try to determine whether the PaintedLayer at aPaintedLayerIndex
* has a single opaque color behind it, over the entire bounds of its visible
* region. The target layer is assumed to be on top of all thebes layers in
* the thebes layer data stack that have a stack index < aUnderPaintedLayerIndex.
* If successful, return the color, otherwise return NS_RGBA(0,0,0,0).
* aTargetVisibleRegion is relative to the the container reference frame.
* region.
* If successful, return that color, otherwise return NS_RGBA(0,0,0,0).
*/
nscolor FindOpaqueBackgroundColorFor(const nsIntRegion& aTargetVisibleRegion,
int32_t aUnderPaintedLayerIndex);
nscolor FindOpaqueBackgroundColorFor(int32_t aPaintedLayerIndex);
/**
* Find the fixed-pos frame, if any, containing (or equal to)
* aAnimatedGeometryRoot. Only return a fixed-pos frame if its viewport
@ -860,31 +856,6 @@ protected:
bool ChooseAnimatedGeometryRoot(const nsDisplayList& aList,
const nsIFrame **aAnimatedGeometryRoot);
/**
* When adding a new layer above the topmost PaintedLayerData layer in our
* PaintedLayerDataStack, update the visible above region of the topmost
* PaintedLayerData item.
* @param aVisibleRect The visible rect of the newly-added display item
* @param aCanMoveFreely Whether the visible area of the item can change
* without new layer building.
* @param aClipRectIfAny A clip rect, if the layer is clipped, or nullptr.
*/
void UpdateVisibleAboveRegionForNewItem(const nsIntRect& aVisibleRect,
bool aCanMoveFreely,
const nsIntRect* aClipRectIfAny);
/**
* When popping aData from the PaintedLayerDataStack, update the next
* PaintedLayerData item's visible above region to take the popped layer
* into account.
* @param aData The layer data that is getting popped from
* the stack.
* @param aNextPaintedLayerData The next lower item in the stack, or nullptr
* if there is none.
*/
void UpdateVisibleAboveRegionOnPop(PaintedLayerData* aData,
PaintedLayerData* aNextPaintedLayerData);
nsDisplayListBuilder* mBuilder;
LayerManager* mManager;
FrameLayerBuilder* mLayerBuilder;
@ -916,20 +887,8 @@ protected:
nsTArray<nsRefPtr<PaintedLayer> > mRecycledPaintedLayers;
nsDataHashtable<nsPtrHashKey<Layer>, nsRefPtr<ImageLayer> >
mRecycledMaskImageLayers;
/**
* The visible region of all visible content in this container layer under
* first PaintedLayerData layer in the PaintedLayerDataStack.
*/
PossiblyInfiniteRegion mVisibleAboveBackgroundRegion;
uint32_t mNextFreeRecycledPaintedLayer;
nscoord mAppUnitsPerDevPixel;
/**
* The uniform opaque color from behind this container layer, or
* NS_RGBA(0,0,0,0) if the background behind this container layer is not
* uniform and opaque. This color can be pulled into ThebesLayers that are
* directly above the background.
*/
nscolor mContainerUniformBackgroundColor;
bool mSnappingEnabled;
bool mFlattenToSingleLayer;
/**
@ -1882,19 +1841,19 @@ ContainerState::SetOuterVisibleRegionForLayer(Layer* aLayer,
}
nscolor
ContainerState::FindOpaqueBackgroundColorFor(const nsIntRegion& aTargetVisibleRegion,
int32_t aUnderPaintedLayerIndex)
ContainerState::FindOpaqueBackgroundColorFor(int32_t aPaintedLayerIndex)
{
for (int32_t i = aUnderPaintedLayerIndex - 1; i >= 0; --i) {
PaintedLayerData* target = mPaintedLayerDataStack[aPaintedLayerIndex];
for (int32_t i = aPaintedLayerIndex - 1; i >= 0; --i) {
PaintedLayerData* candidate = mPaintedLayerDataStack[i];
if (candidate->VisibleAboveRegionIntersects(aTargetVisibleRegion)) {
if (candidate->VisibleAboveRegionIntersects(target->mVisibleRegion)) {
// Some non-PaintedLayer content between target and candidate; this is
// hopeless
return NS_RGBA(0,0,0,0);
break;
}
nsIntRegion intersection;
intersection.And(candidate->mVisibleRegion, aTargetVisibleRegion);
intersection.And(candidate->mVisibleRegion, target->mVisibleRegion);
if (intersection.IsEmpty()) {
// The layer doesn't intersect our target, ignore it and move on
continue;
@ -1902,7 +1861,7 @@ ContainerState::FindOpaqueBackgroundColorFor(const nsIntRegion& aTargetVisibleRe
// The candidate intersects our target. If any layer has a solid-color
// area behind our target, this must be it. Scan its display items.
nsIntRect deviceRect = aTargetVisibleRegion.GetBounds();
nsIntRect deviceRect = target->mVisibleRegion.GetBounds();
nsRect appUnitRect = deviceRect.ToAppUnits(mAppUnitsPerDevPixel);
appUnitRect.ScaleInverseRoundOut(mParameters.mXScale, mParameters.mYScale);
@ -1919,7 +1878,7 @@ ContainerState::FindOpaqueBackgroundColorFor(const nsIntRegion& aTargetVisibleRe
continue;
if (!snappedBounds.Contains(deviceRect))
return NS_RGBA(0,0,0,0);
break;
} else {
// The layer's visible rect is already (close enough to) pixel
@ -1928,7 +1887,7 @@ ContainerState::FindOpaqueBackgroundColorFor(const nsIntRegion& aTargetVisibleRe
continue;
if (!bounds.Contains(appUnitRect))
return NS_RGBA(0,0,0,0);
break;
}
if (item->IsInvisibleInRect(appUnitRect)) {
@ -1939,21 +1898,18 @@ ContainerState::FindOpaqueBackgroundColorFor(const nsIntRegion& aTargetVisibleRe
mParameters.mXScale,
mParameters.mYScale,
mAppUnitsPerDevPixel)) {
return NS_RGBA(0,0,0,0);
break;
}
nscolor color;
if (item->IsUniform(mBuilder, &color) && NS_GET_A(color) == 255)
return color;
return NS_RGBA(0,0,0,0);
break;
}
break;
}
if (mVisibleAboveBackgroundRegion.Intersects(aTargetVisibleRegion)) {
// Some non-Thebes content is between container background and target.
return NS_RGBA(0,0,0,0);
}
return mContainerUniformBackgroundColor;
return NS_RGBA(0,0,0,0);
}
void
@ -2196,7 +2152,7 @@ ContainerState::PopPaintedLayerData()
if (layer == data->mLayer) {
nscolor backgroundColor = NS_RGBA(0,0,0,0);
if (!isOpaque) {
backgroundColor = FindOpaqueBackgroundColorFor(data->mVisibleRegion, lastIndex);
backgroundColor = FindOpaqueBackgroundColorFor(lastIndex);
if (NS_GET_A(backgroundColor) == 255) {
isOpaque = true;
}
@ -2308,13 +2264,13 @@ ContainerState::PopPaintedLayerData()
layer->SetEventRegions(regions);
}
// Since we're going to pop off the last PaintedLayerData, the
// mVisibleAboveRegion of the second-to-last item will need to include
// the regions of the last item. If we're emptying the PaintedLayerDataStack,
// we instead need to accumulate the regions into the container's
// mVisibleAboveBackgroundRegion.
UpdateVisibleAboveRegionOnPop(data,
lastIndex > 0 ? mPaintedLayerDataStack[lastIndex - 1].get() : nullptr);
if (lastIndex > 0) {
// Since we're going to pop off the last PaintedLayerData, the
// mVisibleAboveRegion of the second-to-last item will need to include
// the regions of the last item.
PaintedLayerData* nextData = mPaintedLayerDataStack[lastIndex - 1];
nextData->CopyAboveRegion(data);
}
mPaintedLayerDataStack.RemoveElementAt(lastIndex);
}
@ -2764,51 +2720,6 @@ ContainerState::ComputeOpaqueRect(nsDisplayItem* aItem,
return opaquePixels;
}
void
ContainerState::UpdateVisibleAboveRegionForNewItem(const nsIntRect& aVisibleRect,
bool aCanMoveFreely,
const nsIntRect* aClipRectIfAny)
{
PaintedLayerData* data = GetTopPaintedLayerData();
PossiblyInfiniteRegion& visibleAboveRegion = data
? data->mVisibleAboveRegion : mVisibleAboveBackgroundRegion;
if (aCanMoveFreely) {
// Prerendered transform items can be updated without layer building
// (async animations or an empty transaction), so we need to put items
// that the transform item can potentially move under into a layer above
// this item. We do this by making the visible above region infinite.
// If we have a clip, the transform can't escape from the clip rect, and
// the clip rect can't change without new layer building. In that case we
// can add just the clip rect to the visible above region.
visibleAboveRegion.AccumulateAndSimplifyOutward(
aClipRectIfAny ? *aClipRectIfAny : PossiblyInfiniteRegion::InfiniteRegion());
} else {
visibleAboveRegion.AccumulateAndSimplifyOutward(aVisibleRect);
}
}
void
ContainerState::UpdateVisibleAboveRegionOnPop(PaintedLayerData* aData,
PaintedLayerData* aNextPaintedLayerData)
{
PossiblyInfiniteRegion& visibleAboveRegion = aNextPaintedLayerData ?
aNextPaintedLayerData->mVisibleAboveRegion : mVisibleAboveBackgroundRegion;
// If aData has a draw region and is subject to async transforms then the
// layer can potentially be moved arbitrarily on the compositor. So we
// should avoid moving display items from on top of the layer to below the
// layer, which we do by making the visibleAboveRegion infinite. Note that
// if the visible region is empty (such as when aData has only event-regions
// items) then we don't need to do this.
if (aData->IsSubjectToAsyncTransforms() && !aData->mVisibleRegion.IsEmpty()) {
visibleAboveRegion.AccumulateAndSimplifyOutward(PossiblyInfiniteRegion::InfiniteRegion());
} else {
visibleAboveRegion.AccumulateAndSimplifyOutward(aData->mVisibleAboveRegion);
visibleAboveRegion.AccumulateAndSimplifyOutward(aData->mVisibleRegion);
}
}
/*
* Iterate through the non-clip items in aList and its descendants.
* For each item we compute the effective clip rect. Each item is assigned
@ -2999,16 +2910,6 @@ ContainerState::ProcessDisplayItems(nsDisplayList* aList)
continue;
}
// 3D-transformed layers don't necessarily draw in the order in which
// they're added to their parent container layer.
bool mayDrawOutOfOrder = itemType == nsDisplayItem::TYPE_TRANSFORM &&
(item->Frame()->Preserves3D() || item->Frame()->Preserves3DChildren());
// Pull up a uniform background color into the layer if possible.
mParameters.mBackgroundColor = (prerenderedTransform || mayDrawOutOfOrder)
? NS_RGBA(0,0,0,0)
: FindOpaqueBackgroundColorFor(itemVisibleRect, mPaintedLayerDataStack.Length());
// Just use its layer.
// Set layerContentsVisibleRect.width/height to -1 to indicate we
// currently don't know. If BuildContainerLayerFor gets called by
@ -3052,13 +2953,27 @@ ContainerState::ProcessDisplayItems(nsDisplayList* aList)
} else {
ownLayer->SetClipRect(nullptr);
}
// Update the "visible above region" of the topmost PaintedLayerData item
// (or of the container's background) so that FindPaintedLayerFor and
// FindOpaqueBackgroundColorFor are aware of this item, even though it's
// not in the PaintedLayerDataStack.
UpdateVisibleAboveRegionForNewItem(itemVisibleRect, prerenderedTransform,
itemClip.HasClip() ? &clipRect : nullptr);
PaintedLayerData* data = GetTopPaintedLayerData();
if (data) {
// Prerendered transform items can be updated without layer building
// (async animations or an empty transaction), so we need to put items
// that the transform item can potentially move under into a layer
// above this item.
if (prerenderedTransform) {
if (!itemClip.HasClip()) {
// The transform item can move anywhere, treat all other content
// as being above this item.
data->SetVisibleAboveRegionIsInfinite();
} else {
// The transform can't escape from the clip rect, and the clip
// rect can't change without new layer building. Treat all content
// that intersects the clip rect as being above this item.
data->AddVisibleAboveRegion(clipRect);
}
} else {
data->AddVisibleAboveRegion(itemVisibleRect);
}
}
// rounded rectangle clipping using mask layers
// (must be done after visible rect is set on layer)
@ -4109,18 +4024,11 @@ FrameLayerBuilder::BuildContainerLayerFor(nsDisplayListBuilder* aBuilder,
{
flattenToSingleLayer = true;
}
nscolor backgroundColor = NS_RGBA(0,0,0,0);
if (aFlags & CONTAINER_ALLOW_PULL_BACKGROUND_COLOR) {
backgroundColor = aParameters.mBackgroundColor;
}
uint32_t flags;
while (true) {
ContainerState state(aBuilder, aManager, aManager->GetLayerBuilder(),
aContainerFrame, aContainerItem, bounds,
containerLayer, scaleParameters, flattenToSingleLayer,
backgroundColor);
containerLayer, scaleParameters, flattenToSingleLayer);
state.ProcessDisplayItems(aChildren);

Просмотреть файл

@ -57,7 +57,6 @@ struct ContainerLayerParameters {
: mXScale(1)
, mYScale(1)
, mLayerContentsVisibleRect(nullptr)
, mBackgroundColor(NS_RGBA(0,0,0,0))
, mInTransformedSubtree(false)
, mInActiveTransformedSubtree(false)
, mDisableSubpixelAntialiasingInDescendants(false)
@ -67,7 +66,6 @@ struct ContainerLayerParameters {
: mXScale(aXScale)
, mYScale(aYScale)
, mLayerContentsVisibleRect(nullptr)
, mBackgroundColor(NS_RGBA(0,0,0,0))
, mInTransformedSubtree(false)
, mInActiveTransformedSubtree(false)
, mDisableSubpixelAntialiasingInDescendants(false)
@ -80,7 +78,6 @@ struct ContainerLayerParameters {
, mYScale(aYScale)
, mLayerContentsVisibleRect(nullptr)
, mOffset(aOffset)
, mBackgroundColor(aParent.mBackgroundColor)
, mInTransformedSubtree(aParent.mInTransformedSubtree)
, mInActiveTransformedSubtree(aParent.mInActiveTransformedSubtree)
, mDisableSubpixelAntialiasingInDescendants(aParent.mDisableSubpixelAntialiasingInDescendants)
@ -97,7 +94,6 @@ struct ContainerLayerParameters {
*/
nsIntPoint mOffset;
nscolor mBackgroundColor;
bool mInTransformedSubtree;
bool mInActiveTransformedSubtree;
bool mDisableSubpixelAntialiasingInDescendants;
@ -201,16 +197,7 @@ public:
void DidEndTransaction();
enum {
CONTAINER_NOT_CLIPPED_BY_ANCESTORS = 0x01,
/**
* Set this when pulling an opaque background color from behind the
* container layer into the container doesn't change the visual results,
* given the effects you're going to apply to the container layer.
* For example, this is compatible with opacity or clipping/masking, but
* not with non-OVER blend modes or filters.
*/
CONTAINER_ALLOW_PULL_BACKGROUND_COLOR = 0x02
CONTAINER_NOT_CLIPPED_BY_ANCESTORS = 0x01
};
/**
* Build a container layer for a display item that contains a child

Просмотреть файл

@ -3811,8 +3811,7 @@ nsDisplayOpacity::BuildLayer(nsDisplayListBuilder* aBuilder,
const ContainerLayerParameters& aContainerParameters) {
nsRefPtr<Layer> container = aManager->GetLayerBuilder()->
BuildContainerLayerFor(aBuilder, aManager, mFrame, this, &mList,
aContainerParameters, nullptr,
FrameLayerBuilder::CONTAINER_ALLOW_PULL_BACKGROUND_COLOR);
aContainerParameters, nullptr);
if (!container)
return nullptr;
@ -4121,8 +4120,7 @@ nsDisplayOwnLayer::BuildLayer(nsDisplayListBuilder* aBuilder,
const ContainerLayerParameters& aContainerParameters) {
nsRefPtr<ContainerLayer> layer = aManager->GetLayerBuilder()->
BuildContainerLayerFor(aBuilder, aManager, mFrame, this, &mList,
aContainerParameters, nullptr,
FrameLayerBuilder::CONTAINER_ALLOW_PULL_BACKGROUND_COLOR);
aContainerParameters, nullptr);
if (mFlags & VERTICAL_SCROLLBAR) {
layer->SetScrollbarData(mScrollTarget, Layer::ScrollDirection::VERTICAL);
}
@ -4520,8 +4518,7 @@ nsDisplayScrollLayer::BuildLayer(nsDisplayListBuilder* aBuilder,
return aManager->GetLayerBuilder()->
BuildContainerLayerFor(aBuilder, aManager, mFrame, this, &mList,
params, nullptr,
FrameLayerBuilder::CONTAINER_ALLOW_PULL_BACKGROUND_COLOR);
params, nullptr);
}
UniquePtr<FrameMetrics>
@ -5524,7 +5521,6 @@ already_AddRefed<Layer> nsDisplayTransform::BuildLayer(nsDisplayListBuilder *aBu
uint32_t flags = ShouldPrerender(aBuilder) ?
FrameLayerBuilder::CONTAINER_NOT_CLIPPED_BY_ANCESTORS : 0;
flags |= FrameLayerBuilder::CONTAINER_ALLOW_PULL_BACKGROUND_COLOR;
nsRefPtr<ContainerLayer> container = aManager->GetLayerBuilder()->
BuildContainerLayerFor(aBuilder, aManager, mFrame, this, mStoredList.GetChildren(),
aContainerParameters, &newTransformMatrix, flags);
@ -5981,8 +5977,7 @@ nsDisplayVR::BuildLayer(nsDisplayListBuilder* aBuilder,
const ContainerLayerParameters& aContainerParameters)
{
ContainerLayerParameters newContainerParameters = aContainerParameters;
uint32_t flags = FrameLayerBuilder::CONTAINER_NOT_CLIPPED_BY_ANCESTORS |
FrameLayerBuilder::CONTAINER_ALLOW_PULL_BACKGROUND_COLOR;
uint32_t flags = FrameLayerBuilder::CONTAINER_NOT_CLIPPED_BY_ANCESTORS;
nsRefPtr<ContainerLayer> container = aManager->GetLayerBuilder()->
BuildContainerLayerFor(aBuilder, aManager, mFrame, this, &mList,
newContainerParameters, nullptr, flags);

Просмотреть файл

@ -1,23 +0,0 @@
<!DOCTYPE HTML>
<title>Don't pull background colors of container layers through DrawAboveRegions of ThebesLayers</title>
<style>
#outer {
transform: translateX(1px);
}
#above {
position: absolute;
top: 50px;
left: 50px;
width: 100px;
height: 100px;
border: 1px solid black;
}
</style>
<div id="outer">
<div style="height: 100px; width: 200px; background-color: lime;"></div>
<div id="above"></div>
</div>

Просмотреть файл

@ -1,30 +0,0 @@
<!DOCTYPE HTML>
<title>Don't pull background colors of container layers through DrawAboveRegions of ThebesLayers</title>
<style>
#outer {
transform: translateX(1px);
}
#above {
position: absolute;
top: 50px;
left: 50px;
width: 100px;
height: 100px;
border: 1px solid black;
}
</style>
<div id="outer">
<canvas id="canvas" height="100" width="200"></canvas>
<div id="above"></div>
</div>
<script>
var canvas = document.getElementById("canvas");
var cx = canvas.getContext("2d");
cx.fillStyle="lime";
cx.fillRect(0, 0, 200, 100);
</script>

Просмотреть файл

@ -1,24 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<meta charset="utf-8">
<title>Make sure that we don't pull background colors into container layers that have effects applied on them</title>
<style>
#outer {
background-color: white;
border: 1px solid black;
}
#outer > div {
margin: 20px;
border: 1px solid black;
height: 20px;
}
</style>
<div id="outer">
<div id="inner1"></div>
<div id="inner2"></div>
</div>

Просмотреть файл

@ -1,32 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<meta charset="utf-8">
<title>Make sure that we don't pull background colors into container layers that have effects applied on them</title>
<style>
#outer {
background-color: white;
border: 1px solid black;
}
#outer > div {
margin: 20px;
border: 1px solid white;
height: 20px;
}
#inner1 {
mix-blend-mode: difference;
}
#inner2 {
filter: invert(100%);
}
</style>
<div id="outer">
<div id="inner1"></div>
<div id="inner2"></div>
</div>

Просмотреть файл

@ -1,16 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<meta charset="utf-8">
<title>Test container background searching with clipped display items</title>
<style>
#box {
width: 200px;
height: 200px;
background-color: lime;
}
</style>
<div id="box"></div>

Просмотреть файл

@ -1,51 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<meta charset="utf-8">
<title>Test container background searching with clipped display items</title>
<style>
div {
box-sizing: border-box;
width: 200px;
height: 200px;
margin-bottom: -200px;
}
#outer {
background-color: red;
}
#container {
will-change: opacity;
}
#backgroundCover {
background-color: lime;
}
#roundedClip {
overflow: hidden;
border-radius: 20px;
}
#clippedItem {
background-color: lime;
}
#separatePaintedLayer {
position: sticky;
border: 1px solid lime;
}
</style>
<div id="outer">
<div id="container">
<div id="backgroundCover"></div>
<div id="roundedClip">
<div id="clippedItem"></div>
</div>
<div id="separatePaintedLayer"></div>
</div>
</div>

Просмотреть файл

@ -1658,9 +1658,9 @@ skip-if(Android||B2G) random-if(winWidget) == 632781-verybig.html 632781-ref.htm
fuzzy-if(d2d&&/^Windows\x20NT\x206\.2/.test(http.oscpu),1,559) == 633344-1.html 633344-1-ref.html # bug 1103623
== 634232-1.html 634232-1-ref.html
fails-if(Android&&AndroidVersion<17&&AndroidVersion!=10) == 635302-1.html 635302-1-ref.html
fuzzy(1,68) skip-if(B2G) fails-if(Android) == 635373-1.html 635373-1-ref.html
skip-if(B2G) random-if(d2d) fails-if(Android) fuzzy-if(winWidget&&!d2d,1,61) == 635373-2.html 635373-2-ref.html
skip-if(B2G) random-if(d2d) fails-if(Android) fuzzy-if(winWidget&&!d2d,1,60) == 635373-3.html 635373-3-ref.html
skip-if(B2G) random-if(d2d) fails-if(Android) fuzzy-if(winWidget&&!d2d,1,11) == 635373-1.html 635373-1-ref.html
skip-if(B2G) random-if(d2d) fails-if(Android) fuzzy-if(winWidget&&!d2d,1,15) == 635373-2.html 635373-2-ref.html
skip-if(B2G) random-if(d2d) fails-if(Android) fuzzy-if(winWidget&&!d2d,1,15) == 635373-3.html 635373-3-ref.html
HTTP(..) == 635639-1.html 635639-1-ref.html
HTTP(..) == 635639-2.html 635639-2-ref.html
random == 637597-1.html 637597-1-ref.html # bug 637597 was never really fixed!
@ -1803,9 +1803,6 @@ fuzzy-if(B2G,1,7) == 942672-1.html 942672-1-ref.html
== 950436-1.html 950436-1-ref.html
== 957770-1.svg 957770-1-ref.svg
== 960277-1.html 960277-1-ref.html
== 961887-1.html 961887-1-ref.html
== 961887-2.html 961887-2-ref.html
== 961887-3.html 961887-3-ref.html
pref(layout.css.overflow-clip-box.enabled,true) fuzzy(50,145) == 966992-1.html 966992-1-ref.html
skip-if(Android) == 966510-1.html 966510-1-ref.html # scrollable elements other than the root probably won't work well on android until bug 776030 is fixed
skip-if(Android) == 966510-2.html 966510-2-ref.html # same as above

Просмотреть файл

@ -11,7 +11,7 @@ skip-if(B2G) fails-if(Android&&browserIsRemote) == hScrollAbsHeightQuirks.html g
skip-if(B2G) fails-if(Android&&browserIsRemote) == hScrollSimpleHeightD.html greenboxhbar.html # bug 650591, 732565 # bug 773482
skip-if(B2G) fails-if(Android&&browserIsRemote) == hScrollSimpleHeightQuirks-1D.html greenboxhbar.html # bug 650591, 732565 # bug 773482
skip-if(B2G) fails-if(Android&&browserIsRemote) == hScrollSimpleHeightQuirks-2D.html greenboxhbar.html # bug 650591, 732565 # bug 773482
fuzzy-if(B2G,1,11) fails-if(Android&&browserIsRemote) == hScrollSimpleHeightQuirks-3D.html greenboxhbar.html # bug 650591, 732565, 1136304
fails-if(Android&&browserIsRemote) == hScrollSimpleHeightQuirks-3D.html greenboxhbar.html # bug 650591, 732565
skip-if(B2G) fails-if(Android&&browserIsRemote) == hScrollAbsHeightD.html greenboxhbar.html # bug 650591, 732565 # bug 773482
skip-if(B2G) fails-if(Android&&browserIsRemote) == hScrollAbsHeightQuirksD.html greenboxhbar.html # bug 650591, 732565 # bug 773482
== simpleMinHeight100D.html greenbox.html