profile
viewpoint

jgraham/fetchlogs 3

Treeherder log fetching

jgraham/css-test-built 2

Built version of the CSSWG tests, ready to run

andreastt/webdriver 1

The WebDriver API and wire protocol

gsnedders/web-platform-tests 0

Test Suites for Web Platform specifications

jgraham/api-test 0

API test repository

jgraham/arewewptyet 0

Dashboard for Gecko wpt

Pull request review commentw3c/webdriver-bidi

Start to specify how to serialize a ES value.

 id=] must be the same as the [=window handle=].  ## Realm ## {#data-types-realm} -[=remote end schema=] and [=local end schema=]+[=remote end definition=] and [= local end definition=] ``` Realm = text; ```  Each [=realm=] has an associated <dfn export>realm id</dfn>, which is a string uniquely identifying that realm. +## Remote Value ## {#data-types-remote-object}++Values accessible from the ECMAScript runtime are represented by a mirror+object, specified as <code>RemoteValue</code>. The value's type is specified in+the <code>type</code> property. In the case of JSON-representable primitive+values, this contains the value in the <code>value</code> property; in the case+of non-JSON-representable primitives, the <code>value</code> property contains a+string representation of the value. For non-primitive objects, the+<code>objectId</code> property contains a string id that provides a unique+handle to the object, valid for its lifetime inside the engine. For some+non-primitive types, the <code>value</code> property contains a representation+of the data in the ECMAScript object; for container types this can contain+further <code>RemoteValue</code> instances. The <code>value</code> property can+be null if there is a duplicate object i.e. the object has already been+serialized in the current <code>RemoteValue</code>, perhaps as part of a+cycle, or otherwise when the maximum serialization depth is reached.++[=Nodes=] are also represented by <code>RemoteValue</code> instances. These have+a partial serialization of the node in the value property.++Note: mirror objects do not keep the original object alive in the runtime. If an+object is discarded in the runtime subsequent attempts to access it via the+protocol will result in an error.++A [=/session=] has an <dfn>object id map</dfn>. This is a weak map from objects to+their corresponding id.++Issue: Should this be explicitly per realm?++<div algorithm>+To get the <dfn>object id for an object</dfn> given an |object|:++  1. If [=object id map=] for the [=current session=] does not contain |object|+     run the following steps:++     1. Let |object id| be a new, unique, string identifier for |object|. If+        |object| is an [=/element=] this must be the [=web element reference=]+        for |object|; if it's a [=WindowProxy=] object, this must be the+        [=window handle=] for |object|.++    1. Set the value of |object| in the [=object id map=] to |object id|.++  1. Return the result of getting the value for |object| in [=object id map=].+</div>++<div algorithm>+To get the <dfn>object for an object id</dfn> given an |object id|:++  1. For each |object| → |id value| of [=object id map=]:++    1. If |id value| is equal to |object id|, return [=success=] with data+       |object|++  1. Return [=error=] with [=error code=] [=no such element=]++  Issue: This error code isn't right.+</div>++[=remote end definition=] and [=local end definition=]+```+RemoteValue = {+  UndefinedValue //+  NullValue //+  StringValue //+  NumberValue //+  BooleanValue //+  BigIntValue //+  SymbolValue //+  ArrayValue //+  FunctionValue //+  ObjectValue //+  FunctionValue //+  RegExpValue //+  DateValue //+  MapValue //+  SetValue //+  WeakMapValue //+  WeakSetValue //+  IteratorValue //+  GeneratorValue //+  ErrorValue //+  ProxyValue //+  PromiseValue //+  TypedArrayValue //+  ArrayBufferValue //+  NodeValue //+  WindowProxyValue //+}++ObjectId = text;++ListValue = [*RemoteValue];++MappingValue = [*[(RemoteValue / text), RemoteValue]];++UndefinedValue = {+  type: "undefined",+}++NullValue = {+  type: "null",+}++StringValue = {+  type: "string",+  value: text,+}++SpecialNumber = "NaN" / "-0" / "+Infinity" / "-Infinity";++NumberValue = {+  type: "number",+  value: number / SpecialNumber,+}++BooleanValue = {+  type: "boolean",+  value: bool,+}++BigIntValue = {+  type: "bigint",+  value: text,+}++SymbolValue = {+  type: "symbol",+  objectId: ObjectId,+}++ArrayValue = {+  type: "array",+  objectId: ObjectId,+  value?: ListValue,+}++ObjectValue = {+  type: "object",+  objectId: ObjectId,+  value?: MappingValue,+}++FunctionValue = {+  type: "function",+  objectId: ObjectId,+}++RegExpValue = {+  type: "regexp",+  objectId: ObjectId,+  value: text+}++DateValue = {+  type: "date",+  objectId: ObjectId,+  value: text+}++MapValue = {+  type: "map",+  objectId: ObjectId,+  value?: MappingValue,+}++SetValue = {+  type: "set",+  objectId: ObjectId,+  value?: ListValue+}++WeakMapValue = {+  type: "weakmap",+  objectId: ObjectId,+}++WeakSetValue = {+  type: "weakset",+  objectId: ObjectId,+}++ErrorValue = {+  type: "error",+  objectId: ObjectId,+}++PromiseValue = {+  type: "promise",+  objectId: ObjectId,+}++TypedArrayValue = {+  type: "typedarray",+  objectId: ObjectId,+}++ArrayBufferValue = {+  type: "arraybuffer",+  objectId: ObjectId,+}++NodeValue = {+  type: "node",+  objectId: ObjectId,+  value?: NodeProperties,+}++NodeProperties = {+  nodeType: uint,+  nodeValue: text,+  localName?: text,+  namespaceURI?: text,+  childNodeCount: uint,+  children?: [*NodeValue],+  attributes?: {*text => text},+  shadowRoot?: NodeValue / null,+}++WindowProxyValue = {+  type: "window",+  objectId: ObjectId,+}+```++Issue: Add WASM types?++Issue: Should WindowProxy get attributes in a similar style to Node?++Issue: handle String / Number / etc. wrapper objects specially?++<div algorithm>++To <dfn>serialize as a remote value</dfn> given an |value|, a |max depth|,+|node details|, and a |set of known objects|:++  1. In the following list of conditions and associated steps, run the first set+     of steps for which the associated condition is true:++    <dl>+      <dt>[=Type=](|value|) is Undefined+      <dd>Let |remote value| be an [=object=] matching the <code>UndefinedValue</code>

I changed things to use infra values now that we can serialize infra values to JSON.

jgraham

comment created time in 5 hours

PullRequestReviewEvent

push eventw3c/webdriver-bidi

jgraham

commit sha 819fd0c1393e3a09ed0aea5d153b1779d95ed45e

Define how to respond with an error (#56) The main difficulty here is that if we get a command with an invalid id, it's unclear what to return in the id field. This chooses to return null in that case.

view details

James Graham

commit sha 3b1864daeb0365d2c338e6b851724efb33108f54

Start to specify how to serialize a ES value. This starts building out the serialization infrastructure for sending runtime-accessible objects over the wire. The format is based on what's possible in CDP, with the notable change that the `value` field is directly able to handle array and object types recursively rather than using a seperate `preview` field. Also `type` and `subtype` are merged into a single field and `value` and `unserializableValue` are merged. At this point there's no support for directly producing JSON values in the serialization, we could add that later if required (but it's arguably less important if the client is able to reconstruct the JSON output when required). There are also several other fields from CDP missing; we can add those later if required.

view details

James Graham

commit sha 6fd98a0f85c271a3871d5850b284c92d845f25cf

Fix some small review issues

view details

James Graham

commit sha b2b9fd5b573c067abe795df797b92f2cf286006f

Replace RemoteObject with RemoteValue and also for choices

view details

James Graham

commit sha fb17e1db4d7949e47ea1448a1c01eee04e489189

Fixup RegExp usage

view details

James Graham

commit sha bf1215463bc3152cf15e288abf3803c60d2bb92a

Complete conversion to value terminology

view details

James Graham

commit sha 9339dd95d9b1f1b1f9c2754bf7c4748147a9e663

Improve the formalism around type matching

view details

James Graham

commit sha b4ac591f30f7dc9f014c4095f10ae0c14ed98a21

Serialize values for maps and sets. Also change the serialization so that objects are serialized as a list [[key1, value1], [key2, value2]]

view details

James Graham

commit sha 32873c331dea89eb99d054cecfcc3ff786d44946

Maybe fix cddl a little

view details

James Graham

commit sha d3779181548e1e291c1e51f9d0a4cf9a99c69061

Fix typos in cddl

view details

James Graham

commit sha 6db0303a02884d8125ea5339b41a7e1201b4b72a

Handle platform objects seperately

view details

jgraham

commit sha ebc1afa10c7180f526afc8a86354dd2092ad9063

Apply suggestions from code review Co-authored-by: Philip Jägenstedt <philip@foolip.org>

view details

James Graham

commit sha 61517fb1f8a4f762c1224eedfa4c7d19218eefd8

Fixup some review comments. Fix some typos, improve the handling of non-element and attribute nodes, and add some support for shadow roots

view details

James Graham

commit sha ab6e7dfd2f0f3e6d0e46509a6ca17b9ee6061df6

Use infra values for serialization The infra spec now handles converting these to JSON, and it matches what we are doing for other commands

view details

James Graham

commit sha ab5bb132988076843acddde04258b708a1ed1a36

Typos

view details

push time in 5 hours

issue commentweb-platform-tests/wpt

Specify what `.pointerMove(0, 0, {origin: foo})` supposed to do

The WebDriver spec is the authority here: https://w3c.github.io/webdriver/#pointer-actions

When required to dispatch a pointerMove action 
[...]
An object that represents a web element

        Let element be equal to the result of trying to get a known connected element with argument origin.

        Let x element and y element be the result of calculating the in-view center point of element.

        Let x equal x element + x offset, and y equal y element + y offset. 

So I'm pretty sure Gecko's behaviour is correct unless there's some weirdness with the element not being in view.

saschanaz

comment created time in 3 days

PR opened w3c/webdriver-bidi

Add a contexts module

This contains a command to get all the child contexts of a given context, or to get all top-level contexts. It also provides events to monitor when contexts are created or destroyed.

This is the first module to contain any events, so some infrastructure for emitting events is also added.

+251 -29

0 comment

1 changed file

pr created time in 4 days

create barnchw3c/webdriver-bidi

branch : contexts

created branch time in 4 days

issue commentweb-platform-tests/wpt

Starting a test on a subdomain?

Apart from that (which I hope results in a simplification) I think that sounds reasonable.

mikewest

comment created time in 4 days

issue commentweb-platform-tests/wpt

Starting a test on a subdomain?

I don't think it actually needs to be part of the environment these days. It used to be that we loaded some code in the initial window and postMessaged from the test window to the harness window. But these days the harness window is just a placeholder so you can just make it part of the test url and not part of the environment.

mikewest

comment created time in 4 days

push eventw3c/webdriver-bidi

James Graham

commit sha b64139bd4d4e44dd388f2a39971a9e475fbda577

Fixup some review comments. Fix some typos, improve the handling of non-element and attribute nodes, and add some support for shadow roots

view details

push time in 4 days

Pull request review commentw3c/webdriver-bidi

Start to specify how to serialize a ES value.

 id=] must be the same as the [=window handle=].  ## Realm ## {#data-types-realm} -[=remote end schema=] and [=local end schema=]+[=remote end definition=] and [= local end definition=] ``` Realm = text; ```  Each [=realm=] has an associated <dfn export>realm id</dfn>, which is a string uniquely identifying that realm. +## Remote Value ## {#data-types-remote-object}++Values accessible from the ECMAScript runtime are represented by a mirror+object, specified as <code>RemoteValue</code>. The value's type is specified in+the <code>type</code> property. In the case of JSON-representable primitive+values, this contains the value in the <code>value</code> property; in the case+of non-JSON-representable primitives, the <code>value</code> property contains a+string representation of the object. For non-primitive objects, the+<code>objectId</code> property contains a string id that provides a unique+handle to the object, valid for its lifetime inside the engine. In this case the+<code>value</code> property can contain a complex object (either a list or a+struct) itself containing further remote object values. This allows objects like+arrays to have a single representation.++[=Nodes=] are also represented by <code>RemoteObject</code> instances. These+have a partial serialization of the node in the value property.++Note: mirror objects do not keep the original object alive in the runtime. If an+object is discarded in the runtime subsequent attempts to access it via the+protocol will result in an error.++A [=/session=] has an <dfn>object id map</dfn>. This is a weak map from objects to+their corresponding id.++Issue: Should this be explicitly per realm?++<div algorithm>+To get the <dfn>object id for an object</dfn> given an |object|:++  1. If [=object id map=] for the [=current session=] does not contain |object|+     run the following steps:++     1. Let |object id| be a new, unique, string identifier for |object|. If+        |object| is an [=/element=] this must be the [=web element reference=]+        for |object|; if it's [=WindowProxy=] object, this must be the+        [=window handle=] for |object|.++    1. Set the value of |object| in the [=object id map=] to |object id|.++  1. Return the result of getting the value for |object| in [=object id map=].+</div>++<div algorithm>+To get the <dfn>object for an object id</dfn> given an |object id|:++  1. For each |object| → |id value| of [=object id map=]:++    1. If |id value| is equal to |object id|, return [=success=] with data+       |object|++  1. Return [=error=] with [=error code=] [=no such element=]++  Issue: This error code isn't right.+</div>++[=remote end definition=] and [=local end definition=]+```+RemoteValue = {+  UndefinedValue //+  NullValue //+  StringValue //+  NumberValue //+  BooleanValue //+  BigIntValue //+  SymbolValue //+  ArrayValue //+  FunctionValue //+  ObjectValue //+  FunctionValue //+  RegExpValue //+  DateValue //+  MapValue //+  SetValue //+  WeakMapValue //+  WeakSetValue //+  IteratorValue //+  GeneratorValue //+  ErrorValue //+  ProxyValue //+  PromiseValue //+  TypedArrayValue //+  ArrayBufferValue //+  NodeValue //+  WindowProxyValue //+}++ObjectId = text;++ListValue = [*RemoteValue];++MappingValue = [*[(RemoteValue / text), RemoteValue]];++UndefinedValue = {+  type: "undefined",+}++NullValue = {+  type: "null",+}++StringValue = {+  type: "string",+  value: text,+}++SpecialNumber = "NaN" / "-0" / "+Infinity" / "-Infinity";++NumberValue = {+  type: "number",+  value: number / SpecialNumber,+}++BooleanValue = {+  type: "boolean",+  value: bool,+}++BigIntValue = {+  type: "bigint",+  value: text,+}++SymbolValue = {+  type: "symbol",+  objectId: ObjectId,+}++ArrayValue = {+  type: "array",+  objectId: ObjectId,+  value?: ListValue,+}++ObjectValue = {+  type: "object",+  objectId: ObjectId,+  value?: MappingValue,+}++FunctionObject = {+  type: "function",+  objectId: ObjectId,+}++RegExpValue = {+  type: "regexp",+  objectId: ObjectId,+  value: text+}++DateValue = {+  type: "date",+  objectId: ObjectId,+  value: text+}++MapValue = {+  type: "map",+  objectId: ObjectId,+  value?: MappingValue,+}++SetValue = {+  type: "set",+  objectId: ObjectId,+  value?: ListValue+}++WeakMapValue = {+  type: "map",+  objectId: ObjectId,+}++WeakSetValue = {+  type: "set",+  objectId: ObjectId,+}++ErrorValue = {+  type: "error",+  objectId: ObjectId,+}++PromiseValue = {+  type: "promise",+  objectId: ObjectId,+}++TypedArrayValue = {+  type: "typedarray",+  objectId: ObjectId,+}++ArrayBufferValue = {+  type: "arraybuffer",+  objectId: ObjectId,+}++NodeValue = {+  type: "node",+  objectId: ObjectId,+  value?: NodeProperties,+}++NodeProperties = {+  nodeType: uint,+  nodeName: text,+  localName: text,+  nodeValue: text,+  childNodeCount: uint,+  children?: [*NodeValue],+  attributes?: {*text => text},+}++WindowProxyValue = {+  type: "window",+  objectId: ObjectId,+}+```++Issue: Add WASM types?++Issue: NodeValue needs more attributes++Issue: Should WindowProxy get attributes in a similar style to Node?++Issue: handle String / Number / etc. wrapper objects specially?++<div algorithm>++To <dfn>serialize as a remote value</dfn> given an |value|, a |max depth|,+|node details|, and a |set of known objects|:++  1. In the following list of conditions and associated steps, run the first set+     of steps for which the associated condition is true:++    <dl>+      <dt>[=Type=](|value|) is Undefined+      <dd>Let |remote value| be an [=object=] matching the <code>UndefinedValue</code>+      production in the [=local end definition=].++      <dt>[=Type=](|value|) is Null+      <dd>Let |remote value| be an [=object=] matching the <code>NullValue</code>+      production in the [=local end definition=].++      <dt>[=Type=](|value|) is String+      <dd>Let |remote value| be an [=object=] matching the <code>StringValue</code>+      production in the [=local end definition=], with the <code>value</code>+      property set to |value|.++      Issue: This doesn't handle lone surrogates++      <dt>[=Type=](|value|) is Number+      <dd>+      1. Switch on the value of |value|:+        <dl>+          <dt>NaN+          <dt>Let |serialized| be <code>"NaN"</code>+          <dt>-0+          <dt>Let |serialized| be <code>"-0"</code>+          <dt>+Infinity+          <dt>Let |serialized| be <code>"+Infinity"</code>+          <dt>-Infinity+          <dt>Let |serialized| be <code>"-Infinity"</code>+          <dt>Otherwise:+          <dt>Let |serialized| be |value|+        </dl>++      1. Let |remote value| be an [=object=] matching the <code>NumberValue</code>+         production in the [=local end definition=], with the <code>value</code>+         property set to |serialized|.++      <dt>[=Type=](|value|) is Boolean+      <dd>Let |remote value| be an [=object=] matching the <code>BooleanValue</code>+          production in the [=local end definition=], with the <code>value</code>+          property set to |value|.++      <dt>[=Type=](|value|) is BigInt+      <dd>Let |remote value| be an [=object=] matching the <code>BigIntValue</code>+          production in the [=local end definition=], with the <code>value</code>+          property set to the result of running the [=ToString=] operation on+          |value|.++      <dt>[=Type=](|value|) is Symbol+      <dd>Let |remote value| be an [=object=] matching the <code>SymbolValue</code>+          production in the [=local end definition=], with the <code>objectId</code>+          property set to the [=object id for an object=] |value|.++      <dt>[=IsArray=](|value|)+      <dd>+      1. Let |serialized| be null.++      1. If |value| is not in the |set of known objects|, and |max depth|+         is not null and greater than 0, run the following steps:+             1. Append |value| to the |set of known objects|++             1. Let |serialized| be the result of [=serialize as a list=] given+                [=CreateArrayIterator=](|value|, value), |max depth|, |node details| and+                |set of known objects|.++      1. Let |remote value| be an [=object=] matching the <code>ArrayValue</code> production+         in the [=local end definition=], with the <code>objectId</code> property set+         to the [=object id for an object=] |value|, and the <code>value</code>+         field set to |serialized| if it's not null, or ommitted otherwise.++      <dt>[=IsRegExp=](|value|)+      <dd>+          1. Let |pattern| be [=ToString=]([=Get=](|value|, "source")).++          1. Let |flags| be [=ToString=]([=Get=](|value|, "flags")).++          1. Let |serialized| be the string-concatenation of "/", |pattern|, "/", and |flags|.++          1. Let |remote | be an [=object=] matching the <code>RegExpValue</code>+             production in the [=local end definition=], with the <code>objectId</code>+             property set to the [=object id for an object=] |object| and the value+             set to |serialized|++      <dt>|value| has a \[[DateValue]] [=internal slot=].+      <dd>+        1. Let |serialized| be [=ToDateString=]([=thisTimeValue=](|value|)).++        1. Let |remote value| be an [=object=] matching the <code>DateValue</code>+           production in the [=local end definition=], with the <code>objectId</code>+           property set to the [=object id for an object=] |object| and the value+           set to |serialized|.++      <dt>|value| has a \[[MapData]] [=internal slot=]+      <dd>+        1. Let |serialized| be null.++        1. If |value| is not in the |set of known objects|, and |max depth|+           is not null and greater than 0, run the following steps:+             1. Append |value| to the |set of known objects|++             1. Let |serialized| be the result of [=serialize as a list=] given+                [=CreateMapIterator=](|value|, key+value), |max depth|, |node details| and+                |set of known objects|.++      1. Let |remote value| be an [=object=] matching the <code>MapValue</code>+         production in the [=local end definition=], with the+         <code>objectId</code> property set to the [=object id for an object=]+         |value|, and the <code>value</code> field set to |serialized| if it's+         not null, or ommitted otherwise.++      <dt>|value| has a \[[SetData]] [=internal slot=]+      <dd>+        1. Let |serialized| be null.++        1. If |value| is not in the |set of known objects|, and |max depth|+           is not null and greater than 0, run the following steps:+             1. Append |value| to the |set of known objects|++             1. Let |serialized| be the result of [=serialize as a list=] given+                [=CreateSetIterator=](|value|, value), |max depth|, |node details| and+                |set of known objects|.++       1. Let |remote value| be an [=object=] matching the <code>SetValue</code>+          production in the [=local end definition=], with the+          <code>objectId</code> property set to the [=object id for an object=]+          |value|, and the <code>value</code> field set to |serialized| if it's+          not null, or ommitted otherwise.++      <dt>|value| has a \[[WeakMapData]] [=internal slot=]+      <dd>Let |remote value| be an [=object=] matching the <code>WeakMapValue</code>+          production in the [=local end definition=], with the <code>objectId</code>+          property set to the [=object id for an object=] |value|.++      <dt>|value| has a \[[WeakSetData]] [=internal slot=]+      <dd>Let |remote value| be an [=object=] matching the <code>WeakSetValue</code>+          production in the [=local end definition=], with the <code>objectId</code>+          property set to the [=object id for an object=] |value|.++      <dt>|value| has an \[[ErrorData]] [=internal slot=]+      <dd>Let |remote value| be an [=object=] matching the <code>ErrorValue</code>+          production in the [=local end definition=], with the <code>objectId</code>+          property set to the [=object id for an object=] |value|.++      <dt>[=IsPromise=](|value|)+      <dd>Let |remote value| be an [=object=] matching the <code>PromiseValue</code>+          production in the [=local end definition=], with the <code>objectId</code>+          property set to the [=object id for an object=] |value|.++      <dt>|value| has a \[[TypedArrayName]] [=internal slot=]+      <dd>Let |remote value| be an [=object=] matching the <code>TypedArrayValue</code>+          production in the [=local end definition=], with the <code>objectId</code>+          property set to the [=object id for an object=] |value|.++      <dt>|value| has an \[[ArrayBufferData]] [=internal slot=]+      <dd>Let |remote value| be an [=object=] matching the <code>ArrayBufferValue</code>+          production in the [=local end definition=], with the <code>objectId</code>+          property set to the [=object id for an object=] |value|.++      <dt>|value| is a [=platform object=] that implements [=Node=]+      <dd>+        1. Let |serialized| be null.++        1. If |node details| is true, run the following steps:++            1. Let |serialized| be a new [=Object=].++            1. [=Set=](|serialized|, "nodeType", [=Get=](|value|, "nodeType"), false)++            1. [=Set=](|serialized|, "nodeName", [=Get=](|value|, "nodeName"), false)++            1. [=Set=](|serialized|, "localName", [=Get=](|value|, "localName"), false)++            1. [=Set=](|serialized|, "nodeValue", [=Get=](|value|, "nodeValue"), false)++            1. Let |child node count| be the size of |serialized|'s [=children=].++            1. [=Set=](|serialized|, "childNodeCount", |child node count|, false)++            1. If |max depth| is null and or equal to 0 let |children| be null.+               Otherwise, let |children| be an empty list and, for each node+               |child| in the [=children=] of |value|:++              1. Let |serialized| be the result of [=serialize as a remote value=]+                 with |child|, |max depth| - 1, |node details| and+                 |set of known objects|.++              1. Append |serialized| to |children|.++            1. [=Set=](|serialized|, "children", |serialized|, false)++            1. Let |attributes| be a new [=Object=].++            1. For each |attribute| in |value|'s <a spec=dom>attributes</a>:++              1. Let |name| be |attribute|'s [=Attr/qualified name=]++              1. Let |serialized| be |attribute|'s [=Attr/value=].++              1. [=Set=](|attributes|, |name|, |serialized|, false)++            1. [=Set=](|serialized|, "attributes", |attributes|, false)++        1. Let |remote value| be an [=object=] matching the <code>NodeValue</code>+           production in the [=local end definition=], with the <code>objectId</code>+           property set to the [=object id for an object=] |value|, and <code>value</code>+           set to |serialized|, if |serialized| is not null.++      <dt>|value| is a [=platform object=] that implements [=WindowProxy=]+      <dd>1. Let |remote value| be an [=object=] matching the <code>WindowProxyValue</code>+             production in the [=local end definition=], with the <code>objectId</code>+             property set to the [=object id for an object=] |value|.++      <dt>|value| is a [=platform object=]+      <dd>1. Let |remote value| be an [=object=] matching the <code>ObjectValue</code>+             production in the [=local end definition=], with the <code>objectId</code>+             property set to the [=object id for an object=] |value|.++      <dt>[=IsCallable=](|value|)+      <dd>Let |remote value| be an [=object=] matching the <code>FunctionValue</code>+          production in the [=local end definition=], with the <code>objectId</code>+          property set to the [=object id for an object=] |value|.++      <dt>Otherwise:+      <dd>+      1. let |serialized| be null.++      1. If |value| is not in the |set of known objects|, and |max depth|+         is not null and greater than 0, run the following steps:+         1. Append |value| to the |set of known objects|++         1. Let |serialized| be the result of [=serialize as a mapping=] given+            [=EnumerableOwnPropertyNames=](|value|, key+value), |max depth|, |node+            details| and |set of known objects|++      1. Let |remote value| be an [=object=] matching the <code>ObjectValue</code> production+         in the [=local end definition=], with the <code>objectId</code> property set+         to the [=object id for an object=] |value|, and the <code>value</code> field+         set to |serialized|.+    </dl>++  1. Return |remote value|++Issue: the way we check types is all wrong++Issue: Does it make sense to use the same depth parameter for nodes and objects+in general?++</div>++<div algorithm>+Issue: this assumes for-in works on iterators++To <dfn>serialize as a list</dfn> given |iterable|, |max depth|,+|node details| and |set of known objects|:++  1. Let |serialized| be a new list.++  1. For each |child value| in |iterable|:++    1. Let |serialized child| be the result of [=serialize as a+       remote value=] with arguments |child value|, |max+       depth| - 1, |node details| and |set of known objects|.++    1. Append |serialized child| to |serialized|.++  1. Return [=CreateArrayFromList=](|serialized|)+</div>++<div algorithm>+To <dfn>serialize as a mapping</dfn> given |iterable|, |max depth|,

MapData was supposed to link to this algorithm, not the list one.

FWIW this is (arguably) simpler than the CDP representation which is a flat array of [key_0, value_0, ..., key_N, value_N]. A client can at least do Object.fromEntries(result) to get a plain object representation. I suppose we could convert to an object representation in the ObjectValue caller, and just make this different between ObjectValue and MapValue. But I also wonder if we will regret making it impossible to represent non-string keys.

jgraham

comment created time in 4 days

Pull request review commentw3c/webdriver-bidi

Start to specify how to serialize a ES value.

 id=] must be the same as the [=window handle=].  ## Realm ## {#data-types-realm} -[=remote end schema=] and [=local end schema=]+[=remote end definition=] and [= local end definition=] ``` Realm = text; ```  Each [=realm=] has an associated <dfn export>realm id</dfn>, which is a string uniquely identifying that realm. +## Remote Value ## {#data-types-remote-object}++Values accessible from the ECMAScript runtime are represented by a mirror+object, specified as <code>RemoteValue</code>. The value's type is specified in+the <code>type</code> property. In the case of JSON-representable primitive+values, this contains the value in the <code>value</code> property; in the case+of non-JSON-representable primitives, the <code>value</code> property contains a+string representation of the object. For non-primitive objects, the+<code>objectId</code> property contains a string id that provides a unique+handle to the object, valid for its lifetime inside the engine. In this case the+<code>value</code> property can contain a complex object (either a list or a+struct) itself containing further remote object values. This allows objects like+arrays to have a single representation.++[=Nodes=] are also represented by <code>RemoteObject</code> instances. These+have a partial serialization of the node in the value property.++Note: mirror objects do not keep the original object alive in the runtime. If an+object is discarded in the runtime subsequent attempts to access it via the+protocol will result in an error.++A [=/session=] has an <dfn>object id map</dfn>. This is a weak map from objects to+their corresponding id.++Issue: Should this be explicitly per realm?++<div algorithm>+To get the <dfn>object id for an object</dfn> given an |object|:++  1. If [=object id map=] for the [=current session=] does not contain |object|+     run the following steps:++     1. Let |object id| be a new, unique, string identifier for |object|. If+        |object| is an [=/element=] this must be the [=web element reference=]+        for |object|; if it's [=WindowProxy=] object, this must be the+        [=window handle=] for |object|.++    1. Set the value of |object| in the [=object id map=] to |object id|.++  1. Return the result of getting the value for |object| in [=object id map=].+</div>++<div algorithm>+To get the <dfn>object for an object id</dfn> given an |object id|:++  1. For each |object| → |id value| of [=object id map=]:++    1. If |id value| is equal to |object id|, return [=success=] with data+       |object|++  1. Return [=error=] with [=error code=] [=no such element=]++  Issue: This error code isn't right.+</div>++[=remote end definition=] and [=local end definition=]+```+RemoteValue = {+  UndefinedValue //+  NullValue //+  StringValue //+  NumberValue //+  BooleanValue //+  BigIntValue //+  SymbolValue //+  ArrayValue //+  FunctionValue //+  ObjectValue //+  FunctionValue //+  RegExpValue //+  DateValue //+  MapValue //+  SetValue //+  WeakMapValue //+  WeakSetValue //+  IteratorValue //+  GeneratorValue //+  ErrorValue //+  ProxyValue //+  PromiseValue //+  TypedArrayValue //+  ArrayBufferValue //+  NodeValue //+  WindowProxyValue //+}++ObjectId = text;++ListValue = [*RemoteValue];++MappingValue = [*[(RemoteValue / text), RemoteValue]];++UndefinedValue = {+  type: "undefined",+}++NullValue = {+  type: "null",+}++StringValue = {+  type: "string",+  value: text,+}++SpecialNumber = "NaN" / "-0" / "+Infinity" / "-Infinity";++NumberValue = {+  type: "number",+  value: number / SpecialNumber,+}++BooleanValue = {+  type: "boolean",+  value: bool,+}++BigIntValue = {+  type: "bigint",+  value: text,+}++SymbolValue = {+  type: "symbol",+  objectId: ObjectId,+}++ArrayValue = {+  type: "array",+  objectId: ObjectId,+  value?: ListValue,+}++ObjectValue = {+  type: "object",+  objectId: ObjectId,+  value?: MappingValue,+}++FunctionObject = {+  type: "function",+  objectId: ObjectId,+}++RegExpValue = {+  type: "regexp",+  objectId: ObjectId,+  value: text+}++DateValue = {+  type: "date",+  objectId: ObjectId,+  value: text+}++MapValue = {+  type: "map",+  objectId: ObjectId,+  value?: MappingValue,+}++SetValue = {+  type: "set",+  objectId: ObjectId,+  value?: ListValue+}++WeakMapValue = {+  type: "map",+  objectId: ObjectId,+}++WeakSetValue = {+  type: "set",+  objectId: ObjectId,+}++ErrorValue = {+  type: "error",+  objectId: ObjectId,+}++PromiseValue = {+  type: "promise",+  objectId: ObjectId,+}++TypedArrayValue = {+  type: "typedarray",+  objectId: ObjectId,+}++ArrayBufferValue = {+  type: "arraybuffer",+  objectId: ObjectId,+}++NodeValue = {+  type: "node",+  objectId: ObjectId,+  value?: NodeProperties,+}++NodeProperties = {+  nodeType: uint,+  nodeName: text,+  localName: text,+  nodeValue: text,+  childNodeCount: uint,+  children?: [*NodeValue],+  attributes?: {*text => text},+}++WindowProxyValue = {+  type: "window",+  objectId: ObjectId,+}+```++Issue: Add WASM types?++Issue: NodeValue needs more attributes++Issue: Should WindowProxy get attributes in a similar style to Node?++Issue: handle String / Number / etc. wrapper objects specially?++<div algorithm>++To <dfn>serialize as a remote value</dfn> given an |value|, a |max depth|,+|node details|, and a |set of known objects|:++  1. In the following list of conditions and associated steps, run the first set+     of steps for which the associated condition is true:++    <dl>+      <dt>[=Type=](|value|) is Undefined+      <dd>Let |remote value| be an [=object=] matching the <code>UndefinedValue</code>+      production in the [=local end definition=].++      <dt>[=Type=](|value|) is Null+      <dd>Let |remote value| be an [=object=] matching the <code>NullValue</code>+      production in the [=local end definition=].++      <dt>[=Type=](|value|) is String+      <dd>Let |remote value| be an [=object=] matching the <code>StringValue</code>+      production in the [=local end definition=], with the <code>value</code>+      property set to |value|.++      Issue: This doesn't handle lone surrogates++      <dt>[=Type=](|value|) is Number+      <dd>+      1. Switch on the value of |value|:+        <dl>+          <dt>NaN+          <dt>Let |serialized| be <code>"NaN"</code>+          <dt>-0+          <dt>Let |serialized| be <code>"-0"</code>+          <dt>+Infinity+          <dt>Let |serialized| be <code>"+Infinity"</code>+          <dt>-Infinity+          <dt>Let |serialized| be <code>"-Infinity"</code>+          <dt>Otherwise:+          <dt>Let |serialized| be |value|+        </dl>++      1. Let |remote value| be an [=object=] matching the <code>NumberValue</code>+         production in the [=local end definition=], with the <code>value</code>+         property set to |serialized|.++      <dt>[=Type=](|value|) is Boolean+      <dd>Let |remote value| be an [=object=] matching the <code>BooleanValue</code>+          production in the [=local end definition=], with the <code>value</code>+          property set to |value|.++      <dt>[=Type=](|value|) is BigInt+      <dd>Let |remote value| be an [=object=] matching the <code>BigIntValue</code>+          production in the [=local end definition=], with the <code>value</code>+          property set to the result of running the [=ToString=] operation on+          |value|.++      <dt>[=Type=](|value|) is Symbol+      <dd>Let |remote value| be an [=object=] matching the <code>SymbolValue</code>+          production in the [=local end definition=], with the <code>objectId</code>+          property set to the [=object id for an object=] |value|.++      <dt>[=IsArray=](|value|)+      <dd>+      1. Let |serialized| be null.

