Bug 1335368 part 22. Get rid of IsCallerChrome in geometry utils. r=dholbert

This commit is contained in:
Boris Zbarsky 2017-02-01 15:43:59 -05:00
parent 970a120fb5
commit c9fc3601f5
5 changed files with 40 additions and 17 deletions

View File

@ -1268,36 +1268,43 @@ nsINode::GetEventTargetParent(EventChainPreVisitor& aVisitor)
void
nsINode::GetBoxQuads(const BoxQuadOptions& aOptions,
nsTArray<RefPtr<DOMQuad> >& aResult,
CallerType aCallerType,
mozilla::ErrorResult& aRv)
{
mozilla::GetBoxQuads(this, aOptions, aResult, aRv);
mozilla::GetBoxQuads(this, aOptions, aResult, aCallerType, aRv);
}
already_AddRefed<DOMQuad>
nsINode::ConvertQuadFromNode(DOMQuad& aQuad,
const GeometryNode& aFrom,
const ConvertCoordinateOptions& aOptions,
CallerType aCallerType,
ErrorResult& aRv)
{
return mozilla::ConvertQuadFromNode(this, aQuad, aFrom, aOptions, aRv);
return mozilla::ConvertQuadFromNode(this, aQuad, aFrom, aOptions, aCallerType,
aRv);
}
already_AddRefed<DOMQuad>
nsINode::ConvertRectFromNode(DOMRectReadOnly& aRect,
const GeometryNode& aFrom,
const ConvertCoordinateOptions& aOptions,
CallerType aCallerType,
ErrorResult& aRv)
{
return mozilla::ConvertRectFromNode(this, aRect, aFrom, aOptions, aRv);
return mozilla::ConvertRectFromNode(this, aRect, aFrom, aOptions, aCallerType,
aRv);
}
already_AddRefed<DOMPoint>
nsINode::ConvertPointFromNode(const DOMPointInit& aPoint,
const GeometryNode& aFrom,
const ConvertCoordinateOptions& aOptions,
CallerType aCallerType,
ErrorResult& aRv)
{
return mozilla::ConvertPointFromNode(this, aPoint, aFrom, aOptions, aRv);
return mozilla::ConvertPointFromNode(this, aPoint, aFrom, aOptions,
aCallerType, aRv);
}
nsresult

View File

@ -1882,19 +1882,23 @@ public:
void GetBoxQuads(const BoxQuadOptions& aOptions,
nsTArray<RefPtr<DOMQuad> >& aResult,
mozilla::ErrorResult& aRv);
CallerType aCallerType,
ErrorResult& aRv);
already_AddRefed<DOMQuad> ConvertQuadFromNode(DOMQuad& aQuad,
const TextOrElementOrDocument& aFrom,
const ConvertCoordinateOptions& aOptions,
CallerType aCallerType,
ErrorResult& aRv);
already_AddRefed<DOMQuad> ConvertRectFromNode(DOMRectReadOnly& aRect,
const TextOrElementOrDocument& aFrom,
const ConvertCoordinateOptions& aOptions,
CallerType aCallerType,
ErrorResult& aRv);
already_AddRefed<DOMPoint> ConvertPointFromNode(const DOMPointInit& aPoint,
const TextOrElementOrDocument& aFrom,
const ConvertCoordinateOptions& aOptions,
CallerType aCallerType,
ErrorResult& aRv);
protected:

View File

