Source/WebCore/ChangeLog

 12020-06-22 Sergio Villar Senin <svillar@igalia.com>
 2
 3 [WebXR] Introducing XRLayer
 4 https://bugs.webkit.org/show_bug.cgi?id=213462
 5
 6 Reviewed by NOBODY (OOPS!).
 7
 8 The most recent drafts of the WebXR spec have added a new object called XRLayer which is the base class
 9 of the already known XRWebGLLayer. The spec only defines the latter but future extensions might define
 10 some other layer subclasses.
 11
 12 This patch fixes several checks in the IDL tests.
 13
 14 * CMakeLists.txt: Added new files.
 15 * DerivedSources.make: Ditto.
 16 * WebCore.xcodeproj/project.pbxproj: Ditto.
 17 * Modules/webxr/WebXRLayer.cpp: Added.
 18 (WebCore::WebXRLayer::WebXRLayer):
 19 * Modules/webxr/WebXRLayer.h: Ditto.
 20 * Modules/webxr/WebXRLayer.idl: Ditto.
 21 * Modules/webxr/WebXRSession.h: Export scriptExecutionContext() so it could be used from the outside.
 22 * Modules/webxr/WebXRWebGLLayer.cpp:
 23 (WebCore::WebXRWebGLLayer::WebXRWebGLLayer): Call the superclass.
 24 * Modules/webxr/WebXRWebGLLayer.h: Inherit from WebXRLayer.
 25 * Modules/webxr/WebXRWebGLLayer.idl: Ditto.
 26 * Sources.txt: Added new files.
 27 * bindings/js/WebCoreBuiltinNames.h: Added XRLayer.
 28 * dom/EventTargetFactory.in: Ditto.
 29
1302020-06-10 Sergio Villar Senin <svillar@igalia.com>
231
332 [WebXR] Add a preliminary implementation of XRWebGLLayer

Source/WebCore/CMakeLists.txt

@@if (ENABLE_WEBXR)
12141214 Modules/webxr/WebXRFrame.idl
12151215 Modules/webxr/WebXRInputSource.idl
12161216 Modules/webxr/WebXRInputSourceArray.idl
 1217 Modules/webxr/WebXRLayer.idl
12171218 Modules/webxr/WebXRPose.idl
12181219 Modules/webxr/WebXRReferenceSpace.idl
12191220 Modules/webxr/WebXRRenderState.idl

Source/WebCore/DerivedSources.make

@@JS_BINDING_IDLS = \
505505 $(WebCore)/Modules/webxr/WebXRFrame.idl \
506506 $(WebCore)/Modules/webxr/WebXRInputSourceArray.idl \
507507 $(WebCore)/Modules/webxr/WebXRInputSource.idl \
 508 $(WebCore)/Modules/webxr/WebXRLayer.idl \
508509 $(WebCore)/Modules/webxr/WebXRPose.idl \
509510 $(WebCore)/Modules/webxr/WebXRReferenceSpace.idl \
510511 $(WebCore)/Modules/webxr/WebXRRenderState.idl \

Source/WebCore/Modules/webxr/WebXRLayer.cpp

 1/*
 2 * Copyright (C) 2020 Igalia S.L. All rights reserved.
 3 *
 4 * Redistribution and use in source and binary forms, with or without
 5 * modification, are permitted provided that the following conditions
 6 * are met:
 7 * 1. Redistributions of source code must retain the above copyright
 8 * notice, this list of conditions and the following disclaimer.
 9 * 2. Redistributions in binary form must reproduce the above copyright
 10 * notice, this list of conditions and the following disclaimer in the
 11 * documentation and/or other materials provided with the distribution.
 12 *
 13 * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
 14 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
 15 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 16 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
 17 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 18 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 19 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 20 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 21 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 22 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
 23 * THE POSSIBILITY OF SUCH DAMAGE.
 24 */
 25
 26#include "config.h"
 27#include "WebXRLayer.h"
 28
 29#if ENABLE(WEBXR)
 30
 31#include <wtf/IsoMallocInlines.h>
 32
 33namespace WebCore {
 34
 35WTF_MAKE_ISO_ALLOCATED_IMPL(WebXRLayer);
 36
 37WebXRLayer::WebXRLayer(ScriptExecutionContext* context)
 38 : ContextDestructionObserver(context)
 39{
 40 ASSERT(context);
 41}
 42
 43WebXRLayer::~WebXRLayer() = default;
 44
 45} // namespace WebCore
 46
 47#endif // ENABLE(WEBXR)