I think not just cycles, but also cases like [a, a], as written. I added some introductory text, but idk if people are happy with this specific set of tradeoffs.

jgraham

comment created time in 4 days

Pull request review commentw3c/webdriver-bidi

Start to specify how to serialize a ES value.

 id=] must be the same as the [=window handle=].  ## Realm ## {#data-types-realm} -[=remote end schema=] and [=local end schema=]+[=remote end definition=] and [= local end definition=] ``` Realm = text; ```  Each [=realm=] has an associated <dfn export>realm id</dfn>, which is a string uniquely identifying that realm. +## Remote Value ## {#data-types-remote-object}++Values accessible from the ECMAScript runtime are represented by a mirror+object, specified as <code>RemoteValue</code>. The value's type is specified in+the <code>type</code> property. In the case of JSON-representable primitive+values, this contains the value in the <code>value</code> property; in the case+of non-JSON-representable primitives, the <code>value</code> property contains a+string representation of the object. For non-primitive objects, the+<code>objectId</code> property contains a string id that provides a unique+handle to the object, valid for its lifetime inside the engine. In this case the+<code>value</code> property can contain a complex object (either a list or a+struct) itself containing further remote object values. This allows objects like+arrays to have a single representation.++[=Nodes=] are also represented by <code>RemoteObject</code> instances. These+have a partial serialization of the node in the value property.++Note: mirror objects do not keep the original object alive in the runtime. If an+object is discarded in the runtime subsequent attempts to access it via the+protocol will result in an error.++A [=/session=] has an <dfn>object id map</dfn>. This is a weak map from objects to+their corresponding id.++Issue: Should this be explicitly per realm?++<div algorithm>+To get the <dfn>object id for an object</dfn> given an |object|:++  1. If [=object id map=] for the [=current session=] does not contain |object|+     run the following steps:++     1. Let |object id| be a new, unique, string identifier for |object|. If+        |object| is an [=/element=] this must be the [=web element reference=]+        for |object|; if it's [=WindowProxy=] object, this must be the+        [=window handle=] for |object|.++    1. Set the value of |object| in the [=object id map=] to |object id|.++  1. Return the result of getting the value for |object| in [=object id map=].+</div>++<div algorithm>+To get the <dfn>object for an object id</dfn> given an |object id|:++  1. For each |object| → |id value| of [=object id map=]:++    1. If |id value| is equal to |object id|, return [=success=] with data+       |object|++  1. Return [=error=] with [=error code=] [=no such element=]++  Issue: This error code isn't right.+</div>++[=remote end definition=] and [=local end definition=]+```+RemoteValue = {+  UndefinedValue //+  NullValue //+  StringValue //+  NumberValue //+  BooleanValue //+  BigIntValue //+  SymbolValue //+  ArrayValue //+  FunctionValue //+  ObjectValue //+  FunctionValue //+  RegExpValue //+  DateValue //+  MapValue //+  SetValue //+  WeakMapValue //+  WeakSetValue //+  IteratorValue //+  GeneratorValue //+  ErrorValue //+  ProxyValue //+  PromiseValue //+  TypedArrayValue //+  ArrayBufferValue //+  NodeValue //+  WindowProxyValue //+}++ObjectId = text;++ListValue = [*RemoteValue];++MappingValue = [*[(RemoteValue / text), RemoteValue]];++UndefinedValue = {+  type: "undefined",+}++NullValue = {+  type: "null",+}++StringValue = {+  type: "string",+  value: text,+}++SpecialNumber = "NaN" / "-0" / "+Infinity" / "-Infinity";++NumberValue = {+  type: "number",+  value: number / SpecialNumber,+}++BooleanValue = {+  type: "boolean",+  value: bool,+}++BigIntValue = {+  type: "bigint",+  value: text,+}++SymbolValue = {+  type: "symbol",+  objectId: ObjectId,+}++ArrayValue = {+  type: "array",+  objectId: ObjectId,+  value?: ListValue,+}++ObjectValue = {+  type: "object",+  objectId: ObjectId,+  value?: MappingValue,+}++FunctionObject = {+  type: "function",+  objectId: ObjectId,+}++RegExpValue = {+  type: "regexp",+  objectId: ObjectId,+  value: text+}++DateValue = {+  type: "date",+  objectId: ObjectId,+  value: text+}++MapValue = {+  type: "map",+  objectId: ObjectId,+  value?: MappingValue,+}++SetValue = {+  type: "set",+  objectId: ObjectId,+  value?: ListValue+}++WeakMapValue = {+  type: "map",+  objectId: ObjectId,+}++WeakSetValue = {+  type: "set",+  objectId: ObjectId,+}++ErrorValue = {+  type: "error",+  objectId: ObjectId,+}++PromiseValue = {+  type: "promise",+  objectId: ObjectId,+}++TypedArrayValue = {+  type: "typedarray",+  objectId: ObjectId,+}++ArrayBufferValue = {+  type: "arraybuffer",+  objectId: ObjectId,+}++NodeValue = {+  type: "node",+  objectId: ObjectId,+  value?: NodeProperties,+}++NodeProperties = {+  nodeType: uint,+  nodeName: text,+  localName: text,+  nodeValue: text,+  childNodeCount: uint,+  children?: [*NodeValue],+  attributes?: {*text => text},+}++WindowProxyValue = {+  type: "window",+  objectId: ObjectId,+}+```++Issue: Add WASM types?++Issue: NodeValue needs more attributes++Issue: Should WindowProxy get attributes in a similar style to Node?++Issue: handle String / Number / etc. wrapper objects specially?++<div algorithm>++To <dfn>serialize as a remote value</dfn> given an |value|, a |max depth|,+|node details|, and a |set of known objects|:++  1. In the following list of conditions and associated steps, run the first set+     of steps for which the associated condition is true:++    <dl>+      <dt>[=Type=](|value|) is Undefined+      <dd>Let |remote value| be an [=object=] matching the <code>UndefinedValue</code>+      production in the [=local end definition=].++      <dt>[=Type=](|value|) is Null+      <dd>Let |remote value| be an [=object=] matching the <code>NullValue</code>+      production in the [=local end definition=].++      <dt>[=Type=](|value|) is String+      <dd>Let |remote value| be an [=object=] matching the <code>StringValue</code>+      production in the [=local end definition=], with the <code>value</code>+      property set to |value|.++      Issue: This doesn't handle lone surrogates++      <dt>[=Type=](|value|) is Number+      <dd>+      1. Switch on the value of |value|:+        <dl>+          <dt>NaN+          <dt>Let |serialized| be <code>"NaN"</code>+          <dt>-0+          <dt>Let |serialized| be <code>"-0"</code>+          <dt>+Infinity+          <dt>Let |serialized| be <code>"+Infinity"</code>+          <dt>-Infinity+          <dt>Let |serialized| be <code>"-Infinity"</code>+          <dt>Otherwise:+          <dt>Let |serialized| be |value|+        </dl>++      1. Let |remote value| be an [=object=] matching the <code>NumberValue</code>+         production in the [=local end definition=], with the <code>value</code>+         property set to |serialized|.++      <dt>[=Type=](|value|) is Boolean+      <dd>Let |remote value| be an [=object=] matching the <code>BooleanValue</code>+          production in the [=local end definition=], with the <code>value</code>+          property set to |value|.++      <dt>[=Type=](|value|) is BigInt+      <dd>Let |remote value| be an [=object=] matching the <code>BigIntValue</code>+          production in the [=local end definition=], with the <code>value</code>+          property set to the result of running the [=ToString=] operation on+          |value|.++      <dt>[=Type=](|value|) is Symbol+      <dd>Let |remote value| be an [=object=] matching the <code>SymbolValue</code>+          production in the [=local end definition=], with the <code>objectId</code>+          property set to the [=object id for an object=] |value|.++      <dt>[=IsArray=](|value|)+      <dd>+      1. Let |serialized| be null.++      1. If |value| is not in the |set of known objects|, and |max depth|+         is not null and greater than 0, run the following steps:+             1. Append |value| to the |set of known objects|++             1. Let |serialized| be the result of [=serialize as a list=] given+                [=CreateArrayIterator=](|value|, value), |max depth|, |node details| and+                |set of known objects|.++      1. Let |remote value| be an [=object=] matching the <code>ArrayValue</code> production+         in the [=local end definition=], with the <code>objectId</code> property set+         to the [=object id for an object=] |value|, and the <code>value</code>+         field set to |serialized| if it's not null, or ommitted otherwise.++      <dt>[=IsRegExp=](|value|)+      <dd>+          1. Let |pattern| be [=ToString=]([=Get=](|value|, "source")).++          1. Let |flags| be [=ToString=]([=Get=](|value|, "flags")).++          1. Let |serialized| be the string-concatenation of "/", |pattern|, "/", and |flags|.++          1. Let |remote | be an [=object=] matching the <code>RegExpValue</code>+             production in the [=local end definition=], with the <code>objectId</code>+             property set to the [=object id for an object=] |object| and the value+             set to |serialized|++      <dt>|value| has a \[[DateValue]] [=internal slot=].+      <dd>+        1. Let |serialized| be [=ToDateString=]([=thisTimeValue=](|value|)).++        1. Let |remote value| be an [=object=] matching the <code>DateValue</code>+           production in the [=local end definition=], with the <code>objectId</code>+           property set to the [=object id for an object=] |object| and the value+           set to |serialized|.++      <dt>|value| has a \[[MapData]] [=internal slot=]+      <dd>+        1. Let |serialized| be null.++        1. If |value| is not in the |set of known objects|, and |max depth|+           is not null and greater than 0, run the following steps:+             1. Append |value| to the |set of known objects|++             1. Let |serialized| be the result of [=serialize as a list=] given+                [=CreateMapIterator=](|value|, key+value), |max depth|, |node details| and+                |set of known objects|.++      1. Let |remote value| be an [=object=] matching the <code>MapValue</code>+         production in the [=local end definition=], with the+         <code>objectId</code> property set to the [=object id for an object=]+         |value|, and the <code>value</code> field set to |serialized| if it's+         not null, or ommitted otherwise.++      <dt>|value| has a \[[SetData]] [=internal slot=]+      <dd>+        1. Let |serialized| be null.++        1. If |value| is not in the |set of known objects|, and |max depth|+           is not null and greater than 0, run the following steps:+             1. Append |value| to the |set of known objects|++             1. Let |serialized| be the result of [=serialize as a list=] given+                [=CreateSetIterator=](|value|, value), |max depth|, |node details| and+                |set of known objects|.++       1. Let |remote value| be an [=object=] matching the <code>SetValue</code>+          production in the [=local end definition=], with the+          <code>objectId</code> property set to the [=object id for an object=]+          |value|, and the <code>value</code> field set to |serialized| if it's+          not null, or ommitted otherwise.++      <dt>|value| has a \[[WeakMapData]] [=internal slot=]+      <dd>Let |remote value| be an [=object=] matching the <code>WeakMapValue</code>+          production in the [=local end definition=], with the <code>objectId</code>+          property set to the [=object id for an object=] |value|.++      <dt>|value| has a \[[WeakSetData]] [=internal slot=]+      <dd>Let |remote value| be an [=object=] matching the <code>WeakSetValue</code>+          production in the [=local end definition=], with the <code>objectId</code>+          property set to the [=object id for an object=] |value|.++      <dt>|value| has an \[[ErrorData]] [=internal slot=]+      <dd>Let |remote value| be an [=object=] matching the <code>ErrorValue</code>+          production in the [=local end definition=], with the <code>objectId</code>+          property set to the [=object id for an object=] |value|.++      <dt>[=IsPromise=](|value|)+      <dd>Let |remote value| be an [=object=] matching the <code>PromiseValue</code>+          production in the [=local end definition=], with the <code>objectId</code>+          property set to the [=object id for an object=] |value|.++      <dt>|value| has a \[[TypedArrayName]] [=internal slot=]+      <dd>Let |remote value| be an [=object=] matching the <code>TypedArrayValue</code>+          production in the [=local end definition=], with the <code>objectId</code>+          property set to the [=object id for an object=] |value|.++      <dt>|value| has an \[[ArrayBufferData]] [=internal slot=]+      <dd>Let |remote value| be an [=object=] matching the <code>ArrayBufferValue</code>+          production in the [=local end definition=], with the <code>objectId</code>+          property set to the [=object id for an object=] |value|.++      <dt>|value| is a [=platform object=] that implements [=Node=]+      <dd>+        1. Let |serialized| be null.++        1. If |node details| is true, run the following steps:++            1. Let |serialized| be a new [=Object=].++            1. [=Set=](|serialized|, "nodeType", [=Get=](|value|, "nodeType"), false)++            1. [=Set=](|serialized|, "nodeName", [=Get=](|value|, "nodeName"), false)++            1. [=Set=](|serialized|, "localName", [=Get=](|value|, "localName"), false)++            1. [=Set=](|serialized|, "nodeValue", [=Get=](|value|, "nodeValue"), false)++            1. Let |child node count| be the size of |serialized|'s [=children=].++            1. [=Set=](|serialized|, "childNodeCount", |child node count|, false)++            1. If |max depth| is null and or equal to 0 let |children| be null.+               Otherwise, let |children| be an empty list and, for each node+               |child| in the [=children=] of |value|:++              1. Let |serialized| be the result of [=serialize as a remote value=]+                 with |child|, |max depth| - 1, |node details| and+                 |set of known objects|.++              1. Append |serialized| to |children|.++            1. [=Set=](|serialized|, "children", |serialized|, false)++            1. Let |attributes| be a new [=Object=].++            1. For each |attribute| in |value|'s <a spec=dom>attributes</a>:++              1. Let |name| be |attribute|'s [=Attr/qualified name=]++              1. Let |serialized| be |attribute|'s [=Attr/value=].++              1. [=Set=](|attributes|, |name|, |serialized|, false)++            1. [=Set=](|serialized|, "attributes", |attributes|, false)++        1. Let |remote value| be an [=object=] matching the <code>NodeValue</code>+           production in the [=local end definition=], with the <code>objectId</code>+           property set to the [=object id for an object=] |value|, and <code>value</code>+           set to |serialized|, if |serialized| is not null.++      <dt>|value| is a [=platform object=] that implements [=WindowProxy=]+      <dd>1. Let |remote value| be an [=object=] matching the <code>WindowProxyValue</code>+             production in the [=local end definition=], with the <code>objectId</code>+             property set to the [=object id for an object=] |value|.++      <dt>|value| is a [=platform object=]+      <dd>1. Let |remote value| be an [=object=] matching the <code>ObjectValue</code>+             production in the [=local end definition=], with the <code>objectId</code>+             property set to the [=object id for an object=] |value|.++      <dt>[=IsCallable=](|value|)+      <dd>Let |remote value| be an [=object=] matching the <code>FunctionValue</code>+          production in the [=local end definition=], with the <code>objectId</code>+          property set to the [=object id for an object=] |value|.++      <dt>Otherwise:+      <dd>+      1. let |serialized| be null.++      1. If |value| is not in the |set of known objects|, and |max depth|+         is not null and greater than 0, run the following steps:+         1. Append |value| to the |set of known objects|++         1. Let |serialized| be the result of [=serialize as a mapping=] given+            [=EnumerableOwnPropertyNames=](|value|, key+value), |max depth|, |node+            details| and |set of known objects|++      1. Let |remote value| be an [=object=] matching the <code>ObjectValue</code> production+         in the [=local end definition=], with the <code>objectId</code> property set+         to the [=object id for an object=] |value|, and the <code>value</code> field+         set to |serialized|.+    </dl>++  1. Return |remote value|++Issue: the way we check types is all wrong++Issue: Does it make sense to use the same depth parameter for nodes and objects+in general?++</div>++<div algorithm>+Issue: this assumes for-in works on iterators++To <dfn>serialize as a list</dfn> given |iterable|, |max depth|,+|node details| and |set of known objects|:++  1. Let |serialized| be a new list.

