Merge inbound to mozilla-central. a=merge

This commit is contained in:
Bogdan Tara 2018-09-30 00:55:39 +03:00
Родитель de039f476a 3b820772e5
Коммит 694baf8d92
44 изменённых файлов: 1298 добавлений и 765 удалений

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

@ -66,7 +66,7 @@ public:
MOZ_ASSERT(mVectorImage, "Need a non-null VectorImage");
StartObserving();
Element* elem = GetTarget();
Element* elem = GetReferencedElementWithoutObserving();
MOZ_ASSERT(elem, "no root SVG node for us to observe");
SVGObserverUtils::AddRenderingObserver(elem, this);
@ -85,14 +85,14 @@ protected:
StopObserving();
}
virtual Element* GetTarget() override
Element* GetReferencedElementWithoutObserving() override
{
return mDocWrapper->GetRootSVGElem();
}
virtual void OnRenderingChange() override
{
Element* elem = GetTarget();
Element* elem = GetReferencedElementWithoutObserving();
MOZ_ASSERT(elem, "missing root SVG node");
if (mHonoringInvalidations && !mDocWrapper->ShouldIgnoreInvalidation()) {

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

@ -1173,9 +1173,8 @@ nsFrame::DidSetComputedStyle(ComputedStyle* aOldComputedStyle)
// correctness because text nodes themselves shouldn't have effects applied.
if (!IsTextFrame() && !GetPrevContinuation()) {
// Kick off loading of external SVG resources referenced from properties if
// any. This currently includes filter, clip-path, and mask. We don't care
// about the return value. We only want its side effect.
Unused << SVGObserverUtils::GetEffectProperties(this);
// any. This currently includes filter, clip-path, and mask.
SVGObserverUtils::InitiateResourceDocLoads(this);
}
// If the page contains markup that overrides text direction, and

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

@ -9718,7 +9718,8 @@ nsDisplayMasksAndClipPaths::IsValidMask() {
SVGObserverUtils::EffectProperties effectProperties =
SVGObserverUtils::GetEffectProperties(firstFrame);
if (effectProperties.HasInvalidClipPath() ||
if (SVGObserverUtils::GetAndObserveClipPath(firstFrame, nullptr) ==
SVGObserverUtils::eHasRefsSomeInvalid ||
effectProperties.HasInvalidMask()) {
return false;
}
@ -10036,13 +10037,15 @@ nsDisplayMasksAndClipPaths::PrintEffects(nsACString& aTo)
nsLayoutUtils::FirstContinuationOrIBSplitSibling(mFrame);
SVGObserverUtils::EffectProperties effectProperties =
SVGObserverUtils::GetEffectProperties(firstFrame);
nsSVGClipPathFrame* clipPathFrame = effectProperties.GetClipPathFrame();
bool first = true;
aTo += " effects=(";
if (mFrame->StyleEffects()->mOpacity != 1.0f && mHandleOpacity) {
first = false;
aTo += nsPrintfCString("opacity(%f)", mFrame->StyleEffects()->mOpacity);
}
nsSVGClipPathFrame* clipPathFrame;
// XXX Check return value?
SVGObserverUtils::GetAndObserveClipPath(firstFrame, &clipPathFrame);
if (clipPathFrame) {
if (!first) {
aTo += ", ";
@ -10050,9 +10053,7 @@ nsDisplayMasksAndClipPaths::PrintEffects(nsACString& aTo)
aTo += nsPrintfCString(
"clip(%s)", clipPathFrame->IsTrivial() ? "trivial" : "non-trivial");
first = false;
}
const nsStyleSVGReset* style = mFrame->StyleSVGReset();
if (style->HasClipPath() && !clipPathFrame) {
} else if (mFrame->StyleSVGReset()->HasClipPath()) {
if (!first) {
aTo += ", ";
}

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

@ -194,10 +194,10 @@ nsImageRenderer::PrepareImage()
// If the referenced element is an <img>, <canvas>, or <video> element,
// prefer SurfaceFromElement as it's more reliable.
mImageElementSurface =
nsLayoutUtils::SurfaceFromElement(property->GetReferencedElement());
mImageElementSurface = nsLayoutUtils::SurfaceFromElement(
property->GetAndObserveReferencedElement());
if (!mImageElementSurface.GetSourceSurface()) {
nsIFrame* paintServerFrame = property->GetReferencedFrame();
nsIFrame* paintServerFrame = property->GetAndObserveReferencedFrame();
// If there's no referenced frame, or the referenced frame is
// non-displayable SVG, then we have nothing valid to paint.
if (!paintServerFrame ||

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

@ -31,7 +31,7 @@ namespace mozilla {
void
SVGRenderingObserver::StartObserving()
{
Element* target = GetTarget();
Element* target = GetReferencedElementWithoutObserving();
if (target) {
target->AddMutationObserver(this);
}
@ -40,7 +40,7 @@ SVGRenderingObserver::StartObserving()
void
SVGRenderingObserver::StopObserving()
{
Element* target = GetTarget();
Element* target = GetReferencedElementWithoutObserving();
if (target) {
target->RemoveMutationObserver(this);
@ -60,9 +60,9 @@ GetObserverList(Element *aElement)
}
Element*
SVGRenderingObserver::GetReferencedElement()
SVGRenderingObserver::GetAndObserveReferencedElement()
{
Element* target = GetTarget();
Element* target = GetReferencedElementWithoutObserving();
#ifdef DEBUG
if (target) {
SVGRenderingObserverList* observerList = GetObserverList(target);
@ -80,17 +80,17 @@ SVGRenderingObserver::GetReferencedElement()
}
nsIFrame*
SVGRenderingObserver::GetReferencedFrame()
SVGRenderingObserver::GetAndObserveReferencedFrame()
{
Element* referencedElement = GetReferencedElement();
Element* referencedElement = GetAndObserveReferencedElement();
return referencedElement ? referencedElement->GetPrimaryFrame() : nullptr;
}
nsIFrame*
SVGRenderingObserver::GetReferencedFrame(LayoutFrameType aFrameType,
bool* aOK)
SVGRenderingObserver::GetAndObserveReferencedFrame(LayoutFrameType aFrameType,
bool* aOK)
{
nsIFrame* frame = GetReferencedFrame();
nsIFrame* frame = GetAndObserveReferencedFrame();
if (frame) {
if (frame->Type() == aFrameType)
return frame;
@ -165,7 +165,7 @@ SVGRenderingObserver::ContentRemoved(nsIContent* aChild,
* SVGIDRenderingObserver is notified if there are any attribute or content
* tree changes to the element or any of its *descendants*.
*
* In SVGIDRenderingObserver::GetReferencedElement() the
* In SVGIDRenderingObserver::GetAndObserveReferencedElement() the
* SVGIDRenderingObserver object also adds itself to an
* SVGRenderingObserverList object belonging to the referenced
* element.
@ -286,11 +286,11 @@ NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(SVGFilterObserver)
NS_IMPL_CYCLE_COLLECTION_UNLINK(mObservedElementTracker);
NS_IMPL_CYCLE_COLLECTION_UNLINK_END
nsSVGFilterFrame *
SVGFilterObserver::GetFilterFrame()
nsSVGFilterFrame*
SVGFilterObserver::GetAndObserveFilterFrame()
{
return static_cast<nsSVGFilterFrame*>(
GetReferencedFrame(LayoutFrameType::SVGFilter, nullptr));
GetAndObserveReferencedFrame(LayoutFrameType::SVGFilter, nullptr));
}
void
@ -500,7 +500,7 @@ SVGMaskObserverList::ResolveImage(uint32_t aIndex)
bool
SVGTextPathObserver::TargetIsValid()
{
Element* target = GetTarget();
Element* target = GetReferencedElementWithoutObserving();
return target && target->IsSVGElement(nsGkAtoms::path);
}
@ -580,6 +580,43 @@ GetOrCreateMaskProperty(nsIFrame* aFrame)
return prop;
}
static already_AddRefed<URLAndReferrerInfo>
ResolveURLUsingLocalRef(nsIFrame* aFrame, const css::URLValueData* aURL)
{
MOZ_ASSERT(aFrame);
if (!aURL) {
return nullptr;
}
nsCOMPtr<nsIURI> uri = aURL->GetURI();
RefPtr<URLAndReferrerInfo> result;
// Non-local-reference URL.
if (!aURL->IsLocalRef()) {
if (!uri) {
return nullptr;
}
result = new URLAndReferrerInfo(uri,
aURL->mExtraData->GetReferrer(),
aURL->mExtraData->GetReferrerPolicy());
return result.forget();
}
nsCOMPtr<nsIURI> baseURI =
SVGObserverUtils::GetBaseURLForLocalRef(aFrame->GetContent(), uri);
nsCOMPtr<nsIURI> resolvedURI = aURL->ResolveLocalRef(baseURI);
if (!resolvedURI) {
return nullptr;
}
result = new URLAndReferrerInfo(resolvedURI,
aURL->mExtraData->GetReferrer(),
aURL->mExtraData->GetReferrerPolicy());
return result.forget();
}
template<class T>
static T*
GetEffectProperty(URLAndReferrerInfo* aURI, nsIFrame* aFrame,
@ -616,7 +653,8 @@ SVGObserverUtils::GetMarkerFrames(nsIFrame* aMarkedFrame,
observer = GetEffectProperty(markerURL, aMarkedFrame, \
SVGObserverUtils::Marker##type##Property()); \
marker = observer ? \
observer->GetReferencedFrame(LayoutFrameType::SVGMarker, nullptr) :\
observer->GetAndObserveReferencedFrame(LayoutFrameType::SVGMarker, \
nullptr) : \
nullptr; \
foundMarker = foundMarker || bool(marker); \
(*aFrames)[nsSVGMark::e##type] = static_cast<nsSVGMarkerFrame*>(marker);
@ -651,8 +689,8 @@ GetOrCreateFilterObserverListForCSS(nsIFrame* aFrame)
}
static SVGObserverUtils::ReferenceState
GetFilters(SVGFilterObserverListForCSSProp* aObserverList,
nsTArray<nsSVGFilterFrame*>* aFilterFrames)
GetAndObserveFilters(SVGFilterObserverListForCSSProp* aObserverList,
nsTArray<nsSVGFilterFrame*>* aFilterFrames)
{
if (!aObserverList) {
return SVGObserverUtils::eHasNoRefs;
@ -665,7 +703,7 @@ GetFilters(SVGFilterObserverListForCSSProp* aObserverList,
}
for (uint32_t i = 0; i < observers.Length(); i++) {
nsSVGFilterFrame* filter = observers[i]->GetFilterFrame();
nsSVGFilterFrame* filter = observers[i]->GetAndObserveFilterFrame();
if (!filter) {
if (aFilterFrames) {
aFilterFrames->Clear();
@ -686,7 +724,7 @@ SVGObserverUtils::GetAndObserveFilters(nsIFrame* aFilteredFrame,
{
SVGFilterObserverListForCSSProp* observerList =
GetOrCreateFilterObserverListForCSS(aFilteredFrame);
return GetFilters(observerList, aFilterFrames);
return ::GetAndObserveFilters(observerList, aFilterFrames);
}
SVGObserverUtils::ReferenceState
@ -695,7 +733,7 @@ SVGObserverUtils::GetFiltersIfObserving(nsIFrame* aFilteredFrame,
{
SVGFilterObserverListForCSSProp* observerList =
aFilteredFrame->GetProperty(SVGObserverUtils::FilterProperty());
return GetFilters(observerList, aFilterFrames);
return ::GetAndObserveFilters(observerList, aFilterFrames);
}
already_AddRefed<nsISupports>
@ -715,6 +753,46 @@ SVGObserverUtils::DetachFromCanvasContext(nsISupports* aAutoObserver)
DetachFromContext();
}
static nsSVGPaintingProperty*
GetOrCreateClipPathObserver(nsIFrame* aClippedFrame)
{
const nsStyleSVGReset* svgStyleReset = aClippedFrame->StyleSVGReset();
if (svgStyleReset->mClipPath.GetType() != StyleShapeSourceType::URL) {
return nullptr;
}
css::URLValue* url = svgStyleReset->mClipPath.GetURL();
RefPtr<URLAndReferrerInfo> pathURI = ResolveURLUsingLocalRef(aClippedFrame, url);
return SVGObserverUtils::GetPaintingProperty(pathURI, aClippedFrame,
SVGObserverUtils::ClipPathProperty());
}
SVGObserverUtils::ReferenceState
SVGObserverUtils::GetAndObserveClipPath(nsIFrame* aClippedFrame,
nsSVGClipPathFrame** aClipPathFrame)
{
if (aClipPathFrame) {
*aClipPathFrame = nullptr;
}
nsSVGPaintingProperty* observers = GetOrCreateClipPathObserver(aClippedFrame);
if (!observers) {
return eHasNoRefs;
}
bool frameTypeOK = true;
nsSVGClipPathFrame* frame = static_cast<nsSVGClipPathFrame*>(
observers->GetAndObserveReferencedFrame(LayoutFrameType::SVGClipPath,
&frameTypeOK));
// Note that, unlike for filters, a reference to an ID that doesn't exist
// is not invalid for clip-path or mask.
if (!frameTypeOK || (frame && !frame->IsValid())) {
return eHasRefsSomeInvalid;
}
if (aClipPathFrame) {
*aClipPathFrame = frame;
}
return frame ? eHasRefsAllValid : eHasNoRefs;
}
SVGGeometryElement*
SVGObserverUtils::GetTextPathsReferencedPath(nsIFrame* aTextPathFrame)
{
@ -748,11 +826,21 @@ SVGObserverUtils::GetTextPathsReferencedPath(nsIFrame* aTextPathFrame)
}
}
Element* element = property->GetReferencedElement();
Element* element = property->GetAndObserveReferencedElement();
return (element && element->IsNodeOfType(nsINode::eSHAPE)) ?
static_cast<SVGGeometryElement*>(element) : nullptr;
}
void
SVGObserverUtils::InitiateResourceDocLoads(nsIFrame* aFrame)
{
// We create observer objects and attach them to aFrame, but we do not
// make aFrame start observing the referenced frames.
Unused << GetOrCreateFilterObserverListForCSS(aFrame);
Unused << GetOrCreateClipPathObserver(aFrame);
Unused << GetEffectProperties(aFrame);
}
void
SVGObserverUtils::RemoveTextPathObserver(nsIFrame* aTextPathFrame)
{
@ -791,7 +879,7 @@ SVGObserverUtils::GetTemplateFrame(nsIFrame* aFrame,
SVGObserverUtils::HrefToTemplateProperty());
}
return observer ? observer->GetReferencedFrame() : nullptr;
return observer ? observer->GetAndObserveReferencedFrame() : nullptr;
}
void
@ -839,14 +927,6 @@ SVGObserverUtils::GetEffectProperties(nsIFrame* aFrame)
EffectProperties result;
const nsStyleSVGReset *style = aFrame->StyleSVGReset();
if (style->mClipPath.GetType() == StyleShapeSourceType::URL) {
RefPtr<URLAndReferrerInfo> pathURI = SVGObserverUtils::GetClipPathURI(aFrame);
result.mClipPath =
GetPaintingProperty(pathURI, aFrame, ClipPathProperty());
} else {
result.mClipPath = nullptr;
}
MOZ_ASSERT(style->mMask.mImageCount > 0);
result.mMaskObservers = style->HasMask()
? GetOrCreateMaskProperty(aFrame) : nullptr;
@ -885,7 +965,7 @@ SVGObserverUtils::GetPaintServer(nsIFrame* aTargetFrame,
SVGObserverUtils::GetPaintingProperty(paintServerURL, frame, propDesc);
if (!property)
return nullptr;
nsIFrame* result = property->GetReferencedFrame();
nsIFrame* result = property->GetAndObserveReferencedFrame();
if (!result)
return nullptr;
@ -898,18 +978,6 @@ SVGObserverUtils::GetPaintServer(nsIFrame* aTargetFrame,
return static_cast<nsSVGPaintServerFrame*>(result);
}
nsSVGClipPathFrame *
SVGObserverUtils::EffectProperties::GetClipPathFrame()
{
if (!mClipPath)
return nullptr;
nsSVGClipPathFrame* frame = static_cast<nsSVGClipPathFrame*>(
mClipPath->GetReferencedFrame(LayoutFrameType::SVGClipPath, nullptr));
return frame;
}
nsTArray<nsSVGMaskFrame *>
SVGObserverUtils::EffectProperties::GetMaskFrames()
{
@ -923,7 +991,7 @@ SVGObserverUtils::EffectProperties::GetMaskFrames()
mMaskObservers->GetObservers();
for (size_t i = 0; i < observers.Length(); i++) {
nsSVGMaskFrame* maskFrame = static_cast<nsSVGMaskFrame*>(
observers[i]->GetReferencedFrame(LayoutFrameType::SVGMask, &ok));
observers[i]->GetAndObserveReferencedFrame(LayoutFrameType::SVGMask, &ok));
MOZ_ASSERT(!maskFrame || ok);
if (!ok) {
// We can not find the specific SVG mask resource in the downloaded SVG
@ -943,22 +1011,7 @@ SVGObserverUtils::EffectProperties::GetMaskFrames()
bool
SVGObserverUtils::EffectProperties::HasNoOrValidEffects()
{
return HasNoOrValidClipPath() && HasNoOrValidMask();
}
bool
SVGObserverUtils::EffectProperties::HasNoOrValidClipPath()
{
if (mClipPath) {
bool ok = true;
nsSVGClipPathFrame* frame = static_cast<nsSVGClipPathFrame*>(
mClipPath->GetReferencedFrame(LayoutFrameType::SVGClipPath, &ok));
if (!ok || (frame && !frame->IsValid())) {
return false;
}
}
return true;
return HasNoOrValidMask();
}
bool
@ -969,7 +1022,7 @@ SVGObserverUtils::EffectProperties::HasNoOrValidMask()
const nsTArray<RefPtr<nsSVGPaintingProperty>>& observers =
mMaskObservers->GetObservers();
for (size_t i = 0; i < observers.Length(); i++) {
observers[i]->GetReferencedFrame(LayoutFrameType::SVGMask, &ok);
observers[i]->GetAndObserveReferencedFrame(LayoutFrameType::SVGMask, &ok);
if (!ok) {
return false;
}
@ -1230,43 +1283,6 @@ SVGObserverUtils::GetBaseURLForLocalRef(nsIContent* content, nsIURI* aDocURI)
return baseURI.forget();
}
static already_AddRefed<URLAndReferrerInfo>
ResolveURLUsingLocalRef(nsIFrame* aFrame, const css::URLValueData* aURL)
{
MOZ_ASSERT(aFrame);
if (!aURL) {
return nullptr;
}
nsCOMPtr<nsIURI> uri = aURL->GetURI();
RefPtr<URLAndReferrerInfo> result;
// Non-local-reference URL.
if (!aURL->IsLocalRef()) {
if (!uri) {
return nullptr;
}
result = new URLAndReferrerInfo(uri,
aURL->mExtraData->GetReferrer(),
aURL->mExtraData->GetReferrerPolicy());
return result.forget();
}
nsCOMPtr<nsIURI> baseURI =
SVGObserverUtils::GetBaseURLForLocalRef(aFrame->GetContent(), uri);
nsCOMPtr<nsIURI> resolvedURI = aURL->ResolveLocalRef(baseURI);
if (!resolvedURI) {
return nullptr;
}
result = new URLAndReferrerInfo(resolvedURI,
aURL->mExtraData->GetReferrer(),
aURL->mExtraData->GetReferrerPolicy());
return result.forget();
}
already_AddRefed<URLAndReferrerInfo>
SVGObserverUtils::GetMarkerURI(nsIFrame* aFrame,
RefPtr<css::URLValue> nsStyleSVG::* aMarker)
@ -1274,16 +1290,6 @@ SVGObserverUtils::GetMarkerURI(nsIFrame* aFrame,
return ResolveURLUsingLocalRef(aFrame, aFrame->StyleSVG()->*aMarker);
}
already_AddRefed<URLAndReferrerInfo>
SVGObserverUtils::GetClipPathURI(nsIFrame* aFrame)
{
const nsStyleSVGReset* svgResetStyle = aFrame->StyleSVGReset();
MOZ_ASSERT(svgResetStyle->mClipPath.GetType() == StyleShapeSourceType::URL);
css::URLValue* url = svgResetStyle->mClipPath.GetURL();
return ResolveURLUsingLocalRef(aFrame, url);
}
already_AddRefed<URLAndReferrerInfo>
SVGObserverUtils::GetFilterURI(nsIFrame* aFrame, uint32_t aIndex)
{

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

@ -75,16 +75,25 @@ private:
mozilla::net::ReferrerPolicy mReferrerPolicy;
};
/*
/**
* This interface allows us to be notified when a piece of SVG content is
* re-rendered.
*
* Concrete implementations of this interface need to implement
* "GetTarget()" to specify the piece of SVG content that they'd like to
* monitor, and they need to implement "OnRenderingChange" to specify how
* we'll react when that content gets re-rendered. They also need to implement
* a constructor and destructor, which should call StartObserving and
* StopObserving, respectively.
* Concrete implementations of this base class need to implement
* GetReferencedElementWithoutObserving to specify the SVG element that
* they'd like to monitor for rendering changes, and they need to implement
* OnRenderingChange to specify how we'll react when that content gets
* re-rendered. They also need to implement a constructor and destructor,
* which should call StartObserving and StopObserving, respectively.
*
* The referenced element is generally looked up and stored during
* construction. If the referenced element is in an extenal SVG resource
* document, the lookup code will initiate loading of the external resource and
* OnRenderingChange will be called once the element in the external resource
* is available.
*
* Although the referenced element may be found and stored during construction,
* observing for rendering changes does not start until requested.
*/
class SVGRenderingObserver : public nsStubMutationObserver
{
@ -120,14 +129,15 @@ public:
// react.
void NotifyEvictedFromRenderingObserverList();
nsIFrame* GetReferencedFrame();
nsIFrame* GetAndObserveReferencedFrame();
/**
* @param aOK this is only for the convenience of callers. We set *aOK to false
* if the frame is the wrong type
*/
nsIFrame* GetReferencedFrame(mozilla::LayoutFrameType aFrameType, bool* aOK);
nsIFrame* GetAndObserveReferencedFrame(mozilla::LayoutFrameType aFrameType,
bool* aOK);
Element* GetReferencedElement();
Element* GetAndObserveReferencedElement();
virtual bool ObservesReflow() { return true; }
@ -149,9 +159,7 @@ protected:
*/
virtual void OnRenderingChange() = 0;
// This is an internally-used version of GetReferencedElement that doesn't
// forcibly add us as an observer. (whereas GetReferencedElement does)
virtual Element* GetTarget() = 0;
virtual Element* GetReferencedElementWithoutObserving() = 0;
// Whether we're in our referenced element's observer list at this time.
bool mInObserverList;
@ -160,7 +168,7 @@ protected:
/*
* SVG elements reference supporting resources by element ID. We need to
* track when those resources change and when the DOM changes in ways
* track when those resources change and when the document changes in ways
* that affect which element is referenced by a given ID (e.g., when
* element IDs change). The code here is responsible for that.
*
@ -179,7 +187,9 @@ public:
virtual ~SVGIDRenderingObserver();
protected:
Element* GetTarget() override { return mObservedElementTracker.get(); }
Element* GetReferencedElementWithoutObserving() override {
return mObservedElementTracker.get();
}
void OnRenderingChange() override;
@ -314,14 +324,16 @@ public:
{
}
bool ReferencesValidResource() { return GetFilterFrame(); }
// XXXjwatt: This will return false if the reference is to a filter in an
// external resource document that hasn't loaded yet!
bool ReferencesValidResource() { return GetAndObserveFilterFrame(); }
void DetachFromChainObserver() { mFilterObserverList = nullptr; }
/**
* @return the filter frame, or null if there is no filter frame
*/
nsSVGFilterFrame *GetFilterFrame();
nsSVGFilterFrame* GetAndObserveFilterFrame();
// nsISupports
NS_DECL_CYCLE_COLLECTING_ISUPPORTS
@ -571,12 +583,6 @@ public:
struct EffectProperties {
SVGMaskObserverList* mMaskObservers;
nsSVGPaintingProperty* mClipPath;
/**
* @return the clip-path frame, or null if there is no clip-path frame
*/
nsSVGClipPathFrame* GetClipPathFrame();
/**
* @return an array which contains all SVG mask frames.
@ -596,19 +602,6 @@ public:
return !HasNoOrValidEffects();
}
/*
* @return true if we either do not have clip-path or have a valid
* clip-path.
*/
bool HasNoOrValidClipPath();
/*
* @return true if we have an invalid clip-path.
*/
bool HasInvalidClipPath() {
return !HasNoOrValidClipPath();
}
/*
* @return true if we either do not have mask or all masks we have
* are valid.
@ -628,6 +621,14 @@ public:
*/
static EffectProperties GetEffectProperties(nsIFrame* aFrame);
/**
* Ensures that that if the given frame requires any resources that are in
* SVG resource documents that the loading of those documents is initiated.
* This does not make aFrame start to observe any elements that it
* references.
*/
static void InitiateResourceDocLoads(nsIFrame* aFrame);
/**
* Called when changes to an element (e.g. CSS property changes) cause its
* frame to start/stop referencing (or reference different) SVG resource
@ -773,6 +774,27 @@ public:
static void
DetachFromCanvasContext(nsISupports* aAutoObserver);
/**
* Get the frame of the SVG clipPath applied to aClippedFrame, if any, and
* set up aClippedFrame as a rendering observer of the clipPath's frame, to
* be invalidated if it changes.
*
* Currently we only have support for 'clip-path' with a single item, but the
* spec. now says 'clip-path' can be set to an arbitrary number of items.
* Once we support that, aClipPathFrame will need to be an nsTArray as it
* is for 'filter' and 'mask'. Currently a return value of eHasNoRefs means
* that there is no clipping at all, but once we support more than one item
* then - as for filter and mask - we could still have basic shape clipping
* to apply even if there are no references to SVG clipPath elements.
*
* Note that, unlike for filters, a reference to an ID that doesn't exist
* is not invalid for clip-path or mask. We will return eHasNoRefs in that
* case.
*/
static ReferenceState
GetAndObserveClipPath(nsIFrame* aClippedFrame,
nsSVGClipPathFrame** aClipPathFrame);
/**
* Get the SVGGeometryElement that is referenced by aTextPathFrame, and make
* aTextPathFrame start observing rendering changes to that element.
@ -829,12 +851,6 @@ public:
GetMarkerURI(nsIFrame* aFrame,
RefPtr<mozilla::css::URLValue> nsStyleSVG::* aMarker);
/**
* A helper function to resolve clip-path URL.
*/
static already_AddRefed<URLAndReferrerInfo>
GetClipPathURI(nsIFrame* aFrame);
/**
* A helper function to resolve filter URL.
*/

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

@ -146,8 +146,9 @@ nsSVGClipPathFrame::PaintClipMask(gfxContext& aMaskContext,
mMatrixForChildren = GetClipPathTransform(aClippedFrame) * aMatrix;
// Check if this clipPath is itself clipped by another clipPath:
nsSVGClipPathFrame* clipPathThatClipsClipPath =
SVGObserverUtils::GetEffectProperties(this).GetClipPathFrame();
nsSVGClipPathFrame* clipPathThatClipsClipPath;
// XXX check return value?
SVGObserverUtils::GetAndObserveClipPath(this, &clipPathThatClipsClipPath);
nsSVGUtils::MaskUsage maskUsage;
nsSVGUtils::DetermineMaskUsage(this, true, maskUsage);
@ -203,13 +204,12 @@ nsSVGClipPathFrame::PaintFrameIntoMask(nsIFrame *aFrame,
frame->NotifySVGChanged(nsSVGDisplayableFrame::TRANSFORM_CHANGED);
// Children of this clipPath may themselves be clipped.
SVGObserverUtils::EffectProperties effectProperties =
SVGObserverUtils::GetEffectProperties(aFrame);
if (effectProperties.HasInvalidClipPath()) {
nsSVGClipPathFrame* clipPathThatClipsChild;
// XXX check return value?
if (SVGObserverUtils::GetAndObserveClipPath(aFrame, &clipPathThatClipsChild) ==
SVGObserverUtils::eHasRefsSomeInvalid) {
return;
}
nsSVGClipPathFrame *clipPathThatClipsChild =
effectProperties.GetClipPathFrame();
nsSVGUtils::MaskUsage maskUsage;
nsSVGUtils::DetermineMaskUsage(aFrame, true, maskUsage);
@ -306,8 +306,9 @@ nsSVGClipPathFrame::PointIsInsideClipPath(nsIFrame* aClippedFrame,
// clipped by the original clipPath. If this clipPath is being clipped by a
// different clip path we need to check if it prevents the original element
// from receiving events at aPoint:
nsSVGClipPathFrame *clipPathFrame =
SVGObserverUtils::GetEffectProperties(this).GetClipPathFrame();
nsSVGClipPathFrame* clipPathFrame;
// XXX check return value?
SVGObserverUtils::GetAndObserveClipPath(this, &clipPathFrame);
if (clipPathFrame &&
!clipPathFrame->PointIsInsideClipPath(aClippedFrame, aPoint)) {
return false;
@ -339,8 +340,10 @@ bool
nsSVGClipPathFrame::IsTrivial(nsSVGDisplayableFrame **aSingleChild)
{
// If the clip path is clipped then it's non-trivial
if (SVGObserverUtils::GetEffectProperties(this).GetClipPathFrame())
if (SVGObserverUtils::GetAndObserveClipPath(this, nullptr) ==
SVGObserverUtils::eHasRefsAllValid) {
return false;
}
if (aSingleChild) {
*aSingleChild = nullptr;
@ -358,8 +361,10 @@ nsSVGClipPathFrame::IsTrivial(nsSVGDisplayableFrame **aSingleChild)
return false;
// or where the child is itself clipped
if (SVGObserverUtils::GetEffectProperties(kid).GetClipPathFrame())
if (SVGObserverUtils::GetAndObserveClipPath(kid, nullptr) ==
SVGObserverUtils::eHasRefsAllValid) {
return false;
}
foundChild = svgChild;
}
@ -384,7 +389,8 @@ nsSVGClipPathFrame::IsValid()
return false; // Break reference chain
}
if (SVGObserverUtils::GetEffectProperties(this).HasInvalidClipPath()) {
if (SVGObserverUtils::GetAndObserveClipPath(this, nullptr) ==
SVGObserverUtils::eHasRefsSomeInvalid) {
return false;
}
@ -478,6 +484,12 @@ nsSVGClipPathFrame::GetBBoxForClipPathFrame(const SVGBBox &aBBox,
const gfxMatrix &aMatrix,
uint32_t aFlags)
{
nsSVGClipPathFrame* clipPathThatClipsClipPath;
if (SVGObserverUtils::GetAndObserveClipPath(this, &clipPathThatClipsClipPath) ==
SVGObserverUtils::eHasRefsSomeInvalid) {
return SVGBBox();
}
nsIContent* node = GetContent()->GetFirstChild();
SVGBBox unionBBox, tmpBBox;
for (; node; node = node->GetNextSibling()) {
@ -489,14 +501,11 @@ nsSVGClipPathFrame::GetBBoxForClipPathFrame(const SVGBBox &aBBox,
gfxMatrix matrix = svgNode->PrependLocalTransformsTo(aMatrix, eUserSpaceToParent);
tmpBBox = svg->GetBBoxContribution(mozilla::gfx::ToMatrix(matrix),
nsSVGUtils::eBBoxIncludeFill);
SVGObserverUtils::EffectProperties effectProperties =
SVGObserverUtils::GetEffectProperties(frame);
if (effectProperties.HasNoOrValidClipPath()) {
nsSVGClipPathFrame *clipPathFrame =
effectProperties.GetClipPathFrame();
if (clipPathFrame) {
tmpBBox = clipPathFrame->GetBBoxForClipPathFrame(tmpBBox, aMatrix, aFlags);
}
nsSVGClipPathFrame* clipPathFrame;
if (SVGObserverUtils::GetAndObserveClipPath(frame, &clipPathFrame) !=
SVGObserverUtils::eHasRefsSomeInvalid &&
clipPathFrame) {
tmpBBox = clipPathFrame->GetBBoxForClipPathFrame(tmpBBox, aMatrix, aFlags);
}
if (!(aFlags & nsSVGUtils::eDoNotClipToBBoxOfContentInsideClipPath)) {
tmpBBox.Intersect(aBBox);
@ -506,18 +515,10 @@ nsSVGClipPathFrame::GetBBoxForClipPathFrame(const SVGBBox &aBBox,
}
}
SVGObserverUtils::EffectProperties props =
SVGObserverUtils::GetEffectProperties(this);
if (props.mClipPath) {
if (props.HasInvalidClipPath()) {
unionBBox = SVGBBox();
} else {
nsSVGClipPathFrame *clipPathFrame = props.GetClipPathFrame();
if (clipPathFrame) {
tmpBBox = clipPathFrame->GetBBoxForClipPathFrame(aBBox, aMatrix, aFlags);
unionBBox.Intersect(tmpBBox);
}
}
if (clipPathThatClipsClipPath) {
tmpBBox =
clipPathThatClipsClipPath->GetBBoxForClipPathFrame(aBBox, aMatrix, aFlags);
unionBBox.Intersect(tmpBBox);
}
return unionBBox;
}

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

@ -875,7 +875,9 @@ nsSVGIntegrationUtils::PaintMask(const PaintFramesParams& aParams)
Matrix clipMaskTransform;
gfxMatrix cssPxToDevPxMatrix = nsSVGUtils::GetCSSPxToDevPxMatrix(frame);
nsSVGClipPathFrame *clipPathFrame = effectProperties.GetClipPathFrame();
nsSVGClipPathFrame* clipPathFrame;
// XXX check return value?
SVGObserverUtils::GetAndObserveClipPath(firstFrame, &clipPathFrame);
RefPtr<SourceSurface> maskSurface =
maskUsage.shouldGenerateMaskLayer ? maskTarget->Snapshot() : nullptr;
clipPathFrame->PaintClipMask(ctx, frame, cssPxToDevPxMatrix,
@ -929,7 +931,9 @@ void PaintMaskAndClipPathInternal(const PaintFramesParams& aParams, const T& aPa
SVGObserverUtils::EffectProperties effectProperties =
SVGObserverUtils::GetEffectProperties(firstFrame);
nsSVGClipPathFrame *clipPathFrame = effectProperties.GetClipPathFrame();
nsSVGClipPathFrame* clipPathFrame;
// XXX check return value?
SVGObserverUtils::GetAndObserveClipPath(firstFrame, &clipPathFrame);
gfxMatrix cssPxToDevPxMatrix = nsSVGUtils::GetCSSPxToDevPxMatrix(frame);
nsTArray<nsSVGMaskFrame*> maskFrames = effectProperties.GetMaskFrames();

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

@ -495,7 +495,9 @@ nsSVGUtils::DetermineMaskUsage(nsIFrame* aFrame, bool aHandleOpacity,
aUsage.shouldGenerateMaskLayer = (maskFrames.Length() > 0);
nsSVGClipPathFrame *clipPathFrame = effectProperties.GetClipPathFrame();
nsSVGClipPathFrame* clipPathFrame;
// XXX check return value?
SVGObserverUtils::GetAndObserveClipPath(firstFrame, &clipPathFrame);
MOZ_ASSERT(!clipPathFrame ||
svgReset->mClipPath.GetType() == StyleShapeSourceType::URL);
@ -711,6 +713,7 @@ nsSVGUtils::PaintFrameWithEffects(nsIFrame *aFrame,
/* Properties are added lazily and may have been removed by a restyle,
so make sure all applicable ones are set again. */
nsSVGClipPathFrame* clipPathFrame;
SVGObserverUtils::EffectProperties effectProperties =
SVGObserverUtils::GetEffectProperties(aFrame);
// TODO: We currently pass nullptr instead of an nsTArray* here, but we
@ -718,12 +721,13 @@ nsSVGUtils::PaintFrameWithEffects(nsIFrame *aFrame,
// PaintFilteredFrame below! See bug 1494263.
if (effectProperties.HasInvalidEffects() ||
SVGObserverUtils::GetAndObserveFilters(aFrame, nullptr) ==
SVGObserverUtils::eHasRefsSomeInvalid ||
SVGObserverUtils::GetAndObserveClipPath(aFrame, &clipPathFrame) ==
SVGObserverUtils::eHasRefsSomeInvalid) {
// Some resource is invalid. We shouldn't paint anything.
return;
}
nsSVGClipPathFrame *clipPathFrame = effectProperties.GetClipPathFrame();
nsTArray<nsSVGMaskFrame*> masks = effectProperties.GetMaskFrames();
nsSVGMaskFrame *maskFrame = masks.IsEmpty() ? nullptr : masks[0];
@ -872,29 +876,18 @@ nsSVGUtils::PaintFrameWithEffects(nsIFrame *aFrame,
bool
nsSVGUtils::HitTestClip(nsIFrame *aFrame, const gfxPoint &aPoint)
{
SVGObserverUtils::EffectProperties props =
SVGObserverUtils::GetEffectProperties(aFrame);
if (!props.mClipPath) {
const nsStyleSVGReset *style = aFrame->StyleSVGReset();
if (style->HasClipPath()) {
return nsCSSClipPathInstance::HitTestBasicShapeOrPathClip(aFrame, aPoint);
}
return true;
nsSVGClipPathFrame* clipPathFrame;
if (SVGObserverUtils::GetAndObserveClipPath(aFrame, &clipPathFrame) ==
SVGObserverUtils::eHasRefsSomeInvalid) {
return false; // everything clipped away if clip path is invalid
}
if (props.HasInvalidClipPath()) {
// clipPath is not a valid resource, so nothing gets painted, so
// hit-testing must fail.
return false;
if (clipPathFrame) {
return clipPathFrame->PointIsInsideClipPath(aFrame, aPoint);
}
nsSVGClipPathFrame *clipPathFrame = props.GetClipPathFrame();
if (!clipPathFrame) {
// clipPath doesn't exist, ignore it.
return true;
if (aFrame->StyleSVGReset()->HasClipPath()) {
return nsCSSClipPathInstance::HitTestBasicShapeOrPathClip(aFrame, aPoint);
}
return clipPathFrame->PointIsInsideClipPath(aFrame, aPoint);
return true;
}
nsIFrame *
@ -1162,13 +1155,11 @@ nsSVGUtils::GetBBox(nsIFrame* aFrame, uint32_t aFlags,
clipRect = matrix.TransformBounds(clipRect);
}
}
SVGObserverUtils::EffectProperties effectProperties =
SVGObserverUtils::GetEffectProperties(aFrame);
if (effectProperties.HasInvalidClipPath()) {
nsSVGClipPathFrame* clipPathFrame;
if (SVGObserverUtils::GetAndObserveClipPath(aFrame, &clipPathFrame) ==
SVGObserverUtils::eHasRefsSomeInvalid) {
bbox = gfxRect(0, 0, 0, 0);
} else {
nsSVGClipPathFrame *clipPathFrame =
effectProperties.GetClipPathFrame();
if (clipPathFrame) {
SVGClipPathElement *clipContent =
static_cast<SVGClipPathElement*>(clipPathFrame->GetContent());

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

@ -99,19 +99,17 @@ impl MarionetteHandler {
) -> WebDriverResult<Map<String, Value>> {
let (options, capabilities) = {
let mut fx_capabilities = FirefoxCapabilities::new(self.settings.binary.as_ref());
let mut capabilities = try!(
try!(new_session_parameters.match_browser(&mut fx_capabilities)).ok_or(
WebDriverError::new(
ErrorStatus::SessionNotCreated,
"Unable to find a matching set of capabilities",
),
)
);
let mut capabilities = new_session_parameters
.match_browser(&mut fx_capabilities)?
.ok_or(WebDriverError::new(
ErrorStatus::SessionNotCreated,
"Unable to find a matching set of capabilities",
))?;
let options = try!(FirefoxOptions::from_capabilities(
let options = FirefoxOptions::from_capabilities(
fx_capabilities.chosen_binary,
&mut capabilities
));
&mut capabilities,
)?;
(options, capabilities)
};
@ -121,7 +119,7 @@ impl MarionetteHandler {
let port = self.settings.port.unwrap_or(get_free_port()?);
if !self.settings.connect_existing {
try!(self.start_browser(port, options));
self.start_browser(port, options)?;
}
let mut connection = MarionetteConnection::new(port, session_id.clone());
@ -210,24 +208,21 @@ impl MarionetteHandler {
prefs.insert_slice(&extra_prefs[..]);
if self.settings.jsdebugger {
prefs.insert(
"devtools.browsertoolbox.panel",
Pref::new("jsdebugger".to_owned()),
);
prefs.insert("devtools.browsertoolbox.panel", Pref::new("jsdebugger"));
prefs.insert("devtools.debugger.remote-enabled", Pref::new(true));
prefs.insert("devtools.chrome.enabled", Pref::new(true));
prefs.insert("devtools.debugger.prompt-connection", Pref::new(false));
prefs.insert("marionette.debugging.clicktostart", Pref::new(true));
}
prefs.insert(
"marionette.log.level",
Pref::new(logging::max_level().to_string()),
);
prefs.insert("marionette.log.level", logging::max_level().into());
prefs.insert("marionette.port", Pref::new(port));
prefs.write().map_err(|_| {
WebDriverError::new(ErrorStatus::UnknownError, "Unable to write Firefox profile")
prefs.write().map_err(|e| {
WebDriverError::new(
ErrorStatus::UnknownError,
format!("Unable to write Firefox profile: {}", e),
)
})
}
}
@ -1487,4 +1482,32 @@ impl ToMarionette for WindowRectParameters {
}
#[cfg(test)]
mod tests {}
mod tests {
use super::{MarionetteHandler, MarionetteSettings};
use mozprofile::preferences::PrefValue;
use mozprofile::profile::Profile;
// This is not a pretty test, mostly due to the nature of
// mozprofile's and MarionetteHandler's APIs, but we have had
// several regressions related to marionette.log.level.
#[test]
fn test_marionette_log_level() {
let mut profile = Profile::new(None).unwrap();
let handler = MarionetteHandler::new(MarionetteSettings::default());
handler.set_prefs(2828, &mut profile, false, vec![]).ok();
let user_prefs = profile.user_prefs().unwrap();
let pref = user_prefs.get("marionette.log.level").unwrap();
let value = match pref.value {
PrefValue::String(ref s) => s,
_ => panic!(),
};
for (i, ch) in value.chars().enumerate() {
if i == 0 {
assert!(ch.is_uppercase());
} else {
assert!(ch.is_lowercase());
}
}
}
}

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

@ -79,6 +79,7 @@ pub struct Pref {
}
impl Pref {
/// Create a new preference with `value`.
pub fn new<T>(value: T) -> Pref
where
T: Into<PrefValue>,
@ -89,6 +90,8 @@ impl Pref {
}
}
/// Create a new sticky, or locked, preference with `value`.
/// These cannot be changed by the user in `about:config`.
pub fn new_sticky<T>(value: T) -> Pref
where
T: Into<PrefValue>,

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

@ -1,4 +1,5 @@
[complete-method.https.html]
[If event's isTrusted attribute is false, then then throw an InvalidStateError DOMException.]
expected: FAIL
expected:
if not e10s: FAIL

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

@ -1,34 +1,45 @@
[constructor.https.html]
[MerchantValidationEvent can be dispatched, even if not trusted.]
expected: FAIL
expected:
if not e10s: FAIL
[MerchantValidationEvent can be constructed with an EventInitDict, even if not trusted.]
expected: FAIL
expected:
if not e10s: FAIL
[Relative validationURLs use the document as the base.]
expected: FAIL
expected:
if not e10s: FAIL
[Must have a validationURL IDL attribute, which is initialized with to the validationURL dictionary value.]
expected: FAIL
expected:
if not e10s: FAIL
[MerchantValidationEvent can be constructed in secure-context.]
expected: FAIL
expected:
if not e10s: FAIL
[Must throw if initialized with an invalid URL.]
expected: FAIL
expected:
if not e10s: FAIL
[Must throw TypeError if initialized with an invalid URL.]
expected: FAIL
expected:
if not e10s: FAIL
[When no methodName is passed, methodName attribute defaults to the empty string]
expected: FAIL
expected:
if not e10s: FAIL
[MerchantValidationEvent can be constructed with valid PMIs]
expected: FAIL
expected:
if not e10s: FAIL
[MerchantValidationEvent can't be constructed with invalid PMIs]
expected: FAIL
expected:
if not e10s: FAIL
[Must have a methodName IDL attribute, which is initialized with to the methodName dictionary value.]
expected: FAIL
expected:
if not e10s: FAIL

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

@ -1,13 +1,17 @@
[type_member.https.html]
[Smoke test]
expected: FAIL
expected:
if not e10s: FAIL
[An invalid enum value for PaymentDetailsInit.total's type throws TypeError]
expected: FAIL
expected:
if not e10s: FAIL
[Invalid enum value for PaymentItem.type member throws a TypeError]
expected: FAIL
expected:
if not e10s: FAIL
[Valid enum values for PaymentItem.type member does not throw]
expected: FAIL
expected:
if not e10s: FAIL

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

@ -1,7 +1,9 @@
[methodDetails-attribute.https.html]
[Must have a methodDetails IDL attribute, which is initialized with to the methodName dictionary value]
expected: FAIL
expected:
if not e10s: FAIL
[The methodDetails member defaults to null]
expected: FAIL
expected:
if not e10s: FAIL

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

@ -1,7 +1,9 @@
[methodName-attribute.https.html]
[Must have a methodName IDL attribute, which is initialized with to the methodName dictionary value]
expected: FAIL
expected:
if not e10s: FAIL
[When no dictionary is passed, the methodName member defaults to the empty string]
expected: FAIL
expected:
if not e10s: FAIL

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

@ -1,10 +1,13 @@
[constructor.https.html]
[PaymentRequestUpdateEvent can be constructed in secure-context]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentRequestUpdateEvent can be constructed with an EventInitDict, even if not trusted]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentRequestUpdateEvent can be dispatched, even if not trusted]
expected: FAIL
expected:
if not e10s: FAIL

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

@ -1,10 +1,13 @@
[updatewith-method.https.html]
[Let target be the request which is dispatching the event.]
expected: FAIL
expected:
if not e10s: FAIL
[Calling .updateWith() with an undispatched untrusted event throws "InvalidStateError"]
expected: FAIL
expected:
if not e10s: FAIL
[Calling .updateWith() with a dispatched, untrusted event, throws "InvalidStateError"]
expected: FAIL
expected:
if not e10s: FAIL

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

@ -0,0 +1 @@
prefs: [dom.payments.request.enabled:true]

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

@ -1,4 +1,5 @@
[active-document-cross-origin.https.sub.html]
[PaymentRequest <iframe allowpaymentrequest> in non-active document (cross-origin)]
expected: FAIL
expected:
if not e10s: FAIL

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

@ -1,4 +1,5 @@
[active-document-same-origin.https.html]
[PaymentRequest <iframe allowpaymentrequest> in non-active document (same-origin)]
expected: FAIL
expected:
if not e10s: FAIL

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

@ -1,13 +1,16 @@
[allowpaymentrequest-attribute-cross-origin-bc-containers.https.html]
[iframe]
expected: FAIL
expected:
if not e10s: FAIL
[frame]
expected: FAIL
expected:
if not e10s: FAIL
[object]
expected:
FAIL
if not e10s: FAIL
[embed]
expected: FAIL
expected:
if not e10s: FAIL

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

@ -1,4 +1,5 @@
[basic.https.html]
[PaymentRequest <iframe allowpaymentrequest> basic]
expected: FAIL
expected:
if not e10s: FAIL

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

@ -1,13 +1,17 @@
[no-attribute-cross-origin-bc-containers.https.html]
[iframe]
expected: FAIL
expected:
if not e10s: FAIL
[frame]
expected: FAIL
expected:
if not e10s: FAIL
[object]
expected: FAIL
expected:
if not e10s: FAIL
[embed]
expected: FAIL
expected:
if not e10s: FAIL

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

@ -1,25 +1,33 @@
[historical.https.html]
[paymentRequestID in PaymentRequest]
expected: FAIL
expected:
if not e10s: FAIL
[paymentRequestID in PaymentResponse]
expected: FAIL
expected:
if not e10s: FAIL
[careOf in PaymentAddress]
expected: FAIL
expected:
if not e10s: FAIL
[totalAmount in PaymentResponse]
expected: FAIL
expected:
if not e10s: FAIL
[paymentRequestId in PaymentRequest]
expected: FAIL
expected:
if not e10s: FAIL
[paymentRequestId in PaymentResponse]
expected: FAIL
expected:
if not e10s: FAIL
[supportedMethods must not support sequence<DOMString>]
expected: FAIL
expected:
if not e10s: FAIL
[languageCode in PaymentAddress]
expected: FAIL
expected:
if not e10s: FAIL

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

@ -1,325 +1,430 @@
[idlharness.https.window.html]
[PaymentRequest interface: existence and properties of interface object]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentRequest interface object length]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentRequest interface object name]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentRequest interface: existence and properties of interface prototype object]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentRequest interface: existence and properties of interface prototype object's "constructor" property]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentRequest interface: existence and properties of interface prototype object's @@unscopables property]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentRequest interface: operation show([object Object\])]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentRequest interface: operation abort()]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentRequest interface: operation canMakePayment()]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentRequest interface: attribute id]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentRequest interface: attribute shippingAddress]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentRequest interface: attribute shippingOption]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentRequest interface: attribute shippingType]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentRequest interface: attribute onshippingaddresschange]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentRequest interface: attribute onshippingoptionchange]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentRequest interface: attribute onpaymentmethodchange]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentRequest must be primary interface of paymentRequest]
expected: FAIL
expected:
if not e10s: FAIL
[Stringification of paymentRequest]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentRequest interface: paymentRequest must inherit property "show([object Object\])" with the proper type]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentRequest interface: calling show([object Object\]) on paymentRequest with too few arguments must throw TypeError]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentRequest interface: paymentRequest must inherit property "abort()" with the proper type]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentRequest interface: paymentRequest must inherit property "canMakePayment()" with the proper type]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentRequest interface: paymentRequest must inherit property "id" with the proper type]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentRequest interface: paymentRequest must inherit property "shippingAddress" with the proper type]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentRequest interface: paymentRequest must inherit property "shippingOption" with the proper type]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentRequest interface: paymentRequest must inherit property "shippingType" with the proper type]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentRequest interface: paymentRequest must inherit property "onshippingaddresschange" with the proper type]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentRequest interface: paymentRequest must inherit property "onshippingoptionchange" with the proper type]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentRequest interface: paymentRequest must inherit property "onpaymentmethodchange" with the proper type]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentAddress interface: existence and properties of interface object]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentAddress interface object length]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentAddress interface object name]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentAddress interface: existence and properties of interface prototype object]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentAddress interface: existence and properties of interface prototype object's "constructor" property]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentAddress interface: existence and properties of interface prototype object's @@unscopables property]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentAddress interface: operation toJSON()]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentAddress interface: attribute city]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentAddress interface: attribute country]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentAddress interface: attribute dependentLocality]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentAddress interface: attribute languageCode]
expected: FAIL
[PaymentAddress interface: attribute organization]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentAddress interface: attribute phone]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentAddress interface: attribute postalCode]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentAddress interface: attribute recipient]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentAddress interface: attribute region]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentAddress interface: attribute regionCode]
expected: FAIL
[PaymentAddress interface: attribute sortingCode]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentAddress interface: attribute addressLine]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentResponse interface: existence and properties of interface object]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentResponse interface object length]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentResponse interface object name]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentResponse interface: existence and properties of interface prototype object]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentResponse interface: existence and properties of interface prototype object's "constructor" property]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentResponse interface: existence and properties of interface prototype object's @@unscopables property]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentResponse interface: operation toJSON()]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentResponse interface: attribute requestId]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentResponse interface: attribute methodName]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentResponse interface: attribute details]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentResponse interface: attribute shippingAddress]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentResponse interface: attribute shippingOption]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentResponse interface: attribute payerName]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentResponse interface: attribute payerEmail]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentResponse interface: attribute payerPhone]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentResponse interface: operation complete(PaymentComplete)]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentResponse interface: operation retry(PaymentValidationErrors)]
expected: FAIL
[PaymentResponse interface: attribute onpayerdetailchange]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentMethodChangeEvent interface: existence and properties of interface object]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentMethodChangeEvent interface object length]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentMethodChangeEvent interface object name]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentMethodChangeEvent interface: existence and properties of interface prototype object]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentMethodChangeEvent interface: existence and properties of interface prototype object's "constructor" property]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentMethodChangeEvent interface: existence and properties of interface prototype object's @@unscopables property]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentMethodChangeEvent interface: attribute methodName]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentMethodChangeEvent interface: attribute methodDetails]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentMethodChangeEvent must be primary interface of new PaymentMethodChangeEvent("paymentmethodchange")]
expected: FAIL
expected:
if not e10s: FAIL
[Stringification of new PaymentMethodChangeEvent("paymentmethodchange")]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentMethodChangeEvent interface: new PaymentMethodChangeEvent("paymentmethodchange") must inherit property "methodName" with the proper type]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentMethodChangeEvent interface: new PaymentMethodChangeEvent("paymentmethodchange") must inherit property "methodDetails" with the proper type]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentRequestUpdateEvent interface: new PaymentMethodChangeEvent("paymentmethodchange") must inherit property "updateWith([object Object\])" with the proper type]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentRequestUpdateEvent interface: calling updateWith([object Object\]) on new PaymentMethodChangeEvent("paymentmethodchange") with too few arguments must throw TypeError]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentRequestUpdateEvent interface: existence and properties of interface object]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentRequestUpdateEvent interface object length]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentRequestUpdateEvent interface object name]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentRequestUpdateEvent interface: existence and properties of interface prototype object]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentRequestUpdateEvent interface: existence and properties of interface prototype object's "constructor" property]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentRequestUpdateEvent interface: existence and properties of interface prototype object's @@unscopables property]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentRequestUpdateEvent interface: operation updateWith([object Object\])]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentRequestUpdateEvent must be primary interface of new PaymentRequestUpdateEvent("paymentrequestupdate")]
expected: FAIL
expected:
if not e10s: FAIL
[Stringification of new PaymentRequestUpdateEvent("paymentrequestupdate")]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentRequestUpdateEvent interface: new PaymentRequestUpdateEvent("paymentrequestupdate") must inherit property "updateWith([object Object\])" with the proper type]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentRequestUpdateEvent interface: calling updateWith([object Object\]) on new PaymentRequestUpdateEvent("paymentrequestupdate") with too few arguments must throw TypeError]
expected: FAIL
expected:
if not e10s: FAIL
[MerchantValidationEvent interface: existence and properties of interface prototype object's "constructor" property]
expected: FAIL
expected:
if not e10s: FAIL
[MerchantValidationEvent interface object length]
expected: FAIL
expected:
if not e10s: FAIL
[MerchantValidationEvent must be primary interface of new MerchantValidationEvent("merchantvalidation")]
expected: FAIL
expected:
if not e10s: FAIL
[MerchantValidationEvent interface: new MerchantValidationEvent("merchantvalidation") must inherit property "complete([object Object\])" with the proper type]
expected: FAIL
expected:
if not e10s: FAIL
[MerchantValidationEvent interface: existence and properties of interface prototype object]
expected: FAIL
expected:
if not e10s: FAIL
[MerchantValidationEvent interface: existence and properties of interface prototype object's @@unscopables property]
expected: FAIL
expected:
if not e10s: FAIL
[MerchantValidationEvent interface object name]
expected: FAIL
expected:
if not e10s: FAIL
[MerchantValidationEvent interface: existence and properties of interface object]
expected: FAIL
expected:
if not e10s: FAIL
[MerchantValidationEvent interface: attribute validationURL]
expected: FAIL
expected:
if not e10s: FAIL
[MerchantValidationEvent interface: operation complete([object Object\])]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentRequest interface: attribute onmerchantvalidation]
expected: FAIL
expected:
if not e10s: FAIL
[MerchantValidationEvent interface: calling complete([object Object\]) on new MerchantValidationEvent("merchantvalidation") with too few arguments must throw TypeError]
expected: FAIL
expected:
if not e10s: FAIL
[Stringification of new MerchantValidationEvent("merchantvalidation")]
expected: FAIL
expected:
if not e10s: FAIL
[MerchantValidationEvent interface: new MerchantValidationEvent("merchantvalidation") must inherit property "validationURL" with the proper type]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentRequest interface: paymentRequest must inherit property "onmerchantvalidation" with the proper type]
expected: FAIL
expected:
if not e10s: FAIL
[MerchantValidationEvent interface: attribute methodName]
expected: FAIL
expected:
if not e10s: FAIL
[MerchantValidationEvent interface: new MerchantValidationEvent("merchantvalidation") must inherit property "methodName" with the proper type]
expected: FAIL
expected:
if not e10s: FAIL

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