Source/WebCore/Modules/webxr/WebXRLayer.h

 1/*
 2 * Copyright (C) 2020 Igalia S.L. All rights reserved.
 3 *
 4 * Redistribution and use in source and binary forms, with or without
 5 * modification, are permitted provided that the following conditions
 6 * are met:
 7 * 1. Redistributions of source code must retain the above copyright
 8 * notice, this list of conditions and the following disclaimer.
 9 * 2. Redistributions in binary form must reproduce the above copyright
 10 * notice, this list of conditions and the following disclaimer in the
 11 * documentation and/or other materials provided with the distribution.
 12 *
 13 * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
 14 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
 15 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 16 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
 17 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 18 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 19 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 20 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 21 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 22 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
 23 * THE POSSIBILITY OF SUCH DAMAGE.
 24 */
 25
 26#pragma once
 27
 28#if ENABLE(WEBXR)
 29
 30#include "ContextDestructionObserver.h"
 31#include "EventTarget.h"
 32#include <wtf/IsoMalloc.h>
 33#include <wtf/RefCounted.h>
 34
 35namespace WebCore {
 36
 37class ScriptExecutionContext;
 38
 39class WebXRLayer : public RefCounted<WebXRLayer>, public EventTargetWithInlineData, public ContextDestructionObserver {
 40 WTF_MAKE_ISO_ALLOCATED(WebXRLayer);
 41public:
 42 ~WebXRLayer();
 43
 44 using RefCounted<WebXRLayer>::ref;
 45 using RefCounted<WebXRLayer>::deref;
 46
 47protected:
 48 WebXRLayer(ScriptExecutionContext*);
 49
 50 // EventTarget
 51 ScriptExecutionContext* scriptExecutionContext() const override { return ContextDestructionObserver::scriptExecutionContext(); }
 52
 53private:
 54 // EventTarget
 55 EventTargetInterface eventTargetInterface() const override { return WebXRLayerEventTargetInterfaceType; }
 56 void refEventTarget() override { ref(); }
 57 void derefEventTarget() override { deref(); }
 58};
 59
 60} // namespace WebCore
 61
 62#endif // ENABLE(WEBXR)

Source/WebCore/Modules/webxr/WebXRLayer.idl

 1/*
 2 * Copyright (C) 2020 Igalia S.L. All rights reserved.
 3 *
 4 * Redistribution and use in source and binary forms, with or without
 5 * modification, are permitted provided that the following conditions
 6 * are met:
 7 * 1. Redistributions of source code must retain the above copyright
 8 * notice, this list of conditions and the following disclaimer.
 9 * 2. Redistributions in binary form must reproduce the above copyright
 10 * notice, this list of conditions and the following disclaimer in the
 11 * documentation and/or other materials provided with the distribution.
 12 *
 13 * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
 14 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
 15 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 16 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
 17 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 18 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 19 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 20 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 21 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 22 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
 23 * THE POSSIBILITY OF SUCH DAMAGE.
 24 */
 25
 26[
 27 EnabledAtRuntime=WebXR,
 28 Conditional=WEBXR,
 29 SecureContext,
 30 Exposed=Window,
 31 InterfaceName=XRLayer,
 32] interface WebXRLayer : EventTarget {
 33};

Source/WebCore/Modules/webxr/WebXRSession.h

@@public:
7676 unsigned requestAnimationFrame(Ref<XRFrameRequestCallback>&&);
7777 void cancelAnimationFrame(unsigned callbackId);
7878
 79 // EventTarget.
 80 ScriptExecutionContext* scriptExecutionContext() const override { return ActiveDOMObject::scriptExecutionContext(); }
 81
7982 void end(EndPromise&&);
8083
8184 bool ended() const { return m_ended; }

@@private:
8790
8891 // EventTarget
8992 EventTargetInterface eventTargetInterface() const override { return WebXRSessionEventTargetInterfaceType; }
90  ScriptExecutionContext* scriptExecutionContext() const override { return ActiveDOMObject::scriptExecutionContext(); }
9193 void refEventTarget() override { ref(); }
9294 void derefEventTarget() override { deref(); }
9395

Source/WebCore/Modules/webxr/WebXRWebGLLayer.cpp

3838#include "WebXRSession.h"
3939#include "WebXRViewport.h"
4040#include "XRWebGLLayerInit.h"
 41#include <wtf/IsoMallocInlines.h>