AIUI infra lists are the same type as ES262 Lists. At least that's what infra claims:

The list type originates from the JavaScript specification (where it is capitalized, as List); we repeat some elements of its definition here for ease of reference, and provide an expanded vocabulary for manipulating lists. Whenever JavaScript expects a List, a list as defined here can be used; they are the same type. [ECMA-262]

jgraham

comment created time in 4 days

Pull request review commentw3c/webdriver-bidi

Start to specify how to serialize a ES value.

 id=] must be the same as the [=window handle=].  ## Realm ## {#data-types-realm} -[=remote end schema=] and [=local end schema=]+[=remote end definition=] and [= local end definition=] ``` Realm = text; ```  Each [=realm=] has an associated <dfn export>realm id</dfn>, which is a string uniquely identifying that realm. +## Remote Value ## {#data-types-remote-object}++Values accessible from the ECMAScript runtime are represented by a mirror+object, specified as <code>RemoteValue</code>. The value's type is specified in+the <code>type</code> property. In the case of JSON-representable primitive+values, this contains the value in the <code>value</code> property; in the case+of non-JSON-representable primitives, the <code>value</code> property contains a+string representation of the object. For non-primitive objects, the+<code>objectId</code> property contains a string id that provides a unique+handle to the object, valid for its lifetime inside the engine. In this case the+<code>value</code> property can contain a complex object (either a list or a+struct) itself containing further remote object values. This allows objects like+arrays to have a single representation.++[=Nodes=] are also represented by <code>RemoteObject</code> instances. These+have a partial serialization of the node in the value property.++Note: mirror objects do not keep the original object alive in the runtime. If an+object is discarded in the runtime subsequent attempts to access it via the+protocol will result in an error.++A [=/session=] has an <dfn>object id map</dfn>. This is a weak map from objects to+their corresponding id.++Issue: Should this be explicitly per realm?++<div algorithm>+To get the <dfn>object id for an object</dfn> given an |object|:++  1. If [=object id map=] for the [=current session=] does not contain |object|+     run the following steps:++     1. Let |object id| be a new, unique, string identifier for |object|. If+        |object| is an [=/element=] this must be the [=web element reference=]+        for |object|; if it's [=WindowProxy=] object, this must be the+        [=window handle=] for |object|.++    1. Set the value of |object| in the [=object id map=] to |object id|.++  1. Return the result of getting the value for |object| in [=object id map=].+</div>++<div algorithm>+To get the <dfn>object for an object id</dfn> given an |object id|:++  1. For each |object| → |id value| of [=object id map=]:++    1. If |id value| is equal to |object id|, return [=success=] with data+       |object|++  1. Return [=error=] with [=error code=] [=no such element=]++  Issue: This error code isn't right.+</div>++[=remote end definition=] and [=local end definition=]+```+RemoteValue = {+  UndefinedValue //+  NullValue //+  StringValue //+  NumberValue //+  BooleanValue //+  BigIntValue //+  SymbolValue //+  ArrayValue //+  FunctionValue //+  ObjectValue //+  FunctionValue //+  RegExpValue //+  DateValue //+  MapValue //+  SetValue //+  WeakMapValue //+  WeakSetValue //+  IteratorValue //+  GeneratorValue //+  ErrorValue //+  ProxyValue //+  PromiseValue //+  TypedArrayValue //+  ArrayBufferValue //+  NodeValue //+  WindowProxyValue //+}++ObjectId = text;++ListValue = [*RemoteValue];++MappingValue = [*[(RemoteValue / text), RemoteValue]];++UndefinedValue = {+  type: "undefined",+}++NullValue = {+  type: "null",+}++StringValue = {+  type: "string",+  value: text,+}++SpecialNumber = "NaN" / "-0" / "+Infinity" / "-Infinity";++NumberValue = {+  type: "number",+  value: number / SpecialNumber,+}++BooleanValue = {+  type: "boolean",+  value: bool,+}++BigIntValue = {+  type: "bigint",+  value: text,+}++SymbolValue = {+  type: "symbol",+  objectId: ObjectId,+}++ArrayValue = {+  type: "array",+  objectId: ObjectId,+  value?: ListValue,+}++ObjectValue = {+  type: "object",+  objectId: ObjectId,+  value?: MappingValue,+}++FunctionObject = {+  type: "function",+  objectId: ObjectId,+}++RegExpValue = {+  type: "regexp",+  objectId: ObjectId,+  value: text+}++DateValue = {+  type: "date",+  objectId: ObjectId,+  value: text+}++MapValue = {+  type: "map",+  objectId: ObjectId,+  value?: MappingValue,+}++SetValue = {+  type: "set",+  objectId: ObjectId,+  value?: ListValue+}++WeakMapValue = {+  type: "map",+  objectId: ObjectId,+}++WeakSetValue = {+  type: "set",+  objectId: ObjectId,+}++ErrorValue = {+  type: "error",+  objectId: ObjectId,+}++PromiseValue = {+  type: "promise",+  objectId: ObjectId,+}++TypedArrayValue = {+  type: "typedarray",+  objectId: ObjectId,+}++ArrayBufferValue = {+  type: "arraybuffer",+  objectId: ObjectId,+}++NodeValue = {+  type: "node",+  objectId: ObjectId,+  value?: NodeProperties,+}++NodeProperties = {+  nodeType: uint,+  nodeName: text,

CDP has nodeName and puppeteer seems to use it once, but I think it should be fine to drop.

jgraham

comment created time in 4 days

Pull request review commentw3c/webdriver-bidi

Start to specify how to serialize a ES value.

 id=] must be the same as the [=window handle=].  ## Realm ## {#data-types-realm} -[=remote end schema=] and [=local end schema=]+[=remote end definition=] and [= local end definition=] ``` Realm = text; ```  Each [=realm=] has an associated <dfn export>realm id</dfn>, which is a string uniquely identifying that realm. +## Remote Value ## {#data-types-remote-object}++Values accessible from the ECMAScript runtime are represented by a mirror+object, specified as <code>RemoteValue</code>. The value's type is specified in+the <code>type</code> property. In the case of JSON-representable primitive+values, this contains the value in the <code>value</code> property; in the case+of non-JSON-representable primitives, the <code>value</code> property contains a+string representation of the object. For non-primitive objects, the+<code>objectId</code> property contains a string id that provides a unique+handle to the object, valid for its lifetime inside the engine. In this case the+<code>value</code> property can contain a complex object (either a list or a+struct) itself containing further remote object values. This allows objects like+arrays to have a single representation.++[=Nodes=] are also represented by <code>RemoteObject</code> instances. These+have a partial serialization of the node in the value property.++Note: mirror objects do not keep the original object alive in the runtime. If an+object is discarded in the runtime subsequent attempts to access it via the+protocol will result in an error.++A [=/session=] has an <dfn>object id map</dfn>. This is a weak map from objects to+their corresponding id.++Issue: Should this be explicitly per realm?++<div algorithm>+To get the <dfn>object id for an object</dfn> given an |object|:++  1. If [=object id map=] for the [=current session=] does not contain |object|+     run the following steps:++     1. Let |object id| be a new, unique, string identifier for |object|. If+        |object| is an [=/element=] this must be the [=web element reference=]+        for |object|; if it's [=WindowProxy=] object, this must be the+        [=window handle=] for |object|.++    1. Set the value of |object| in the [=object id map=] to |object id|.++  1. Return the result of getting the value for |object| in [=object id map=].+</div>++<div algorithm>+To get the <dfn>object for an object id</dfn> given an |object id|:++  1. For each |object| → |id value| of [=object id map=]:++    1. If |id value| is equal to |object id|, return [=success=] with data+       |object|++  1. Return [=error=] with [=error code=] [=no such element=]++  Issue: This error code isn't right.+</div>++[=remote end definition=] and [=local end definition=]+```+RemoteValue = {+  UndefinedValue //+  NullValue //+  StringValue //+  NumberValue //+  BooleanValue //+  BigIntValue //+  SymbolValue //+  ArrayValue //+  FunctionValue //+  ObjectValue //+  FunctionValue //+  RegExpValue //+  DateValue //+  MapValue //+  SetValue //+  WeakMapValue //+  WeakSetValue //+  IteratorValue //+  GeneratorValue //+  ErrorValue //+  ProxyValue //+  PromiseValue //+  TypedArrayValue //+  ArrayBufferValue //+  NodeValue //+  WindowProxyValue //+}++ObjectId = text;++ListValue = [*RemoteValue];++MappingValue = [*[(RemoteValue / text), RemoteValue]];++UndefinedValue = {+  type: "undefined",+}++NullValue = {+  type: "null",+}++StringValue = {+  type: "string",+  value: text,+}++SpecialNumber = "NaN" / "-0" / "+Infinity" / "-Infinity";++NumberValue = {+  type: "number",+  value: number / SpecialNumber,+}++BooleanValue = {+  type: "boolean",+  value: bool,+}++BigIntValue = {+  type: "bigint",+  value: text,+}++SymbolValue = {+  type: "symbol",+  objectId: ObjectId,+}++ArrayValue = {+  type: "array",+  objectId: ObjectId,+  value?: ListValue,+}++ObjectValue = {+  type: "object",+  objectId: ObjectId,+  value?: MappingValue,+}++FunctionObject = {+  type: "function",+  objectId: ObjectId,+}++RegExpValue = {+  type: "regexp",+  objectId: ObjectId,+  value: text+}++DateValue = {+  type: "date",+  objectId: ObjectId,+  value: text+}++MapValue = {+  type: "map",+  objectId: ObjectId,+  value?: MappingValue,+}++SetValue = {+  type: "set",+  objectId: ObjectId,+  value?: ListValue+}++WeakMapValue = {+  type: "map",+  objectId: ObjectId,+}++WeakSetValue = {+  type: "set",+  objectId: ObjectId,+}++ErrorValue = {+  type: "error",+  objectId: ObjectId,+}++PromiseValue = {+  type: "promise",+  objectId: ObjectId,+}++TypedArrayValue = {+  type: "typedarray",+  objectId: ObjectId,+}++ArrayBufferValue = {+  type: "arraybuffer",+  objectId: ObjectId,+}++NodeValue = {+  type: "node",+  objectId: ObjectId,+  value?: NodeProperties,+}++NodeProperties = {+  nodeType: uint,+  nodeName: text,+  localName: text,+  nodeValue: text,+  childNodeCount: uint,+  children?: [*NodeValue],+  attributes?: {*text => text},

qname is less verbose in the common case, but it means that if the child gets something like foo:a it needs to parse out the thing and query what foo means. I'm not really sure what to do here though because using localName means that an element with the same attribute in multiple namespaces won't work, but using the qualified name is unergonomic in the uncommon case where the attribute is in a namespace.

jgraham

comment created time in 4 days

Pull request review commentw3c/webdriver-bidi

Start to specify how to serialize a ES value.

 id=] must be the same as the [=window handle=].  ## Realm ## {#data-types-realm} -[=remote end schema=] and [=local end schema=]+[=remote end definition=] and [= local end definition=] ``` Realm = text; ```  Each [=realm=] has an associated <dfn export>realm id</dfn>, which is a string uniquely identifying that realm. +## Remote Value ## {#data-types-remote-object}++Values accessible from the ECMAScript runtime are represented by a mirror+object, specified as <code>RemoteValue</code>. The value's type is specified in+the <code>type</code> property. In the case of JSON-representable primitive+values, this contains the value in the <code>value</code> property; in the case+of non-JSON-representable primitives, the <code>value</code> property contains a+string representation of the object. For non-primitive objects, the+<code>objectId</code> property contains a string id that provides a unique+handle to the object, valid for its lifetime inside the engine. In this case the+<code>value</code> property can contain a complex object (either a list or a+struct) itself containing further remote object values. This allows objects like+arrays to have a single representation.++[=Nodes=] are also represented by <code>RemoteObject</code> instances. These+have a partial serialization of the node in the value property.++Note: mirror objects do not keep the original object alive in the runtime. If an+object is discarded in the runtime subsequent attempts to access it via the+protocol will result in an error.++A [=/session=] has an <dfn>object id map</dfn>. This is a weak map from objects to+their corresponding id.++Issue: Should this be explicitly per realm?++<div algorithm>+To get the <dfn>object id for an object</dfn> given an |object|:++  1. If [=object id map=] for the [=current session=] does not contain |object|+     run the following steps:++     1. Let |object id| be a new, unique, string identifier for |object|. If+        |object| is an [=/element=] this must be the [=web element reference=]+        for |object|; if it's [=WindowProxy=] object, this must be the+        [=window handle=] for |object|.++    1. Set the value of |object| in the [=object id map=] to |object id|.++  1. Return the result of getting the value for |object| in [=object id map=].+</div>++<div algorithm>+To get the <dfn>object for an object id</dfn> given an |object id|:++  1. For each |object| → |id value| of [=object id map=]:++    1. If |id value| is equal to |object id|, return [=success=] with data+       |object|++  1. Return [=error=] with [=error code=] [=no such element=]++  Issue: This error code isn't right.+</div>++[=remote end definition=] and [=local end definition=]+```+RemoteValue = {+  UndefinedValue //+  NullValue //+  StringValue //+  NumberValue //+  BooleanValue //+  BigIntValue //+  SymbolValue //+  ArrayValue //+  FunctionValue //+  ObjectValue //+  FunctionValue //+  RegExpValue //+  DateValue //+  MapValue //+  SetValue //+  WeakMapValue //+  WeakSetValue //+  IteratorValue //+  GeneratorValue //+  ErrorValue //+  ProxyValue //+  PromiseValue //+  TypedArrayValue //+  ArrayBufferValue //+  NodeValue //+  WindowProxyValue //+}++ObjectId = text;++ListValue = [*RemoteValue];++MappingValue = [*[(RemoteValue / text), RemoteValue]];++UndefinedValue = {+  type: "undefined",+}++NullValue = {+  type: "null",+}++StringValue = {+  type: "string",+  value: text,+}++SpecialNumber = "NaN" / "-0" / "+Infinity" / "-Infinity";++NumberValue = {+  type: "number",+  value: number / SpecialNumber,+}++BooleanValue = {+  type: "boolean",+  value: bool,+}++BigIntValue = {+  type: "bigint",+  value: text,+}++SymbolValue = {+  type: "symbol",+  objectId: ObjectId,

I think I'd rather have a uniform field name and if necessary call it "referenceId", or just "id", or something, rather than being picky about the js definition of "object".

jgraham

comment created time in 5 days

Pull request review commentw3c/webdriver-bidi