@ -23,13 +23,13 @@ dictionary ConvertCoordinateOptions {
[NoInterfaceObject]
interface GeometryUtils {
[Throws, Func="nsINode::HasBoxQuadsSupport"]
[Throws, Func="nsINode::HasBoxQuadsSupport", NeedsCallerType]
sequence<DOMQuad> getBoxQuads(optional BoxQuadOptions options);
[Throws, Pref="layout.css.convertFromNode.enabled"]
[Throws, Pref="layout.css.convertFromNode.enabled", NeedsCallerType]
DOMQuad convertQuadFromNode(DOMQuad quad, GeometryNode from, optional ConvertCoordinateOptions options);
[Throws, Pref="layout.css.convertFromNode.enabled"]
[Throws, Pref="layout.css.convertFromNode.enabled", NeedsCallerType]
DOMQuad convertRectFromNode(DOMRectReadOnly rect, GeometryNode from, optional ConvertCoordinateOptions options);
[Throws, Pref="layout.css.convertFromNode.enabled"]
[Throws, Pref="layout.css.convertFromNode.enabled", NeedsCallerType]
DOMPoint convertPointFromNode(DOMPointInit point, GeometryNode from, optional ConvertCoordinateOptions options);
};

View File

@ -235,14 +235,15 @@ FindTopLevelPresContext(nsPresContext* aPC)
}
static bool
CheckFramesInSameTopLevelBrowsingContext(nsIFrame* aFrame1, nsIFrame* aFrame2)
CheckFramesInSameTopLevelBrowsingContext(nsIFrame* aFrame1, nsIFrame* aFrame2,
CallerType aCallerType)
{
nsPresContext* pc1 = aFrame1->PresContext();
nsPresContext* pc2 = aFrame2->PresContext();
if (pc1 == pc2) {
return true;
}
if (nsContentUtils::IsCallerChrome()) {
if (aCallerType == CallerType::System) {
return true;
}
if (FindTopLevelPresContext(pc1) == FindTopLevelPresContext(pc2)) {
@ -254,6 +255,7 @@ CheckFramesInSameTopLevelBrowsingContext(nsIFrame* aFrame1, nsIFrame* aFrame2)
void GetBoxQuads(nsINode* aNode,
const dom::BoxQuadOptions& aOptions,
nsTArray<RefPtr<DOMQuad> >& aResult,
CallerType aCallerType,
ErrorResult& aRv)
{
nsIFrame* frame = GetFrameForNode(aNode);
@ -279,7 +281,8 @@ void GetBoxQuads(nsINode* aNode,
aRv.Throw(NS_ERROR_DOM_NOT_FOUND_ERR);
return;
}
if (!CheckFramesInSameTopLevelBrowsingContext(frame, relativeToFrame)) {
if (!CheckFramesInSameTopLevelBrowsingContext(frame, relativeToFrame,
aCallerType)) {
aRv.Throw(NS_ERROR_DOM_NOT_FOUND_ERR);
return;
}
@ -294,7 +297,8 @@ void GetBoxQuads(nsINode* aNode,
static void
TransformPoints(nsINode* aTo, const GeometryNode& aFrom,
uint32_t aPointCount, CSSPoint* aPoints,
const ConvertCoordinateOptions& aOptions, ErrorResult& aRv)
const ConvertCoordinateOptions& aOptions,
CallerType aCallerType, ErrorResult& aRv)
{
nsIFrame* fromFrame = GetFirstNonAnonymousFrameForGeometryNode(aFrom);
nsWeakFrame weakFrame(fromFrame);
@ -309,7 +313,7 @@ TransformPoints(nsINode* aTo, const GeometryNode& aFrom,
aRv.Throw(NS_ERROR_DOM_NOT_FOUND_ERR);
return;
}
if (!CheckFramesInSameTopLevelBrowsingContext(fromFrame, toFrame)) {
if (!CheckFramesInSameTopLevelBrowsingContext(fromFrame, toFrame, aCallerType)) {
aRv.Throw(NS_ERROR_DOM_NOT_FOUND_ERR);
return;
}
@ -338,6 +342,7 @@ already_AddRefed<DOMQuad>
ConvertQuadFromNode(nsINode* aTo, dom::DOMQuad& aQuad,
const GeometryNode& aFrom,
const dom::ConvertCoordinateOptions& aOptions,
CallerType aCallerType,
ErrorResult& aRv)
{
CSSPoint points[4];
@ -349,7 +354,7 @@ ConvertQuadFromNode(nsINode* aTo, dom::DOMQuad& aQuad,
}
points[i] = CSSPoint(p->X(), p->Y());
}
TransformPoints(aTo, aFrom, 4, points, aOptions, aRv);
TransformPoints(aTo, aFrom, 4, points, aOptions, aCallerType, aRv);
if (aRv.Failed()) {
return nullptr;
}
@ -361,6 +366,7 @@ already_AddRefed<DOMQuad>
ConvertRectFromNode(nsINode* aTo, dom::DOMRectReadOnly& aRect,
const GeometryNode& aFrom,
const dom::ConvertCoordinateOptions& aOptions,
CallerType aCallerType,
ErrorResult& aRv)
{
CSSPoint points[4];
@ -369,7 +375,7 @@ ConvertRectFromNode(nsINode* aTo, dom::DOMRectReadOnly& aRect,
points[1] = CSSPoint(x + w, y);
points[2] = CSSPoint(x + w, y + h);
points[3] = CSSPoint(x, y + h);
TransformPoints(aTo, aFrom, 4, points, aOptions, aRv);
TransformPoints(aTo, aFrom, 4, points, aOptions, aCallerType, aRv);
if (aRv.Failed()) {
return nullptr;
}
@ -381,6 +387,7 @@ already_AddRefed<DOMPoint>
ConvertPointFromNode(nsINode* aTo, const dom::DOMPointInit& aPoint,
const GeometryNode& aFrom,
const dom::ConvertCoordinateOptions& aOptions,
CallerType aCallerType,
ErrorResult& aRv)
{
if (aPoint.mW != 1.0 || aPoint.mZ != 0.0) {
@ -388,7 +395,7 @@ ConvertPointFromNode(nsINode* aTo, const dom::DOMPointInit& aPoint,
return nullptr;
}
CSSPoint point(aPoint.mX, aPoint.mY);
TransformPoints(aTo, aFrom, 1, &point, aOptions, aRv);
TransformPoints(aTo, aFrom, 1, &point, aOptions, aCallerType, aRv);
if (aRv.Failed()) {
return nullptr;
}

View File

@ -28,6 +28,7 @@ class DOMPoint;
struct DOMPointInit;
class OwningTextOrElementOrDocument;
class TextOrElementOrDocument;
enum class CallerType : uint32_t;
} // namespace dom
typedef dom::TextOrElementOrDocument GeometryNode;
@ -40,24 +41,28 @@ typedef dom::OwningTextOrElementOrDocument OwningGeometryNode;
void GetBoxQuads(nsINode* aNode,
const dom::BoxQuadOptions& aOptions,
nsTArray<RefPtr<dom::DOMQuad> >& aResult,
dom::CallerType aCallerType,
ErrorResult& aRv);
already_AddRefed<dom::DOMQuad>
ConvertQuadFromNode(nsINode* aTo, dom::DOMQuad& aQuad,
const GeometryNode& aFrom,
const dom::ConvertCoordinateOptions& aOptions,
dom::CallerType aCallerType,
ErrorResult& aRv);
already_AddRefed<dom::DOMQuad>
ConvertRectFromNode(nsINode* aTo, dom::DOMRectReadOnly& aRect,
const GeometryNode& aFrom,
const dom::ConvertCoordinateOptions& aOptions,
dom::CallerType aCallerType,
ErrorResult& aRv);
already_AddRefed<dom::DOMPoint>
ConvertPointFromNode(nsINode* aTo, const dom::DOMPointInit& aPoint,
const GeometryNode& aFrom,
const dom::ConvertCoordinateOptions& aOptions,
dom::CallerType aCallerType,
ErrorResult& aRv);
} // namespace mozilla