"ASSERTION: Can't get a delta for an untransformed frame!" with transform, svg:foreignObject

RESOLVED WORKSFORME

Status

()

defect
RESOLVED WORKSFORME
8 years ago
4 years ago

People

(Reporter: jruderman, Unassigned)

Tracking

(Blocks 1 bug, {assertion, testcase})

Trunk
x86_64
macOS
Points:
---
Dependency tree / graph
Bug Flags:
in-testsuite +

Firefox Tracking Flags

(b2g-v2.5 fixed)

Details

Attachments

(2 attachments)

Posted image testcase
###!!! ASSERTION: Can't get a delta for an untransformed frame!: 'aFrame->GetStyleDisplay()->HasTransform()', file layout/base/nsDisplayList.cpp, line 2370

###!!! ASSERTION: If we don't have a transform, then we must be at least attempting to preserve the transforms of our children: 'aFrame->GetStyleDisplay()->mTransformStyle == NS_STYLE_TRANSFORM_STYLE_PRESERVE_3D', file layout/base/nsDisplayList.cpp, line 2518
Posted file stack trace
nsSVGForeignObjectFrame::IsTransformed is overridden to always return true, which is what we we're checking in nsFrame::FinishAndStoreOverflow.

nsDisplayTransform::GetResultingTransformMatrix requires GetStyleDisplay()->HasTransform() to be true, which it isn't

I'm not sure what the proper behaviour here is, why are foreign objects returning true for transformed when they don't have a transform?
If it's not actually transformed maybe we can make it return false?
http://mxr.mozilla.org/mozilla-central/source/layout/svg/base/src/nsSVGForeignObjectFrame.h#84

This looks like an intentional change?

The default implementation would be returning false here, I'm not sure why it has an override.
Perhaps it was just simpler than checking if it actually had a non-identity transform?
Modified assertion still happens on trunk:

###!!! ASSERTION: If we don't have a transform, then we must have another reason to have an nsDisplayTransform created: 'aFrame->GetStyleDisplay()->mTransformStyle == NS_STYLE_TRANSFORM_STYLE_PRESERVE_3D || aFrame->GetStyleDisplay()->mBackfaceVisibility == NS_STYLE_BACKFACE_VISIBILITY_HIDDEN', file layout/base/nsDisplayList.cpp, line 2557
No longer asserts on trunk.
Status: NEW → RESOLVED
Closed: 4 years ago
Flags: in-testsuite+
Resolution: --- → WORKSFORME
You need to log in before you can comment on or make changes to this bug.