Start to specify how to serialize a ES value.

 id=] must be the same as the [=window handle=].  ## Realm ## {#data-types-realm} -[=remote end schema=] and [=local end schema=]+[=remote end definition=] and [= local end definition=] ``` Realm = text; ```  Each [=realm=] has an associated <dfn export>realm id</dfn>, which is a string uniquely identifying that realm. +## Remote Value ## {#data-types-remote-object}++Values accessible from the ECMAScript runtime are represented by a mirror+object, specified as <code>RemoteValue</code>. The value's type is specified in+the <code>type</code> property. In the case of JSON-representable primitive+values, this contains the value in the <code>value</code> property; in the case+of non-JSON-representable primitives, the <code>value</code> property contains a+string representation of the object. For non-primitive objects, the+<code>objectId</code> property contains a string id that provides a unique+handle to the object, valid for its lifetime inside the engine. In this case the+<code>value</code> property can contain a complex object (either a list or a+struct) itself containing further remote object values. This allows objects like+arrays to have a single representation.++[=Nodes=] are also represented by <code>RemoteObject</code> instances. These+have a partial serialization of the node in the value property.++Note: mirror objects do not keep the original object alive in the runtime. If an+object is discarded in the runtime subsequent attempts to access it via the+protocol will result in an error.++A [=/session=] has an <dfn>object id map</dfn>. This is a weak map from objects to+their corresponding id.++Issue: Should this be explicitly per realm?++<div algorithm>+To get the <dfn>object id for an object</dfn> given an |object|:++  1. If [=object id map=] for the [=current session=] does not contain |object|+     run the following steps:++     1. Let |object id| be a new, unique, string identifier for |object|. If+        |object| is an [=/element=] this must be the [=web element reference=]+        for |object|; if it's [=WindowProxy=] object, this must be the+        [=window handle=] for |object|.++    1. Set the value of |object| in the [=object id map=] to |object id|.++  1. Return the result of getting the value for |object| in [=object id map=].+</div>++<div algorithm>+To get the <dfn>object for an object id</dfn> given an |object id|:++  1. For each |object| → |id value| of [=object id map=]:++    1. If |id value| is equal to |object id|, return [=success=] with data+       |object|++  1. Return [=error=] with [=error code=] [=no such element=]++  Issue: This error code isn't right.+</div>++[=remote end definition=] and [=local end definition=]+```+RemoteValue = {+  UndefinedValue //+  NullValue //+  StringValue //+  NumberValue //+  BooleanValue //+  BigIntValue //+  SymbolValue //+  ArrayValue //+  FunctionValue //+  ObjectValue //+  FunctionValue //+  RegExpValue //+  DateValue //+  MapValue //+  SetValue //+  WeakMapValue //+  WeakSetValue //+  IteratorValue //+  GeneratorValue //+  ErrorValue //+  ProxyValue //+  PromiseValue //+  TypedArrayValue //+  ArrayBufferValue //+  NodeValue //+  WindowProxyValue //+}++ObjectId = text;++ListValue = [*RemoteValue];++MappingValue = [*[(RemoteValue / text), RemoteValue]];

Well the idea is that strings are a special case here which are represented directly. But arguably it might be better to have a fully uniform representation.

jgraham

comment created time in 5 days

Pull request review commentw3c/webdriver-bidi

Start to specify how to serialize a ES value.

 id=] must be the same as the [=window handle=].  ## Realm ## {#data-types-realm} -[=remote end schema=] and [=local end schema=]+[=remote end definition=] and [= local end definition=] ``` Realm = text; ```  Each [=realm=] has an associated <dfn export>realm id</dfn>, which is a string uniquely identifying that realm. +## Remote Value ## {#data-types-remote-object}++Values accessible from the ECMAScript runtime are represented by a mirror+object, specified as <code>RemoteValue</code>. The value's type is specified in+the <code>type</code> property. In the case of JSON-representable primitive+values, this contains the value in the <code>value</code> property; in the case+of non-JSON-representable primitives, the <code>value</code> property contains a+string representation of the object. For non-primitive objects, the+<code>objectId</code> property contains a string id that provides a unique+handle to the object, valid for its lifetime inside the engine. In this case the+<code>value</code> property can contain a complex object (either a list or a+struct) itself containing further remote object values. This allows objects like+arrays to have a single representation.++[=Nodes=] are also represented by <code>RemoteObject</code> instances. These+have a partial serialization of the node in the value property.++Note: mirror objects do not keep the original object alive in the runtime. If an+object is discarded in the runtime subsequent attempts to access it via the+protocol will result in an error.++A [=/session=] has an <dfn>object id map</dfn>. This is a weak map from objects to+their corresponding id.++Issue: Should this be explicitly per realm?++<div algorithm>+To get the <dfn>object id for an object</dfn> given an |object|:++  1. If [=object id map=] for the [=current session=] does not contain |object|+     run the following steps:++     1. Let |object id| be a new, unique, string identifier for |object|. If+        |object| is an [=/element=] this must be the [=web element reference=]+        for |object|; if it's [=WindowProxy=] object, this must be the+        [=window handle=] for |object|.++    1. Set the value of |object| in the [=object id map=] to |object id|.++  1. Return the result of getting the value for |object| in [=object id map=].+</div>++<div algorithm>+To get the <dfn>object for an object id</dfn> given an |object id|:++  1. For each |object| → |id value| of [=object id map=]:++    1. If |id value| is equal to |object id|, return [=success=] with data+       |object|++  1. Return [=error=] with [=error code=] [=no such element=]++  Issue: This error code isn't right.+</div>++[=remote end definition=] and [=local end definition=]+```+RemoteValue = {+  UndefinedValue //+  NullValue //+  StringValue //+  NumberValue //+  BooleanValue //+  BigIntValue //+  SymbolValue //+  ArrayValue //+  FunctionValue //+  ObjectValue //+  FunctionValue //+  RegExpValue //+  DateValue //+  MapValue //+  SetValue //+  WeakMapValue //+  WeakSetValue //+  IteratorValue //+  GeneratorValue //+  ErrorValue //+  ProxyValue //+  PromiseValue //+  TypedArrayValue //+  ArrayBufferValue //+  NodeValue //+  WindowProxyValue //+}++ObjectId = text;++ListValue = [*RemoteValue];++MappingValue = [*[(RemoteValue / text), RemoteValue]];++UndefinedValue = {+  type: "undefined",+}++NullValue = {+  type: "null",+}++StringValue = {+  type: "string",+  value: text,+}++SpecialNumber = "NaN" / "-0" / "+Infinity" / "-Infinity";++NumberValue = {+  type: "number",+  value: number / SpecialNumber,+}++BooleanValue = {+  type: "boolean",+  value: bool,+}++BigIntValue = {+  type: "bigint",+  value: text,+}++SymbolValue = {+  type: "symbol",+  objectId: ObjectId,+}++ArrayValue = {+  type: "array",+  objectId: ObjectId,+  value?: ListValue,+}++ObjectValue = {+  type: "object",+  objectId: ObjectId,+  value?: MappingValue,+}++FunctionObject = {+  type: "function",+  objectId: ObjectId,+}++RegExpValue = {+  type: "regexp",+  objectId: ObjectId,+  value: text+}++DateValue = {+  type: "date",+  objectId: ObjectId,+  value: text+}++MapValue = {+  type: "map",+  objectId: ObjectId,+  value?: MappingValue,+}++SetValue = {+  type: "set",+  objectId: ObjectId,+  value?: ListValue+}++WeakMapValue = {+  type: "map",+  objectId: ObjectId,+}++WeakSetValue = {+  type: "set",+  objectId: ObjectId,+}++ErrorValue = {+  type: "error",+  objectId: ObjectId,+}++PromiseValue = {+  type: "promise",+  objectId: ObjectId,+}++TypedArrayValue = {+  type: "typedarray",+  objectId: ObjectId,+}++ArrayBufferValue = {+  type: "arraybuffer",+  objectId: ObjectId,+}++NodeValue = {+  type: "node",+  objectId: ObjectId,+  value?: NodeProperties,+}++NodeProperties = {+  nodeType: uint,+  nodeName: text,+  localName: text,

OK added namespaceURI and did a better job of handling elments and attributes specially where required.

jgraham

comment created time in 4 days

Pull request review commentw3c/webdriver-bidi

Start to specify how to serialize a ES value.

 id=] must be the same as the [=window handle=].  ## Realm ## {#data-types-realm} -[=remote end schema=] and [=local end schema=]+[=remote end definition=] and [= local end definition=] ``` Realm = text; ```  Each [=realm=] has an associated <dfn export>realm id</dfn>, which is a string uniquely identifying that realm. +## Remote Value ## {#data-types-remote-object}++Values accessible from the ECMAScript runtime are represented by a mirror+object, specified as <code>RemoteValue</code>. The value's type is specified in+the <code>type</code> property. In the case of JSON-representable primitive+values, this contains the value in the <code>value</code> property; in the case+of non-JSON-representable primitives, the <code>value</code> property contains a+string representation of the object. For non-primitive objects, the+<code>objectId</code> property contains a string id that provides a unique+handle to the object, valid for its lifetime inside the engine. In this case the+<code>value</code> property can contain a complex object (either a list or a+struct) itself containing further remote object values. This allows objects like

Yeah it's an implicit contrast with CDP where you (used to have to) do N+1 calls to get the elements of an array of length N. But I've removed the sentence since it wasn't adding much.

jgraham

comment created time in 5 days

PullRequestReviewEvent
PullRequestReviewEvent

push eventw3c/webdriver-bidi

jgraham

commit sha f8151a50a016bd517e1d2367c699219a1daf0b0d

Apply suggestions from code review Co-authored-by: Philip Jägenstedt <philip@foolip.org>

view details

push time in 4 days

push eventmozilla/wpt-sync

James Graham

commit sha 7969a2e1b5776a53764538b47c3fcad3b0916ada

Move PYTHONPATH manipulation to configure() __main__ isn't called by celery tasks, but everything loads the config

view details

push time in 4 days

created tagmozilla/wpt-sync

tagv0.3.60

Two-way repository sync between web-platform-tests and gecko

created time in 5 days

push eventmozilla/wpt-sync

James Graham

commit sha d1b6892c365de7a29f7f4ab2187e7a6cfb5e75ea

Unset PYTHONPATH on startup so subprocesses don't run new relic sitecustomize This can break subprocesses that still use Python 2

view details

push time in 5 days

push eventmozilla/wpt-sync

James Graham

commit sha a052258cb9d9aee5770950a54e218460d9fbb4ba

Revert "strace failing git fetch calls" This reverts commit ed8c6a0164cb72df71d3ef484b59a765331e2ea8.

view details

push time in 5 days

push eventweb-platform-tests/wpt

Stephen McGruer

commit sha a88b2a57daf3ddaf6405a52269fe8aa60341f520

[testharness.js] Fix bug in get_test_name The duplicate detection code previously mutated 'trimmed' before checking the duplicate-detection cache, so repeated subtest names would all just get '1' appended, rather than 1, 2, 3, ...

view details

Stephen McGruer

commit sha bd11431fbbda3865475c7d2ac12f920224ecea53

Actually fix bug

view details

Stephen McGruer

commit sha fbb40dbaa03a8a6e5b8644ed455aabc7a8a541fc

Fix properly

view details

Stephen McGruer

commit sha f38fb11d44877268aae773a170720de80d748a36

Address review comemnt

view details

push time in 5 days

delete branch web-platform-tests/wpt

delete branch : smcgruer/fix-single-arrow

delete time in 5 days

PR merged web-platform-tests/wpt

[testharness.js] Fix bug in get_test_name infra testharness.js

The duplicate detection code previously mutated 'trimmed' before checking the duplicate-detection cache, so repeated subtest names would all just get '1' appended, rather than 1, 2, 3, ...

+13 -5

2 comments

2 changed files

stephenmcgruer

pr closed time in 5 days

PullRequestReviewEvent

created tagmozilla/wpt-sync

tagv0.3.58

Two-way repository sync between web-platform-tests and gecko

created time in 5 days

push eventmozilla/wpt-sync

James Graham

commit sha ed8c6a0164cb72df71d3ef484b59a765331e2ea8

strace failing git fetch calls

view details

push time in 5 days

Pull request review commentweb-platform-tests/wpt

[testharness.js] Fix bug in get_test_name

 policies and contribution forms [3].                 if (trimmed) {                     // add a suffix if we already have this string                     if (seen_func_name[trimmed]) {-                        trimmed = trimmed + " " + seen_func_name[trimmed];-                        seen_func_name[trimmed]++;+                        let current_count = seen_func_name[trimmed]++;

Can we avoid using ++ here. Depending on details of post increment vs pre increment seems to be quite bug prone. Something like

if (trimmed) {
  let name = trimmed
  if (seen_func_name[trimmed]) {
    // This base name exists, so add a suffix
    name += " " + seen_func_name[trimmed];
  } else {
    seen_func_name[trimmed] = 0;
  }
  seen_func_name[trimmed] += 1;
  return name;
}
stephenmcgruer

comment created time in 5 days

PullRequestReviewEvent
PullRequestReviewEvent

created tagmozilla/wpt-sync

tagv0.3.57

Two-way repository sync between web-platform-tests and gecko

created time in 5 days

push eventmozilla/wpt-sync

James Graham

commit sha dea6ffe8287b5c963908f5b8b20b0919b9bef2e7

Call git fetch directly using subprocess. This makes it easier to inspect what's going on vs going via gitpython

view details

push time in 5 days

created tagmozilla/wpt-sync

tagv0.3.56

Two-way repository sync between web-platform-tests and gecko

created time in 6 days

push eventmozilla/wpt-sync

James Graham

commit sha cf9e042ba186ccf641f928db223107b942e38b67

Downgrade mercurial to 5.4.2

view details

James Graham

commit sha 7fb311ac684dd20da27947a39f2b93cc376db00c

Downgrade hg to 5.4.2

view details

push time in 6 days

Pull request review commentw3c/webdriver-bidi

Start to specify how to serialize a ES value.

 id=] must be the same as the [=window handle=].  ## Realm ## {#data-types-realm} -[=remote end schema=] and [=local end schema=]+[=remote end definition=] and [= local end definition=] ``` Realm = text; ```  Each [=realm=] has an associated <dfn export>realm id</dfn>, which is a string uniquely identifying that realm. +## Remote Value ## {#data-types-remote-object}++Values accessible from the ECMAScript runtime are represented by a mirror+object, specified as <code>RemoteValue</code>. The value's type is specified in+the <code>type</code> property. In the case of JSON-representable primitive+values, this contains the value in the <code>value</code> property; in the case+of non-JSON-representable primitives, the <code>value</code> property contains a+string representation of the object. For non-primitive objects, the+<code>objectId</code> property contains a string id that provides a unique+handle to the object, valid for its lifetime inside the engine. In this case the+<code>value</code> property can contain a complex object (either a list or a+struct) itself containing further remote object values. This allows objects like+arrays to have a single representation.++[=Nodes=] are also represented by <code>RemoteObject</code> instances. These+have a partial serialization of the node in the value property.++Note: mirror objects do not keep the original object alive in the runtime. If an+object is discarded in the runtime subsequent attempts to access it via the+protocol will result in an error.++A [=/session=] has an <dfn>object id map</dfn>. This is a weak map from objects to+their corresponding id.++Issue: Should this be explicitly per realm?++<div algorithm>+To get the <dfn>object id for an object</dfn> given an |object|:++  1. If [=object id map=] for the [=current session=] does not contain |object|+     run the following steps:++     1. Let |object id| be a new, unique, string identifier for |object|. If+        |object| is an [=/element=] this must be the [=web element reference=]+        for |object|; if it's [=WindowProxy=] object, this must be the+        [=window handle=] for |object|.++    1. Set the value of |object| in the [=object id map=] to |object id|.++  1. Return the result of getting the value for |object| in [=object id map=].+</div>++<div algorithm>+To get the <dfn>object for an object id</dfn> given an |object id|:++  1. For each |object| → |id value| of [=object id map=]:++    1. If |id value| is equal to |object id|, return [=success=] with data+       |object|++  1. Return [=error=] with [=error code=] [=no such element=]++  Issue: This error code isn't right.+</div>++[=remote end definition=] and [=local end definition=]+```+RemoteValue = {+  UndefinedValue //+  NullValue //+  StringValue //+  NumberValue //+  BooleanValue //+  BigIntValue //+  SymbolValue //+  ArrayValue //+  FunctionValue //+  ObjectValue //+  FunctionValue //+  RegExpValue //+  DateValue //+  MapValue //+  SetValue //+  WeakMapValue //+  WeakSetValue //+  IteratorValue //+  GeneratorValue //+  ErrorValue //+  ProxyValue //+  PromiseValue //+  TypedArrayValue //+  ArrayBufferValue //+  NodeValue //+  WindowProxyValue //+}++ObjectId = text;++ListValue = [*RemoteValue];++MappingValue = [*[(RemoteValue / text), RemoteValue]];++UndefinedValue = {+  type: "undefined",+}++NullValue = {+  type: "null",+}++StringValue = {+  type: "string",+  value: text,+}++SpecialNumber = "NaN" / "-0" / "+Infinity" / "-Infinity";++NumberValue = {+  type: "number",+  value: number / SpecialNumber,+}++BooleanValue = {+  type: "boolean",+  value: bool,+}++BigIntValue = {+  type: "bigint",+  value: text,+}++SymbolValue = {+  type: "symbol",+  objectId: ObjectId,+}++ArrayValue = {+  type: "array",+  objectId: ObjectId,+  value?: ListValue,+}++ObjectValue = {+  type: "object",+  objectId: ObjectId,+  value?: MappingValue,+}++FunctionObject = {+  type: "function",+  objectId: ObjectId,+}++RegExpValue = {+  type: "regexp",+  objectId: ObjectId,+  value: text+}++DateValue = {+  type: "date",+  objectId: ObjectId,+  value: text+}++MapValue = {+  type: "map",+  objectId: ObjectId,+  value?: MappingValue,+}++SetValue = {+  type: "set",+  objectId: ObjectId,+  value?: ListValue+}++WeakMapValue = {+  type: "map",+  objectId: ObjectId,+}++WeakSetValue = {+  type: "set",+  objectId: ObjectId,+}++ErrorValue = {+  type: "error",+  objectId: ObjectId,+}++PromiseValue = {+  type: "promise",+  objectId: ObjectId,+}++TypedArrayValue = {+  type: "typedarray",+  objectId: ObjectId,+}++ArrayBufferValue = {+  type: "arraybuffer",+  objectId: ObjectId,+}++NodeValue = {+  type: "node",+  objectId: ObjectId,+  value?: NodeProperties,+}++NodeProperties = {+  nodeType: uint,+  nodeName: text,+  localName: text,+  nodeValue: text,+  childNodeCount: uint,+  children?: [*NodeValue],+  attributes?: {*text => text},+}++WindowProxyValue = {+  type: "window",+  objectId: ObjectId,+}+```++Issue: Add WASM types?++Issue: NodeValue needs more attributes++Issue: Should WindowProxy get attributes in a similar style to Node?++Issue: handle String / Number / etc. wrapper objects specially?++<div algorithm>++To <dfn>serialize as a remote value</dfn> given an |value|, a |max depth|,+|node details|, and a |set of known objects|:++  1. In the following list of conditions and associated steps, run the first set+     of steps for which the associated condition is true:++    <dl>+      <dt>[=Type=](|value|) is Undefined+      <dd>Let |remote value| be an [=object=] matching the <code>UndefinedValue</code>+      production in the [=local end definition=].++      <dt>[=Type=](|value|) is Null+      <dd>Let |remote value| be an [=object=] matching the <code>NullValue</code>+      production in the [=local end definition=].++      <dt>[=Type=](|value|) is String+      <dd>Let |remote value| be an [=object=] matching the <code>StringValue</code>+      production in the [=local end definition=], with the <code>value</code>+      property set to |value|.++      Issue: This doesn't handle lone surrogates++      <dt>[=Type=](|value|) is Number+      <dd>+      1. Switch on the value of |value|:+        <dl>+          <dt>NaN+          <dt>Let |serialized| be <code>"NaN"</code>+          <dt>-0+          <dt>Let |serialized| be <code>"-0"</code>+          <dt>+Infinity+          <dt>Let |serialized| be <code>"+Infinity"</code>+          <dt>-Infinity+          <dt>Let |serialized| be <code>"-Infinity"</code>+          <dt>Otherwise:+          <dt>Let |serialized| be |value|+        </dl>++      1. Let |remote value| be an [=object=] matching the <code>NumberValue</code>+         production in the [=local end definition=], with the <code>value</code>+         property set to |serialized|.++      <dt>[=Type=](|value|) is Boolean+      <dd>Let |remote value| be an [=object=] matching the <code>BooleanValue</code>+          production in the [=local end definition=], with the <code>value</code>+          property set to |value|.++      <dt>[=Type=](|value|) is BigInt+      <dd>Let |remote value| be an [=object=] matching the <code>BigIntValue</code>+          production in the [=local end definition=], with the <code>value</code>+          property set to the result of running the [=ToString=] operation on+          |value|.++      <dt>[=Type=](|value|) is Symbol+      <dd>Let |remote value| be an [=object=] matching the <code>SymbolValue</code>+          production in the [=local end definition=], with the <code>objectId</code>+          property set to the [=object id for an object=] |value|.++      <dt>[=IsArray=](|value|)+      <dd>+      1. Let |serialized| be null.++      1. If |value| is not in the |set of known objects|, and |max depth|+         is not null and greater than 0, run the following steps:+             1. Append |value| to the |set of known objects|++             1. Let |serialized| be the result of [=serialize as a list=] given+                [=CreateArrayIterator=](|value|, value), |max depth|, |node details| and+                |set of known objects|.++      1. Let |remote value| be an [=object=] matching the <code>ArrayValue</code> production+         in the [=local end definition=], with the <code>objectId</code> property set+         to the [=object id for an object=] |value|, and the <code>value</code>+         field set to |serialized| if it's not null, or ommitted otherwise.++      <dt>[=IsRegExp=](|value|)+      <dd>+          1. Let |pattern| be [=ToString=]([=Get=](|value|, "source")).++          1. Let |flags| be [=ToString=]([=Get=](|value|, "flags")).++          1. Let |serialized| be the string-concatenation of "/", |pattern|, "/", and |flags|.++          1. Let |remote | be an [=object=] matching the <code>RegExpValue</code>+             production in the [=local end definition=], with the <code>objectId</code>+             property set to the [=object id for an object=] |object| and the value+             set to |serialized|++      <dt>|value| has a \[[DateValue]] [=internal slot=].+      <dd>+        1. Let |serialized| be [=ToDateString=]([=thisTimeValue=](|value|)).++        1. Let |remote value| be an [=object=] matching the <code>DateValue</code>+           production in the [=local end definition=], with the <code>objectId</code>+           property set to the [=object id for an object=] |object| and the value+           set to |serialized|.++      <dt>|value| has a \[[MapData]] [=internal slot=]+      <dd>+        1. Let |serialized| be null.++        1. If |value| is not in the |set of known objects|, and |max depth|+           is not null and greater than 0, run the following steps:+             1. Append |value| to the |set of known objects|++             1. Let |serialized| be the result of [=serialize as a list=] given+                [=CreateMapIterator=](|value|, key+value), |max depth|, |node details| and+                |set of known objects|.++      1. Let |remote value| be an [=object=] matching the <code>MapValue</code>+         production in the [=local end definition=], with the+         <code>objectId</code> property set to the [=object id for an object=]+         |value|, and the <code>value</code> field set to |serialized| if it's+         not null, or ommitted otherwise.++      <dt>|value| has a \[[SetData]] [=internal slot=]+      <dd>+        1. Let |serialized| be null.++        1. If |value| is not in the |set of known objects|, and |max depth|+           is not null and greater than 0, run the following steps:+             1. Append |value| to the |set of known objects|++             1. Let |serialized| be the result of [=serialize as a list=] given+                [=CreateSetIterator=](|value|, value), |max depth|, |node details| and+                |set of known objects|.++       1. Let |remote value| be an [=object=] matching the <code>SetValue</code>+          production in the [=local end definition=], with the+          <code>objectId</code> property set to the [=object id for an object=]+          |value|, and the <code>value</code> field set to |serialized| if it's+          not null, or ommitted otherwise.++      <dt>|value| has a \[[WeakMapData]] [=internal slot=]+      <dd>Let |remote value| be an [=object=] matching the <code>WeakMapValue</code>+          production in the [=local end definition=], with the <code>objectId</code>+          property set to the [=object id for an object=] |value|.++      <dt>|value| has a \[[WeakSetData]] [=internal slot=]+      <dd>Let |remote value| be an [=object=] matching the <code>WeakSetValue</code>+          production in the [=local end definition=], with the <code>objectId</code>+          property set to the [=object id for an object=] |value|.++      <dt>|value| has an \[[ErrorData]] [=internal slot=]+      <dd>Let |remote value| be an [=object=] matching the <code>ErrorValue</code>+          production in the [=local end definition=], with the <code>objectId</code>+          property set to the [=object id for an object=] |value|.++      <dt>[=IsPromise=](|value|)+      <dd>Let |remote value| be an [=object=] matching the <code>PromiseValue</code>+          production in the [=local end definition=], with the <code>objectId</code>+          property set to the [=object id for an object=] |value|.++      <dt>|value| has a \[[TypedArrayName]] [=internal slot=]+      <dd>Let |remote value| be an [=object=] matching the <code>TypedArrayValue</code>+          production in the [=local end definition=], with the <code>objectId</code>+          property set to the [=object id for an object=] |value|.++      <dt>|value| has an \[[ArrayBufferData]] [=internal slot=]+      <dd>Let |remote value| be an [=object=] matching the <code>ArrayBufferValue</code>+          production in the [=local end definition=], with the <code>objectId</code>+          property set to the [=object id for an object=] |value|.++      <dt>|value| is a [=platform object=] that implements [=Node=]+      <dd>+        1. Let |serialized| be null.++        1. If |node details| is true, run the following steps:++            1. Let |serialized| be a new [=Object=].++            1. [=Set=](|serialized|, "nodeType", [=Get=](|value|, "nodeType"), false)++            1. [=Set=](|serialized|, "nodeName", [=Get=](|value|, "nodeName"), false)++            1. [=Set=](|serialized|, "localName", [=Get=](|value|, "localName"), false)++            1. [=Set=](|serialized|, "nodeValue", [=Get=](|value|, "nodeValue"), false)++            1. Let |child node count| be the size of |serialized|'s [=children=].++            1. [=Set=](|serialized|, "childNodeCount", |child node count|, false)++            1. If |max depth| is null and or equal to 0 let |children| be null.+               Otherwise, let |children| be an empty list and, for each node+               |child| in the [=children=] of |value|:++              1. Let |serialized| be the result of [=serialize as a remote value=]+                 with |child|, |max depth| - 1, |node details| and+                 |set of known objects|.++              1. Append |serialized| to |children|.++            1. [=Set=](|serialized|, "children", |serialized|, false)++            1. Let |attributes| be a new [=Object=].++            1. For each |attribute| in |value|'s <a spec=dom>attributes</a>:++              1. Let |name| be |attribute|'s [=Attr/qualified name=]++              1. Let |serialized| be |attribute|'s [=Attr/value=].++              1. [=Set=](|attributes|, |name|, |serialized|, false)++            1. [=Set=](|serialized|, "attributes", |attributes|, false)++        1. Let |remote value| be an [=object=] matching the <code>NodeValue</code>+           production in the [=local end definition=], with the <code>objectId</code>+           property set to the [=object id for an object=] |value|, and <code>value</code>+           set to |serialized|, if |serialized| is not null.++      <dt>|value| is a [=platform object=] that implements [=WindowProxy=]+      <dd>1. Let |remote value| be an [=object=] matching the <code>WindowProxyValue</code>+             production in the [=local end definition=], with the <code>objectId</code>+             property set to the [=object id for an object=] |value|.++      <dt>|value| is a [=platform object=]+      <dd>1. Let |remote value| be an [=object=] matching the <code>ObjectValue</code>+             production in the [=local end definition=], with the <code>objectId</code>+             property set to the [=object id for an object=] |value|.++      <dt>[=IsCallable=](|value|)+      <dd>Let |remote value| be an [=object=] matching the <code>FunctionValue</code>+          production in the [=local end definition=], with the <code>objectId</code>+          property set to the [=object id for an object=] |value|.++      <dt>Otherwise:+      <dd>+      1. let |serialized| be null.++      1. If |value| is not in the |set of known objects|, and |max depth|+         is not null and greater than 0, run the following steps:+         1. Append |value| to the |set of known objects|++         1. Let |serialized| be the result of [=serialize as a mapping=] given+            [=EnumerableOwnPropertyNames=](|value|, key+value), |max depth|, |node+            details| and |set of known objects|++      1. Let |remote value| be an [=object=] matching the <code>ObjectValue</code> production+         in the [=local end definition=], with the <code>objectId</code> property set+         to the [=object id for an object=] |value|, and the <code>value</code> field+         set to |serialized|.+    </dl>++  1. Return |remote value|++Issue: the way we check types is all wrong++Issue: Does it make sense to use the same depth parameter for nodes and objects+in general?++</div>++<div algorithm>+Issue: this assumes for-in works on iterators++To <dfn>serialize as a list</dfn> given |iterable|, |max depth|,+|node details| and |set of known objects|:++  1. Let |serialized| be a new list.++  1. For each |child value| in |iterable|:++    1. Let |serialized child| be the result of [=serialize as a+       remote value=] with arguments |child value|, |max+       depth| - 1, |node details| and |set of known objects|.++    1. Append |serialized child| to |serialized|.++  1. Return [=CreateArrayFromList=](|serialized|)+</div>++<div algorithm>+To <dfn>serialize as a mapping</dfn> given |iterable|, |max depth|,

