diff --git a/test/fixtures/wpt/interfaces/fedcm.idl b/test/fixtures/wpt/interfaces/fedcm.idl index ba99f1174c8..443d3311a24 100644 --- a/test/fixtures/wpt/interfaces/fedcm.idl +++ b/test/fixtures/wpt/interfaces/fedcm.idl @@ -43,6 +43,7 @@ dictionary IdentityProviderRequestOptions : IdentityProviderConfig { USVString nonce; DOMString loginHint; DOMString domainHint; + any params; }; dictionary IdentityProviderWellKnown { diff --git a/test/fixtures/wpt/interfaces/fenced-frame.idl b/test/fixtures/wpt/interfaces/fenced-frame.idl index 8c5fa31bea8..cdc35d04ca4 100644 --- a/test/fixtures/wpt/interfaces/fenced-frame.idl +++ b/test/fixtures/wpt/interfaces/fenced-frame.idl @@ -74,9 +74,14 @@ interface Fence { undefined reportEvent(optional ReportEventType event = {}); undefined setReportEventDataForAutomaticBeacons(optional FenceEvent event = {}); sequence getNestedConfigs(); + undefined notifyEvent(Event event); }; partial interface Window { // Collection of fenced frame APIs readonly attribute Fence? fence; }; + +partial interface mixin GlobalEventHandlers { + attribute EventHandler onfencedtreeclick; +}; diff --git a/test/fixtures/wpt/interfaces/html.idl b/test/fixtures/wpt/interfaces/html.idl index 25e1f8a4ca0..c295941fcb2 100644 --- a/test/fixtures/wpt/interfaces/html.idl +++ b/test/fixtures/wpt/interfaces/html.idl @@ -881,10 +881,12 @@ interface HTMLInputElement : HTMLElement { [HTMLConstructor] constructor(); [CEReactions] attribute DOMString accept; + [CEReactions] attribute boolean alpha; [CEReactions] attribute DOMString alt; [CEReactions] attribute DOMString autocomplete; [CEReactions] attribute boolean defaultChecked; attribute boolean checked; + [CEReactions] attribute DOMString colorSpace; [CEReactions] attribute DOMString dirName; [CEReactions] attribute boolean disabled; readonly attribute HTMLFormElement? form; diff --git a/test/fixtures/wpt/interfaces/invokers.tentative.idl b/test/fixtures/wpt/interfaces/invokers.tentative.idl index 4724d7deb08..046a365939c 100644 --- a/test/fixtures/wpt/interfaces/invokers.tentative.idl +++ b/test/fixtures/wpt/interfaces/invokers.tentative.idl @@ -1,15 +1,15 @@ -interface mixin InvokerElement { - [CEReactions,Reflect=invoketarget] attribute Element? commandForElement; - [CEReactions,Reflect=invokeaction] attribute DOMString command; +interface mixin CommandElement { + [CEReactions,Reflect=commandfor] attribute Element? commandForElement; + [CEReactions,Reflect=command] attribute DOMString command; }; interface CommandEvent : Event { constructor(DOMString type, optional CommandEventInit eventInitDict = {}); - readonly attribute Element? invoker; + readonly attribute Element? source; readonly attribute DOMString command; }; dictionary CommandEventInit : EventInit { - Element? invoker = null; + Element? source = null; DOMString command = ""; }; diff --git a/test/fixtures/wpt/interfaces/mediasession.idl b/test/fixtures/wpt/interfaces/mediasession.idl index 5c6942be5a0..9c050b0efdf 100644 --- a/test/fixtures/wpt/interfaces/mediasession.idl +++ b/test/fixtures/wpt/interfaces/mediasession.idl @@ -59,7 +59,7 @@ interface MediaMetadata { attribute DOMString title; attribute DOMString artist; attribute DOMString album; - attribute FrozenArray artwork; + attribute FrozenArray artwork; [SameObject] readonly attribute FrozenArray chapterInfo; }; diff --git a/test/fixtures/wpt/interfaces/private-aggregation-api.idl b/test/fixtures/wpt/interfaces/private-aggregation-api.idl index cee17c63f04..c89a4687abb 100644 --- a/test/fixtures/wpt/interfaces/private-aggregation-api.idl +++ b/test/fixtures/wpt/interfaces/private-aggregation-api.idl @@ -19,55 +19,3 @@ dictionary PAHistogramContribution { dictionary PADebugModeOptions { required bigint debugKey; }; - -partial interface InterestGroupScriptRunnerGlobalScope { - readonly attribute PrivateAggregation privateAggregation; -}; - -dictionary PASignalValue { - required DOMString baseValue; - double scale; - (bigint or long) offset; -}; - -dictionary PAExtendedHistogramContribution { - required (PASignalValue or bigint) bucket; - required (PASignalValue or long) value; - bigint filteringId = 0; -}; - -[Exposed=InterestGroupScriptRunnerGlobalScope, SecureContext] -partial interface PrivateAggregation { - undefined contributeToHistogramOnEvent( - DOMString event, PAExtendedHistogramContribution contribution); -}; - -dictionary AuctionReportBuyersConfig { - required bigint bucket; - required double scale; -}; - -dictionary AuctionReportBuyerDebugModeConfig { - boolean enabled = false; - - // Must only be provided if `enabled` is true. - bigint? debugKey; -}; - -partial dictionary AuctionAdConfig { - sequence auctionReportBuyerKeys; - record auctionReportBuyers; - AuctionReportBuyerDebugModeConfig auctionReportBuyerDebugModeConfig; -}; - -dictionary ProtectedAudiencePrivateAggregationConfig { - USVString aggregationCoordinatorOrigin; -}; - -partial dictionary AuctionAdConfig { - ProtectedAudiencePrivateAggregationConfig privateAggregationConfig; -}; - -partial dictionary AuctionAdInterestGroup { - ProtectedAudiencePrivateAggregationConfig privateAggregationConfig; -}; diff --git a/test/fixtures/wpt/interfaces/resource-timing.idl b/test/fixtures/wpt/interfaces/resource-timing.idl index 33fed05b756..66f2841d744 100644 --- a/test/fixtures/wpt/interfaces/resource-timing.idl +++ b/test/fixtures/wpt/interfaces/resource-timing.idl @@ -18,6 +18,7 @@ interface PerformanceResourceTiming : PerformanceEntry { readonly attribute DOMHighResTimeStamp connectEnd; readonly attribute DOMHighResTimeStamp secureConnectionStart; readonly attribute DOMHighResTimeStamp requestStart; + readonly attribute DOMHighResTimeStamp finalResponseHeadersStart; readonly attribute DOMHighResTimeStamp firstInterimResponseStart; readonly attribute DOMHighResTimeStamp responseStart; readonly attribute DOMHighResTimeStamp responseEnd; diff --git a/test/fixtures/wpt/interfaces/turtledove.idl b/test/fixtures/wpt/interfaces/turtledove.idl index ff48d311914..c416760d595 100644 --- a/test/fixtures/wpt/interfaces/turtledove.idl +++ b/test/fixtures/wpt/interfaces/turtledove.idl @@ -15,6 +15,7 @@ dictionary AuctionAd { USVString buyerReportingId; USVString buyerAndSellerReportingId; + sequence selectableBuyerAndSellerReportingIds; sequence allowedReportingOrigins; DOMString adRenderId; }; @@ -47,11 +48,16 @@ dictionary GenerateBidInterestGroup { record> sizeGroups; }; +dictionary ProtectedAudiencePrivateAggregationConfig { + USVString aggregationCoordinatorOrigin; +}; + dictionary AuctionAdInterestGroup : GenerateBidInterestGroup { double priority = 0.0; record prioritySignalsOverrides; required double lifetimeMs; DOMString additionalBidKey; + ProtectedAudiencePrivateAggregationConfig privateAggregationConfig; }; [SecureContext] @@ -76,6 +82,18 @@ partial interface Navigator { readonly attribute boolean deprecatedRunAdAuctionEnforcesKAnonymity; }; +dictionary AuctionReportBuyersConfig { + required bigint bucket; + required double scale; +}; + +dictionary AuctionReportBuyerDebugModeConfig { + boolean enabled = false; + + // Must only be provided if `enabled` is true. + bigint? debugKey; +}; + dictionary AuctionRealTimeReportingConfig { required DOMString type; }; @@ -89,21 +107,27 @@ dictionary AuctionAdConfig { sequence interestGroupBuyers; Promise auctionSignals; Promise sellerSignals; - Promise directFromSellerSignalsHeaderAdSlot; - Promise> deprecatedRenderURLReplacements; + Promise directFromSellerSignalsHeaderAdSlot; + Promise?> deprecatedRenderURLReplacements; unsigned long long sellerTimeout; unsigned short sellerExperimentGroupId; - Promise> perBuyerSignals; - Promise> perBuyerTimeouts; - Promise> perBuyerCumulativeTimeouts; + Promise?> perBuyerSignals; + Promise?> perBuyerTimeouts; + Promise?> perBuyerCumulativeTimeouts; unsigned long long reportingTimeout; USVString sellerCurrency; - Promise> perBuyerCurrencies; + Promise?> perBuyerCurrencies; record perBuyerMultiBidLimits; record perBuyerGroupLimits; record perBuyerExperimentGroupIds; record> perBuyerPrioritySignals; + + sequence auctionReportBuyerKeys; + record auctionReportBuyers; + AuctionReportBuyerDebugModeConfig auctionReportBuyerDebugModeConfig; sequence requiredSellerCapabilities; + ProtectedAudiencePrivateAggregationConfig privateAggregationConfig; + record requestedSize; sequence> allSlotsRequestedSizes; Promise additionalBids; @@ -144,6 +168,18 @@ dictionary AdAuctionDataBuyerConfig { unsigned long targetSize; }; +dictionary StorageInterestGroup : AuctionAdInterestGroup { + unsigned long long joinCount; + unsigned long long bidCount; + sequence prevWinsMs; + USVString joiningOrigin; + long long timeSinceGroupJoinedMs; + long long lifetimeRemainingMs; + long long timeSinceLastUpdateMs; + long long timeUntilNextUpdateMs; + unsigned long long estimatedSize; +}; + [SecureContext] partial interface Navigator { Promise createAuctionNonce(); @@ -151,6 +187,25 @@ partial interface Navigator { [Exposed=InterestGroupScriptRunnerGlobalScope] interface InterestGroupScriptRunnerGlobalScope { + readonly attribute PrivateAggregation? privateAggregation; +}; + +dictionary PASignalValue { + required DOMString baseValue; + double scale; + (bigint or long) offset; +}; + +dictionary PAExtendedHistogramContribution { + required (PASignalValue or bigint) bucket; + required (PASignalValue or long) value; + bigint filteringId = 0; +}; + +[Exposed=InterestGroupScriptRunnerGlobalScope] +partial interface PrivateAggregation { + undefined contributeToHistogramOnEvent( + DOMString event, PAExtendedHistogramContribution contribution); }; [Exposed=InterestGroupBiddingAndScoringScriptRunnerGlobalScope] @@ -198,6 +253,7 @@ dictionary GenerateBidOutput { DOMString bidCurrency; (DOMString or AdRender) render; any ad; + USVString selectedBuyerAndSellerReportingId; sequence<(DOMString or AdRender)> adComponents; double adCost; unrestricted double modelingSignals; @@ -294,6 +350,7 @@ dictionary ReportingBrowserSignals { USVString componentSeller; USVString buyerAndSellerReportingId; + USVString selectedBuyerAndSellerReportingId; }; dictionary ReportResultBrowserSignals : ReportingBrowserSignals { diff --git a/test/fixtures/wpt/interfaces/user-timing.idl b/test/fixtures/wpt/interfaces/user-timing.idl index 28ee8aac2b1..fc6d3082258 100644 --- a/test/fixtures/wpt/interfaces/user-timing.idl +++ b/test/fixtures/wpt/interfaces/user-timing.idl @@ -1,7 +1,7 @@ // GENERATED CONTENT - DO NOT EDIT // Content was automatically extracted by Reffy into webref // (https://github.com/w3c/webref) -// Source: User Timing Level 3 (https://w3c.github.io/user-timing/) +// Source: User Timing (https://w3c.github.io/user-timing/) dictionary PerformanceMarkOptions { any detail; diff --git a/test/fixtures/wpt/interfaces/web-animations.idl b/test/fixtures/wpt/interfaces/web-animations.idl index 1bc82fab119..c36588af478 100644 --- a/test/fixtures/wpt/interfaces/web-animations.idl +++ b/test/fixtures/wpt/interfaces/web-animations.idl @@ -136,6 +136,7 @@ dictionary KeyframeAnimationOptions : KeyframeEffectOptions { dictionary GetAnimationsOptions { boolean subtree = false; + CSSOMString? pseudoElement = null; }; partial interface Document { diff --git a/test/fixtures/wpt/interfaces/webaudio.idl b/test/fixtures/wpt/interfaces/webaudio.idl index 74aab7e2362..d14eb96820f 100644 --- a/test/fixtures/wpt/interfaces/webaudio.idl +++ b/test/fixtures/wpt/interfaces/webaudio.idl @@ -1,7 +1,7 @@ // GENERATED CONTENT - DO NOT EDIT // Content was automatically extracted by Reffy into webref // (https://github.com/w3c/webref) -// Source: Web Audio API (https://webaudio.github.io/web-audio-api/) +// Source: Web Audio API 1.1 (https://webaudio.github.io/web-audio-api/) enum AudioContextState { "suspended", @@ -33,8 +33,8 @@ interface BaseAudioContext : EventTarget { AnalyserNode createAnalyser (); BiquadFilterNode createBiquadFilter (); AudioBuffer createBuffer (unsigned long numberOfChannels, - unsigned long length, - float sampleRate); + unsigned long length, + float sampleRate); AudioBufferSourceNode createBufferSource (); ChannelMergerNode createChannelMerger (optional unsigned long numberOfInputs = 6); ChannelSplitterNode createChannelSplitter ( @@ -45,12 +45,12 @@ interface BaseAudioContext : EventTarget { DynamicsCompressorNode createDynamicsCompressor (); GainNode createGain (); IIRFilterNode createIIRFilter (sequence feedforward, - sequence feedback); + sequence feedback); OscillatorNode createOscillator (); PannerNode createPanner (); PeriodicWave createPeriodicWave (sequence real, - sequence imag, - optional PeriodicWaveConstraints constraints = {}); + sequence imag, + optional PeriodicWaveConstraints constraints = {}); ScriptProcessorNode createScriptProcessor( optional unsigned long bufferSize = 0, optional unsigned long numberOfInputChannels = 2, diff --git a/test/fixtures/wpt/interfaces/webcodecs.idl b/test/fixtures/wpt/interfaces/webcodecs.idl index 52731257f1f..5cd4adf9348 100644 --- a/test/fixtures/wpt/interfaces/webcodecs.idl +++ b/test/fixtures/wpt/interfaces/webcodecs.idl @@ -317,6 +317,8 @@ interface VideoFrame { readonly attribute unsigned long codedHeight; readonly attribute DOMRectReadOnly? codedRect; readonly attribute DOMRectReadOnly? visibleRect; + readonly attribute double rotation; + readonly attribute boolean flip; readonly attribute unsigned long displayWidth; readonly attribute unsigned long displayHeight; readonly attribute unsigned long long? duration; // microseconds @@ -340,10 +342,13 @@ dictionary VideoFrameInit { AlphaOption alpha = "keep"; // Default matches image. May be used to efficiently crop. Will trigger - // new computation of displayWidth and displayHeight using image’s pixel + // new computation of displayWidth and displayHeight using image's pixel // aspect ratio unless an explicit displayWidth and displayHeight are given. DOMRectInit visibleRect; + double rotation = 0; + boolean flip = false; + // Default matches image unless visibleRect is provided. [EnforceRange] unsigned long displayWidth; [EnforceRange] unsigned long displayHeight; @@ -364,6 +369,9 @@ dictionary VideoFrameBufferInit { // Default visible rect is coded size positioned at (0,0) DOMRectInit visibleRect; + double rotation = 0; + boolean flip = false; + // Default display dimensions match visibleRect. [EnforceRange] unsigned long displayWidth; [EnforceRange] unsigned long displayHeight; diff --git a/test/fixtures/wpt/interfaces/webgpu.idl b/test/fixtures/wpt/interfaces/webgpu.idl index 421685c7a8f..ebd3b4ab67e 100644 --- a/test/fixtures/wpt/interfaces/webgpu.idl +++ b/test/fixtures/wpt/interfaces/webgpu.idl @@ -119,6 +119,7 @@ enum GPUFeatureName { "rg11b10ufloat-renderable", "bgra8unorm-storage", "float32-filterable", + "float32-blendable", "clip-distances", "dual-source-blending", }; @@ -569,7 +570,7 @@ GPUPipelineLayout includes GPUObjectBase; dictionary GPUPipelineLayoutDescriptor : GPUObjectDescriptorBase { - required sequence bindGroupLayouts; + required sequence bindGroupLayouts; }; [Exposed=(Window, Worker), SecureContext] @@ -809,22 +810,31 @@ enum GPUIndexFormat { }; enum GPUVertexFormat { + "uint8", "uint8x2", "uint8x4", + "sint8", "sint8x2", "sint8x4", + "unorm8", "unorm8x2", "unorm8x4", + "snorm8", "snorm8x2", "snorm8x4", + "uint16", "uint16x2", "uint16x4", + "sint16", "sint16x2", "sint16x4", + "unorm16", "unorm16x2", "unorm16x4", + "snorm16", "snorm16x2", "snorm16x4", + "float16", "float16x2", "float16x4", "float32", @@ -840,6 +850,7 @@ enum GPUVertexFormat { "sint32x3", "sint32x4", "unorm10-10-10-2", + "unorm8x4-bgra", }; enum GPUVertexStepMode { @@ -865,26 +876,26 @@ dictionary GPUVertexAttribute { required GPUIndex32 shaderLocation; }; -dictionary GPUImageDataLayout { +dictionary GPUTexelCopyBufferLayout { GPUSize64 offset = 0; GPUSize32 bytesPerRow; GPUSize32 rowsPerImage; }; -dictionary GPUImageCopyBuffer - : GPUImageDataLayout { +dictionary GPUTexelCopyBufferInfo + : GPUTexelCopyBufferLayout { required GPUBuffer buffer; }; -dictionary GPUImageCopyTexture { +dictionary GPUTexelCopyTextureInfo { required GPUTexture texture; GPUIntegerCoordinate mipLevel = 0; GPUOrigin3D origin = {}; GPUTextureAspect aspect = "all"; }; -dictionary GPUImageCopyTextureTagged - : GPUImageCopyTexture { +dictionary GPUCopyExternalImageDestInfo + : GPUTexelCopyTextureInfo { PredefinedColorSpace colorSpace = "srgb"; boolean premultipliedAlpha = false; }; @@ -895,10 +906,10 @@ typedef (ImageBitmap or HTMLVideoElement or VideoFrame or HTMLCanvasElement or - OffscreenCanvas) GPUImageCopyExternalImageSource; + OffscreenCanvas) GPUCopyExternalImageSource; -dictionary GPUImageCopyExternalImage { - required GPUImageCopyExternalImageSource source; +dictionary GPUCopyExternalImageSourceInfo { + required GPUCopyExternalImageSource source; GPUOrigin2D origin = {}; boolean flipY = false; }; @@ -928,18 +939,18 @@ interface GPUCommandEncoder { GPUSize64 size); undefined copyBufferToTexture( - GPUImageCopyBuffer source, - GPUImageCopyTexture destination, + GPUTexelCopyBufferInfo source, + GPUTexelCopyTextureInfo destination, GPUExtent3D copySize); undefined copyTextureToBuffer( - GPUImageCopyTexture source, - GPUImageCopyBuffer destination, + GPUTexelCopyTextureInfo source, + GPUTexelCopyBufferInfo destination, GPUExtent3D copySize); undefined copyTextureToTexture( - GPUImageCopyTexture source, - GPUImageCopyTexture destination, + GPUTexelCopyTextureInfo source, + GPUTexelCopyTextureInfo destination, GPUExtent3D copySize); undefined clearBuffer( @@ -1144,14 +1155,14 @@ interface GPUQueue { optional GPUSize64 size); undefined writeTexture( - GPUImageCopyTexture destination, + GPUTexelCopyTextureInfo destination, AllowSharedBufferSource data, - GPUImageDataLayout dataLayout, + GPUTexelCopyBufferLayout dataLayout, GPUExtent3D size); undefined copyExternalImageToTexture( - GPUImageCopyExternalImage source, - GPUImageCopyTextureTagged destination, + GPUCopyExternalImageSourceInfo source, + GPUCopyExternalImageDestInfo destination, GPUExtent3D copySize); }; GPUQueue includes GPUObjectBase; @@ -1274,7 +1285,6 @@ dictionary GPUUncapturedErrorEventInit : EventInit { }; partial interface GPUDevice { - [Exposed=(Window, Worker)] attribute EventHandler onuncapturederror; }; diff --git a/test/fixtures/wpt/interfaces/webnn.idl b/test/fixtures/wpt/interfaces/webnn.idl index 8329e7d2b33..112fa2bf832 100644 --- a/test/fixtures/wpt/interfaces/webnn.idl +++ b/test/fixtures/wpt/interfaces/webnn.idl @@ -95,8 +95,8 @@ dictionary MLOperandDescriptor { [SecureContext, Exposed=(Window, DedicatedWorker)] interface MLOperand { - MLOperandDataType dataType(); - sequence shape(); + readonly attribute MLOperandDataType dataType; + readonly attribute FrozenArray shape; }; dictionary MLOperatorOptions { @@ -872,7 +872,7 @@ dictionary MLSplitSupportLimits { }; partial dictionary MLOpSupportLimits { - MLSingleInputSupportLimits split; + MLSplitSupportLimits split; }; partial interface MLGraphBuilder { diff --git a/test/fixtures/wpt/interfaces/webtransport.idl b/test/fixtures/wpt/interfaces/webtransport.idl index 6e9d1036736..24fe5b7e61b 100644 --- a/test/fixtures/wpt/interfaces/webtransport.idl +++ b/test/fixtures/wpt/interfaces/webtransport.idl @@ -96,7 +96,8 @@ dictionary WebTransportConnectionStats { required DOMHighResTimeStamp rttVariation; required DOMHighResTimeStamp minRtt; required WebTransportDatagramStats datagrams; - required unsigned long long? estimatedSendRate; + unsigned long long? estimatedSendRate = null; + boolean atSendCapacity = false; }; dictionary WebTransportDatagramStats { diff --git a/test/fixtures/wpt/interfaces/webusb.idl b/test/fixtures/wpt/interfaces/webusb.idl index 3b362d2351d..d6484db3e88 100644 --- a/test/fixtures/wpt/interfaces/webusb.idl +++ b/test/fixtures/wpt/interfaces/webusb.idl @@ -40,7 +40,7 @@ dictionary USBConnectionEventInit : EventInit { }; [ - Exposed=(DedicatedWorker,SharedWorker,Window), + Exposed=(Worker,Window), SecureContext ] interface USBConnectionEvent : Event { @@ -55,7 +55,7 @@ enum USBTransferStatus { }; [ - Exposed=(DedicatedWorker,SharedWorker,Window), + Exposed=(Worker,Window), SecureContext ] interface USBInTransferResult { @@ -65,7 +65,7 @@ interface USBInTransferResult { }; [ - Exposed=(DedicatedWorker,SharedWorker,Window), + Exposed=(Worker,Window), SecureContext ] interface USBOutTransferResult { @@ -75,7 +75,7 @@ interface USBOutTransferResult { }; [ - Exposed=(DedicatedWorker,SharedWorker,Window), + Exposed=(Worker,Window), SecureContext ] interface USBIsochronousInTransferPacket { @@ -85,7 +85,7 @@ interface USBIsochronousInTransferPacket { }; [ - Exposed=(DedicatedWorker,SharedWorker,Window), + Exposed=(Worker,Window), SecureContext ] interface USBIsochronousInTransferResult { @@ -95,7 +95,7 @@ interface USBIsochronousInTransferResult { }; [ - Exposed=(DedicatedWorker,SharedWorker,Window), + Exposed=(Worker,Window), SecureContext ] interface USBIsochronousOutTransferPacket { @@ -105,7 +105,7 @@ interface USBIsochronousOutTransferPacket { }; [ - Exposed=(DedicatedWorker,SharedWorker,Window), + Exposed=(Worker,Window), SecureContext ] interface USBIsochronousOutTransferResult { @@ -113,7 +113,7 @@ interface USBIsochronousOutTransferResult { readonly attribute FrozenArray packets; }; -[Exposed=(DedicatedWorker,SharedWorker,Window), SecureContext] +[Exposed=(Worker,Window), SecureContext] interface USBDevice { readonly attribute octet usbVersionMajor; readonly attribute octet usbVersionMinor; @@ -171,7 +171,7 @@ dictionary USBControlTransferParameters { }; [ - Exposed=(DedicatedWorker,SharedWorker,Window), + Exposed=(Worker,Window), SecureContext ] interface USBConfiguration { @@ -182,7 +182,7 @@ interface USBConfiguration { }; [ - Exposed=(DedicatedWorker,SharedWorker,Window), + Exposed=(Worker,Window), SecureContext ] interface USBInterface { @@ -194,7 +194,7 @@ interface USBInterface { }; [ - Exposed=(DedicatedWorker,SharedWorker,Window), + Exposed=(Worker,Window), SecureContext ] interface USBAlternateInterface { @@ -219,7 +219,7 @@ enum USBEndpointType { }; [ - Exposed=(DedicatedWorker,SharedWorker,Window), + Exposed=(Worker,Window), SecureContext ] interface USBEndpoint { @@ -252,7 +252,7 @@ dictionary USBPermissionStorage { sequence allowedDevices = []; }; -[Exposed=(DedicatedWorker,SharedWorker,Window)] +[Exposed=(Worker,Window)] interface USBPermissionResult : PermissionStatus { attribute FrozenArray devices; }; diff --git a/test/fixtures/wpt/interfaces/webxr.idl b/test/fixtures/wpt/interfaces/webxr.idl index 26a720aa888..dea448d7440 100644 --- a/test/fixtures/wpt/interfaces/webxr.idl +++ b/test/fixtures/wpt/interfaces/webxr.idl @@ -40,6 +40,7 @@ enum XRVisibilityState { readonly attribute Float32Array? supportedFrameRates; [SameObject] readonly attribute XRRenderState renderState; [SameObject] readonly attribute XRInputSourceArray inputSources; + [SameObject] readonly attribute XRInputSourceArray trackedSources; readonly attribute FrozenArray enabledFeatures; readonly attribute boolean isSystemKeyboardSupported; diff --git a/test/fixtures/wpt/resources/check-layout.js b/test/fixtures/wpt/resources/check-layout.js deleted file mode 100644 index 8634481497d..00000000000 --- a/test/fixtures/wpt/resources/check-layout.js +++ /dev/null @@ -1,245 +0,0 @@ -(function() { - -function insertAfter(nodeToAdd, referenceNode) -{ - if (referenceNode == document.body) { - document.body.appendChild(nodeToAdd); - return; - } - - if (referenceNode.nextSibling) - referenceNode.parentNode.insertBefore(nodeToAdd, referenceNode.nextSibling); - else - referenceNode.parentNode.appendChild(nodeToAdd); -} - -function positionedAncestor(node) -{ - var ancestor = node.parentNode; - while (getComputedStyle(ancestor).position == 'static') - ancestor = ancestor.parentNode; - return ancestor; -} - -function checkSubtreeExpectedValues(parent, failures) -{ - var checkedLayout = checkExpectedValues(parent, failures); - Array.prototype.forEach.call(parent.childNodes, function(node) { - checkedLayout |= checkSubtreeExpectedValues(node, failures); - }); - return checkedLayout; -} - -function checkAttribute(output, node, attribute) -{ - var result = node.getAttribute && node.getAttribute(attribute); - output.checked |= !!result; - return result; -} - -function checkExpectedValues(node, failures) -{ - var output = { checked: false }; - var expectedWidth = checkAttribute(output, node, "data-expected-width"); - if (expectedWidth) { - if (isNaN(expectedWidth) || Math.abs(node.offsetWidth - expectedWidth) >= 1) - failures.push("Expected " + expectedWidth + " for width, but got " + node.offsetWidth + ". "); - } - - var expectedHeight = checkAttribute(output, node, "data-expected-height"); - if (expectedHeight) { - if (isNaN(expectedHeight) || Math.abs(node.offsetHeight - expectedHeight) >= 1) - failures.push("Expected " + expectedHeight + " for height, but got " + node.offsetHeight + ". "); - } - - var expectedOffset = checkAttribute(output, node, "data-offset-x"); - if (expectedOffset) { - if (isNaN(expectedOffset) || Math.abs(node.offsetLeft - expectedOffset) >= 1) - failures.push("Expected " + expectedOffset + " for offsetLeft, but got " + node.offsetLeft + ". "); - } - - var expectedOffset = checkAttribute(output, node, "data-offset-y"); - if (expectedOffset) { - if (isNaN(expectedOffset) || Math.abs(node.offsetTop - expectedOffset) >= 1) - failures.push("Expected " + expectedOffset + " for offsetTop, but got " + node.offsetTop + ". "); - } - - var expectedOffset = checkAttribute(output, node, "data-positioned-offset-x"); - if (expectedOffset) { - var actualOffset = node.getBoundingClientRect().left - positionedAncestor(node).getBoundingClientRect().left; - if (isNaN(expectedOffset) || Math.abs(actualOffset - expectedOffset) >= 1) - failures.push("Expected " + expectedOffset + " for getBoundingClientRect().left offset, but got " + actualOffset + ". "); - } - - var expectedOffset = checkAttribute(output, node, "data-positioned-offset-y"); - if (expectedOffset) { - var actualOffset = node.getBoundingClientRect().top - positionedAncestor(node).getBoundingClientRect().top; - if (isNaN(expectedOffset) || Math.abs(actualOffset - expectedOffset) >= 1) - failures.push("Expected " + expectedOffset + " for getBoundingClientRect().top offset, but got " + actualOffset + ". "); - } - - var expectedWidth = checkAttribute(output, node, "data-expected-client-width"); - if (expectedWidth) { - if (isNaN(expectedWidth) || Math.abs(node.clientWidth - expectedWidth) >= 1) - failures.push("Expected " + expectedWidth + " for clientWidth, but got " + node.clientWidth + ". "); - } - - var expectedHeight = checkAttribute(output, node, "data-expected-client-height"); - if (expectedHeight) { - if (isNaN(expectedHeight) || Math.abs(node.clientHeight - expectedHeight) >= 1) - failures.push("Expected " + expectedHeight + " for clientHeight, but got " + node.clientHeight + ". "); - } - - var expectedWidth = checkAttribute(output, node, "data-expected-scroll-width"); - if (expectedWidth) { - if (isNaN(expectedWidth) || Math.abs(node.scrollWidth - expectedWidth) >= 1) - failures.push("Expected " + expectedWidth + " for scrollWidth, but got " + node.scrollWidth + ". "); - } - - var expectedHeight = checkAttribute(output, node, "data-expected-scroll-height"); - if (expectedHeight) { - if (isNaN(expectedHeight) || Math.abs(node.scrollHeight - expectedHeight) >= 1) - failures.push("Expected " + expectedHeight + " for scrollHeight, but got " + node.scrollHeight + ". "); - } - - var expectedOffset = checkAttribute(output, node, "data-total-x"); - if (expectedOffset) { - var totalLeft = node.clientLeft + node.offsetLeft; - if (isNaN(expectedOffset) || Math.abs(totalLeft - expectedOffset) >= 1) - failures.push("Expected " + expectedOffset + " for clientLeft+offsetLeft, but got " + totalLeft + ", clientLeft: " + node.clientLeft + ", offsetLeft: " + node.offsetLeft + ". "); - } - - var expectedOffset = checkAttribute(output, node, "data-total-y"); - if (expectedOffset) { - var totalTop = node.clientTop + node.offsetTop; - if (isNaN(expectedOffset) || Math.abs(totalTop - expectedOffset) >= 1) - failures.push("Expected " + expectedOffset + " for clientTop+offsetTop, but got " + totalTop + ", clientTop: " + node.clientTop + ", + offsetTop: " + node.offsetTop + ". "); - } - - var expectedDisplay = checkAttribute(output, node, "data-expected-display"); - if (expectedDisplay) { - var actualDisplay = getComputedStyle(node).display; - if (actualDisplay != expectedDisplay) - failures.push("Expected " + expectedDisplay + " for display, but got " + actualDisplay + ". "); - } - - var expectedPaddingTop = checkAttribute(output, node, "data-expected-padding-top"); - if (expectedPaddingTop) { - var actualPaddingTop = getComputedStyle(node).paddingTop; - // Trim the unit "px" from the output. - actualPaddingTop = actualPaddingTop.substring(0, actualPaddingTop.length - 2); - if (actualPaddingTop != expectedPaddingTop) - failures.push("Expected " + expectedPaddingTop + " for padding-top, but got " + actualPaddingTop + ". "); - } - - var expectedPaddingBottom = checkAttribute(output, node, "data-expected-padding-bottom"); - if (expectedPaddingBottom) { - var actualPaddingBottom = getComputedStyle(node).paddingBottom; - // Trim the unit "px" from the output. - actualPaddingBottom = actualPaddingBottom.substring(0, actualPaddingBottom.length - 2); - if (actualPaddingBottom != expectedPaddingBottom) - failures.push("Expected " + expectedPaddingBottom + " for padding-bottom, but got " + actualPaddingBottom + ". "); - } - - var expectedPaddingLeft = checkAttribute(output, node, "data-expected-padding-left"); - if (expectedPaddingLeft) { - var actualPaddingLeft = getComputedStyle(node).paddingLeft; - // Trim the unit "px" from the output. - actualPaddingLeft = actualPaddingLeft.substring(0, actualPaddingLeft.length - 2); - if (actualPaddingLeft != expectedPaddingLeft) - failures.push("Expected " + expectedPaddingLeft + " for padding-left, but got " + actualPaddingLeft + ". "); - } - - var expectedPaddingRight = checkAttribute(output, node, "data-expected-padding-right"); - if (expectedPaddingRight) { - var actualPaddingRight = getComputedStyle(node).paddingRight; - // Trim the unit "px" from the output. - actualPaddingRight = actualPaddingRight.substring(0, actualPaddingRight.length - 2); - if (actualPaddingRight != expectedPaddingRight) - failures.push("Expected " + expectedPaddingRight + " for padding-right, but got " + actualPaddingRight + ". "); - } - - var expectedMarginTop = checkAttribute(output, node, "data-expected-margin-top"); - if (expectedMarginTop) { - var actualMarginTop = getComputedStyle(node).marginTop; - // Trim the unit "px" from the output. - actualMarginTop = actualMarginTop.substring(0, actualMarginTop.length - 2); - if (actualMarginTop != expectedMarginTop) - failures.push("Expected " + expectedMarginTop + " for margin-top, but got " + actualMarginTop + ". "); - } - - var expectedMarginBottom = checkAttribute(output, node, "data-expected-margin-bottom"); - if (expectedMarginBottom) { - var actualMarginBottom = getComputedStyle(node).marginBottom; - // Trim the unit "px" from the output. - actualMarginBottom = actualMarginBottom.substring(0, actualMarginBottom.length - 2); - if (actualMarginBottom != expectedMarginBottom) - failures.push("Expected " + expectedMarginBottom + " for margin-bottom, but got " + actualMarginBottom + ". "); - } - - var expectedMarginLeft = checkAttribute(output, node, "data-expected-margin-left"); - if (expectedMarginLeft) { - var actualMarginLeft = getComputedStyle(node).marginLeft; - // Trim the unit "px" from the output. - actualMarginLeft = actualMarginLeft.substring(0, actualMarginLeft.length - 2); - if (actualMarginLeft != expectedMarginLeft) - failures.push("Expected " + expectedMarginLeft + " for margin-left, but got " + actualMarginLeft + ". "); - } - - var expectedMarginRight = checkAttribute(output, node, "data-expected-margin-right"); - if (expectedMarginRight) { - var actualMarginRight = getComputedStyle(node).marginRight; - // Trim the unit "px" from the output. - actualMarginRight = actualMarginRight.substring(0, actualMarginRight.length - 2); - if (actualMarginRight != expectedMarginRight) - failures.push("Expected " + expectedMarginRight + " for margin-right, but got " + actualMarginRight + ". "); - } - - return output.checked; -} - -window.checkLayout = function(selectorList, outputContainer) -{ - var result = true; - if (!selectorList) { - document.body.appendChild(document.createTextNode("You must provide a CSS selector of nodes to check.")); - return; - } - var nodes = document.querySelectorAll(selectorList); - nodes = Array.prototype.slice.call(nodes); - nodes.reverse(); - var checkedLayout = false; - Array.prototype.forEach.call(nodes, function(node) { - var failures = []; - checkedLayout |= checkExpectedValues(node.parentNode, failures); - checkedLayout |= checkSubtreeExpectedValues(node, failures); - - var container = node.parentNode.className == 'container' ? node.parentNode : node; - - var pre = document.createElement('pre'); - if (failures.length) { - pre.className = 'FAIL'; - result = false; - } - pre.appendChild(document.createTextNode(failures.length ? "FAIL:\n" + failures.join('\n') + '\n\n' + container.outerHTML : "PASS")); - - var referenceNode = container; - if (outputContainer) { - if (!outputContainer.lastChild) { - // Inserting a text node so we have something to insertAfter. - outputContainer.textContent = " "; - } - referenceNode = outputContainer.lastChild; - } - insertAfter(pre, referenceNode); - }); - - if (!checkedLayout) { - document.body.appendChild(document.createTextNode("FAIL: No valid data-* attributes found in selector list : " + selectorList)); - return false; - } - - return result; -} - -})(); diff --git a/test/fixtures/wpt/resources/out-of-scope-test.js b/test/fixtures/wpt/resources/out-of-scope-test.js new file mode 100644 index 00000000000..ce24124646d --- /dev/null +++ b/test/fixtures/wpt/resources/out-of-scope-test.js @@ -0,0 +1,5 @@ +// Testing that the resolution is correct using `resolve`, as you can't import +// the same module twice. +window.outscope_test_result = import.meta.resolve("a"); +window.outscope_test_result2 = import.meta.resolve("../resources/log.sub.js?name=E"); + diff --git a/test/fixtures/wpt/resources/testharness.js b/test/fixtures/wpt/resources/testharness.js index 7fd5336bf34..04c65eb2e9d 100644 --- a/test/fixtures/wpt/resources/testharness.js +++ b/test/fixtures/wpt/resources/testharness.js @@ -2032,30 +2032,46 @@ /** - * Assert that ``object`` has a property named ``property_name`` and that the property is readonly. + * Assert that ``object`` has a property named ``property_name`` and that the property is not writable or has no setter. * - * Note: The implementation tries to update the named property, so - * any side effects of updating will be triggered. Users are - * encouraged to instead inspect the property descriptor of ``property_name`` on ``object``. - * - * @param {Object} object - Object that should have the given property in its prototype chain. + * @param {Object} object - Object that should have the given (not necessarily own) property. * @param {string} property_name - Expected property name. * @param {string} [description] - Description of the condition being tested. */ function assert_readonly(object, property_name, description) { - var initial_value = object[property_name]; - try { - //Note that this can have side effects in the case where - //the property has PutForwards - object[property_name] = initial_value + "a"; //XXX use some other value here? - assert(same_value(object[property_name], initial_value), - "assert_readonly", description, - "changing property ${p} succeeded", - {p:property_name}); - } finally { - object[property_name] = initial_value; - } + assert(property_name in object, + "assert_readonly", description, + "property ${p} not found", + {p:property_name}); + + let desc; + while (object && (desc = Object.getOwnPropertyDescriptor(object, property_name)) === undefined) { + object = Object.getPrototypeOf(object); + } + + assert(desc !== undefined, + "assert_readonly", description, + "could not find a descriptor for property ${p}", + {p:property_name}); + + if (desc.hasOwnProperty("value")) { + // We're a data property descriptor + assert(desc.writable === false, "assert_readonly", description, + "descriptor [[Writable]] expected false got ${actual}", {actual:desc.writable}); + } else if (desc.hasOwnProperty("get") || desc.hasOwnProperty("set")) { + // We're an accessor property descriptor + assert(desc.set === undefined, "assert_readonly", description, + "property ${p} is an accessor property with a [[Set]] attribute, cannot test readonly-ness", + {p:property_name}); + } else { + // We're a generic property descriptor + // This shouldn't happen, because Object.getOwnPropertyDescriptor + // forwards the return value of [[GetOwnProperty]] (P), which must + // be a fully populated Property Descriptor or Undefined. + assert(false, "assert_readonly", description, + "Object.getOwnPropertyDescriptor must return a fully populated property descriptor"); + } } expose_assert(assert_readonly, "assert_readonly"); diff --git a/test/fixtures/wpt/service-workers/service-worker/resources/local-url-inherit-controller-frame.html b/test/fixtures/wpt/service-workers/service-worker/resources/local-url-inherit-controller-frame.html index 3a5d9b51e75..e7214827a4c 100644 --- a/test/fixtures/wpt/service-workers/service-worker/resources/local-url-inherit-controller-frame.html +++ b/test/fixtures/wpt/service-workers/service-worker/resources/local-url-inherit-controller-frame.html @@ -140,7 +140,8 @@ let w = new SharedWorker(url); return new Promise((resolve, reject) => { w.port.onmessage = m => { - if (m.data.includes("Error")) { + // (null is a valid value when the SharedWorker is not controlled) + if (m.data?.includes("Error")) { reject(m.data); return; } diff --git a/test/fixtures/wpt/service-workers/service-worker/resources/router-rules.js b/test/fixtures/wpt/service-workers/service-worker/resources/router-rules.js index fdc1c9e0637..71c09e7079c 100644 --- a/test/fixtures/wpt/service-workers/service-worker/resources/router-rules.js +++ b/test/fixtures/wpt/service-workers/service-worker/resources/router-rules.js @@ -1,7 +1,4 @@ const TEST_CACHE_NAME = 'v1'; -// The value is coming from: -// https://source.chromium.org/chromium/chromium/src/+/main:third_party/blink/public/common/service_worker/service_worker_router_rule.h;l=28;drc=6f3f85b321146cfc0f9eb81a74c7c2257821461e -const CONDITION_MAX_RECURSION_DEPTH = 10; const routerRules = { 'condition-urlpattern-constructed-source-network': [{ @@ -60,34 +57,6 @@ const routerRules = { condition: {requestMethod: String.fromCodePoint(0x3042)}, source: 'network' }], - 'condition-invalid-or-condition-depth': (() => { - const addOrCondition = (depth) => { - if (depth > CONDITION_MAX_RECURSION_DEPTH) { - return {urlPattern: '/foo'}; - } - return { - or: [addOrCondition(depth + 1)] - }; - }; - return {condition: addOrCondition(1), source: 'network'}; - })(), - 'condition-invalid-not-condition-depth': (() => { - const generateNotCondition = (depth) => { - if (depth > CONDITION_MAX_RECURSION_DEPTH) { - return { - urlPattern: '/**/example.txt', - }; - } - return {not: generateNotCondition(depth + 1)}; - }; - return {condition: generateNotCondition(1), source: 'network'}; - })(), - 'condition-invalid-router-size': [...Array(512)].map((val, i) => { - return { - condition: {urlPattern: `/foo-${i}`}, - source: 'network' - }; - }), 'condition-request-destination-script-network': [{condition: {requestDestination: 'script'}, source: 'network'}], 'condition-or-source-network': [{ diff --git a/test/fixtures/wpt/service-workers/service-worker/static-router-invalid-rules.https.html b/test/fixtures/wpt/service-workers/service-worker/static-router-invalid-rules.https.html index 15b8ef5742d..05f39f2c9dc 100644 --- a/test/fixtures/wpt/service-workers/service-worker/static-router-invalid-rules.https.html +++ b/test/fixtures/wpt/service-workers/service-worker/static-router-invalid-rules.https.html @@ -15,12 +15,6 @@ const ROUTER_RULE_KEY_INVALID_REQUEST_METHOD = 'condition-invalid-request-method'; -const ROUTER_RULE_KEY_INVALID_OR_CONDITION_DEPTH = - 'condition-invalid-or-condition-depth'; -const ROUTER_RULE_KEY_INVALID_NOT_CONDITION_DEPTH = - 'condition-invalid-not-condition-depth'; -const ROUTER_RULE_KEY_INVALID_ROUTER_SIZE = - 'condition-invalid-router-size'; const ROUTER_RULE_KEY_LACK_OF_CONDITION = 'condition-lack-of-condition'; const ROUTER_RULE_KEY_LACK_OF_SOURCE = @@ -33,27 +27,6 @@ assert_equals(errors.length, 1); }, 'addRoutes should raise for invalid request method.'); -promise_test(async t => { - const worker = await registerAndActivate(t, ROUTER_RULE_KEY_INVALID_OR_CONDITION_DEPTH); - t.add_cleanup(() => {reset_info_in_worker(worker)}); - const {errors} = await get_info_from_worker(worker); - assert_equals(errors.length, 1); -}, 'addRoutes should raise if or condition exceeds the depth limit'); - -promise_test(async t => { - const worker = await registerAndActivate(t, ROUTER_RULE_KEY_INVALID_NOT_CONDITION_DEPTH); - t.add_cleanup(() => {reset_info_in_worker(worker)}); - const {errors} = await get_info_from_worker(worker); - assert_equals(errors.length, 1); -}, 'addRoutes should raise if not condition exceeds the depth limit'); - -promise_test(async t => { - const worker = await registerAndActivate(t, ROUTER_RULE_KEY_INVALID_ROUTER_SIZE); - t.add_cleanup(() => {reset_info_in_worker(worker)}); - const {errors} = await get_info_from_worker(worker); - assert_equals(errors.length, 1); -}, 'addRoutes should raise if the number of router rules exceeds the length limit'); - promise_test(async t => { const worker = await registerAndActivate(t, ROUTER_RULE_KEY_LACK_OF_CONDITION); t.add_cleanup(() => {reset_info_in_worker(worker)}); diff --git a/test/fixtures/wpt/service-workers/service-worker/tentative/static-router/static-router-resource-timing.https.html b/test/fixtures/wpt/service-workers/service-worker/tentative/static-router/static-router-resource-timing.https.html index 74d84eb3c9f..e32436da41b 100644 --- a/test/fixtures/wpt/service-workers/service-worker/tentative/static-router/static-router-resource-timing.https.html +++ b/test/fixtures/wpt/service-workers/service-worker/tentative/static-router/static-router-resource-timing.https.html @@ -63,6 +63,7 @@ if (entry.workerFinalSourceType === 'cache') { assert_equals(entry.fetchStart, entry.responseStart, description); assert_less_than_equal(entry.workerCacheLookupStart, entry.responseStart, description); + assert_equals(entry.deliveryType, 'cache-storage', description); } else { assert_less_than_equal(entry.workerCacheLookupStart, entry.fetchStart, description); } diff --git a/test/fixtures/wpt/storage/quotachange-in-detached-iframe.tentative.https.html b/test/fixtures/wpt/storage/quotachange-in-detached-iframe.tentative.https.html deleted file mode 100644 index 123af50e3ce..00000000000 --- a/test/fixtures/wpt/storage/quotachange-in-detached-iframe.tentative.https.html +++ /dev/null @@ -1,21 +0,0 @@ - - -quotachange event on DOMWindow of detached iframe - - - - - diff --git a/test/fixtures/wpt/xhr/formdata/constructor-submitter-coordinate.html b/test/fixtures/wpt/xhr/formdata/constructor-submitter-coordinate.html index 992f64b7217..b7bf128bd12 100644 --- a/test/fixtures/wpt/xhr/formdata/constructor-submitter-coordinate.html +++ b/test/fixtures/wpt/xhr/formdata/constructor-submitter-coordinate.html @@ -1,18 +1,21 @@ +
- +
diff --git a/test/fixtures/wpt/xhr/formdata/submitter-coordinate-value.html b/test/fixtures/wpt/xhr/formdata/submitter-coordinate-value.html new file mode 100644 index 00000000000..69bea0ac3f9 --- /dev/null +++ b/test/fixtures/wpt/xhr/formdata/submitter-coordinate-value.html @@ -0,0 +1,55 @@ + + + +Test image button coordinates + + + + +
+ +
+ + + + +