4142#include <wtf/Scope.h>
4243
4344namespace WebCore {
4445
 46WTF_MAKE_ISO_ALLOCATED_IMPL(WebXRWebGLLayer);
 47
4548// https://immersive-web.github.io/webxr/#dom-xrwebgllayer-xrwebgllayer
4649ExceptionOr<Ref<WebXRWebGLLayer>> WebXRWebGLLayer::create(WebXRSession& session, WebXRRenderingContext&& context, const XRWebGLLayerInit& init)
4750{

@@IntSize WebXRWebGLLayer::computeRecommendedWebGLFramebufferResolution()
102105}
103106
104107WebXRWebGLLayer::WebXRWebGLLayer(WebXRSession& session, WebXRRenderingContext&& context, const XRWebGLLayerInit& init)
105  : m_session(makeRef(session))
 108 : WebXRLayer(session.scriptExecutionContext())
 109 , m_session(makeRef(session))
106110 , m_context(WTFMove(context))
107111{
108112 // 7. Initialize layer’s ignoreDepthValues as follows:

Source/WebCore/Modules/webxr/WebXRWebGLLayer.h

2828#if ENABLE(WEBXR)
2929
3030#include "ExceptionOr.h"
 31#include "WebXRLayer.h"
3132#include <wtf/IsoMalloc.h>
3233#include <wtf/Ref.h>
33 #include <wtf/RefCounted.h>
3434#include <wtf/RefPtr.h>
3535#include <wtf/Variant.h>
3636

@@class WebXRView;
4747class WebXRViewport;
4848struct XRWebGLLayerInit;
4949
50 class WebXRWebGLLayer : public RefCounted<WebXRWebGLLayer> {
 50class WebXRWebGLLayer : public WebXRLayer {
 51 WTF_MAKE_ISO_ALLOCATED(WebXRWebGLLayer);
5152public:
5253
5354 using WebXRRenderingContext = WTF::Variant<

@@public:
5859 >;
5960
6061 static ExceptionOr<Ref<WebXRWebGLLayer>> create(WebXRSession&, WebXRRenderingContext&&, const XRWebGLLayerInit&);
61  ~WebXRWebGLLayer();
 62 virtual ~WebXRWebGLLayer();
6263
6364 bool antialias() const;
6465 bool ignoreDepthValues() const;

Source/WebCore/Modules/webxr/WebXRWebGLLayer.idl

@@typedef (WebGLRenderingContext) WebXRWebGLRenderingContext;
3434 Conditional=WEBXR,
3535 SecureContext,
3636 Exposed=Window,
37  ImplementationLacksVTable,
 37 JSGenerateToJSObject,
 38 JSGenerateToNativeObject,
3839 InterfaceName=XRWebGLLayer
39 ] interface WebXRWebGLLayer {
 40] interface WebXRWebGLLayer : WebXRLayer {
4041 [MayThrowException] constructor(WebXRSession session, WebXRWebGLRenderingContext context, optional XRWebGLLayerInit layerInit);
4142
4243 // Attributes

Source/WebCore/Sources.txt

@@Modules/webxr/WebXRBoundedReferenceSpace.cpp @no-unify
423423Modules/webxr/WebXRFrame.cpp @no-unify
424424Modules/webxr/WebXRInputSourceArray.cpp @no-unify
425425Modules/webxr/WebXRInputSource.cpp @no-unify
 426Modules/webxr/WebXRLayer.cpp @no-unify
426427Modules/webxr/WebXRPose.cpp @no-unify
427428Modules/webxr/WebXRReferenceSpace.cpp @no-unify
428429Modules/webxr/WebXRRenderState.cpp @no-unify

@@JSWebXRView.cpp
36383639JSWebXRViewerPose.cpp
36393640JSWebXRViewport.cpp
36403641JSXRVisibilityState.cpp
 3642JSWebXRLayer.cpp
36413643JSWebXRWebGLLayer.cpp
36423644JSXRWebGLLayerInit.cpp
36433645

Source/WebCore/WebCore.xcodeproj/project.pbxproj

47664766 E12A9F4A248A99E2003F06C8 /* XRInteractionMode.h in Headers */ = {isa = PBXBuildFile; fileRef = E12A9F48248A99E0003F06C8 /* XRInteractionMode.h */; };
47674767 E12DE7181E4B74A600F9ACCF /* GridTrackSizingAlgorithm.h in Headers */ = {isa = PBXBuildFile; fileRef = E12DE7161E4B748700F9ACCF /* GridTrackSizingAlgorithm.h */; };
47684768 E12EDB7B0B308A78002704B6 /* EventTarget.h in Headers */ = {isa = PBXBuildFile; fileRef = E12EDB7A0B308A78002704B6 /* EventTarget.h */; settings = {ATTRIBUTES = (Private, ); }; };
 4769 E12FDAFF24A0FD200070236E /* WebXRLayer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E12FDAFB24A0FD1C0070236E /* WebXRLayer.cpp */; };
 4770 E12FDB0024A0FD200070236E /* WebXRLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = E12FDAFD24A0FD1E0070236E /* WebXRLayer.h */; };
47694771 E134F5AB12EE343F004EC58D /* IntRectHash.h in Headers */ = {isa = PBXBuildFile; fileRef = E134F5AA12EE343F004EC58D /* IntRectHash.h */; settings = {ATTRIBUTES = (Private, ); }; };
47704772 E139866415478474001E3F65 /* StyleResolver.h in Headers */ = {isa = PBXBuildFile; fileRef = E139866215478474001E3F65 /* StyleResolver.h */; };
47714773 E13EF3441684ECF40034C83F /* NetworkStorageSession.h in Headers */ = {isa = PBXBuildFile; fileRef = E13EF3421684ECF40034C83F /* NetworkStorageSession.h */; settings = {ATTRIBUTES = (Private, ); }; };

1519615198 E12DE7161E4B748700F9ACCF /* GridTrackSizingAlgorithm.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GridTrackSizingAlgorithm.h; sourceTree = "<group>"; };
1519715199 E12EDB7A0B308A78002704B6 /* EventTarget.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EventTarget.h; sourceTree = "<group>"; };
1519815200 E12EDBE90B308E0B002704B6 /* EventTarget.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = EventTarget.cpp; sourceTree = "<group>"; };
 15201 E12FDAFB24A0FD1C0070236E /* WebXRLayer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WebXRLayer.cpp; sourceTree = "<group>"; };
 15202 E12FDAFD24A0FD1E0070236E /* WebXRLayer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebXRLayer.h; sourceTree = "<group>"; };
 15203 E12FDAFE24A0FD1F0070236E /* WebXRLayer.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = WebXRLayer.idl; sourceTree = "<group>"; };
1519915204 E134F5AA12EE343F004EC58D /* IntRectHash.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IntRectHash.h; sourceTree = "<group>"; };
1520015205 E139866115478474001E3F65 /* StyleResolver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = StyleResolver.cpp; sourceTree = "<group>"; };
1520115206 E139866215478474001E3F65 /* StyleResolver.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = StyleResolver.h; sourceTree = "<group>"; };

2749227497 E1EE8AE62412B17000E794D6 /* WebXRInputSourceArray.cpp */,
2749327498 E1EE8ADD2412B17000E794D6 /* WebXRInputSourceArray.h */,
2749427499 E19490932434F16000416A99 /* WebXRInputSourceArray.idl */,
 27500 E12FDAFB24A0FD1C0070236E /* WebXRLayer.cpp */,
 27501 E12FDAFD24A0FD1E0070236E /* WebXRLayer.h */,
 27502 E12FDAFE24A0FD1F0070236E /* WebXRLayer.idl */,
2749527503 E1EE8AE52412B17000E794D6 /* WebXRPose.cpp */,
2749627504 E1EE8AE12412B17000E794D6 /* WebXRPose.h */,
2749727505 E19490A12434F16800416A99 /* WebXRPose.idl */,

3381833826 E1EE8B8A2413191F00E794D6 /* WebXRFrame.h in Headers */,
3381933827 E1EE8BA82413196300E794D6 /* WebXRInputSource.h in Headers */,
3382033828 E1EE8B862413191F00E794D6 /* WebXRInputSourceArray.h in Headers */,
 33829 E12FDB0024A0FD200070236E /* WebXRLayer.h in Headers */,
3382133830 E1EE8B882413191F00E794D6 /* WebXRPose.h in Headers */,
3382233831 E1EE8BA62413196300E794D6 /* WebXRReferenceSpace.h in Headers */,
3382333832 E1EE8B812413191F00E794D6 /* WebXRRenderState.h in Headers */,

3510235111 E1EE8B932413195000E794D6 /* WebXRFrame.cpp in Sources */,
3510335112 E1EE8BA12413196300E794D6 /* WebXRInputSource.cpp in Sources */,
3510435113 E1EE8B8C2413191F00E794D6 /* WebXRInputSourceArray.cpp in Sources */,
 35114 E12FDAFF24A0FD200070236E /* WebXRLayer.cpp in Sources */,
3510535115 E1EE8B8B2413191F00E794D6 /* WebXRPose.cpp in Sources */,
3510635116 E1EE8B7F2413191F00E794D6 /* WebXRReferenceSpace.cpp in Sources */,
3510735117 E1EE8B7C2413191F00E794D6 /* WebXRRenderState.cpp in Sources */,

Source/WebCore/bindings/js/WebCoreBuiltinNames.h

@@namespace WebCore {
251251 macro(XRInputSourceArray) \
252252 macro(XRInputSourceEvent) \
253253 macro(XRInputSourcesChangeEvent) \
 254 macro(XRLayer) \
254255 macro(XRPose) \
255256 macro(XRReferenceSpace) \
256257 macro(XRReferenceSpaceEvent) \

Source/WebCore/dom/EventTargetFactory.in

@@Worker
6060WorkletGlobalScope conditional=CSS_PAINTING_API
6161XMLHttpRequest
6262XMLHttpRequestUpload
 63WebXRLayer conditional=WEBXR
6364WebXRSession conditional=WEBXR
6465WebXRSpace conditional=WEBXR
6566WebXRSystem conditional=WEBXR

LayoutTests/imported/w3c/ChangeLog

 12020-06-22 Sergio Villar Senin <svillar@igalia.com>
 2
 3 [WebXR] Introducing XRLayer
 4 https://bugs.webkit.org/show_bug.cgi?id=213462
 5
 6 Reviewed by NOBODY (OOPS!).
 7
 8 * web-platform-tests/webxr/idlharness.https.window-expected.txt: Replace FAIL by PASS expectations
 9 for XRLayer interface.
 10
1112020-06-10 Sergio Villar Senin <svillar@igalia.com>
212
313 [WebXR] Add a preliminary implementation of XRWebGLLayer

LayoutTests/imported/w3c/web-platform-tests/webxr/idlharness.https.window-expected.txt

@@PASS XRInputSourceArray interface: existence and properties of interface prototy
153153PASS XRInputSourceArray interface: existence and properties of interface prototype object's @@unscopables property
154154PASS XRInputSourceArray interface: iterable<XRInputSource>
155155PASS XRInputSourceArray interface: attribute length
156 FAIL XRLayer interface: existence and properties of interface object assert_own_property: self does not have own property "XRLayer" expected property "XRLayer" missing
157 FAIL XRLayer interface object length assert_own_property: self does not have own property "XRLayer" expected property "XRLayer" missing
158 FAIL XRLayer interface object name assert_own_property: self does not have own property "XRLayer" expected property "XRLayer" missing
159 FAIL XRLayer interface: existence and properties of interface prototype object assert_own_property: self does not have own property "XRLayer" expected property "XRLayer" missing
160 FAIL XRLayer interface: existence and properties of interface prototype object's "constructor" property assert_own_property: self does not have own property "XRLayer" expected property "XRLayer" missing
161 FAIL XRLayer interface: existence and properties of interface prototype object's @@unscopables property assert_own_property: self does not have own property "XRLayer" expected property "XRLayer" missing
162 FAIL XRWebGLLayer interface: existence and properties of interface object assert_own_property: self does not have own property "XRLayer" expected property "XRLayer" missing
 156PASS XRLayer interface: existence and properties of interface object
 157PASS XRLayer interface object length
 158PASS XRLayer interface object name
 159PASS XRLayer interface: existence and properties of interface prototype object
 160PASS XRLayer interface: existence and properties of interface prototype object's "constructor" property
 161PASS XRLayer interface: existence and properties of interface prototype object's @@unscopables property
 162PASS XRWebGLLayer interface: existence and properties of interface object
163163PASS XRWebGLLayer interface object length
164164PASS XRWebGLLayer interface object name
165 FAIL XRWebGLLayer interface: existence and properties of interface prototype object assert_own_property: self does not have own property "XRLayer" expected property "XRLayer" missing
 165PASS XRWebGLLayer interface: existence and properties of interface prototype object
166166PASS XRWebGLLayer interface: existence and properties of interface prototype object's "constructor" property
167167PASS XRWebGLLayer interface: existence and properties of interface prototype object's @@unscopables property
168168PASS XRWebGLLayer interface: attribute antialias