It also allows it to work with non-string keys, which are important for maps and synbol-keyed objects.

jgraham

comment created time in 6 days

PullRequestReviewEvent

Pull request review commentw3c/webdriver-bidi

Start to specify how to serialize a ES value.

 id=] must be the same as the [=window handle=].  ## Realm ## {#data-types-realm} -[=remote end schema=] and [=local end schema=]+[=remote end definition=] and [= local end definition=] ``` Realm = text; ```  Each [=realm=] has an associated <dfn export>realm id</dfn>, which is a string uniquely identifying that realm. +## Remote Value ## {#data-types-remote-object}++Values accessible from the ECMAScript runtime are represented by a mirror+object, specified as <code>RemoteValue</code>. The value's type is specified in+the <code>type</code> property. In the case of JSON-representable primitive+values, this contains the value in the <code>value</code> property; in the case+of non-JSON-representable primitives, the <code>value</code> property contains a+string representation of the object. For non-primitive objects, the+<code>objectId</code> property contains a string id that provides a unique+handle to the object, valid for its lifetime inside the engine. In this case the+<code>value</code> property can contain a complex object (either a list or a+struct) itself containing further remote object values. This allows objects like+arrays to have a single representation.++[=Nodes=] are also represented by <code>RemoteObject</code> instances. These+have a partial serialization of the node in the value property.++Note: mirror objects do not keep the original object alive in the runtime. If an+object is discarded in the runtime subsequent attempts to access it via the+protocol will result in an error.++A [=/session=] has an <dfn>object id map</dfn>. This is a weak map from objects to+their corresponding id.++Issue: Should this be explicitly per realm?++<div algorithm>+To get the <dfn>object id for an object</dfn> given an |object|:++  1. If [=object id map=] for the [=current session=] does not contain |object|+     run the following steps:++     1. Let |object id| be a new, unique, string identifier for |object|. If+        |object| is an [=/element=] this must be the [=web element reference=]+        for |object|; if it's [=WindowProxy=] object, this must be the+        [=window handle=] for |object|.++    1. Set the value of |object| in the [=object id map=] to |object id|.++  1. Return the result of getting the value for |object| in [=object id map=].+</div>++<div algorithm>+To get the <dfn>object for an object id</dfn> given an |object id|:++  1. For each |object| → |id value| of [=object id map=]:++    1. If |id value| is equal to |object id|, return [=success=] with data+       |object|++  1. Return [=error=] with [=error code=] [=no such element=]++  Issue: This error code isn't right.+</div>++[=remote end definition=] and [=local end definition=]+```+RemoteValue = {+  UndefinedValue //+  NullValue //+  StringValue //+  NumberValue //+  BooleanValue //+  BigIntValue //+  SymbolValue //+  ArrayValue //+  FunctionValue //+  ObjectValue //+  FunctionValue //+  RegExpValue //+  DateValue //+  MapValue //+  SetValue //+  WeakMapValue //+  WeakSetValue //+  IteratorValue //+  GeneratorValue //+  ErrorValue //+  ProxyValue //+  PromiseValue //+  TypedArrayValue //+  ArrayBufferValue //+  NodeValue //+  WindowProxyValue //+}++ObjectId = text;++ListValue = [*RemoteValue];++MappingValue = [*[(RemoteValue / text), RemoteValue]];++UndefinedValue = {+  type: "undefined",+}++NullValue = {+  type: "null",+}++StringValue = {+  type: "string",+  value: text,+}++SpecialNumber = "NaN" / "-0" / "+Infinity" / "-Infinity";++NumberValue = {+  type: "number",+  value: number / SpecialNumber,+}++BooleanValue = {+  type: "boolean",+  value: bool,+}++BigIntValue = {+  type: "bigint",+  value: text,+}++SymbolValue = {+  type: "symbol",+  objectId: ObjectId,+}++ArrayValue = {+  type: "array",+  objectId: ObjectId,+  value?: ListValue,+}++ObjectValue = {+  type: "object",+  objectId: ObjectId,+  value?: MappingValue,+}++FunctionObject = {+  type: "function",+  objectId: ObjectId,+}++RegExpValue = {+  type: "regexp",+  objectId: ObjectId,+  value: text+}++DateValue = {+  type: "date",+  objectId: ObjectId,+  value: text+}++MapValue = {+  type: "map",+  objectId: ObjectId,+  value?: MappingValue,+}++SetValue = {+  type: "set",+  objectId: ObjectId,+  value?: ListValue+}++WeakMapValue = {+  type: "map",+  objectId: ObjectId,+}++WeakSetValue = {+  type: "set",+  objectId: ObjectId,+}++ErrorValue = {+  type: "error",+  objectId: ObjectId,+}++PromiseValue = {+  type: "promise",+  objectId: ObjectId,+}++TypedArrayValue = {+  type: "typedarray",+  objectId: ObjectId,+}++ArrayBufferValue = {+  type: "arraybuffer",+  objectId: ObjectId,+}++NodeValue = {+  type: "node",+  objectId: ObjectId,+  value?: NodeProperties,+}++NodeProperties = {+  nodeType: uint,+  nodeName: text,+  localName: text,+  nodeValue: text,+  childNodeCount: uint,+  children?: [*NodeValue],+  attributes?: {*text => text},+}++WindowProxyValue = {+  type: "window",+  objectId: ObjectId,+}+```++Issue: Add WASM types?++Issue: NodeValue needs more attributes++Issue: Should WindowProxy get attributes in a similar style to Node?++Issue: handle String / Number / etc. wrapper objects specially?++<div algorithm>++To <dfn>serialize as a remote value</dfn> given an |value|, a |max depth|,+|node details|, and a |set of known objects|:++  1. In the following list of conditions and associated steps, run the first set+     of steps for which the associated condition is true:++    <dl>+      <dt>[=Type=](|value|) is Undefined+      <dd>Let |remote value| be an [=object=] matching the <code>UndefinedValue</code>+      production in the [=local end definition=].++      <dt>[=Type=](|value|) is Null+      <dd>Let |remote value| be an [=object=] matching the <code>NullValue</code>+      production in the [=local end definition=].++      <dt>[=Type=](|value|) is String+      <dd>Let |remote value| be an [=object=] matching the <code>StringValue</code>+      production in the [=local end definition=], with the <code>value</code>+      property set to |value|.++      Issue: This doesn't handle lone surrogates++      <dt>[=Type=](|value|) is Number+      <dd>+      1. Switch on the value of |value|:+        <dl>+          <dt>NaN+          <dt>Let |serialized| be <code>"NaN"</code>+          <dt>-0+          <dt>Let |serialized| be <code>"-0"</code>+          <dt>+Infinity+          <dt>Let |serialized| be <code>"+Infinity"</code>+          <dt>-Infinity+          <dt>Let |serialized| be <code>"-Infinity"</code>+          <dt>Otherwise:+          <dt>Let |serialized| be |value|+        </dl>++      1. Let |remote value| be an [=object=] matching the <code>NumberValue</code>+         production in the [=local end definition=], with the <code>value</code>+         property set to |serialized|.++      <dt>[=Type=](|value|) is Boolean+      <dd>Let |remote value| be an [=object=] matching the <code>BooleanValue</code>+          production in the [=local end definition=], with the <code>value</code>+          property set to |value|.++      <dt>[=Type=](|value|) is BigInt+      <dd>Let |remote value| be an [=object=] matching the <code>BigIntValue</code>+          production in the [=local end definition=], with the <code>value</code>+          property set to the result of running the [=ToString=] operation on+          |value|.++      <dt>[=Type=](|value|) is Symbol+      <dd>Let |remote value| be an [=object=] matching the <code>SymbolValue</code>+          production in the [=local end definition=], with the <code>objectId</code>+          property set to the [=object id for an object=] |value|.++      <dt>[=IsArray=](|value|)+      <dd>+      1. Let |serialized| be null.++      1. If |value| is not in the |set of known objects|, and |max depth|+         is not null and greater than 0, run the following steps:+             1. Append |value| to the |set of known objects|++             1. Let |serialized| be the result of [=serialize as a list=] given+                [=CreateArrayIterator=](|value|, value), |max depth|, |node details| and+                |set of known objects|.++      1. Let |remote value| be an [=object=] matching the <code>ArrayValue</code> production+         in the [=local end definition=], with the <code>objectId</code> property set+         to the [=object id for an object=] |value|, and the <code>value</code>+         field set to |serialized| if it's not null, or ommitted otherwise.++      <dt>[=IsRegExp=](|value|)+      <dd>+          1. Let |pattern| be [=ToString=]([=Get=](|value|, "source")).++          1. Let |flags| be [=ToString=]([=Get=](|value|, "flags")).++          1. Let |serialized| be the string-concatenation of "/", |pattern|, "/", and |flags|.++          1. Let |remote | be an [=object=] matching the <code>RegExpValue</code>+             production in the [=local end definition=], with the <code>objectId</code>+             property set to the [=object id for an object=] |object| and the value+             set to |serialized|++      <dt>|value| has a \[[DateValue]] [=internal slot=].+      <dd>+        1. Let |serialized| be [=ToDateString=]([=thisTimeValue=](|value|)).++        1. Let |remote value| be an [=object=] matching the <code>DateValue</code>+           production in the [=local end definition=], with the <code>objectId</code>+           property set to the [=object id for an object=] |object| and the value+           set to |serialized|.++      <dt>|value| has a \[[MapData]] [=internal slot=]+      <dd>+        1. Let |serialized| be null.++        1. If |value| is not in the |set of known objects|, and |max depth|+           is not null and greater than 0, run the following steps:+             1. Append |value| to the |set of known objects|++             1. Let |serialized| be the result of [=serialize as a list=] given+                [=CreateMapIterator=](|value|, key+value), |max depth|, |node details| and+                |set of known objects|.++      1. Let |remote value| be an [=object=] matching the <code>MapValue</code>+         production in the [=local end definition=], with the+         <code>objectId</code> property set to the [=object id for an object=]+         |value|, and the <code>value</code> field set to |serialized| if it's+         not null, or ommitted otherwise.++      <dt>|value| has a \[[SetData]] [=internal slot=]+      <dd>+        1. Let |serialized| be null.++        1. If |value| is not in the |set of known objects|, and |max depth|+           is not null and greater than 0, run the following steps:+             1. Append |value| to the |set of known objects|++             1. Let |serialized| be the result of [=serialize as a list=] given+                [=CreateSetIterator=](|value|, value), |max depth|, |node details| and+                |set of known objects|.++       1. Let |remote value| be an [=object=] matching the <code>SetValue</code>+          production in the [=local end definition=], with the+          <code>objectId</code> property set to the [=object id for an object=]+          |value|, and the <code>value</code> field set to |serialized| if it's+          not null, or ommitted otherwise.++      <dt>|value| has a \[[WeakMapData]] [=internal slot=]+      <dd>Let |remote value| be an [=object=] matching the <code>WeakMapValue</code>+          production in the [=local end definition=], with the <code>objectId</code>+          property set to the [=object id for an object=] |value|.++      <dt>|value| has a \[[WeakSetData]] [=internal slot=]+      <dd>Let |remote value| be an [=object=] matching the <code>WeakSetValue</code>+          production in the [=local end definition=], with the <code>objectId</code>+          property set to the [=object id for an object=] |value|.++      <dt>|value| has an \[[ErrorData]] [=internal slot=]+      <dd>Let |remote value| be an [=object=] matching the <code>ErrorValue</code>+          production in the [=local end definition=], with the <code>objectId</code>+          property set to the [=object id for an object=] |value|.++      <dt>[=IsPromise=](|value|)+      <dd>Let |remote value| be an [=object=] matching the <code>PromiseValue</code>+          production in the [=local end definition=], with the <code>objectId</code>+          property set to the [=object id for an object=] |value|.++      <dt>|value| has a \[[TypedArrayName]] [=internal slot=]+      <dd>Let |remote value| be an [=object=] matching the <code>TypedArrayValue</code>+          production in the [=local end definition=], with the <code>objectId</code>+          property set to the [=object id for an object=] |value|.++      <dt>|value| has an \[[ArrayBufferData]] [=internal slot=]+      <dd>Let |remote value| be an [=object=] matching the <code>ArrayBufferValue</code>+          production in the [=local end definition=], with the <code>objectId</code>+          property set to the [=object id for an object=] |value|.++      <dt>|value| is a [=platform object=] that implements [=Node=]+      <dd>+        1. Let |serialized| be null.++        1. If |node details| is true, run the following steps:++            1. Let |serialized| be a new [=Object=].++            1. [=Set=](|serialized|, "nodeType", [=Get=](|value|, "nodeType"), false)++            1. [=Set=](|serialized|, "nodeName", [=Get=](|value|, "nodeName"), false)++            1. [=Set=](|serialized|, "localName", [=Get=](|value|, "localName"), false)++            1. [=Set=](|serialized|, "nodeValue", [=Get=](|value|, "nodeValue"), false)++            1. Let |child node count| be the size of |serialized|'s [=children=].++            1. [=Set=](|serialized|, "childNodeCount", |child node count|, false)++            1. If |max depth| is null and or equal to 0 let |children| be null.+               Otherwise, let |children| be an empty list and, for each node+               |child| in the [=children=] of |value|:++              1. Let |serialized| be the result of [=serialize as a remote value=]+                 with |child|, |max depth| - 1, |node details| and+                 |set of known objects|.++              1. Append |serialized| to |children|.++            1. [=Set=](|serialized|, "children", |serialized|, false)++            1. Let |attributes| be a new [=Object=].++            1. For each |attribute| in |value|'s <a spec=dom>attributes</a>:++              1. Let |name| be |attribute|'s [=Attr/qualified name=]++              1. Let |serialized| be |attribute|'s [=Attr/value=].++              1. [=Set=](|attributes|, |name|, |serialized|, false)++            1. [=Set=](|serialized|, "attributes", |attributes|, false)++        1. Let |remote value| be an [=object=] matching the <code>NodeValue</code>+           production in the [=local end definition=], with the <code>objectId</code>+           property set to the [=object id for an object=] |value|, and <code>value</code>+           set to |serialized|, if |serialized| is not null.++      <dt>|value| is a [=platform object=] that implements [=WindowProxy=]+      <dd>1. Let |remote value| be an [=object=] matching the <code>WindowProxyValue</code>+             production in the [=local end definition=], with the <code>objectId</code>+             property set to the [=object id for an object=] |value|.++      <dt>|value| is a [=platform object=]+      <dd>1. Let |remote value| be an [=object=] matching the <code>ObjectValue</code>+             production in the [=local end definition=], with the <code>objectId</code>+             property set to the [=object id for an object=] |value|.++      <dt>[=IsCallable=](|value|)+      <dd>Let |remote value| be an [=object=] matching the <code>FunctionValue</code>+          production in the [=local end definition=], with the <code>objectId</code>+          property set to the [=object id for an object=] |value|.++      <dt>Otherwise:+      <dd>+      1. let |serialized| be null.++      1. If |value| is not in the |set of known objects|, and |max depth|+         is not null and greater than 0, run the following steps:+         1. Append |value| to the |set of known objects|++         1. Let |serialized| be the result of [=serialize as a mapping=] given+            [=EnumerableOwnPropertyNames=](|value|, key+value), |max depth|, |node+            details| and |set of known objects|++      1. Let |remote value| be an [=object=] matching the <code>ObjectValue</code> production+         in the [=local end definition=], with the <code>objectId</code> property set+         to the [=object id for an object=] |value|, and the <code>value</code> field+         set to |serialized|.+    </dl>++  1. Return |remote value|++Issue: the way we check types is all wrong++Issue: Does it make sense to use the same depth parameter for nodes and objects+in general?++</div>++<div algorithm>+Issue: this assumes for-in works on iterators++To <dfn>serialize as a list</dfn> given |iterable|, |max depth|,+|node details| and |set of known objects|:++  1. Let |serialized| be a new list.++  1. For each |child value| in |iterable|:++    1. Let |serialized child| be the result of [=serialize as a+       remote value=] with arguments |child value|, |max+       depth| - 1, |node details| and |set of known objects|.++    1. Append |serialized child| to |serialized|.++  1. Return [=CreateArrayFromList=](|serialized|)+</div>++<div algorithm>+To <dfn>serialize as a mapping</dfn> given |iterable|, |max depth|,+|node details| and |set of known objects|:++  1. Let |serialized| be a new list.++  1. For |item| in |iterable|:+    1. Assert: [=IsArray=](|item|)++    1. Let |property| be [=CreateListFromArrayLike=](|item|)++    1. Assert |property| is a list of size 2++    1. Let |key| be |property|[0] and let |value| be |property|[1]++    1. If [=Type=](|key|) is String, let |serialized key| be |child key|,