@ -1,413 +1,547 @@
[interfaces.https.html]
prefs: [dom.webcomponents.shadowdom.enabled:true]
[PaymentRequest interface: existence and properties of interface object]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentRequest interface object length]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentRequest interface object name]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentRequest interface: existence and properties of interface prototype object]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentRequest interface: existence and properties of interface prototype object's "constructor" property]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentRequest interface: existence and properties of interface prototype object's @@unscopables property]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentRequest interface: operation show()]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentRequest interface: operation abort()]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentRequest interface: attribute shippingAddress]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentRequest interface: attribute shippingOption]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentRequest interface: attribute onshippingaddresschange]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentRequest interface: attribute onshippingoptionchange]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentRequest must be primary interface of new PaymentRequest([{supportedMethods: ['foo'\]}\], {total: {label: 'bar', amount: {currency: 'BAZ', value: '0'}}})]
expected: FAIL
expected:
if not e10s: FAIL
[Stringification of new PaymentRequest([{supportedMethods: ['foo'\]}\], {total: {label: 'bar', amount: {currency: 'BAZ', value: '0'}}})]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentRequest interface: new PaymentRequest([{supportedMethods: ['foo'\]}\], {total: {label: 'bar', amount: {currency: 'BAZ', value: '0'}}}) must inherit property "show" with the proper type (0)]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentRequest interface: new PaymentRequest([{supportedMethods: ['foo'\]}\], {total: {label: 'bar', amount: {currency: 'BAZ', value: '0'}}}) must inherit property "abort" with the proper type (1)]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentRequest interface: new PaymentRequest([{supportedMethods: ['foo'\]}\], {total: {label: 'bar', amount: {currency: 'BAZ', value: '0'}}}) must inherit property "shippingAddress" with the proper type (2)]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentRequest interface: new PaymentRequest([{supportedMethods: ['foo'\]}\], {total: {label: 'bar', amount: {currency: 'BAZ', value: '0'}}}) must inherit property "shippingOption" with the proper type (3)]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentRequest interface: new PaymentRequest([{supportedMethods: ['foo'\]}\], {total: {label: 'bar', amount: {currency: 'BAZ', value: '0'}}}) must inherit property "onshippingaddresschange" with the proper type (4)]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentRequest interface: new PaymentRequest([{supportedMethods: ['foo'\]}\], {total: {label: 'bar', amount: {currency: 'BAZ', value: '0'}}}) must inherit property "onshippingoptionchange" with the proper type (5)]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentAddress interface: existence and properties of interface object]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentAddress interface object length]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentAddress interface object name]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentAddress interface: existence and properties of interface prototype object]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentAddress interface: existence and properties of interface prototype object's "constructor" property]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentAddress interface: existence and properties of interface prototype object's @@unscopables property]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentAddress interface: attribute country]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentAddress interface: attribute addressLine]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentAddress interface: attribute region]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentAddress interface: attribute city]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentAddress interface: attribute dependentLocality]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentAddress interface: attribute postalCode]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentAddress interface: attribute sortingCode]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentAddress interface: attribute languageCode]
expected: FAIL
[PaymentAddress interface: attribute organization]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentAddress interface: attribute recipient]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentAddress interface: attribute careOf]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentAddress interface: attribute phone]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentResponse interface: existence and properties of interface object]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentResponse interface object length]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentResponse interface object name]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentResponse interface: existence and properties of interface prototype object]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentResponse interface: existence and properties of interface prototype object's "constructor" property]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentResponse interface: existence and properties of interface prototype object's @@unscopables property]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentResponse interface: attribute methodName]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentResponse interface: attribute details]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentResponse interface: attribute shippingAddress]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentResponse interface: attribute shippingOption]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentResponse interface: attribute payerEmail]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentResponse interface: attribute payerPhone]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentResponse interface: operation complete(PaymentComplete)]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentRequestUpdateEvent interface: existence and properties of interface object]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentRequestUpdateEvent interface object length]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentRequestUpdateEvent interface object name]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentRequestUpdateEvent interface: existence and properties of interface prototype object]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentRequestUpdateEvent interface: existence and properties of interface prototype object's "constructor" property]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentRequestUpdateEvent interface: existence and properties of interface prototype object's @@unscopables property]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentRequestUpdateEvent interface: operation updateWith([object Object\])]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentRequest interface: operation canMakePayment()]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentRequest interface: attribute id]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentRequest interface: attribute shippingType]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentRequest interface: new PaymentRequest([{supportedMethods: ['foo'\]}\], {total: {label: 'bar', amount: {currency: 'BAZ', value: '0'}}}) must inherit property "canMakePayment" with the proper type (2)]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentRequest interface: new PaymentRequest([{supportedMethods: ['foo'\]}\], {total: {label: 'bar', amount: {currency: 'BAZ', value: '0'}}}) must inherit property "id" with the proper type (3)]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentRequest interface: new PaymentRequest([{supportedMethods: ['foo'\]}\], {total: {label: 'bar', amount: {currency: 'BAZ', value: '0'}}}) must inherit property "shippingAddress" with the proper type (4)]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentRequest interface: new PaymentRequest([{supportedMethods: ['foo'\]}\], {total: {label: 'bar', amount: {currency: 'BAZ', value: '0'}}}) must inherit property "shippingOption" with the proper type (5)]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentRequest interface: new PaymentRequest([{supportedMethods: ['foo'\]}\], {total: {label: 'bar', amount: {currency: 'BAZ', value: '0'}}}) must inherit property "shippingType" with the proper type (6)]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentRequest interface: new PaymentRequest([{supportedMethods: ['foo'\]}\], {total: {label: 'bar', amount: {currency: 'BAZ', value: '0'}}}) must inherit property "onshippingaddresschange" with the proper type (7)]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentRequest interface: new PaymentRequest([{supportedMethods: ['foo'\]}\], {total: {label: 'bar', amount: {currency: 'BAZ', value: '0'}}}) must inherit property "onshippingoptionchange" with the proper type (8)]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentResponse interface: attribute requestId]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentResponse interface: attribute payerName]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentRequest must be primary interface of new PaymentRequest([{supportedMethods: 'foo'}\], {total: {label: 'bar', amount: {currency: 'BAZ', value: '0'}}})]
expected: FAIL
expected:
if not e10s: FAIL
[Stringification of new PaymentRequest([{supportedMethods: 'foo'}\], {total: {label: 'bar', amount: {currency: 'BAZ', value: '0'}}})]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentRequest interface: new PaymentRequest([{supportedMethods: 'foo'}\], {total: {label: 'bar', amount: {currency: 'BAZ', value: '0'}}}) must inherit property "show" with the proper type (0)]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentRequest interface: new PaymentRequest([{supportedMethods: 'foo'}\], {total: {label: 'bar', amount: {currency: 'BAZ', value: '0'}}}) must inherit property "abort" with the proper type (1)]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentRequest interface: new PaymentRequest([{supportedMethods: 'foo'}\], {total: {label: 'bar', amount: {currency: 'BAZ', value: '0'}}}) must inherit property "canMakePayment" with the proper type (2)]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentRequest interface: new PaymentRequest([{supportedMethods: 'foo'}\], {total: {label: 'bar', amount: {currency: 'BAZ', value: '0'}}}) must inherit property "id" with the proper type (3)]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentRequest interface: new PaymentRequest([{supportedMethods: 'foo'}\], {total: {label: 'bar', amount: {currency: 'BAZ', value: '0'}}}) must inherit property "shippingAddress" with the proper type (4)]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentRequest interface: new PaymentRequest([{supportedMethods: 'foo'}\], {total: {label: 'bar', amount: {currency: 'BAZ', value: '0'}}}) must inherit property "shippingOption" with the proper type (5)]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentRequest interface: new PaymentRequest([{supportedMethods: 'foo'}\], {total: {label: 'bar', amount: {currency: 'BAZ', value: '0'}}}) must inherit property "shippingType" with the proper type (6)]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentRequest interface: new PaymentRequest([{supportedMethods: 'foo'}\], {total: {label: 'bar', amount: {currency: 'BAZ', value: '0'}}}) must inherit property "onshippingaddresschange" with the proper type (7)]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentRequest interface: new PaymentRequest([{supportedMethods: 'foo'}\], {total: {label: 'bar', amount: {currency: 'BAZ', value: '0'}}}) must inherit property "onshippingoptionchange" with the proper type (8)]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentRequest interface: new PaymentRequest([{supportedMethods: 'foo'}\], {total: {label: 'bar', amount: {currency: 'BAZ', value: '0'}}}) must inherit property "show()" with the proper type]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentRequest interface: new PaymentRequest([{supportedMethods: 'foo'}\], {total: {label: 'bar', amount: {currency: 'BAZ', value: '0'}}}) must inherit property "abort()" with the proper type]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentRequest interface: new PaymentRequest([{supportedMethods: 'foo'}\], {total: {label: 'bar', amount: {currency: 'BAZ', value: '0'}}}) must inherit property "canMakePayment()" with the proper type]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentRequest interface: new PaymentRequest([{supportedMethods: 'foo'}\], {total: {label: 'bar', amount: {currency: 'BAZ', value: '0'}}}) must inherit property "id" with the proper type]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentRequest interface: new PaymentRequest([{supportedMethods: 'foo'}\], {total: {label: 'bar', amount: {currency: 'BAZ', value: '0'}}}) must inherit property "shippingAddress" with the proper type]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentRequest interface: new PaymentRequest([{supportedMethods: 'foo'}\], {total: {label: 'bar', amount: {currency: 'BAZ', value: '0'}}}) must inherit property "shippingOption" with the proper type]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentRequest interface: new PaymentRequest([{supportedMethods: 'foo'}\], {total: {label: 'bar', amount: {currency: 'BAZ', value: '0'}}}) must inherit property "shippingType" with the proper type]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentRequest interface: new PaymentRequest([{supportedMethods: 'foo'}\], {total: {label: 'bar', amount: {currency: 'BAZ', value: '0'}}}) must inherit property "onshippingaddresschange" with the proper type]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentRequest interface: new PaymentRequest([{supportedMethods: 'foo'}\], {total: {label: 'bar', amount: {currency: 'BAZ', value: '0'}}}) must inherit property "onshippingoptionchange" with the proper type]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentAddress interface: operation toJSON()]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentResponse interface: operation toJSON()]
expected: FAIL
expected:
if not e10s: FAIL
[Document interface: attribute origin]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentRequest must be primary interface of new PaymentRequest([{supportedMethods: 'foo'}\], {total: {label: 'bar', amount: {currency: 'USD', value: '0'}} })]
expected: FAIL
expected:
if not e10s: FAIL
[Stringification of new PaymentRequest([{supportedMethods: 'foo'}\], {total: {label: 'bar', amount: {currency: 'USD', value: '0'}} })]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentRequest interface: new PaymentRequest([{supportedMethods: 'foo'}\], {total: {label: 'bar', amount: {currency: 'USD', value: '0'}} }) must inherit property "show()" with the proper type]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentRequest interface: new PaymentRequest([{supportedMethods: 'foo'}\], {total: {label: 'bar', amount: {currency: 'USD', value: '0'}} }) must inherit property "abort()" with the proper type]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentRequest interface: new PaymentRequest([{supportedMethods: 'foo'}\], {total: {label: 'bar', amount: {currency: 'USD', value: '0'}} }) must inherit property "canMakePayment()" with the proper type]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentRequest interface: new PaymentRequest([{supportedMethods: 'foo'}\], {total: {label: 'bar', amount: {currency: 'USD', value: '0'}} }) must inherit property "id" with the proper type]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentRequest interface: new PaymentRequest([{supportedMethods: 'foo'}\], {total: {label: 'bar', amount: {currency: 'USD', value: '0'}} }) must inherit property "shippingAddress" with the proper type]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentRequest interface: new PaymentRequest([{supportedMethods: 'foo'}\], {total: {label: 'bar', amount: {currency: 'USD', value: '0'}} }) must inherit property "shippingOption" with the proper type]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentRequest interface: new PaymentRequest([{supportedMethods: 'foo'}\], {total: {label: 'bar', amount: {currency: 'USD', value: '0'}} }) must inherit property "shippingType" with the proper type]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentRequest interface: new PaymentRequest([{supportedMethods: 'foo'}\], {total: {label: 'bar', amount: {currency: 'USD', value: '0'}} }) must inherit property "onshippingaddresschange" with the proper type]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentRequest interface: new PaymentRequest([{supportedMethods: 'foo'}\], {total: {label: 'bar', amount: {currency: 'USD', value: '0'}} }) must inherit property "onshippingoptionchange" with the proper type]
expected: FAIL
expected:
if not e10s: FAIL
[EventTarget interface: new PaymentRequest([{supportedMethods: 'foo'}\], {total: {label: 'bar', amount: {currency: 'USD', value: '0'}} }) must inherit property "addEventListener(DOMString, EventListener, [object Object\],[object Object\])" with the proper type]
expected: FAIL
expected:
if not e10s: FAIL
[EventTarget interface: calling addEventListener(DOMString, EventListener, [object Object\],[object Object\]) on new PaymentRequest([{supportedMethods: 'foo'}\], {total: {label: 'bar', amount: {currency: 'USD', value: '0'}} }) with too few arguments must throw TypeError]
expected: FAIL
expected:
if not e10s: FAIL
[EventTarget interface: new PaymentRequest([{supportedMethods: 'foo'}\], {total: {label: 'bar', amount: {currency: 'USD', value: '0'}} }) must inherit property "removeEventListener(DOMString, EventListener, [object Object\],[object Object\])" with the proper type]
expected: FAIL
expected:
if not e10s: FAIL
[EventTarget interface: calling removeEventListener(DOMString, EventListener, [object Object\],[object Object\]) on new PaymentRequest([{supportedMethods: 'foo'}\], {total: {label: 'bar', amount: {currency: 'USD', value: '0'}} }) with too few arguments must throw TypeError]
expected: FAIL
expected:
if not e10s: FAIL
[EventTarget interface: new PaymentRequest([{supportedMethods: 'foo'}\], {total: {label: 'bar', amount: {currency: 'USD', value: '0'}} }) must inherit property "dispatchEvent(Event)" with the proper type]
expected: FAIL
expected:
if not e10s: FAIL
[EventTarget interface: calling dispatchEvent(Event) on new PaymentRequest([{supportedMethods: 'foo'}\], {total: {label: 'bar', amount: {currency: 'USD', value: '0'}} }) with too few arguments must throw TypeError]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentAddress interface: attribute regionCode]
expected: FAIL
[PaymentRequest interface: operation show([object Object\])]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentRequest interface: new PaymentRequest([{supportedMethods: 'foo'}\], {total: {label: 'bar', amount: {currency: 'USD', value: '0'}} }) must inherit property "show([object Object\])" with the proper type]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentRequest interface: calling show([object Object\]) on new PaymentRequest([{supportedMethods: 'foo'}\], {total: {label: 'bar', amount: {currency: 'USD', value: '0'}} }) with too few arguments must throw TypeError]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentRequest interface: attribute onpaymentmethodchange]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentRequest interface: new PaymentRequest([{supportedMethods: 'foo'}\], {total: {label: 'bar', amount: {currency: 'USD', value: '0'}} }) must inherit property "onpaymentmethodchange" with the proper type]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentResponse interface: operation retry(PaymentValidationErrors)]
expected: FAIL
[PaymentResponse interface: attribute onpayerdetailchange]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentMethodChangeEvent interface: existence and properties of interface object]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentMethodChangeEvent interface object length]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentMethodChangeEvent interface object name]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentMethodChangeEvent interface: existence and properties of interface prototype object]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentMethodChangeEvent interface: existence and properties of interface prototype object's "constructor" property]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentMethodChangeEvent interface: existence and properties of interface prototype object's @@unscopables property]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentMethodChangeEvent interface: attribute methodName]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentMethodChangeEvent interface: attribute methodDetails]
expected: FAIL
expected:
if not e10s: FAIL
[MerchantValidationEvent interface: existence and properties of interface prototype object's "constructor" property]
expected: FAIL
expected:
if not e10s: FAIL
[MerchantValidationEvent interface object length]
expected: FAIL
expected:
if not e10s: FAIL
[MerchantValidationEvent interface: attribute validationURL]
expected: FAIL
expected:
if not e10s: FAIL
[MerchantValidationEvent interface: existence and properties of interface prototype object]
expected: FAIL
expected:
if not e10s: FAIL
[MerchantValidationEvent interface: existence and properties of interface prototype object's @@unscopables property]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentRequest interface: new PaymentRequest([{supportedMethods: 'foo'}\], {total: {label: 'bar', amount: {currency: 'USD', value: '0'}} }) must inherit property "onmerchantvalidation" with the proper type]
expected: FAIL
expected:
if not e10s: FAIL
[MerchantValidationEvent interface object name]
expected: FAIL
expected:
if not e10s: FAIL
[MerchantValidationEvent interface: existence and properties of interface object]
expected: FAIL
expected:
if not e10s: FAIL
[MerchantValidationEvent interface: operation complete([object Object\])]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentRequest interface: attribute onmerchantvalidation]
expected: FAIL
expected:
if not e10s: FAIL
[MerchantValidationEvent interface: attribute methodName]
expected: FAIL
expected:
if not e10s: FAIL

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

@ -1,13 +1,17 @@
[onmerchantvalidation-attribute.https.html]
[onmerchantvalidation attribute and listeners both work]
expected: FAIL
expected:
if not e10s: FAIL
[Must have a onmerchantvalidation IDL attribute]
expected: FAIL
expected:
if not e10s: FAIL
[onmerchantvalidation attribute is a generic handler for "merchantvalidation"]
expected: FAIL
expected:
if not e10s: FAIL
[onmerchantvalidation attribute is a handler for MerchantValidationEvent]
expected: FAIL
expected:
if not e10s: FAIL

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

@ -1,13 +1,17 @@
[onpaymentmenthodchange-attribute.https.html]
[Must have a onpaymentmethodchange IDL attribute]
expected: FAIL
expected:
if not e10s: FAIL
[onpaymentmethodchange attribute is a generic handler for "paymentmethodchange"]
expected: FAIL
expected:
if not e10s: FAIL
[onpaymentmethodchange attribute is a handler for PaymentMethodChangeEvent]
expected: FAIL
expected:
if not e10s: FAIL
[onpaymentmethodchange attribute and listeners both work]
expected: FAIL
expected:
if not e10s: FAIL

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

@ -1,12 +1,14 @@
[payment-request-abort-method.https.html]
[Throws if the promise [[state\]\] is not "interactive"]
expected: FAIL
expected:
if not e10s: FAIL
[Test for PaymentRequest.abort() method]
expected: FAIL
[Calling abort() multiple times is always a new object.]
expected: FAIL
expected:
if not e10s: FAIL
[Test for PaymentRequest.abort() method 1]
expected: FAIL

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

@ -1,22 +1,27 @@
[payment-request-canmakepayment-method.https.html]
[If payment method identifier and serialized parts are supported, resolve promise with true.]
expected: FAIL
expected:
if not e10s: FAIL
[Optionally, at the user agent's discretion, return a promise rejected with a "NotAllowedError" DOMException.]
expected: FAIL
expected:
if not e10s: FAIL
[If request.[[state\]\] is "closed", then return a promise rejected with an "InvalidStateError" DOMException.]
expected: FAIL
[If payment method identifier is unknown, resolve promise with false.]
expected: FAIL
expected:
if not e10s: FAIL
[If request.[[state\]\] is "interactive", then return a promise rejected with an "InvalidStateError" DOMException.]
expected: FAIL
[If request.[[state\]\] is "created", then return a promise that resolves to true for known method.]
expected: FAIL
expected:
if not e10s: FAIL
[Calling canMakePayment() multiple times is always a new object.]
expected: FAIL
expected:
if not e10s: FAIL

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

@ -1,37 +1,49 @@
[payment-request-constructor-crash.https.html]
[Don't crash if there is a abusive number of payment methods in the methodData sequence]
expected: FAIL
expected:
if not e10s: FAIL
[Don't crash if there is a abusive number of supported methods in one sequence]
expected: FAIL
expected:
if not e10s: FAIL
[Don't crash if the request id has an abusive length]
expected: FAIL
expected:
if not e10s: FAIL
[Don't crash if PaymentDetailsInit.total.label is an abusive length]
expected: FAIL
expected:
if not e10s: FAIL
[Don't crash if total.amount.value is an abusive length]
expected: FAIL
expected:
if not e10s: FAIL
[Don't crash if details.displayItems has an abusive number of items]
expected: FAIL
expected:
if not e10s: FAIL
[Don't crash if details.shippingOptions has an abusive number of items]
expected: FAIL
expected:
if not e10s: FAIL
[Don't crash if PaymentShippingOptions.label is an abusive length]
expected: FAIL
expected:
if not e10s: FAIL
[Don't crash if the PaymentShippingOptions.amount.value is an abusive length]
expected: FAIL
expected:
if not e10s: FAIL
[Don't crash if PaymentItem.label is an abusive length]
expected: FAIL
expected:
if not e10s: FAIL
[Don't crash if there is an abusive number of payment methods in the methodData sequence]
expected: FAIL
expected:
if not e10s: FAIL
[Don't crash if PaymentMethodData.supportedMethods is an abusive length]
expected: FAIL
expected:
if not e10s: FAIL

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

@ -1,441 +1,587 @@
[payment-request-constructor.https.html]
[Use provided request ID]
expected: FAIL
expected:
if not e10s: FAIL
[If the length of the methodData sequence is zero, then throw a TypeError]
expected: FAIL
expected:
if not e10s: FAIL
[If the length of the paymentMethod.supportedMethods sequence is zero, then throw a TypeError]
expected: FAIL
expected:
if not e10s: FAIL
[Method data must be JSON-serializable object (a list in this case)]
expected: FAIL
expected:
if not e10s: FAIL
[Method data must be JSON-serializable object (a dictionary in this case)]
expected: FAIL
expected:
if not e10s: FAIL
[Rethrow any exceptions of JSON-serializing paymentMethod.data into a string]
expected: FAIL
expected:
if not e10s: FAIL
[If details.total.amount.value is not a valid decimal monetary value (in this case "-"), then throw a TypeError]
expected: FAIL
expected:
if not e10s: FAIL
[If details.total.amount.value is not a valid decimal monetary value (in this case "notdigits"), then throw a TypeError]
expected: FAIL
expected:
if not e10s: FAIL
[If details.total.amount.value is not a valid decimal monetary value (in this case "ALSONOTDIGITS"), then throw a TypeError]
expected: FAIL
expected:
if not e10s: FAIL
[If details.total.amount.value is not a valid decimal monetary value (in this case "10."), then throw a TypeError]
expected: FAIL
expected:
if not e10s: FAIL
[If details.total.amount.value is not a valid decimal monetary value (in this case ".99"), then throw a TypeError]
expected: FAIL
expected:
if not e10s: FAIL
[If details.total.amount.value is not a valid decimal monetary value (in this case "-10."), then throw a TypeError]
expected: FAIL
expected:
if not e10s: FAIL
[If details.total.amount.value is not a valid decimal monetary value (in this case "-.99"), then throw a TypeError]
expected: FAIL
expected:
if not e10s: FAIL
[If details.total.amount.value is not a valid decimal monetary value (in this case "10-"), then throw a TypeError]
expected: FAIL
expected:
if not e10s: FAIL
[If details.total.amount.value is not a valid decimal monetary value (in this case "1-0"), then throw a TypeError]
expected: FAIL
expected:
if not e10s: FAIL
[If details.total.amount.value is not a valid decimal monetary value (in this case "1.0.0"), then throw a TypeError]
expected: FAIL
expected:
if not e10s: FAIL
[If details.total.amount.value is not a valid decimal monetary value (in this case "1/3"), then throw a TypeError]
expected: FAIL
expected:
if not e10s: FAIL
[If details.total.amount.value is not a valid decimal monetary value (in this case ""), then throw a TypeError]
expected: FAIL
expected:
if not e10s: FAIL
[If details.total.amount.value is not a valid decimal monetary value (in this case "null"), then throw a TypeError]
expected: FAIL
expected:
if not e10s: FAIL
[If the first character of details.total.amount.value is U+002D HYPHEN-MINUS, then throw a TypeError]
expected: FAIL
expected:
if not e10s: FAIL
[For each item in details.displayItems: if item.amount.value is not a valid decimal monetary value (in this case "-"), then throw a TypeError]
expected: FAIL
expected:
if not e10s: FAIL
[For each item in details.displayItems: if item.amount.value is not a valid decimal monetary value (in this case "notdigits"), then throw a TypeError]
expected: FAIL
expected:
if not e10s: FAIL
[For each item in details.displayItems: if item.amount.value is not a valid decimal monetary value (in this case "ALSONOTDIGITS"), then throw a TypeError]
expected: FAIL
expected:
if not e10s: FAIL
[For each item in details.displayItems: if item.amount.value is not a valid decimal monetary value (in this case "10."), then throw a TypeError]
expected: FAIL
expected:
if not e10s: FAIL
[For each item in details.displayItems: if item.amount.value is not a valid decimal monetary value (in this case ".99"), then throw a TypeError]
expected: FAIL
expected:
if not e10s: FAIL
[For each item in details.displayItems: if item.amount.value is not a valid decimal monetary value (in this case "-10."), then throw a TypeError]
expected: FAIL
expected:
if not e10s: FAIL
[For each item in details.displayItems: if item.amount.value is not a valid decimal monetary value (in this case "-.99"), then throw a TypeError]
expected: FAIL
expected:
if not e10s: FAIL
[For each item in details.displayItems: if item.amount.value is not a valid decimal monetary value (in this case "10-"), then throw a TypeError]
expected: FAIL
expected:
if not e10s: FAIL
[For each item in details.displayItems: if item.amount.value is not a valid decimal monetary value (in this case "1-0"), then throw a TypeError]
expected: FAIL
expected:
if not e10s: FAIL
[For each item in details.displayItems: if item.amount.value is not a valid decimal monetary value (in this case "1.0.0"), then throw a TypeError]
expected: FAIL
expected:
if not e10s: FAIL
[For each item in details.displayItems: if item.amount.value is not a valid decimal monetary value (in this case "1/3"), then throw a TypeError]
expected: FAIL
expected:
if not e10s: FAIL
[For each item in details.displayItems: if item.amount.value is not a valid decimal monetary value (in this case ""), then throw a TypeError]
expected: FAIL
expected:
if not e10s: FAIL
[For each item in details.displayItems: if item.amount.value is not a valid decimal monetary value (in this case "null"), then throw a TypeError]
expected: FAIL
expected:
if not e10s: FAIL
[Modifier data must be JSON-serializable object (a list in this case)]
expected: FAIL
expected:
if not e10s: FAIL
[Modifier data must be JSON-serializable object (a dictionary in this case)]
expected: FAIL
expected:
if not e10s: FAIL
[Rethrow any exceptions of JSON-serializing modifier.data into a string]
expected: FAIL
expected:
if not e10s: FAIL
[Total is required]
expected: FAIL
expected:
if not e10s: FAIL
[Label is required]
expected: FAIL
expected:
if not e10s: FAIL
[Amount is required]
expected: FAIL
expected:
if not e10s: FAIL
[Amount value is required]
expected: FAIL
expected:
if not e10s: FAIL
[Amount currency is required]
expected: FAIL
expected:
if not e10s: FAIL
[Shipping type should be valid]
expected: FAIL
expected:
if not e10s: FAIL
[If details.id is missing, assign a identifier]
expected: FAIL
expected:
if not e10s: FAIL
[If details.id is missing, assign a unique identifier]
expected: FAIL
expected:
if not e10s: FAIL
[If the same id is provided, then use it]
expected: FAIL
expected:
if not e10s: FAIL
[Use ids even if they are strange]
expected: FAIL
expected:
if not e10s: FAIL
[Method data must be JSON-serializable object (an object in this case)]
expected: FAIL
expected:
if not e10s: FAIL
[If details.total.amount.value is not a valid decimal monetary value (in this case " 1.0 "), then throw a TypeError]
expected: FAIL
expected:
if not e10s: FAIL
[If details.total.amount.value is not a valid decimal monetary value (in this case " 1.0 "), then throw a TypeError]
expected: FAIL
expected:
if not e10s: FAIL
[If details.total.amount.value is not a valid decimal monetary value (in this case "1.0 "), then throw a TypeError]
expected: FAIL
expected:
if not e10s: FAIL
[If details.total.amount.value is not a valid decimal monetary value (in this case "USD$1.0"), then throw a TypeError]
expected: FAIL
expected:
if not e10s: FAIL
[If details.total.amount.value is not a valid decimal monetary value (in this case "$1.0"), then throw a TypeError]
expected: FAIL
expected:
if not e10s: FAIL
[If details.total.amount.value is not a valid decimal monetary value (in this case " 1.0"), then throw a TypeError]
expected: FAIL
expected:
if not e10s: FAIL
[If details.total.amount.value is not a valid decimal monetary value (in this case "-1"), then throw a TypeError]
expected: FAIL
expected:
if not e10s: FAIL
[If details.total.amount.value is not a valid decimal monetary value (in this case "-1.0"), then throw a TypeError]
expected: FAIL
expected:
if not e10s: FAIL
[If details.total.amount.value is not a valid decimal monetary value (in this case "-1.00"), then throw a TypeError]
expected: FAIL
expected:
if not e10s: FAIL
[If details.total.amount.value is not a valid decimal monetary value (in this case "-1000.000"), then throw a TypeError]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentDetailsBase.0 can be 0 length]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentDetailsBase.1 can be 0 length]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentDetailsBase.2 can be 0 length]
expected: FAIL
expected:
if not e10s: FAIL
[For each item in details.displayItems: if item.amount.value is not a valid decimal monetary value (in this case " 1.0 "), then throw a TypeError]
expected: FAIL
expected:
if not e10s: FAIL
[For each item in details.displayItems: if item.amount.value is not a valid decimal monetary value (in this case " 1.0 "), then throw a TypeError]
expected: FAIL
expected:
if not e10s: FAIL
[For each item in details.displayItems: if item.amount.value is not a valid decimal monetary value (in this case "1.0 "), then throw a TypeError]
expected: FAIL
expected:
if not e10s: FAIL
[For each item in details.displayItems: if item.amount.value is not a valid decimal monetary value (in this case "USD$1.0"), then throw a TypeError]
expected: FAIL
expected:
if not e10s: FAIL
[For each item in details.displayItems: if item.amount.value is not a valid decimal monetary value (in this case "$1.0"), then throw a TypeError]
expected: FAIL
expected:
if not e10s: FAIL
[For each item in details.displayItems: if item.amount.value is not a valid decimal monetary value (in this case " 1.0"), then throw a TypeError]
expected: FAIL
expected:
if not e10s: FAIL
[Negative values are allowed for displayItems.amount.value, irrespective of total amount]
expected: FAIL
expected:
if not e10s: FAIL
[it handles high precision currency values without throwing]
expected: FAIL
expected:
if not e10s: FAIL
[For each option in details.shippingOptions: if option.amount.value is not a valid decimal monetary value (in this case "-"), then throw a TypeError]
expected: FAIL
expected:
if not e10s: FAIL
[For each option in details.shippingOptions: if option.amount.value is not a valid decimal monetary value (in this case "notdigits"), then throw a TypeError]
expected: FAIL
expected:
if not e10s: FAIL
[For each option in details.shippingOptions: if option.amount.value is not a valid decimal monetary value (in this case "ALSONOTDIGITS"), then throw a TypeError]
expected: FAIL
expected:
if not e10s: FAIL
[For each option in details.shippingOptions: if option.amount.value is not a valid decimal monetary value (in this case "10."), then throw a TypeError]
expected: FAIL
expected:
if not e10s: FAIL
[For each option in details.shippingOptions: if option.amount.value is not a valid decimal monetary value (in this case ".99"), then throw a TypeError]
expected: FAIL
expected:
if not e10s: FAIL
[For each option in details.shippingOptions: if option.amount.value is not a valid decimal monetary value (in this case "-10."), then throw a TypeError]
expected: FAIL
expected:
if not e10s: FAIL
[For each option in details.shippingOptions: if option.amount.value is not a valid decimal monetary value (in this case "-.99"), then throw a TypeError]
expected: FAIL
expected:
if not e10s: FAIL
[For each option in details.shippingOptions: if option.amount.value is not a valid decimal monetary value (in this case "10-"), then throw a TypeError]
expected: FAIL
expected:
if not e10s: FAIL
[For each option in details.shippingOptions: if option.amount.value is not a valid decimal monetary value (in this case "1-0"), then throw a TypeError]
expected: FAIL
expected:
if not e10s: FAIL
[For each option in details.shippingOptions: if option.amount.value is not a valid decimal monetary value (in this case "1.0.0"), then throw a TypeError]
expected: FAIL
expected:
if not e10s: FAIL
[For each option in details.shippingOptions: if option.amount.value is not a valid decimal monetary value (in this case "1/3"), then throw a TypeError]
expected: FAIL
expected:
if not e10s: FAIL
[For each option in details.shippingOptions: if option.amount.value is not a valid decimal monetary value (in this case ""), then throw a TypeError]
expected: FAIL
expected:
if not e10s: FAIL
[For each option in details.shippingOptions: if option.amount.value is not a valid decimal monetary value (in this case "null"), then throw a TypeError]
expected: FAIL
expected:
if not e10s: FAIL
[For each option in details.shippingOptions: if option.amount.value is not a valid decimal monetary value (in this case " 1.0 "), then throw a TypeError]
expected: FAIL
expected:
if not e10s: FAIL
[For each option in details.shippingOptions: if option.amount.value is not a valid decimal monetary value (in this case " 1.0 "), then throw a TypeError]
expected: FAIL
expected:
if not e10s: FAIL
[For each option in details.shippingOptions: if option.amount.value is not a valid decimal monetary value (in this case "1.0 "), then throw a TypeError]
expected: FAIL
expected:
if not e10s: FAIL
[For each option in details.shippingOptions: if option.amount.value is not a valid decimal monetary value (in this case "USD$1.0"), then throw a TypeError]
expected: FAIL
expected:
if not e10s: FAIL
[For each option in details.shippingOptions: if option.amount.value is not a valid decimal monetary value (in this case "$1.0"), then throw a TypeError]
expected: FAIL
expected:
if not e10s: FAIL
[For each option in details.shippingOptions: if option.amount.value is not a valid decimal monetary value (in this case " 1.0"), then throw a TypeError]
expected: FAIL
expected:
if not e10s: FAIL
[If there is no selected shipping option, then PaymentRequest.shippingOption remains null]
expected: FAIL
expected:
if not e10s: FAIL
[If there is a selected shipping option, then it becomes synchronously selected]
expected: FAIL
expected:
if not e10s: FAIL
[If there is a multiple selected shipping options, only the last is selected]
expected: FAIL
expected:
if not e10s: FAIL
[If there are any duplicate shipping option ids, then there are no shipping options]
expected: FAIL
expected:
if not e10s: FAIL
[If modifier.total.amount.value is not a valid decimal monetary value (in this case "-"), then throw a TypeError]
expected: FAIL
expected:
if not e10s: FAIL
[If modifier.total.amount.value is not a valid decimal monetary value (in this case "notdigits"), then throw a TypeError]
expected: FAIL
expected:
if not e10s: FAIL
[If modifier.total.amount.value is not a valid decimal monetary value (in this case "ALSONOTDIGITS"), then throw a TypeError]
expected: FAIL
expected:
if not e10s: FAIL
[If modifier.total.amount.value is not a valid decimal monetary value (in this case "10."), then throw a TypeError]
expected: FAIL
expected:
if not e10s: FAIL
[If modifier.total.amount.value is not a valid decimal monetary value (in this case ".99"), then throw a TypeError]
expected: FAIL
expected:
if not e10s: FAIL
[If modifier.total.amount.value is not a valid decimal monetary value (in this case "-10."), then throw a TypeError]
expected: FAIL
expected:
if not e10s: FAIL
[If modifier.total.amount.value is not a valid decimal monetary value (in this case "-.99"), then throw a TypeError]
expected: FAIL
expected:
if not e10s: FAIL
[If modifier.total.amount.value is not a valid decimal monetary value (in this case "10-"), then throw a TypeError]
expected: FAIL
expected:
if not e10s: FAIL
[If modifier.total.amount.value is not a valid decimal monetary value (in this case "1-0"), then throw a TypeError]
expected: FAIL
expected:
if not e10s: FAIL
[If modifier.total.amount.value is not a valid decimal monetary value (in this case "1.0.0"), then throw a TypeError]
expected: FAIL
expected:
if not e10s: FAIL
[If modifier.total.amount.value is not a valid decimal monetary value (in this case "1/3"), then throw a TypeError]
expected: FAIL
expected:
if not e10s: FAIL
[If modifier.total.amount.value is not a valid decimal monetary value (in this case ""), then throw a TypeError]
expected: FAIL
expected:
if not e10s: FAIL
[If modifier.total.amount.value is not a valid decimal monetary value (in this case "null"), then throw a TypeError]
expected: FAIL
expected:
if not e10s: FAIL
[If modifier.total.amount.value is not a valid decimal monetary value (in this case " 1.0 "), then throw a TypeError]
expected: FAIL
expected:
if not e10s: FAIL
[If modifier.total.amount.value is not a valid decimal monetary value (in this case " 1.0 "), then throw a TypeError]
expected: FAIL
expected:
if not e10s: FAIL
[If modifier.total.amount.value is not a valid decimal monetary value (in this case "1.0 "), then throw a TypeError]
expected: FAIL
expected:
if not e10s: FAIL
[If modifier.total.amount.value is not a valid decimal monetary value (in this case "USD$1.0"), then throw a TypeError]
expected: FAIL
expected:
if not e10s: FAIL
[If modifier.total.amount.value is not a valid decimal monetary value (in this case "$1.0"), then throw a TypeError]
expected: FAIL
expected:
if not e10s: FAIL
[If modifier.total.amount.value is not a valid decimal monetary value (in this case " 1.0"), then throw a TypeError]
expected: FAIL
expected:
if not e10s: FAIL
[If modifier.total.amount.value is not a valid decimal monetary value (in this case "-1"), then throw a TypeError]
expected: FAIL
expected:
if not e10s: FAIL
[If modifier.total.amount.value is not a valid decimal monetary value (in this case "-1.0"), then throw a TypeError]
expected: FAIL
expected:
if not e10s: FAIL
[If modifier.total.amount.value is not a valid decimal monetary value (in this case "-1.00"), then throw a TypeError]
expected: FAIL
expected:
if not e10s: FAIL
[If modifier.total.amount.value is not a valid decimal monetary value (in this case "-1000.000"), then throw a TypeError]
expected: FAIL
expected:
if not e10s: FAIL
[If amount.value of additionalDisplayItems is is not a valid decimal monetary value (in this case "-"), then throw a TypeError]
expected: FAIL
expected:
if not e10s: FAIL
[If amount.value of additionalDisplayItems is is not a valid decimal monetary value (in this case "notdigits"), then throw a TypeError]
expected: FAIL
expected:
if not e10s: FAIL
[If amount.value of additionalDisplayItems is is not a valid decimal monetary value (in this case "ALSONOTDIGITS"), then throw a TypeError]
expected: FAIL
expected:
if not e10s: FAIL
[If amount.value of additionalDisplayItems is is not a valid decimal monetary value (in this case "10."), then throw a TypeError]
expected: FAIL
expected:
if not e10s: FAIL
[If amount.value of additionalDisplayItems is is not a valid decimal monetary value (in this case ".99"), then throw a TypeError]
expected: FAIL
expected:
if not e10s: FAIL
[If amount.value of additionalDisplayItems is is not a valid decimal monetary value (in this case "-10."), then throw a TypeError]
expected: FAIL
expected:
if not e10s: FAIL
[If amount.value of additionalDisplayItems is is not a valid decimal monetary value (in this case "-.99"), then throw a TypeError]
expected: FAIL
expected:
if not e10s: FAIL
[If amount.value of additionalDisplayItems is is not a valid decimal monetary value (in this case "10-"), then throw a TypeError]
expected: FAIL
expected:
if not e10s: FAIL
[If amount.value of additionalDisplayItems is is not a valid decimal monetary value (in this case "1-0"), then throw a TypeError]
expected: FAIL
expected:
if not e10s: FAIL
[If amount.value of additionalDisplayItems is is not a valid decimal monetary value (in this case "1.0.0"), then throw a TypeError]
expected: FAIL
expected:
if not e10s: FAIL
[If amount.value of additionalDisplayItems is is not a valid decimal monetary value (in this case "1/3"), then throw a TypeError]
expected: FAIL
expected:
if not e10s: FAIL
[If amount.value of additionalDisplayItems is is not a valid decimal monetary value (in this case ""), then throw a TypeError]
expected: FAIL
expected:
if not e10s: FAIL
[If amount.value of additionalDisplayItems is is not a valid decimal monetary value (in this case "null"), then throw a TypeError]
expected: FAIL
expected:
if not e10s: FAIL
[If amount.value of additionalDisplayItems is is not a valid decimal monetary value (in this case " 1.0 "), then throw a TypeError]
expected: FAIL
expected:
if not e10s: FAIL
[If amount.value of additionalDisplayItems is is not a valid decimal monetary value (in this case " 1.0 "), then throw a TypeError]
expected: FAIL
expected:
if not e10s: FAIL
[If amount.value of additionalDisplayItems is is not a valid decimal monetary value (in this case "1.0 "), then throw a TypeError]
expected: FAIL
expected:
if not e10s: FAIL
[If amount.value of additionalDisplayItems is is not a valid decimal monetary value (in this case "USD$1.0"), then throw a TypeError]
expected: FAIL
expected:
if not e10s: FAIL
[If amount.value of additionalDisplayItems is is not a valid decimal monetary value (in this case "$1.0"), then throw a TypeError]
expected: FAIL
expected:
if not e10s: FAIL
[If amount.value of additionalDisplayItems is is not a valid decimal monetary value (in this case " 1.0"), then throw a TypeError]
expected: FAIL
expected:
if not e10s: FAIL
[Modifier data must be JSON-serializable object (a object in this case)]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentRequest.shippingAddress must initially be null]
expected: FAIL
expected:
if not e10s: FAIL
[If options.requestShipping is not set, then request.shippingType attribute is null.]
expected: FAIL
expected:
if not e10s: FAIL
[If options.requestShipping is true, request.shippingType will be options.shippingType.]
expected: FAIL
expected:
if not e10s: FAIL
[If details.id is missing, assign an identifier]
expected: FAIL
expected:
if not e10s: FAIL
[ignore invalid payment method URLs]
expected: FAIL
expected:
if not e10s: FAIL
[Modifier method data must be JSON-serializable object]
expected: FAIL
expected:
if not e10s: FAIL
[If details.total.amount.value is not a valid decimal monetary value, then throw a TypeError]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentDetailsBase members can be 0 length]
expected: FAIL
expected:
if not e10s: FAIL
[For each item in details.displayItems: if item.amount.value is not a valid decimal monetary value, then throw a TypeError]
expected: FAIL
expected:
if not e10s: FAIL
[For each option in details.shippingOptions: if option.amount.value is not a valid decimal monetary value, then throw a TypeError]
expected: FAIL
expected:
if not e10s: FAIL
[Throw TypeError if modifier.total.amount.value is not a valid decimal monetary value]
expected: FAIL
expected:
if not e10s: FAIL
[If amount.value of additionalDisplayItems is not a valid decimal monetary value, then throw a TypeError]
expected: FAIL
expected:
if not e10s: FAIL
[Modifier data must be JSON-serializable object (an Array in this case)]
expected: FAIL
@ -444,17 +590,22 @@
expected: FAIL
[Rethrow any exceptions of JSON-serializing modifier.data]
expected: FAIL
expected:
if not e10s: FAIL
[If there is a selected shipping option, and requestShipping is set, then that option becomes synchronously selected]
expected: FAIL
expected:
if not e10s: FAIL
[If requestShipping is set, and if there is a multiple selected shipping options, only the last is selected.]
expected: FAIL
expected:
if not e10s: FAIL
[If there are any duplicate shipping option ids, and shipping is requested, then throw a TypeError]
expected: FAIL
expected:
if not e10s: FAIL
[Throw when there are duplicate shippingOption ids, even if other values are different]
expected: FAIL
expected:
if not e10s: FAIL

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

@ -1,31 +1,41 @@
[payment-request-ctor-currency-code-checks.https.html]
[Check and canonicalize valid details.total.amount]
expected: FAIL
expected:
if not e10s: FAIL
[Check and canonicalize invalid details.total.amount and rethrow any exceptions.]
expected: FAIL
expected:
if not e10s: FAIL
[Check and canonicalize valid details.displayItems amount]
expected: FAIL
expected:
if not e10s: FAIL
[Check and canonicalize invalid details.displayItems amount and rethrow RangeError.]
expected: FAIL
expected:
if not e10s: FAIL
[Check and canonicalize valid details.shippingOptions amount.]
expected: FAIL
expected:
if not e10s: FAIL
[Check and canonicalize invalid details.shippingOptions amount and rethrow RangeError.]
expected: FAIL
expected:
if not e10s: FAIL
[Check and canonicalize valid modifiers[n\].total amount.]
expected: FAIL
expected:
if not e10s: FAIL
[Check and canonicalize invalid modifiers[n\].total amount and rethrow RangeError.]
expected: FAIL
expected:
if not e10s: FAIL
[Check and canonicalize valid modifiers[n\].additionaDisplayItem amount.]
expected: FAIL
expected:
if not e10s: FAIL
[Check and canonicalize invalid modifiers[n\].additionaDisplayItem amount and rethrow RangeError.]
expected: FAIL
expected:
if not e10s: FAIL

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

@ -1,16 +1,21 @@
[payment-request-ctor-pmi-handling.https.html]
[Must support valid standard URL PMIs]
expected: FAIL
expected:
if not e10s: FAIL
[Must not throw on syntactically valid standardized payment method identifiers, even if they are not supported]
expected: FAIL
expected:
if not e10s: FAIL
[Test for validity of payment method identifiers during construction]
expected: FAIL
expected:
if not e10s: FAIL
[Constructor MUST throw if given an invalid URL-based payment method identifier]
expected: FAIL
expected:
if not e10s: FAIL
[Must throw on syntactically invalid standardized payment method identifiers]
expected: FAIL
expected:
if not e10s: FAIL

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

@ -1,10 +1,14 @@
[payment-request-id-attribute.https.html]
[PaymentRequest id attribute]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentRequest's id attribute's value can be set via PaymentDetailsInit dictionary]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentRequest's id attribute must be a UUID when PaymentDetailsInit.id is missing]
expected: FAIL
expected:
if not e10s: FAIL
if (os == "mac"): FAIL

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

@ -1,13 +1,17 @@
[payment-request-onshippingaddresschange-attribute.https.html]
[onshippingaddresschange attribute is a generic handler for "shippingaddresschange"]
expected: FAIL
expected:
if not e10s: FAIL
[onshippingaddresschange attribute is a handler for PaymentRequestUpdateEvent]
expected: FAIL
expected:
if not e10s: FAIL
[onshippingaddresschange attribute and listeners both work]
expected: FAIL
expected:
if not e10s: FAIL
[Must have a onshippingaddresschange IDL attribute]
expected: FAIL
expected:
if not e10s: FAIL

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

@ -1,13 +1,17 @@
[payment-request-onshippingoptionchange-attribute.https.html]
[onshippingoptionchange attribute is a generic handler for "shippingoptionchange"]
expected: FAIL
expected:
if not e10s: FAIL
[onshippingoptionchange attribute is a handler for PaymentRequestUpdateEvent]
expected: FAIL
expected:
if not e10s: FAIL
[onshippingoptionchange attribute and listeners both work]
expected: FAIL
expected:
if not e10s: FAIL
[Must have a onshippingoptionchange IDL attribute]
expected: FAIL
expected:
if not e10s: FAIL

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

@ -1,7 +1,9 @@
[payment-request-shippingAddress-attribute.https.html]
[Must have a .shippingAddress IDL attribute.]
expected: FAIL
expected:
if not e10s: FAIL
[.shippingAddress attribute must default to null.]
expected: FAIL
expected:
if not e10s: FAIL

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

@ -1,19 +1,25 @@
[payment-request-shippingOption-attribute.https.html]
[Must have a .shippingOption IDL attribute.]
expected: FAIL
expected:
if not e10s: FAIL
[.shippingOption attribute must default to null.]
expected: FAIL
expected:
if not e10s: FAIL
[If there is a single shipping option, but selected is false, then .shippingOption must be null.]
expected: FAIL
expected:
if not e10s: FAIL
[If there are multiple shipping options all with `selected` set to false, then .shippingOption is null.]
expected: FAIL
expected:
if not e10s: FAIL
[Given multiple shipping options, it must use the selected shipping option for .shippingOption value.]
expected: FAIL
expected:
if not e10s: FAIL
[If there are multiple of the shipping options with selected true, then .shippingOption is the last selected shipping option in order.]
expected: FAIL
expected:
if not e10s: FAIL

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

@ -1,10 +1,13 @@
[payment-request-shippingType-attribute.https.html]
[If options.requestShipping is false, then request.shippingType attribute is null.]
expected: FAIL
expected:
if not e10s: FAIL
[If options.requestShipping is true, request.shippingType will be options.shippingType.]
expected: FAIL
expected:
if not e10s: FAIL
[Must have a shippingType IDL attribute]
expected: FAIL
expected:
if not e10s: FAIL

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

@ -1,12 +1,7 @@
[payment-request-show-method.https.html]
[Throws if the promise [[state\]\] is not "created"]
expected: FAIL
[Must be possible to construct a payment request]
expected: FAIL
[Calling show() without being triggered by user interaction throws]
expected: FAIL
expected:
if not e10s: FAIL
[Throws if the promise [[state\]\] is not 'created'.]
expected: FAIL

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

@ -1,7 +1,9 @@
[onpayerdetailchange-attribute.https.html]
[PaymentResponse inherits from EventTarget]
expected: FAIL
expected:
if not e10s: FAIL
[PaymentResponse has an onpayerdetailchange in the prototype chain]
expected: FAIL
expected:
if not e10s: FAIL

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

@ -1,10 +1,2 @@
[rejects_if_not_active.https.html]
[PaymentRequest.show() aborts if the document is not active]
expected: FAIL
[PaymentRequest.show() aborts if the document is active, but not fully active]
expected: FAIL
[If a payment request is showing, but its document is navigated away (so no longer fully active), the payment request aborts.]
expected: FAIL
disabled: https://bugzilla.mozilla.org/show_bug.cgi?id=1408234