It can be Symbol.

jgraham

comment created time in 6 days

PullRequestReviewEvent

Pull request review commentw3c/webdriver-bidi

Start to specify how to serialize a ES value.

 id=] must be the same as the [=window handle=].  ## Realm ## {#data-types-realm} -[=remote end schema=] and [=local end schema=]+[=remote end definition=] and [= local end definition=] ``` Realm = text; ```  Each [=realm=] has an associated <dfn export>realm id</dfn>, which is a string uniquely identifying that realm. +## Remote Value ## {#data-types-remote-object}++Values accessible from the ECMAScript runtime are represented by a mirror+object, specified as <code>RemoteValue</code>. The value's type is specified in+the <code>type</code> property. In the case of JSON-representable primitive+values, this contains the value in the <code>value</code> property; in the case+of non-JSON-representable primitives, the <code>value</code> property contains a+string representation of the object. For non-primitive objects, the+<code>objectId</code> property contains a string id that provides a unique+handle to the object, valid for its lifetime inside the engine. In this case the+<code>value</code> property can contain a complex object (either a list or a+struct) itself containing further remote object values. This allows objects like+arrays to have a single representation.++[=Nodes=] are also represented by <code>RemoteObject</code> instances. These+have a partial serialization of the node in the value property.++Note: mirror objects do not keep the original object alive in the runtime. If an+object is discarded in the runtime subsequent attempts to access it via the+protocol will result in an error.++A [=/session=] has an <dfn>object id map</dfn>. This is a weak map from objects to+their corresponding id.++Issue: Should this be explicitly per realm?++<div algorithm>+To get the <dfn>object id for an object</dfn> given an |object|:++  1. If [=object id map=] for the [=current session=] does not contain |object|+     run the following steps:++     1. Let |object id| be a new, unique, string identifier for |object|. If+        |object| is an [=/element=] this must be the [=web element reference=]+        for |object|; if it's [=WindowProxy=] object, this must be the+        [=window handle=] for |object|.++    1. Set the value of |object| in the [=object id map=] to |object id|.++  1. Return the result of getting the value for |object| in [=object id map=].+</div>++<div algorithm>+To get the <dfn>object for an object id</dfn> given an |object id|:++  1. For each |object| → |id value| of [=object id map=]:++    1. If |id value| is equal to |object id|, return [=success=] with data+       |object|++  1. Return [=error=] with [=error code=] [=no such element=]++  Issue: This error code isn't right.+</div>++[=remote end definition=] and [=local end definition=]+```+RemoteValue = {+  UndefinedValue //+  NullValue //+  StringValue //+  NumberValue //+  BooleanValue //+  BigIntValue //+  SymbolValue //+  ArrayValue //+  FunctionValue //+  ObjectValue //+  FunctionValue //+  RegExpValue //+  DateValue //+  MapValue //+  SetValue //+  WeakMapValue //+  WeakSetValue //+  IteratorValue //+  GeneratorValue //+  ErrorValue //+  ProxyValue //+  PromiseValue //+  TypedArrayValue //+  ArrayBufferValue //+  NodeValue //+  WindowProxyValue //+}++ObjectId = text;++ListValue = [*RemoteValue];++MappingValue = [*[(RemoteValue / text), RemoteValue]];++UndefinedValue = {+  type: "undefined",+}++NullValue = {+  type: "null",+}++StringValue = {+  type: "string",+  value: text,+}++SpecialNumber = "NaN" / "-0" / "+Infinity" / "-Infinity";++NumberValue = {+  type: "number",+  value: number / SpecialNumber,+}++BooleanValue = {+  type: "boolean",+  value: bool,+}++BigIntValue = {+  type: "bigint",+  value: text,+}++SymbolValue = {+  type: "symbol",+  objectId: ObjectId,+}++ArrayValue = {+  type: "array",+  objectId: ObjectId,+  value?: ListValue,+}++ObjectValue = {+  type: "object",+  objectId: ObjectId,+  value?: MappingValue,+}++FunctionObject = {+  type: "function",+  objectId: ObjectId,+}++RegExpValue = {+  type: "regexp",+  objectId: ObjectId,+  value: text+}++DateValue = {+  type: "date",+  objectId: ObjectId,+  value: text+}++MapValue = {+  type: "map",+  objectId: ObjectId,+  value?: MappingValue,+}++SetValue = {+  type: "set",+  objectId: ObjectId,+  value?: ListValue+}++WeakMapValue = {+  type: "map",+  objectId: ObjectId,+}++WeakSetValue = {+  type: "set",+  objectId: ObjectId,+}++ErrorValue = {+  type: "error",+  objectId: ObjectId,+}++PromiseValue = {+  type: "promise",+  objectId: ObjectId,+}++TypedArrayValue = {+  type: "typedarray",+  objectId: ObjectId,+}++ArrayBufferValue = {+  type: "arraybuffer",+  objectId: ObjectId,+}++NodeValue = {+  type: "node",+  objectId: ObjectId,+  value?: NodeProperties,+}++NodeProperties = {+  nodeType: uint,+  nodeName: text,+  localName: text,+  nodeValue: text,+  childNodeCount: uint,

It might not be if the node has children but we don't include them due to depth limits.

jgraham

comment created time in 6 days

PullRequestReviewEvent

Pull request review commentw3c/webdriver-bidi

Start to specify how to serialize a ES value.

 id=] must be the same as the [=window handle=].  ## Realm ## {#data-types-realm} -[=remote end schema=] and [=local end schema=]+[=remote end definition=] and [= local end definition=] ``` Realm = text; ```  Each [=realm=] has an associated <dfn export>realm id</dfn>, which is a string uniquely identifying that realm. +## Remote Value ## {#data-types-remote-object}++Values accessible from the ECMAScript runtime are represented by a mirror+object, specified as <code>RemoteValue</code>. The value's type is specified in+the <code>type</code> property. In the case of JSON-representable primitive+values, this contains the value in the <code>value</code> property; in the case+of non-JSON-representable primitives, the <code>value</code> property contains a+string representation of the object. For non-primitive objects, the+<code>objectId</code> property contains a string id that provides a unique+handle to the object, valid for its lifetime inside the engine. In this case the+<code>value</code> property can contain a complex object (either a list or a+struct) itself containing further remote object values. This allows objects like+arrays to have a single representation.++[=Nodes=] are also represented by <code>RemoteObject</code> instances. These+have a partial serialization of the node in the value property.++Note: mirror objects do not keep the original object alive in the runtime. If an+object is discarded in the runtime subsequent attempts to access it via the+protocol will result in an error.++A [=/session=] has an <dfn>object id map</dfn>. This is a weak map from objects to+their corresponding id.++Issue: Should this be explicitly per realm?++<div algorithm>+To get the <dfn>object id for an object</dfn> given an |object|:++  1. If [=object id map=] for the [=current session=] does not contain |object|+     run the following steps:++     1. Let |object id| be a new, unique, string identifier for |object|. If+        |object| is an [=/element=] this must be the [=web element reference=]+        for |object|; if it's [=WindowProxy=] object, this must be the+        [=window handle=] for |object|.++    1. Set the value of |object| in the [=object id map=] to |object id|.++  1. Return the result of getting the value for |object| in [=object id map=].+</div>++<div algorithm>+To get the <dfn>object for an object id</dfn> given an |object id|:++  1. For each |object| → |id value| of [=object id map=]:++    1. If |id value| is equal to |object id|, return [=success=] with data+       |object|++  1. Return [=error=] with [=error code=] [=no such element=]++  Issue: This error code isn't right.+</div>++[=remote end definition=] and [=local end definition=]+```+RemoteValue = {+  UndefinedValue //+  NullValue //+  StringValue //+  NumberValue //+  BooleanValue //+  BigIntValue //+  SymbolValue //+  ArrayValue //+  FunctionValue //+  ObjectValue //+  FunctionValue //+  RegExpValue //+  DateValue //+  MapValue //+  SetValue //+  WeakMapValue //+  WeakSetValue //+  IteratorValue //+  GeneratorValue //+  ErrorValue //+  ProxyValue //+  PromiseValue //+  TypedArrayValue //+  ArrayBufferValue //+  NodeValue //+  WindowProxyValue //+}++ObjectId = text;++ListValue = [*RemoteValue];++MappingValue = [*[(RemoteValue / text), RemoteValue]];++UndefinedValue = {+  type: "undefined",+}++NullValue = {+  type: "null",+}++StringValue = {+  type: "string",+  value: text,+}++SpecialNumber = "NaN" / "-0" / "+Infinity" / "-Infinity";++NumberValue = {+  type: "number",+  value: number / SpecialNumber,+}++BooleanValue = {+  type: "boolean",+  value: bool,+}++BigIntValue = {+  type: "bigint",+  value: text,+}++SymbolValue = {+  type: "symbol",+  objectId: ObjectId,+}++ArrayValue = {+  type: "array",+  objectId: ObjectId,+  value?: ListValue,+}++ObjectValue = {+  type: "object",+  objectId: ObjectId,+  value?: MappingValue,+}++FunctionObject = {+  type: "function",+  objectId: ObjectId,+}++RegExpValue = {+  type: "regexp",+  objectId: ObjectId,+  value: text+}++DateValue = {+  type: "date",+  objectId: ObjectId,+  value: text+}++MapValue = {+  type: "map",+  objectId: ObjectId,+  value?: MappingValue,+}++SetValue = {+  type: "set",+  objectId: ObjectId,+  value?: ListValue+}++WeakMapValue = {+  type: "map",

That's a typo :)

jgraham

comment created time in 6 days

PullRequestReviewEvent

delete branch w3c/webdriver-bidi

delete branch : error_response

delete time in 6 days

push eventw3c/webdriver-bidi

jgraham

commit sha 819fd0c1393e3a09ed0aea5d153b1779d95ed45e

Define how to respond with an error (#56) The main difficulty here is that if we get a command with an invalid id, it's unclear what to return in the id field. This chooses to return null in that case.

view details

push time in 6 days

PR merged w3c/webdriver-bidi

Define how to respond with an error

The main difficulty here is that if we get a command with an invalid id, it's unclear what to return in the id field. This chooses to return null in that case.

<!-- This comment and the below content is programatically generated. You may add a comma-separated list of anchors you'd like a direct link to below (e.g. #idl-serializers, #idl-sequence):

Don't remove this comment or modify anything below this line.
If you don't want a preview generated for this pull request,
just replace the whole of this comment's content by "no preview"
and remove what's below.

-->


<a href="https://pr-preview.s3.amazonaws.com/w3c/webdriver-bidi/pull/56.html" title="Last updated on Oct 20, 2020, 1:54 PM UTC (03e5129)">Preview</a> | <a href="https://pr-preview.s3.amazonaws.com/w3c/webdriver-bidi/56/6c72ee4...03e5129.html" title="Last updated on Oct 20, 2020, 1:54 PM UTC (03e5129)">Diff</a>

+62 -46

1 comment

1 changed file

jgraham

pr closed time in 6 days

push eventw3c/webdriver-bidi

James Graham

commit sha 03e5129517521ec3d9e49f9b86fee27e2bed4308

Use to JSON bytes

view details

push time in 6 days

Pull request review commentw3c/webdriver-bidi

Define how to respond with an error

 To <dfn>handle an incoming message</dfn> given a [=WebSocket connection=]     Issue: Should we instead close |connection| with [=status     codes|status code=] 1003, or [=respond with an error=]? - 2. [=Assert=]: |data| is a [=scalar value string=], because the+ 1. [=Assert=]: |data| is a [=scalar value string=], because the      WebSocket [=handling errors in UTF-8-encoded data=] would already      have [=fail the WebSocket connection|failed the WebSocket      connection=] otherwise.      Issue: Nothing seems to define what [=status codes|status code=]     is used for UTF-8 errors. - 3. Let |parsed| be the result of [=parse JSON into Infra-    values|parsing JSON into Infra values=] given |data|. If this-    throws an exception, then [=respond with an error=] given-    |connection| and [=error code=] [=invalid argument=], and finally-    return.-    <!-- corresponds to Parse error (-32700) in JSON-RPC -->-- 5. Let |result| be the result of [=process a command|processing a+ 1. Let |result| be the result of [=process a command|processing a     command=] given |data|. - 6. If |result| is an [=Error=], then [=respond with an error=] given-    |connection|, |result|, and |parsed|["<code>id</code>"], and finally-    return.+ 1. If |result| is an [=error=], then [=respond with an error=] given+    |connection|, |data|, and |result|'s [=error code=], and finally return.++ 1. Assert: |result| is a [=success=] - 7. Let |response| be a new [=map=] with the following properties:+ 1. Let |command id| and |value| be the two fields |result|'s data.++ 1. Let |response| be a new [=map=] with the following properties:     <dl>       <dt>"id"</dt>-      <dd>The value of |parsed|["<code>id</code>"]</dd>+      <dd>|command id|</dd> -      <dt>"result"</dt>-      <dd>The value of |result|</dd>+      <dt>"value"</dt>+      <dd>|value|</dd>    </dl> - 8. Let |serialized| be the result of [=serialize JSON to-    bytes|serializing JSON to bytes=] given |response|.+ 1. Let |serialized| be the result of [=serialize a map as JSON=] given+    |response|. - 9. [=Send a WebSocket message=] comprised of |serialized| over+ 1. [=Send a WebSocket message=] comprised of |serialized| over     |connection|.  </div>  <div algorithm> To <dfn>respond with an error</dfn> given a [=WebSocket connection=]-|connection| and an [=error code=] |code|:+|connection|, |data| and |error code|: - 1. Issue: Form a valid JSON |errorObject| given |code|.+ 1. Let |command id| be null. - 2. [=Send a WebSocket message=] comprised of |errorObject| over-    |connection|.+ 1.  Let |parsed| be the result of [=parse JSON into Infra values|parsing JSON+     into Infra values=] given |data|. If this does not throw an exception, and+     results in a map that contains "<code>id</code>", then let |command id| be+     |parsed|["<code>id</code>"].++ 1. If |command id| is not an integer greater than or equal to zero, let+    |command id| be null.++ 1. Let |error data| be a new map matching the <code>ErrorResponse</code>+    production in the [=local end definition=], with the <code>id</code> field+    set to |command id|, the <code>error</code> field set to |error code|, the+    <code>message</code> field set to an implementation-defined string+    containing a human-readable definition of the error that occured and the+    <code>stacktrace</code> field optionally set to an implementation-defined+    string containing a stack trace report of the active stack frames at the+    time when the error occurred.++ 1. Let |response| be the result of [=serialize a map as JSON=] given |error

Presumably we want to use "as bytes" instead.

jgraham

comment created time in 6 days

PullRequestReviewEvent
PullRequestReviewEvent

created tagmozilla/wpt-sync

tagv0.3.55

Two-way repository sync between web-platform-tests and gecko

created time in 7 days

push eventmozilla/wpt-sync

James Graham

commit sha 5ed26b36fa5bea586d8e2885cd2d357e6c56cc96

Try running against cinnabar master

view details

push time in 7 days

PullRequestReviewEvent

push eventmozilla/wpt-sync

James Graham

commit sha 3744f6e33e873b9d748a0bea27eded53433084e9

Update settings depends_on and blocks for new Bugsy API

view details

push time in 10 days

delete branch mozilla/wpt-sync

delete branch : bugsy_set_depends

delete time in 10 days

PR opened mozilla/wpt-sync

Reviewers
Update settings depends_on and blocks for new Bugsy API
+10 -12

0 comment

1 changed file

pr created time in 10 days

create barnchmozilla/wpt-sync

branch : bugsy_set_depends

created branch time in 10 days

Pull request review commentweb-platform-tests/wpt

Fix #26115: avoid new test name default leading to new duplicates

 policies and contribution forms [3].             Object.prototype.toString.call(worker) == '[object ServiceWorker]';     } +    var seen_func_name = Object.create(null);

I might have just used new Map

gsnedders

comment created time in 11 days

PullRequestReviewEvent
PullRequestReviewEvent

push eventmozilla/wpt-sync

dependabot-preview[bot]

commit sha be6d3bbb6434870096e80434e2237bcba61d2c9e

Bump zipp from 3.2.0 to 3.3.0 Bumps [zipp](https://github.com/jaraco/zipp) from 3.2.0 to 3.3.0. - [Release notes](https://github.com/jaraco/zipp/releases) - [Changelog](https://github.com/jaraco/zipp/blob/master/CHANGES.rst) - [Commits](https://github.com/jaraco/zipp/compare/v3.2.0...v3.3.0) Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

view details

dependabot-preview[bot]

commit sha 8cd674cf2c1ed3eba5c3f929c499a87023b723e4

Bump flake8 from 3.8.3 to 3.8.4 Bumps [flake8](https://gitlab.com/pycqa/flake8) from 3.8.3 to 3.8.4. - [Release notes](https://gitlab.com/pycqa/flake8/tags) - [Commits](https://gitlab.com/pycqa/flake8/compare/3.8.3...3.8.4) Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

view details

dependabot-preview[bot]

commit sha a00633569a82ca711bab5151f0721eb521e3c60b

Bump pytest from 4.6.9 to 6.1.1 Bumps [pytest](https://github.com/pytest-dev/pytest) from 4.6.9 to 6.1.1. - [Release notes](https://github.com/pytest-dev/pytest/releases) - [Changelog](https://github.com/pytest-dev/pytest/blob/master/CHANGELOG.rst) - [Commits](https://github.com/pytest-dev/pytest/compare/4.6.9...6.1.1) Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

view details

James Graham

commit sha 7fe9faa195f5b411e91ebf3c03f0966514cecb95

Also install iniconfig

view details

dependabot-preview[bot]

commit sha 5846adc0514aa96fb0511416abef2c28cfb9211f

Bump traitlets from 4.3.3 to 5.0.4 Bumps [traitlets](https://github.com/ipython/traitlets) from 4.3.3 to 5.0.4. - [Release notes](https://github.com/ipython/traitlets/releases) - [Commits](https://github.com/ipython/traitlets/compare/4.3.3...5.0.4) Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

view details

dependabot-preview[bot]

commit sha 33a8f0546da8eb2b7f2f5f0437f1361cccbe2161

Bump ipython from 5.9.0 to 7.18.1 Bumps [ipython](https://github.com/ipython/ipython) from 5.9.0 to 7.18.1. - [Release notes](https://github.com/ipython/ipython/releases) - [Commits](https://github.com/ipython/ipython/compare/5.9.0...7.18.1) Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

view details

James Graham

commit sha e34cd9bfb6a62aa59c35e66fad07b9885553b89d

Update ipython to a version that works with 3.6

view details

James Graham

commit sha 4197637626ea970939025fa7e8b949aac34d6998

Pass correct variable when creating fake check_run event

view details

dependabot-preview[bot]

commit sha bf0f8d8e5079f96038ae860eebbb654fc66c6baa

Bump celery from 4.4.0 to 5.0.0 Bumps [celery](https://github.com/celery/celery) from 4.4.0 to 5.0.0. - [Release notes](https://github.com/celery/celery/releases) - [Changelog](https://github.com/celery/celery/blob/master/Changelog.rst) - [Commits](https://github.com/celery/celery/compare/4.4.0...v5.0.0) Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

view details

dependabot-preview[bot]

commit sha 9bbd39d9330f89826e9c56d795ae46f94f5c2b72

Bump vine from 1.3.0 to 5.0.0 Bumps [vine](https://github.com/celery/vine) from 1.3.0 to 5.0.0. - [Release notes](https://github.com/celery/vine/releases) - [Changelog](https://github.com/celery/vine/blob/master/Changelog) - [Commits](https://github.com/celery/vine/compare/v1.3.0...v5.0.0) Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

view details

dependabot-preview[bot]

commit sha 2ddb3946ad2dc6d04b94843568a9ebd6896cb08b

Bump kombu from 4.6.7 to 5.0.2 Bumps [kombu](https://kombu.readthedocs.io) from 4.6.7 to 5.0.2. Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

view details

dependabot-preview[bot]

commit sha 907ea4a89b9751bc522fecdf0f3813104f69d4e6

Bump amqp from 2.5.2 to 5.0.1 Bumps [amqp](https://github.com/celery/py-amqp) from 2.5.2 to 5.0.1. - [Release notes](https://github.com/celery/py-amqp/releases) - [Changelog](https://github.com/celery/py-amqp/blob/master/Changelog) - [Commits](https://github.com/celery/py-amqp/compare/2.5.2...v5.0.1) Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

view details

James Graham

commit sha 7355d7ef2c4ac3f751e1c7fad6e6f3e401f1d85a

Add additional deps for celery

view details

push time in 11 days

push eventmozilla/wpt-sync

dependabot-preview[bot]

commit sha 2c5417de6e242da42a6f61e08ccbdaea91bfe5fc

Bump vine from 1.3.0 to 5.0.0 Bumps [vine](https://github.com/celery/vine) from 1.3.0 to 5.0.0. - [Release notes](https://github.com/celery/vine/releases) - [Changelog](https://github.com/celery/vine/blob/master/Changelog) - [Commits](https://github.com/celery/vine/compare/v1.3.0...v5.0.0) Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

view details

dependabot-preview[bot]

commit sha 2726b366c5688013714bf9a4d5f8fed5b9372fb4

Bump kombu from 4.6.7 to 5.0.2 Bumps [kombu](https://kombu.readthedocs.io) from 4.6.7 to 5.0.2. Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

view details

dependabot-preview[bot]

commit sha 4be090efc1a406e6e068e09a5e9267fb631fcc71

Bump amqp from 2.5.2 to 5.0.1 Bumps [amqp](https://github.com/celery/py-amqp) from 2.5.2 to 5.0.1. - [Release notes](https://github.com/celery/py-amqp/releases) - [Changelog](https://github.com/celery/py-amqp/blob/master/Changelog) - [Commits](https://github.com/celery/py-amqp/compare/2.5.2...v5.0.1) Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

view details

push time in 11 days

push eventmozilla/wpt-sync

James Graham

commit sha 4197637626ea970939025fa7e8b949aac34d6998

Pass correct variable when creating fake check_run event

view details

push time in 11 days

push eventmozilla/wpt-sync

dependabot-preview[bot]

commit sha 5846adc0514aa96fb0511416abef2c28cfb9211f

Bump traitlets from 4.3.3 to 5.0.4 Bumps [traitlets](https://github.com/ipython/traitlets) from 4.3.3 to 5.0.4. - [Release notes](https://github.com/ipython/traitlets/releases) - [Commits](https://github.com/ipython/traitlets/compare/4.3.3...5.0.4) Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

view details

dependabot-preview[bot]

commit sha 33a8f0546da8eb2b7f2f5f0437f1361cccbe2161

Bump ipython from 5.9.0 to 7.18.1 Bumps [ipython](https://github.com/ipython/ipython) from 5.9.0 to 7.18.1. - [Release notes](https://github.com/ipython/ipython/releases) - [Commits](https://github.com/ipython/ipython/compare/5.9.0...7.18.1) Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

view details

James Graham

commit sha e34cd9bfb6a62aa59c35e66fad07b9885553b89d

Update ipython to a version that works with 3.6

view details

push time in 11 days

delete branch mozilla/wpt-sync

delete branch : dependabot/pip/ipython-7.18.1

delete time in 11 days

PR merged mozilla/wpt-sync

Bump ipython from 5.9.0 to 7.18.1 dependencies

Bumps ipython from 5.9.0 to 7.18.1. <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/ipython/ipython/commit/95d2b79a2bd889da7a29e7c3cf5f49c1d25ff43d"><code>95d2b79</code></a> release 7.18.1</li> <li><a href="https://github.com/ipython/ipython/commit/9c3c238f9af59ddd25dc4e46614f5f065ad36274"><code>9c3c238</code></a> Merge pull request <a href="https://github-redirect.dependabot.com/ipython/ipython/issues/12524">#12524</a> from meeseeksmachine/auto-backport-of-pr-12413-on-7.x</li> <li><a href="https://github.com/ipython/ipython/commit/6e65c1af69deb5ca6843eb112174b5ce0f9d0ede"><code>6e65c1a</code></a> Merge pull request <a href="https://github-redirect.dependabot.com/ipython/ipython/issues/12525">#12525</a> from ipython/revert-12488-auto-backport-of-pr-12207...</li> <li><a href="https://github.com/ipython/ipython/commit/2d949cd3a882e97939046753d7aa2ef932f57db2"><code>2d949cd</code></a> Revert "Backport PR <a href="https://github-redirect.dependabot.com/ipython/ipython/issues/12207">#12207</a> on branch 7.x (Bump jedi to at least 0.16.0 and fi...</li> <li><a href="https://github.com/ipython/ipython/commit/075cbef913cb0e88731cd645021e2332eaa1a25f"><code>075cbef</code></a> Backport PR <a href="https://github-redirect.dependabot.com/ipython/ipython/issues/12413">#12413</a>: catch unrecoverable error</li> <li><a href="https://github.com/ipython/ipython/commit/7f87cb9f7e4f24ef21e9fd4f249271b9f4192117"><code>7f87cb9</code></a> back to dev</li> <li><a href="https://github.com/ipython/ipython/commit/62779a198f8383f286f2729cdd73d111186b5f2b"><code>62779a1</code></a> release 7.18.0</li> <li><a href="https://github.com/ipython/ipython/commit/b9ab601b1ee2dff53ea1ec27cd29ad4a5f9e3654"><code>b9ab601</code></a> Merge pull request <a href="https://github-redirect.dependabot.com/ipython/ipython/issues/12520">#12520</a> from meeseeksmachine/auto-backport-of-pr-12517-on-7.x</li> <li><a href="https://github.com/ipython/ipython/commit/4e0e8a63d3d96705df999c92cbe044f99905b34d"><code>4e0e8a6</code></a> Backport PR <a href="https://github-redirect.dependabot.com/ipython/ipython/issues/12517">#12517</a>: Finish What's new for 7.18</li> <li><a href="https://github.com/ipython/ipython/commit/2e36cb9287b5be87ac4217acf710ea7ccfb67c19"><code>2e36cb9</code></a> Merge pull request <a href="https://github-redirect.dependabot.com/ipython/ipython/issues/12519">#12519</a> from Carreau/auto-backport-of-pr-12514-on-7.x</li> <li>Additional commits viewable in <a href="https://github.com/ipython/ipython/compare/5.9.0...7.18.1">compare view</a></li> </ul> </details> <br />

Dependabot compatibility score

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


<details> <summary>Dependabot commands and options</summary> <br />

You can trigger Dependabot actions by commenting on this PR:

  • @dependabot rebase will rebase this PR
  • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
  • @dependabot merge will merge this PR after your CI passes on it
  • @dependabot squash and merge will squash and merge this PR after your CI passes on it
  • @dependabot cancel merge will cancel a previously requested merge and block automerging
  • @dependabot reopen will reopen this PR if it is closed
  • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
  • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
  • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
  • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
  • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
  • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language
  • @dependabot badge me will comment on this PR with code to add a "Dependabot enabled" badge to your readme

Additionally, you can set the following in your Dependabot dashboard:

  • Update frequency (including time of day and day of week)
  • Pull request limits (per update run and/or open at any time)
  • Automerge options (never/patch/minor, and dev/runtime dependencies)
  • Out-of-range updates (receive only lockfile updates, if desired)
  • Security updates (receive only security updates, if desired)

</details>

+13 -6

1 comment

1 changed file

dependabot-preview[bot]

pr closed time in 11 days

push eventmozilla/wpt-sync

James Graham

commit sha a0dba8a524710e77c91d10bfd83803a64451c9bf

Don't convert pr name to string for comparison That means the comparison will always fail since both sides are now integers

view details

dependabot-preview[bot]

commit sha a06376667c017427a406e8c2a0e787777c411692

Bump newrelic from 5.20.0.149 to 5.20.1.150 Bumps [newrelic](https://github.com/newrelic/newrelic-python-agent) from 5.20.0.149 to 5.20.1.150. - [Release notes](https://github.com/newrelic/newrelic-python-agent/releases) - [Commits](https://github.com/newrelic/newrelic-python-agent/compare/v5.20.0.149...v5.20.1.150) Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

view details

James Graham

commit sha e66d318fc664a91bca320bd913ceaea015162646

Don't send cc_detail field when creating bugs. This isn't actualy supported by bugzilla

view details

James Graham

commit sha af702ebfefe9b92a572a0de12f75c0e6c98308fd

Ensure mercurial is installed under python2 That's required for git cinnabar. We pin the version to 5.4.x because release cinnabar doesn't yet support 5.5.x

view details

dependabot-preview[bot]

commit sha c5287f19d76bc4634cdb0ae897b6f671de6f1373

Bump pycodestyle from 2.5.0 to 2.6.0 (#765) * Bump pycodestyle from 2.5.0 to 2.6.0 Bumps [pycodestyle](https://github.com/PyCQA/pycodestyle) from 2.5.0 to 2.6.0. - [Release notes](https://github.com/PyCQA/pycodestyle/releases) - [Changelog](https://github.com/PyCQA/pycodestyle/blob/master/CHANGES.txt) - [Commits](https://github.com/PyCQA/pycodestyle/compare/2.5.0...2.6.0) Signed-off-by: dependabot-preview[bot] <support@dependabot.com> * Fix code formatting Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com> Co-authored-by: James Graham <james@hoppipolla.co.uk>

view details

dependabot-preview[bot]

commit sha c2449528ae4f038dc6f08aae080d800b81158afd

Bump mypy from 0.782 to 0.790 Bumps [mypy](https://github.com/python/mypy) from 0.782 to 0.790. - [Release notes](https://github.com/python/mypy/releases) - [Commits](https://github.com/python/mypy/compare/v0.782...v0.790) Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

view details

James Graham

commit sha 3fc158963070c01fd8e9ec5b8de129f989b81327

Ensure attachment data is text Otherwise we can't convert it to JSON

view details

James Graham

commit sha f47488719621e34e8668c07a8c9870e79ba3a69e

A pr id is not a pr number The pr id is some globally unique thing that we don't care about

view details

dependabot-preview[bot]

commit sha 47f8e1e1e094b90444225df1d5154de00aa4f5f9

Bump ansible from 2.10.0 to 2.10.1 Bumps [ansible](https://github.com/ansible/ansible) from 2.10.0 to 2.10.1. - [Release notes](https://github.com/ansible/ansible/releases) - [Commits](https://github.com/ansible/ansible/compare/v2.10.0...v2.10.1) Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

view details

dependabot-preview[bot]

commit sha 23c7c37847e503e2b7144899ddfab6342ab72ab1

Bump prompt-toolkit from 3.0.7 to 3.0.8 Bumps [prompt-toolkit](https://github.com/prompt-toolkit/python-prompt-toolkit) from 3.0.7 to 3.0.8. - [Release notes](https://github.com/prompt-toolkit/python-prompt-toolkit/releases) - [Changelog](https://github.com/prompt-toolkit/python-prompt-toolkit/blob/master/CHANGELOG) - [Commits](https://github.com/prompt-toolkit/python-prompt-toolkit/commits) Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

view details

dependabot-preview[bot]

commit sha 4e0b0989a1dd44ba2dfaa91ab07ff2363641b543

Bump configparser from 5.0.0 to 5.0.1 Bumps [configparser](https://github.com/jaraco/configparser) from 5.0.0 to 5.0.1. - [Release notes](https://github.com/jaraco/configparser/releases) - [Changelog](https://github.com/jaraco/configparser/blob/master/CHANGES.rst) - [Commits](https://github.com/jaraco/configparser/compare/v5.0.0...v5.0.1) Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

view details

dependabot-preview[bot]

commit sha be6d3bbb6434870096e80434e2237bcba61d2c9e

Bump zipp from 3.2.0 to 3.3.0 Bumps [zipp](https://github.com/jaraco/zipp) from 3.2.0 to 3.3.0. - [Release notes](https://github.com/jaraco/zipp/releases) - [Changelog](https://github.com/jaraco/zipp/blob/master/CHANGES.rst) - [Commits](https://github.com/jaraco/zipp/compare/v3.2.0...v3.3.0) Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

view details

dependabot-preview[bot]

commit sha 8cd674cf2c1ed3eba5c3f929c499a87023b723e4

Bump flake8 from 3.8.3 to 3.8.4 Bumps [flake8](https://gitlab.com/pycqa/flake8) from 3.8.3 to 3.8.4. - [Release notes](https://gitlab.com/pycqa/flake8/tags) - [Commits](https://gitlab.com/pycqa/flake8/compare/3.8.3...3.8.4) Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

view details

dependabot-preview[bot]

commit sha ec5eb457e0b90ddc57aeb346c6f7104f86989267

Bump traitlets from 4.3.3 to 5.0.4 Bumps [traitlets](https://github.com/ipython/traitlets) from 4.3.3 to 5.0.4. - [Release notes](https://github.com/ipython/traitlets/releases) - [Commits](https://github.com/ipython/traitlets/compare/4.3.3...5.0.4) Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

view details

dependabot-preview[bot]

commit sha c9bcddf1215ca653c1fda17f1aae0ad4d748e81f

Bump ipython from 5.9.0 to 7.18.1 Bumps [ipython](https://github.com/ipython/ipython) from 5.9.0 to 7.18.1. - [Release notes](https://github.com/ipython/ipython/releases) - [Commits](https://github.com/ipython/ipython/compare/5.9.0...7.18.1) Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

view details

James Graham

commit sha 701702e3b7c09cb4a73f9f721df42e4c768d89d6

Update ipython to a version that works with 3.6

view details

push time in 11 days

push eventmozilla/wpt-sync

dependabot-preview[bot]

commit sha a00633569a82ca711bab5151f0721eb521e3c60b

Bump pytest from 4.6.9 to 6.1.1 Bumps [pytest](https://github.com/pytest-dev/pytest) from 4.6.9 to 6.1.1. - [Release notes](https://github.com/pytest-dev/pytest/releases) - [Changelog](https://github.com/pytest-dev/pytest/blob/master/CHANGELOG.rst) - [Commits](https://github.com/pytest-dev/pytest/compare/4.6.9...6.1.1) Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

view details

James Graham

commit sha 7fe9faa195f5b411e91ebf3c03f0966514cecb95

Also install iniconfig

view details

push time in 11 days

delete branch mozilla/wpt-sync

delete branch : dependabot/pip/pytest-6.1.1

delete time in 11 days

PR merged mozilla/wpt-sync

Bump pytest from 4.6.9 to 6.1.1 dependencies

Bumps pytest from 4.6.9 to 6.1.1. <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/pytest-dev/pytest/releases">pytest's releases</a>.</em></p> <blockquote> <h2>6.1.1</h2> <h1>pytest 6.1.1 (2020-10-03)</h1> <h2>Bug Fixes</h2> <ul> <li><a href="https://github-redirect.dependabot.com/pytest-dev/pytest/issues/7807">#7807</a>: Fixed regression in pytest 6.1.0 causing incorrect rootdir to be determined in some non-trivial cases where parent directories have config files as well.</li> <li><a href="https://github-redirect.dependabot.com/pytest-dev/pytest/issues/7814">#7814</a>: Fixed crash in header reporting when testpaths is used and contains absolute paths (regression in 6.1.0).</li> </ul> <h2>6.1.0</h2> <h1>pytest 6.1.0 (2020-09-26)</h1> <h2>Breaking Changes</h2> <ul> <li> <p><a href="https://github-redirect.dependabot.com/pytest-dev/pytest/issues/5585">#5585</a>: As per our policy, the following features which have been deprecated in the 5.X series are now removed:</p> <ul> <li>The <code>funcargnames</code> read-only property of <code>FixtureRequest</code>, <code>Metafunc</code>, and <code>Function</code> classes. Use <code>fixturenames</code> attribute.</li> <li><code>@pytest.fixture</code> no longer supports positional arguments, pass all arguments by keyword instead.</li> <li>Direct construction of <code>Node</code> subclasses now raise an error, use <code>from_parent</code> instead.</li> <li>The default value for <code>junit_family</code> has changed to <code>xunit2</code>. If you require the old format, add <code>junit_family=xunit1</code> to your configuration file.</li> <li>The <code>TerminalReporter</code> no longer has a <code>writer</code> attribute. Plugin authors may use the public functions of the <code>TerminalReporter</code> instead of accessing the <code>TerminalWriter</code> object directly.</li> <li>The <code>--result-log</code> option has been removed. Users are recommended to use the <a href="https://github.com/pytest-dev/pytest-reportlog">pytest-reportlog</a> plugin instead.</li> </ul> <p>For more information consult <a href="https://docs.pytest.org/en/stable/deprecations.html">Deprecations and Removals</a> in the docs.</p> </li> </ul> <h2>Deprecations</h2> <ul> <li> <p><a href="https://github-redirect.dependabot.com/pytest-dev/pytest/issues/6981">#6981</a>: The <code>pytest.collect</code> module is deprecated: all its names can be imported from <code>pytest</code> directly.</p> </li> <li> <p><a href="https://github-redirect.dependabot.com/pytest-dev/pytest/issues/7097">#7097</a>: The <code>pytest._fillfuncargs</code> function is deprecated. This function was kept for backward compatibility with an older plugin.</p> <p>It's functionality is not meant to be used directly, but if you must replace it, use function._request._fillfixtures() instead, though note this is not a public API and may break in the future.</p> </li> <li> <p><a href="https://github-redirect.dependabot.com/pytest-dev/pytest/issues/7210">#7210</a>: The special <code>-k '-expr'</code> syntax to <code>-k</code> is deprecated. Use <code>-k 'not expr'</code> instead.</p> <p>The special <code>-k 'expr:'</code> syntax to <code>-k</code> is deprecated. Please open an issue if you use this and want a replacement.</p> </li> <li> <p><a href="https://github-redirect.dependabot.com/pytest-dev/pytest/issues/7255">#7255</a>: The pytest_warning_captured <_pytest.hookspec.pytest_warning_captured> hook is deprecated in favor of pytest_warning_recorded <_pytest.hookspec.pytest_warning_recorded>, and will be removed in a future version.</p> </li> <li> <p><a href="https://github-redirect.dependabot.com/pytest-dev/pytest/issues/7648">#7648</a>: The <code>gethookproxy()</code> and <code>isinitpath()</code> methods of <code>FSCollector</code> and <code>Package</code> are deprecated;</p> </li> </ul> <!-- raw HTML omitted --> </blockquote> </details> <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/pytest-dev/pytest/blob/master/CHANGELOG.rst">pytest's changelog</a>.</em></p> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/pytest-dev/pytest/commit/0ad20b533ffc52ced7bb1a03fba664615e90c093"><code>0ad20b5</code></a> Prepare release version 6.1.1</li> <li><a href="https://github.com/pytest-dev/pytest/commit/9df5267648c2e1dc89e114487f2d0a1ce40bb0cb"><code>9df5267</code></a> Merge pull request <a href="https://github-redirect.dependabot.com/pytest-dev/pytest/issues/7842">#7842</a> from bluetech/backport-7817</li> <li><a href="https://github.com/pytest-dev/pytest/commit/1521849c87bfcad186b37c974417365b4d9163fe"><code>1521849</code></a> terminal: fix crash in header reporting when absolute testpaths is used</li> <li><a href="https://github.com/pytest-dev/pytest/commit/bcb94c4c8b1c8d3ffa9d7f4cb14b43ce7b2c8897"><code>bcb94c4</code></a> Merge pull request <a href="https://github-redirect.dependabot.com/pytest-dev/pytest/issues/7822">#7822</a> from bluetech/backport-7813</li> <li><a href="https://github.com/pytest-dev/pytest/commit/0f83df4f5547a6f72ef5ef070dab30f2ee372eb4"><code>0f83df4</code></a> Merge pull request <a href="https://github-redirect.dependabot.com/pytest-dev/pytest/issues/7813">#7813</a> from bluetech/findpaths-confusion</li> <li><a href="https://github.com/pytest-dev/pytest/commit/330caac2ca94902d8fa7b40fec9a181feec6ed2f"><code>330caac</code></a> [6.1.x] Improve docs about plugin discovery/loading at startup (<a href="https://github-redirect.dependabot.com/pytest-dev/pytest/issues/7803">#7803</a>)</li> <li><a href="https://github.com/pytest-dev/pytest/commit/08a1ab3a8acdfdeffd8f07058b44743df1d90150"><code>08a1ab3</code></a> Merge pull request <a href="https://github-redirect.dependabot.com/pytest-dev/pytest/issues/7797">#7797</a> from pytest-dev/release-6.1.0</li> <li><a href="https://github.com/pytest-dev/pytest/commit/868bc003ecb0af65548c14de997205cc0e37c3c6"><code>868bc00</code></a> Prepare release version 6.1.0</li> <li><a href="https://github.com/pytest-dev/pytest/commit/0b327cc75b5f7452eb80c604ce51c032da316a4b"><code>0b327cc</code></a> Merge pull request <a href="https://github-redirect.dependabot.com/pytest-dev/pytest/issues/7796">#7796</a> from bluetech/changelog-cleanups</li> <li><a href="https://github.com/pytest-dev/pytest/commit/d3c746eb8eb96e68e1c2624a46d99b9e60d455ec"><code>d3c746e</code></a> changelog: some consistency cleanups</li> <li>Additional commits viewable in <a href="https://github.com/pytest-dev/pytest/compare/4.6.9...6.1.1">compare view</a></li> </ul> </details> <br />

Dependabot compatibility score

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


<details> <summary>Dependabot commands and options</summary> <br />

You can trigger Dependabot actions by commenting on this PR:

  • @dependabot rebase will rebase this PR
  • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
  • @dependabot merge will merge this PR after your CI passes on it
  • @dependabot squash and merge will squash and merge this PR after your CI passes on it
  • @dependabot cancel merge will cancel a previously requested merge and block automerging
  • @dependabot reopen will reopen this PR if it is closed
  • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
  • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
  • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
  • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
  • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
  • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language
  • @dependabot badge me will comment on this PR with code to add a "Dependabot enabled" badge to your readme

Additionally, you can set the following in your Dependabot dashboard:

  • Update frequency (including time of day and day of week)
  • Pull request limits (per update run and/or open at any time)
  • Automerge options (never/patch/minor, and dev/runtime dependencies)
  • Out-of-range updates (receive only lockfile updates, if desired)
  • Security updates (receive only security updates, if desired)

</details>

+5 -3

1 comment

1 changed file

dependabot-preview[bot]

pr closed time in 11 days

pull request commentmozilla/wpt-sync

Bump pygit2 from 0.28.2 to 1.3.0

I ended up making some substantive changes to address the API changes here and would appreciate review. I'm reasonably confident that the test coverage for these functions will find most issues (at least they found errors in earlier revisions of this patch).

dependabot-preview[bot]

comment created time in 11 days

push eventmozilla/wpt-sync

James Graham

commit sha 238b47644dca8842c893a49bf0a3908c80107e2f

Also install iniconfig

view details

push time in 11 days

push eventmozilla/wpt-sync

James Graham

commit sha e57640b1b5ed1140dd9cdd9793a3c7c9ead3bb78

Update code for pygit2 API changes Notably, getting the .tree property gives us an actual tree object rather than the sha1 of a tree which we then have to look up in the repo. Also the string .type constants are gone, but we can either use isinstance or check against the numerical constants instead.

view details

push time in 11 days

pull request commentmozilla/wpt-sync

Bump traitlets from 4.3.3 to 5.0.4

@dependabot rebase

dependabot-preview[bot]

comment created time in 11 days

delete branch mozilla/wpt-sync

delete branch : dependabot/pip/flake8-3.8.4

delete time in 11 days

push eventmozilla/wpt-sync

dependabot-preview[bot]

commit sha 8cd674cf2c1ed3eba5c3f929c499a87023b723e4

Bump flake8 from 3.8.3 to 3.8.4 Bumps [flake8](https://gitlab.com/pycqa/flake8) from 3.8.3 to 3.8.4. - [Release notes](https://gitlab.com/pycqa/flake8/tags) - [Commits](https://gitlab.com/pycqa/flake8/compare/3.8.3...3.8.4) Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

view details

push time in 11 days

PR merged mozilla/wpt-sync

Bump flake8 from 3.8.3 to 3.8.4 dependencies

Bumps flake8 from 3.8.3 to 3.8.4. <details> <summary>Commits</summary> <ul> <li><a href="https://gitlab.com/pycqa/flake8/commit/fb91b994ed4adf4f2b4890e7bdba82f57e3a81df"><code>fb91b99</code></a> Release 3.8.4</li> <li><a href="https://gitlab.com/pycqa/flake8/commit/b5b4792f70f2560bd3f2106bc496e54acc5da9b2"><code>b5b4792</code></a> Merge branch 'py34_virtualenv_fix' into 'master'</li> <li><a href="https://gitlab.com/pycqa/flake8/commit/d3c55c17633a0afaa87fc67c848785c443909698"><code>d3c55c1</code></a> limit the virtualenv version in python3.4</li> <li><a href="https://gitlab.com/pycqa/flake8/commit/d0a0cb46d22a4602f1f2e7f5d1d02a9739eea743"><code>d0a0cb4</code></a> Merge branch 'video' into 'master'</li> <li><a href="https://gitlab.com/pycqa/flake8/commit/eb9ca33fe78f3095534ddc1ae2643728d7068878"><code>eb9ca33</code></a> add video tutorial to plugin development page</li> <li><a href="https://gitlab.com/pycqa/flake8/commit/a42d8cbed40dda51c22ee80ee558b2ef60eb3806"><code>a42d8cb</code></a> Merge branch 'spelling' into 'master'</li> <li><a href="https://gitlab.com/pycqa/flake8/commit/2fe70dda6b6327b00f318e121016f3ca372461c2"><code>2fe70dd</code></a> fix a few small spelling issues</li> <li><a href="https://gitlab.com/pycqa/flake8/commit/93209ffac9f7dd5a1bdf2f3a01409d18339554a5"><code>93209ff</code></a> Merge branch 'fix_linting_end_of_file' into 'master'</li> <li><a href="https://gitlab.com/pycqa/flake8/commit/ee9c2874a9a5cb886060635c9b1aeec16bbc9e55"><code>ee9c287</code></a> fix skipping of physical checks when file does not end in newline</li> <li><a href="https://gitlab.com/pycqa/flake8/commit/2c64d3ec5ab3ad40dc3e7c10ee0d7fa22f94560d"><code>2c64d3e</code></a> Merge branch 'docs-options-defaults' into 'master'</li> <li>Additional commits viewable in <a href="https://gitlab.com/pycqa/flake8/compare/3.8.3...3.8.4">compare view</a></li> </ul> </details> <br />

Dependabot compatibility score

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


<details> <summary>Dependabot commands and options</summary> <br />

You can trigger Dependabot actions by commenting on this PR:

  • @dependabot rebase will rebase this PR
  • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
  • @dependabot merge will merge this PR after your CI passes on it
  • @dependabot squash and merge will squash and merge this PR after your CI passes on it
  • @dependabot cancel merge will cancel a previously requested merge and block automerging
  • @dependabot reopen will reopen this PR if it is closed
  • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
  • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
  • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
  • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
  • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
  • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language
  • @dependabot badge me will comment on this PR with code to add a "Dependabot enabled" badge to your readme

Additionally, you can set the following in your Dependabot dashboard:

  • Update frequency (including time of day and day of week)
  • Pull request limits (per update run and/or open at any time)
  • Automerge options (never/patch/minor, and dev/runtime dependencies)
  • Out-of-range updates (receive only lockfile updates, if desired)
  • Security updates (receive only security updates, if desired)

</details>

+3 -3

1 comment

1 changed file

dependabot-preview[bot]

pr closed time in 11 days

push eventmozilla/wpt-sync

dependabot-preview[bot]

commit sha be6d3bbb6434870096e80434e2237bcba61d2c9e

Bump zipp from 3.2.0 to 3.3.0 Bumps [zipp](https://github.com/jaraco/zipp) from 3.2.0 to 3.3.0. - [Release notes](https://github.com/jaraco/zipp/releases) - [Changelog](https://github.com/jaraco/zipp/blob/master/CHANGES.rst) - [Commits](https://github.com/jaraco/zipp/compare/v3.2.0...v3.3.0) Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

view details

push time in 11 days

delete branch mozilla/wpt-sync

delete branch : dependabot/pip/zipp-3.3.0

delete time in 11 days

PR merged mozilla/wpt-sync

Bump zipp from 3.2.0 to 3.3.0 dependencies

Bumps zipp from 3.2.0 to 3.3.0. <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/jaraco/zipp/blob/master/CHANGES.rst">zipp's changelog</a>.</em></p> <blockquote> <h1>v3.3.0</h1> <p><a href="https://github-redirect.dependabot.com/jaraco/zipp/issues/9">#9</a>: <code>Path</code> objects now expose a <code>.filename</code> attribute and rely on that to resolve <code>.name</code> and <code>.parent</code> when the <code>Path</code> object is at the root of the zipfile.</p> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/jaraco/zipp/commit/2ce5576d4a8475107d10f3b93cf3e142a69ec72d"><code>2ce5576</code></a> Merge pull request <a href="https://github-redirect.dependabot.com/jaraco/zipp/issues/11">#11</a> from jaraco/feature/root-name-parent-pathlib</li> <li><a href="https://github.com/jaraco/zipp/commit/9fb74fd4bda1db151e1b5c5d6fe5380dfd56e202"><code>9fb74fd</code></a> Render paths using posixpath.sep for consistent output even on Windows.</li> <li><a href="https://github.com/jaraco/zipp/commit/bbbe8c47614ac4ff4dbc63aa05c209b175419918"><code>bbbe8c4</code></a> Expand docstring to capture name and filename behaviors.</li> <li><a href="https://github.com/jaraco/zipp/commit/62ed11ee71913ce0a144cbbfc811c81264489a76"><code>62ed11e</code></a> Merge branch 'master' into feature/root-name-parent-pathlib</li> <li><a href="https://github.com/jaraco/zipp/commit/ace160ba3df8d8de479011a5d02b76588329cd17"><code>ace160b</code></a> Render links to Python bugs.</li> <li><a href="https://github.com/jaraco/zipp/commit/c862370c2ba4af6676cf4a11ed0779227bfec0ba"><code>c862370</code></a> Remove empty branches.</li> <li><a href="https://github.com/jaraco/zipp/commit/7b30e3b82e42dfcf21f77246cd429b1935324dd4"><code>7b30e3b</code></a> Extract decorator for creating representative zip instances for tests. Closes...</li> <li>See full diff in <a href="https://github.com/jaraco/zipp/compare/v3.2.0...v3.3.0">compare view</a></li> </ul> </details> <br />

Dependabot compatibility score

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


<details> <summary>Dependabot commands and options</summary> <br />

You can trigger Dependabot actions by commenting on this PR:

  • @dependabot rebase will rebase this PR
  • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
  • @dependabot merge will merge this PR after your CI passes on it
  • @dependabot squash and merge will squash and merge this PR after your CI passes on it
  • @dependabot cancel merge will cancel a previously requested merge and block automerging
  • @dependabot reopen will reopen this PR if it is closed
  • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
  • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
  • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
  • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
  • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
  • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language
  • @dependabot badge me will comment on this PR with code to add a "Dependabot enabled" badge to your readme

Additionally, you can set the following in your Dependabot dashboard:

  • Update frequency (including time of day and day of week)
  • Pull request limits (per update run and/or open at any time)
  • Automerge options (never/patch/minor, and dev/runtime dependencies)
  • Out-of-range updates (receive only lockfile updates, if desired)
  • Security updates (receive only security updates, if desired)

</details>

+6 -6

1 comment

2 changed files

dependabot-preview[bot]

pr closed time in 11 days

pull request commentmozilla/wpt-sync

Bump zipp from 3.2.0 to 3.3.0

@dependabot rebase

dependabot-preview[bot]

comment created time in 12 days

pull request commentmozilla/wpt-sync

Bump pytest from 4.6.9 to 6.1.1

@dependabot rebase

dependabot-preview[bot]

comment created time in 12 days

pull request commentmozilla/wpt-sync

Bump flake8 from 3.8.3 to 3.8.4

@dependabot rebase

dependabot-preview[bot]

comment created time in 12 days

delete branch mozilla/wpt-sync

delete branch : dependabot/pip/configparser-5.0.1

delete time in 12 days

push eventmozilla/wpt-sync

dependabot-preview[bot]

commit sha 4e0b0989a1dd44ba2dfaa91ab07ff2363641b543

Bump configparser from 5.0.0 to 5.0.1 Bumps [configparser](https://github.com/jaraco/configparser) from 5.0.0 to 5.0.1. - [Release notes](https://github.com/jaraco/configparser/releases) - [Changelog](https://github.com/jaraco/configparser/blob/master/CHANGES.rst) - [Commits](https://github.com/jaraco/configparser/compare/v5.0.0...v5.0.1) Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

view details

push time in 12 days

PR merged mozilla/wpt-sync

Bump configparser from 5.0.0 to 5.0.1 dependencies

Bumps configparser from 5.0.0 to 5.0.1. <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/jaraco/configparser/blob/master/CHANGES.rst">configparser's changelog</a>.</em></p> <blockquote> <h1>v5.0.1</h1> <ul> <li>Synced with Python 3.9.0.</li> <li>Refreshed package metadata.</li> </ul> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/jaraco/configparser/commit/34f0e75fbdcc92143ed56ffb49b1b44a611ee68f"><code>34f0e75</code></a> Sync with Python 3.9.</li> <li><a href="https://github.com/jaraco/configparser/commit/bc437d4212dc3cde657d72cb41b59f3645e03d27"><code>bc437d4</code></a> Merge branch '3.x' into master</li> <li><a href="https://github.com/jaraco/configparser/commit/0097e8b58cb342a83e64f37fc883892e448ddf3d"><code>0097e8b</code></a> cpython-v3.9.0 rev=9cf6752276e6</li> <li><a href="https://github.com/jaraco/configparser/commit/de3ffc58c26d45b4653a78281ff0d7bf1f396caa"><code>de3ffc5</code></a> Update changelog.</li> <li><a href="https://github.com/jaraco/configparser/commit/e92666087e3d442678c5986872700547a754f0a7"><code>e926660</code></a> Remove references to Python versions in README. Fixes <a href="https://github-redirect.dependabot.com/jaraco/configparser/issues/51">#51</a>.</li> <li><a href="https://github.com/jaraco/configparser/commit/fadee32a3fa5a41cfaea68afe0bfa4c4100c4d2a"><code>fadee32</code></a> 🧎‍♀️ Genuflect to the types.</li> <li><a href="https://github.com/jaraco/configparser/commit/106e423cf7e8e79f78fc56205a4d8caa9f0d8ab1"><code>106e423</code></a> ⚫ Fade to black.</li> <li><a href="https://github.com/jaraco/configparser/commit/f3a64a9081d0666ba69fcfd22688059d538bd066"><code>f3a64a9</code></a> Merge <a href="https://github.com/jaraco/skeleton">https://github.com/jaraco/skeleton</a> into master</li> <li><a href="https://github.com/jaraco/configparser/commit/678e1a973a0139c0e0ab40395dfbada6c3ea72b9"><code>678e1a9</code></a> Also enable flake8 and cov when the plugins are present.</li> <li><a href="https://github.com/jaraco/configparser/commit/8117892ea5da9969f49756933bcbaa576ee7c5d7"><code>8117892</code></a> Use enabled plugin configuration to enable mypy and black when the plugin is ...</li> <li>Additional commits viewable in <a href="https://github.com/jaraco/configparser/compare/v5.0.0...v5.0.1">compare view</a></li> </ul> </details> <br />

Dependabot compatibility score

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


<details> <summary>Dependabot commands and options</summary> <br />

You can trigger Dependabot actions by commenting on this PR:

  • @dependabot rebase will rebase this PR
  • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
  • @dependabot merge will merge this PR after your CI passes on it
  • @dependabot squash and merge will squash and merge this PR after your CI passes on it
  • @dependabot cancel merge will cancel a previously requested merge and block automerging
  • @dependabot reopen will reopen this PR if it is closed
  • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
  • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
  • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
  • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
  • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
  • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language
  • @dependabot badge me will comment on this PR with code to add a "Dependabot enabled" badge to your readme

Additionally, you can set the following in your Dependabot dashboard:

  • Update frequency (including time of day and day of week)
  • Pull request limits (per update run and/or open at any time)
  • Automerge options (never/patch/minor, and dev/runtime dependencies)
  • Out-of-range updates (receive only lockfile updates, if desired)
  • Security updates (receive only security updates, if desired)

</details>

+6 -6

0 comment

2 changed files

dependabot-preview[bot]

pr closed time in 12 days

delete branch mozilla/wpt-sync

delete branch : dependabot/pip/prompt-toolkit-3.0.8

delete time in 12 days

push eventmozilla/wpt-sync

dependabot-preview[bot]

commit sha 23c7c37847e503e2b7144899ddfab6342ab72ab1

Bump prompt-toolkit from 3.0.7 to 3.0.8 Bumps [prompt-toolkit](https://github.com/prompt-toolkit/python-prompt-toolkit) from 3.0.7 to 3.0.8. - [Release notes](https://github.com/prompt-toolkit/python-prompt-toolkit/releases) - [Changelog](https://github.com/prompt-toolkit/python-prompt-toolkit/blob/master/CHANGELOG) - [Commits](https://github.com/prompt-toolkit/python-prompt-toolkit/commits) Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

view details

push time in 12 days

PR merged mozilla/wpt-sync

Bump prompt-toolkit from 3.0.7 to 3.0.8 dependencies

Bumps prompt-toolkit from 3.0.7 to 3.0.8. <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/prompt-toolkit/python-prompt-toolkit/blob/master/CHANGELOG">prompt-toolkit's changelog</a>.</em></p> <blockquote> <h2>3.0.8: 2020-10-12</h2> <p>New features:</p> <ul> <li>Added <code>validator</code> parameter to <code>input_dialog</code>.</li> </ul> <p>Fixes:</p> <ul> <li>Cope with stdout not having a working <code>fileno</code>.</li> <li>Handle situation when /dev/null is piped into stdin, or when stdin is closed somehow.</li> <li>Fix for telnet/ssh server: <code>isatty</code> method was not implemented.</li> <li>Display correct error when a tuple is passed into <code>to_formatted_text</code>.</li> <li>Pass along WORD parameter in <code>Document._is_word_before_cursor_complete</code>. Fixes some key bindings.</li> <li>Expose <code>ProgressBarCounter</code> in shortcuts module.</li> </ul> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li>See full diff in <a href="https://github.com/prompt-toolkit/python-prompt-toolkit/commits">compare view</a></li> </ul> </details> <br />

Dependabot compatibility score

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


<details> <summary>Dependabot commands and options</summary> <br />

You can trigger Dependabot actions by commenting on this PR:

  • @dependabot rebase will rebase this PR
  • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
  • @dependabot merge will merge this PR after your CI passes on it
  • @dependabot squash and merge will squash and merge this PR after your CI passes on it
  • @dependabot cancel merge will cancel a previously requested merge and block automerging
  • @dependabot reopen will reopen this PR if it is closed
  • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
  • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
  • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
  • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
  • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
  • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language
  • @dependabot badge me will comment on this PR with code to add a "Dependabot enabled" badge to your readme

Additionally, you can set the following in your Dependabot dashboard:

  • Update frequency (including time of day and day of week)
  • Pull request limits (per update run and/or open at any time)
  • Automerge options (never/patch/minor, and dev/runtime dependencies)
  • Out-of-range updates (receive only lockfile updates, if desired)
  • Security updates (receive only security updates, if desired)

</details>

+3 -3

0 comment

1 changed file

dependabot-preview[bot]

pr closed time in 12 days

push eventmozilla/wpt-sync

dependabot-preview[bot]

commit sha 47f8e1e1e094b90444225df1d5154de00aa4f5f9

Bump ansible from 2.10.0 to 2.10.1 Bumps [ansible](https://github.com/ansible/ansible) from 2.10.0 to 2.10.1. - [Release notes](https://github.com/ansible/ansible/releases) - [Commits](https://github.com/ansible/ansible/compare/v2.10.0...v2.10.1) Signed-off-by: dependabot-preview[bot] <support@dependabot.com>

view details

push time in 12 days

delete branch mozilla/wpt-sync

delete branch : dependabot/pip/ansible-2.10.1

delete time in 12 days

PR merged mozilla/wpt-sync

Bump ansible from 2.10.0 to 2.10.1 dependencies

Bumps ansible from 2.10.0 to 2.10.1. <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/ansible/ansible/commit/355a69f416d2359feab984823d09a78b37b00495"><code>355a69f</code></a> Revert "[deb packaging] Change maintainer email for now"</li> <li><a href="https://github.com/ansible/ansible/commit/6cf4a33f3581120a2777db00caff9bf4c56db7cd"><code>6cf4a33</code></a> [deb packaging] Change maintainer email for now</li> <li><a href="https://github.com/ansible/ansible/commit/72a8b55920d873e82188f97b24f9d3ee75094da3"><code>72a8b55</code></a> New release v2.10.1</li> <li><a href="https://github.com/ansible/ansible/commit/45c8c9909de665e63a0c986bc96e4f99aac650f8"><code>45c8c99</code></a> [Docs][2.10] Backportapalooza 11 (<a href="https://github-redirect.dependabot.com/ansible/ansible/issues/71702">#71702</a>)</li> <li><a href="https://github.com/ansible/ansible/commit/57b50699904dc5bc336745f2ac59ee440ac525c6"><code>57b5069</code></a> Update the porting guide for 2.10.0b2 (<a href="https://github-redirect.dependabot.com/ansible/ansible/issues/71677">#71677</a>) (<a href="https://github-redirect.dependabot.com/ansible/ansible/issues/71684">#71684</a>)</li> <li><a href="https://github.com/ansible/ansible/commit/eb165c0a9bf96426b73c4edf60d90204beb8a50e"><code>eb165c0</code></a> Update Ansible release version to v2.10.1rc3.post0.</li> <li><a href="https://github.com/ansible/ansible/commit/387a7199fc6f7f4b12c1e272e42b6375c85cf76c"><code>387a719</code></a> New release v2.10.1rc3</li> <li><a href="https://github.com/ansible/ansible/commit/2797322fd3fe323b634c9133979e04f8bfe1a70a"><code>2797322</code></a> [stable-2.10] Update to the ansible-2.10.0 pre-release schedule (<a href="https://github-redirect.dependabot.com/ansible/ansible/issues/71647">#71647</a>) (<a href="https://github-redirect.dependabot.com/ansible/ansible/issues/71">#71</a>...</li> <li><a href="https://github.com/ansible/ansible/commit/43e0aa5b5730b224858dd285ee63d71353345d22"><code>43e0aa5</code></a> WIP: Backport/2.10/71588 (<a href="https://github-redirect.dependabot.com/ansible/ansible/issues/71626">#71626</a>)</li> <li><a href="https://github.com/ansible/ansible/commit/1af7c6c0036cbf6d3899aea19dc0393d01e5e363"><code>1af7c6c</code></a> [docs][backport]Backportapalooza 10 (<a href="https://github-redirect.dependabot.com/ansible/ansible/issues/71621">#71621</a>)</li> <li>Additional commits viewable in <a href="https://github.com/ansible/ansible/compare/v2.10.0...v2.10.1">compare view</a></li> </ul> </details> <br />

Dependabot compatibility score

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


<details> <summary>Dependabot commands and options</summary> <br />

You can trigger Dependabot actions by commenting on this PR:

  • @dependabot rebase will rebase this PR
  • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
  • @dependabot merge will merge this PR after your CI passes on it
  • @dependabot squash and merge will squash and merge this PR after your CI passes on it
  • @dependabot cancel merge will cancel a previously requested merge and block automerging
  • @dependabot reopen will reopen this PR if it is closed
  • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
  • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
  • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
  • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
  • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
  • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language
  • @dependabot badge me will comment on this PR with code to add a "Dependabot enabled" badge to your readme

Additionally, you can set the following in your Dependabot dashboard:

  • Update frequency (including time of day and day of week)
  • Pull request limits (per update run and/or open at any time)
  • Automerge options (never/patch/minor, and dev/runtime dependencies)
  • Out-of-range updates (receive only lockfile updates, if desired)
  • Security updates (receive only security updates, if desired)

</details>

+1 -1

0 comment

1 changed file

dependabot-preview[bot]

pr closed time in 12 days

push eventmozilla/wpt-sync

James Graham

commit sha a447ade23e531d82d966def72bab906d240c4f54

Ensure cached_property is installed

view details

push time in 12 days

delete branch mozilla/wpt-sync

delete branch : pr_id

delete time in 12 days

push eventmozilla/wpt-sync

James Graham

commit sha f47488719621e34e8668c07a8c9870e79ba3a69e

A pr id is not a pr number The pr id is some globally unique thing that we don't care about

view details

push time in 12 days

PR merged mozilla/wpt-sync

Reviewers
A pr id is not a pr number

The pr id is some globally unique thing that we don't care about

+2 -2

0 comment

1 changed file

jgraham

pr closed time in 12 days

more