webidl 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile CHANGED
@@ -2,3 +2,8 @@ source "http://rubygems.org"
2
2
 
3
3
  # Specify your gem's dependencies in webidl.gemspec
4
4
  gemspec
5
+
6
+ group :test do
7
+ gem "ruby-debug", :platform => :ruby_18
8
+ gem "ruby-debug19", :platform => :ruby_19
9
+ end
@@ -1,26 +1,31 @@
1
- = webidl
1
+ webidl
2
+ ======
2
3
 
3
4
  This gem provides a pure-ruby parser and code generator for Web IDL, an interface description language for interfaces intended to be implemented in web browsers.
4
5
  The code generation will be used to generate part of the implementation of Watir 2.0, backed by WebDriver.
5
6
 
6
- = Problems
7
+ Problems
8
+ --------
7
9
 
8
10
  The code generation could be improved a lot - a lot of the data in the IDL is just ignored. I don't need anything more at the moment, but it should be easy to complete it if anyone needs to.
9
11
 
10
12
  The parser rules for ExtendedAttribute is not exactly like the grammar from the Web IDL spec, since I ran into infinite recursion issues and don't have the Treetop-fu to figure them out.
11
13
  So far this hasn't led to any problems - the parser does parse the IDLs parts of the current HTML5 spec just fine.
12
14
 
13
- = Development tips
15
+ Development tips
16
+ ----------------
14
17
 
15
18
  While working on the grammar, delete the compiled parser (lib/webidl/parser/idl.rb) and make sure you do not have the webidl gem installed. When finished, compile the parser with `rake parser:compile`.
16
19
 
17
- = See also
20
+ See also
21
+ --------
18
22
 
19
23
  * http://dev.w3.org/2006/webapi/WebIDL/
20
24
  * http://dev.w3.org/2006/webapi/WebIDL/#idl-grammar
21
25
  * http://dev.w3.org/html5/spec/Overview.html
22
26
 
23
- == Note on Patches/Pull Requests
27
+ Note on Patches/Pull Requests
28
+ -----------------------------
24
29
 
25
30
  * Fork the project.
26
31
  * Make your feature addition or bug fix.
@@ -30,6 +35,7 @@ While working on the grammar, delete the compiled parser (lib/webidl/parser/idl.
30
35
  (if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)
31
36
  * Send me a pull request. Bonus points for topic branches.
32
37
 
33
- == Copyright
38
+ Copyright
39
+ ---------
34
40
 
35
41
  Copyright (c) 2009-2011 Jari Bakken. See LICENSE for details.
@@ -15,8 +15,9 @@ require "webidl/parse_tree/argument_list"
15
15
  require "webidl/parse_tree/extended_attributes"
16
16
  require "webidl/parse_tree/relative_scoped_name"
17
17
  require "webidl/parse_tree/absolute_scoped_name"
18
+ require "webidl/parse_tree/sequence_type"
19
+ require "webidl/parse_tree/type_suffix"
18
20
  require "webidl/parse_tree/type"
19
- require "webidl/parse_tree/nullable_type"
20
21
  require "webidl/parse_tree/interface_members"
21
22
  require "webidl/parse_tree/operation"
22
23
  require "webidl/parse_tree/const"
@@ -37,6 +38,7 @@ require "webidl/ast/type"
37
38
  require "webidl/ast/scoped_name"
38
39
  require "webidl/ast/operation"
39
40
  require "webidl/ast/const"
41
+ require "webidl/ast/sequence"
40
42
  require "webidl/ast/exception"
41
43
  require "webidl/ast/attribute"
42
44
  require "webidl/ast/field"
@@ -0,0 +1,19 @@
1
+ module WebIDL
2
+ module Ast
3
+ class Sequence < Node
4
+ attr_reader :type
5
+
6
+ def initialize(parent, type, opts = {})
7
+ super(parent)
8
+
9
+ @type = type
10
+ @nullable = !!opts[:nullable]
11
+ end
12
+
13
+ def nullable?
14
+ @nullable
15
+ end
16
+
17
+ end # Sequence
18
+ end # Ast
19
+ end # WebIDL
@@ -2,21 +2,32 @@ module WebIDL
2
2
  module Ast
3
3
  class Type < Node
4
4
 
5
- attr_reader :name
6
-
7
5
  def initialize(parent, name, opts = {})
8
6
  super(parent)
9
7
 
10
8
  @name = camel_case_type(name.strip).to_sym
11
9
  @nullable = !!opts[:nullable]
10
+ @array = !!opts[:array]
12
11
  end
13
12
 
14
13
  def nullable?
15
14
  @nullable
16
15
  end
17
16
 
18
- def array!
19
- @name = "#{@name}Array".to_sym
17
+ def array?
18
+ @array
19
+ end
20
+
21
+ def array=(bool)
22
+ @array = bool
23
+ end
24
+
25
+ def nullable=(bool)
26
+ @nullable = bool
27
+ end
28
+
29
+ def name
30
+ (array? ? "#{@name}Array" : @name).to_sym
20
31
  end
21
32
 
22
33
  private
@@ -0,0 +1,11 @@
1
+ module WebIDL
2
+ module ParseTree
3
+ class SequenceType < Treetop::Runtime::SyntaxNode
4
+
5
+ def build(parent)
6
+ Ast::Sequence.new(nil, type.build(parent), :nullable => null.any?)
7
+ end
8
+
9
+ end # SequenceType
10
+ end # ParseTree
11
+ end # WebIDL
@@ -9,7 +9,10 @@ module WebIDL
9
9
  result = Ast::Type.new parent, result.name # or qualified_name?
10
10
  end
11
11
 
12
- result.array! if array.any?
12
+ if suffix.any?
13
+ suffix.apply(result)
14
+ end
15
+
13
16
  result
14
17
  end
15
18
 
@@ -0,0 +1,19 @@
1
+ module WebIDL
2
+ module ParseTree
3
+ class TypeSuffix < Treetop::Runtime::SyntaxNode
4
+
5
+ def apply(type)
6
+ if respond_to?(:array) && array.any?
7
+ type.array = true
8
+ end
9
+
10
+ if respond_to?(:null) && null.any?
11
+ type.nullable = true
12
+ end
13
+
14
+ raise NotImplementedError, "TypeSuffix + TypeSuffix" if suffix.any?
15
+ end
16
+
17
+ end # TypeSuffix
18
+ end # ParseTree
19
+ end # WebIDL
@@ -276,25 +276,45 @@ module WebIDL
276
276
  end
277
277
 
278
278
  rule Type
279
- type:( NullableType
280
- / ScopedName
281
- / "any" # not sure why these two are here, since
282
- / "object" # they will be caught by ScopedName anyway..
283
- ) array:Array <ParseTree::Type>
279
+ ("sequence" ws "<" ws type:Type ws ">" null:Null <ParseTree::SequenceType> / AttributeType)
284
280
  end
285
281
 
286
- #
287
- # added: cannot be followed by a NonSpace character, since e.g. DOMStringMap would break parsing
288
- #
282
+ rule Null
283
+ "?"?
284
+ end
285
+
286
+ rule AttributeType
287
+ type:PrimitiveOrStringType suffix:TypeSuffix <ParseTree::Type>
288
+ / type:ScopedName suffix:TypeSuffix <ParseTree::Type>
289
+ / type:"object" suffix:TypeSuffix <ParseTree::Type>
290
+ / type:"Date" suffix:TypeSuffix <ParseTree::Type>
291
+ / type:"any" suffix:TypeSuffixStartingWithArray <ParseTree::Type>
292
+ end
293
+
294
+ # added: cannot be followed by a NonSpace character, since e.g. DOMStringMap, DOMStringList or other ScopedNames would break parsing
295
+ rule PrimitiveOrStringType
296
+ (UnsignedIntegerType
297
+ / "boolean" !NonSpace
298
+ / "byte" !NonSpace
299
+ / "octet" !NonSpace
300
+ / "float" !NonSpace
301
+ / "double" !NonSpace
302
+ / "DOMString" !NonSpace) {
303
+ def build(parent)
304
+ Ast::Type.new(parent, text_value)
305
+ end
306
+ }
307
+ end
308
+
309
+ rule TypeSuffix
310
+ (
311
+ array:("[" ws "]") suffix:TypeSuffix <ParseTree::TypeSuffix>
312
+ / null:"?" suffix:TypeSuffixStartingWithArray <ParseTree::TypeSuffix>
313
+ )?
314
+ end
289
315
 
290
- rule NullableType
291
- type:UnsignedIntegerType null:Nullable <ParseTree::NullableType>
292
- / type:"boolean" null:Nullable !NonSpace <ParseTree::NullableType>
293
- / type:"octet" null:Nullable !NonSpace <ParseTree::NullableType>
294
- / type:"float" null:Nullable !NonSpace <ParseTree::NullableType>
295
- / type:"double" null:Nullable !NonSpace <ParseTree::NullableType>
296
- / type:"DOMString" null:Nullable !NonSpace <ParseTree::NullableType>
297
- / type:"sequence" ws "<" ws Type ws ">" null:Nullable !NonSpace <ParseTree::NullableType>
316
+ rule TypeSuffixStartingWithArray
317
+ (array:("[" ws "]") ws suffix:TypeSuffix <ParseTree::TypeSuffix>)?
298
318
  end
299
319
 
300
320
  rule UnsignedIntegerType
@@ -1,3 +1,3 @@
1
1
  module WebIDL
2
- VERSION = "0.1.0"
2
+ VERSION = "0.1.1"
3
3
  end
@@ -1,18 +1,18 @@
1
1
  interface HTMLCollection {
2
2
  readonly attribute unsigned long length;
3
- caller getter Element item(in unsigned long index);
4
- caller getter object namedItem(in DOMString name); // only returns Element
3
+ caller getter Element? item(in unsigned long index);
4
+ caller getter object? namedItem(in DOMString name); // only returns Element
5
5
  };
6
6
 
7
7
  interface HTMLAllCollection : HTMLCollection {
8
8
  // inherits length and item()
9
- caller getter object namedItem(in DOMString name); // overrides inherited namedItem()
9
+ caller getter object? namedItem(in DOMString name); // overrides inherited namedItem()
10
10
  HTMLAllCollection tags(in DOMString tagName);
11
11
  };
12
12
 
13
13
  interface HTMLFormControlsCollection : HTMLCollection {
14
14
  // inherits length and item()
15
- caller getter object namedItem(in DOMString name); // overrides inherited namedItem()
15
+ caller getter object? namedItem(in DOMString name); // overrides inherited namedItem()
16
16
  };
17
17
 
18
18
  interface RadioNodeList : NodeList {
@@ -22,8 +22,8 @@ interface RadioNodeList : NodeList {
22
22
  interface HTMLOptionsCollection : HTMLCollection {
23
23
  // inherits item()
24
24
  attribute unsigned long length; // overrides inherited length
25
- caller getter object namedItem(in DOMString name); // overrides inherited namedItem()
26
- void add(in HTMLElement element, in optional HTMLElement before);
25
+ caller getter object? namedItem(in DOMString name); // overrides inherited namedItem()
26
+ void add(in HTMLElement element, in optional HTMLElement? before);
27
27
  void add(in HTMLElement element, in long before);
28
28
  void remove(in long index);
29
29
  attribute long selectedIndex;
@@ -31,19 +31,19 @@ interface HTMLOptionsCollection : HTMLCollection {
31
31
 
32
32
  interface HTMLPropertiesCollection : HTMLCollection {
33
33
  // inherits length and item()
34
- caller getter PropertyNodeList namedItem(in DOMString name); // overrides inherited namedItem()
34
+ caller getter PropertyNodeList? namedItem(in DOMString name); // overrides inherited namedItem()
35
35
  readonly attribute DOMStringList names;
36
36
  };
37
37
 
38
38
  typedef sequence<any> PropertyValueArray;
39
39
 
40
40
  interface PropertyNodeList : NodeList {
41
- readonly attribute PropertyValueArray values;
41
+ PropertyValueArray getValues();
42
42
  };
43
43
 
44
44
  interface DOMTokenList {
45
45
  readonly attribute unsigned long length;
46
- getter DOMString item(in unsigned long index);
46
+ getter DOMString? item(in unsigned long index);
47
47
  boolean contains(in DOMString token);
48
48
  void add(in DOMString token);
49
49
  void remove(in DOMString token);
@@ -55,6 +55,9 @@ interface DOMSettableTokenList : DOMTokenList {
55
55
  attribute DOMString value;
56
56
  };
57
57
 
58
+ [NoInterfaceObject]
59
+ interface Transferable { };
60
+
58
61
  interface DOMStringMap {
59
62
  getter DOMString (in DOMString name);
60
63
  setter void (in DOMString name, in DOMString value);
@@ -78,7 +81,7 @@ interface DOMElementMap {
78
81
  [OverrideBuiltins]
79
82
  interface HTMLDocument {
80
83
  // resource metadata management
81
- [PutForwards=href] readonly attribute Location location;
84
+ [PutForwards=href] readonly attribute Location? location;
82
85
  readonly attribute DOMString URL;
83
86
  attribute DOMString domain;
84
87
  readonly attribute DOMString referrer;
@@ -94,8 +97,8 @@ interface HTMLDocument {
94
97
  getter any (in DOMString name);
95
98
  attribute DOMString title;
96
99
  attribute DOMString dir;
97
- attribute HTMLElement body;
98
- readonly attribute HTMLHeadElement head;
100
+ attribute HTMLElement? body;
101
+ readonly attribute HTMLHeadElement? head;
99
102
  readonly attribute HTMLCollection images;
100
103
  readonly attribute HTMLCollection embeds;
101
104
  readonly attribute HTMLCollection plugins;
@@ -104,7 +107,7 @@ interface HTMLDocument {
104
107
  readonly attribute HTMLCollection scripts;
105
108
  NodeList getElementsByName(in DOMString elementName);
106
109
  NodeList getElementsByClassName(in DOMString classNames);
107
- NodeList getItems(in optional DOMString typeNames); // microdata
110
+ NodeList getItems(in optional DOMString typeNames); // microdata
108
111
  readonly attribute DOMElementMap cssElementMap;
109
112
 
110
113
  // dynamic markup insertion
@@ -116,8 +119,8 @@ interface HTMLDocument {
116
119
  void writeln(in DOMString... text);
117
120
 
118
121
  // user interaction
119
- readonly attribute WindowProxy defaultView;
120
- readonly attribute Element activeElement;
122
+ readonly attribute WindowProxy? defaultView;
123
+ readonly attribute Element? activeElement;
121
124
  boolean hasFocus();
122
125
  attribute DOMString designMode;
123
126
  boolean execCommand(in DOMString commandId);
@@ -131,62 +134,60 @@ interface HTMLDocument {
131
134
  readonly attribute HTMLCollection commands;
132
135
 
133
136
  // event handler IDL attributes
134
- attribute Function onabort;
135
- attribute Function onblur;
136
- attribute Function oncanplay;
137
- attribute Function oncanplaythrough;
138
- attribute Function onchange;
139
- attribute Function onclick;
140
- attribute Function oncontextmenu;
141
-
142
- attribute Function oncuechange;
143
-
144
- attribute Function ondblclick;
145
- attribute Function ondrag;
146
- attribute Function ondragend;
147
- attribute Function ondragenter;
148
- attribute Function ondragleave;
149
- attribute Function ondragover;
150
- attribute Function ondragstart;
151
- attribute Function ondrop;
152
- attribute Function ondurationchange;
153
- attribute Function onemptied;
154
- attribute Function onended;
155
- attribute Function onerror;
156
- attribute Function onfocus;
157
- attribute Function oninput;
158
- attribute Function oninvalid;
159
- attribute Function onkeydown;
160
- attribute Function onkeypress;
161
- attribute Function onkeyup;
162
- attribute Function onload;
163
- attribute Function onloadeddata;
164
- attribute Function onloadedmetadata;
165
- attribute Function onloadstart;
166
- attribute Function onmousedown;
167
- attribute Function onmousemove;
168
- attribute Function onmouseout;
169
- attribute Function onmouseover;
170
- attribute Function onmouseup;
171
- attribute Function onmousewheel;
172
- attribute Function onpause;
173
- attribute Function onplay;
174
- attribute Function onplaying;
175
- attribute Function onprogress;
176
- attribute Function onratechange;
177
- attribute Function onreadystatechange;
178
- attribute Function onreset;
179
- attribute Function onscroll;
180
- attribute Function onseeked;
181
- attribute Function onseeking;
182
- attribute Function onselect;
183
- attribute Function onshow;
184
- attribute Function onstalled;
185
- attribute Function onsubmit;
186
- attribute Function onsuspend;
187
- attribute Function ontimeupdate;
188
- attribute Function onvolumechange;
189
- attribute Function onwaiting;
137
+ attribute Function? onabort;
138
+ attribute Function? onblur;
139
+ attribute Function? oncanplay;
140
+ attribute Function? oncanplaythrough;
141
+ attribute Function? onchange;
142
+ attribute Function? onclick;
143
+ attribute Function? oncontextmenu;
144
+ attribute Function? oncuechange;
145
+ attribute Function? ondblclick;
146
+ attribute Function? ondrag;
147
+ attribute Function? ondragend;
148
+ attribute Function? ondragenter;
149
+ attribute Function? ondragleave;
150
+ attribute Function? ondragover;
151
+ attribute Function? ondragstart;
152
+ attribute Function? ondrop;
153
+ attribute Function? ondurationchange;
154
+ attribute Function? onemptied;
155
+ attribute Function? onended;
156
+ attribute Function? onerror;
157
+ attribute Function? onfocus;
158
+ attribute Function? oninput;
159
+ attribute Function? oninvalid;
160
+ attribute Function? onkeydown;
161
+ attribute Function? onkeypress;
162
+ attribute Function? onkeyup;
163
+ attribute Function? onload;
164
+ attribute Function? onloadeddata;
165
+ attribute Function? onloadedmetadata;
166
+ attribute Function? onloadstart;
167
+ attribute Function? onmousedown;
168
+ attribute Function? onmousemove;
169
+ attribute Function? onmouseout;
170
+ attribute Function? onmouseover;
171
+ attribute Function? onmouseup;
172
+ attribute Function? onmousewheel;
173
+ attribute Function? onpause;
174
+ attribute Function? onplay;
175
+ attribute Function? onplaying;
176
+ attribute Function? onprogress;
177
+ attribute Function? onratechange;
178
+ attribute Function? onreadystatechange;
179
+ attribute Function? onreset;
180
+ attribute Function? onscroll;
181
+ attribute Function? onseeked;
182
+ attribute Function? onseeking;
183
+ attribute Function? onselect;
184
+ attribute Function? onshow;
185
+ attribute Function? onstalled;
186
+ attribute Function? onsubmit;
187
+ attribute Function? onsuspend;
188
+ attribute Function? ontimeupdate;
189
+ attribute Function? onvolumechange;
190
+ attribute Function? onwaiting;
190
191
  };
191
192
  Document implements HTMLDocument;
192
193
 
@@ -219,7 +220,7 @@ interface HTMLElement : Element {
219
220
  readonly attribute DOMTokenList classList;
220
221
  readonly attribute DOMStringMap dataset;
221
222
 
222
- // microdata
223
+ // microdata
223
224
  attribute boolean itemScope;
224
225
  attribute DOMString itemType;
225
226
  attribute DOMString itemId;
@@ -237,79 +238,78 @@ interface HTMLElement : Element {
237
238
  attribute DOMString accessKey;
238
239
  readonly attribute DOMString accessKeyLabel;
239
240
  attribute boolean draggable;
240
- [PutForwards=value] attribute DOMSettableTokenList dropzone;
241
+ [PutForwards=value] readonly attribute DOMSettableTokenList dropzone;
241
242
  attribute DOMString contentEditable;
242
243
  readonly attribute boolean isContentEditable;
243
- attribute HTMLMenuElement contextMenu;
244
+ attribute HTMLMenuElement? contextMenu;
244
245
  attribute boolean spellcheck;
245
246
 
246
247
  // command API
247
- readonly attribute DOMString commandType;
248
- readonly attribute DOMString label;
249
- readonly attribute DOMString icon;
250
- readonly attribute boolean disabled;
251
- readonly attribute boolean checked;
248
+ readonly attribute DOMString? commandType;
249
+ readonly attribute DOMString? commandLabel;
250
+ readonly attribute DOMString? commandIcon;
251
+ readonly attribute boolean? commandHidden;
252
+ readonly attribute boolean? commandDisabled;
253
+ readonly attribute boolean? commandChecked;
252
254
 
253
255
  // styling
254
256
  readonly attribute CSSStyleDeclaration style;
255
257
 
256
258
  // event handler IDL attributes
257
- attribute Function onabort;
258
- attribute Function onblur;
259
- attribute Function oncanplay;
260
- attribute Function oncanplaythrough;
261
- attribute Function onchange;
262
- attribute Function onclick;
263
- attribute Function oncontextmenu;
264
-
265
- attribute Function oncuechange;
266
-
267
- attribute Function ondblclick;
268
- attribute Function ondrag;
269
- attribute Function ondragend;
270
- attribute Function ondragenter;
271
- attribute Function ondragleave;
272
- attribute Function ondragover;
273
- attribute Function ondragstart;
274
- attribute Function ondrop;
275
- attribute Function ondurationchange;
276
- attribute Function onemptied;
277
- attribute Function onended;
278
- attribute Function onerror;
279
- attribute Function onfocus;
280
- attribute Function oninput;
281
- attribute Function oninvalid;
282
- attribute Function onkeydown;
283
- attribute Function onkeypress;
284
- attribute Function onkeyup;
285
- attribute Function onload;
286
- attribute Function onloadeddata;
287
- attribute Function onloadedmetadata;
288
- attribute Function onloadstart;
289
- attribute Function onmousedown;
290
- attribute Function onmousemove;
291
- attribute Function onmouseout;
292
- attribute Function onmouseover;
293
- attribute Function onmouseup;
294
- attribute Function onmousewheel;
295
- attribute Function onpause;
296
- attribute Function onplay;
297
- attribute Function onplaying;
298
- attribute Function onprogress;
299
- attribute Function onratechange;
300
- attribute Function onreadystatechange;
301
- attribute Function onreset;
302
- attribute Function onscroll;
303
- attribute Function onseeked;
304
- attribute Function onseeking;
305
- attribute Function onselect;
306
- attribute Function onshow;
307
- attribute Function onstalled;
308
- attribute Function onsubmit;
309
- attribute Function onsuspend;
310
- attribute Function ontimeupdate;
311
- attribute Function onvolumechange;
312
- attribute Function onwaiting;
259
+ attribute Function? onabort;
260
+ attribute Function? onblur;
261
+ attribute Function? oncanplay;
262
+ attribute Function? oncanplaythrough;
263
+ attribute Function? onchange;
264
+ attribute Function? onclick;
265
+ attribute Function? oncontextmenu;
266
+ attribute Function? oncuechange;
267
+ attribute Function? ondblclick;
268
+ attribute Function? ondrag;
269
+ attribute Function? ondragend;
270
+ attribute Function? ondragenter;
271
+ attribute Function? ondragleave;
272
+ attribute Function? ondragover;
273
+ attribute Function? ondragstart;
274
+ attribute Function? ondrop;
275
+ attribute Function? ondurationchange;
276
+ attribute Function? onemptied;
277
+ attribute Function? onended;
278
+ attribute Function? onerror;
279
+ attribute Function? onfocus;
280
+ attribute Function? oninput;
281
+ attribute Function? oninvalid;
282
+ attribute Function? onkeydown;
283
+ attribute Function? onkeypress;
284
+ attribute Function? onkeyup;
285
+ attribute Function? onload;
286
+ attribute Function? onloadeddata;
287
+ attribute Function? onloadedmetadata;
288
+ attribute Function? onloadstart;
289
+ attribute Function? onmousedown;
290
+ attribute Function? onmousemove;
291
+ attribute Function? onmouseout;
292
+ attribute Function? onmouseover;
293
+ attribute Function? onmouseup;
294
+ attribute Function? onmousewheel;
295
+ attribute Function? onpause;
296
+ attribute Function? onplay;
297
+ attribute Function? onplaying;
298
+ attribute Function? onprogress;
299
+ attribute Function? onratechange;
300
+ attribute Function? onreadystatechange;
301
+ attribute Function? onreset;
302
+ attribute Function? onscroll;
303
+ attribute Function? onseeked;
304
+ attribute Function? onseeking;
305
+ attribute Function? onselect;
306
+ attribute Function? onshow;
307
+ attribute Function? onstalled;
308
+ attribute Function? onsubmit;
309
+ attribute Function? onsuspend;
310
+ attribute Function? ontimeupdate;
311
+ attribute Function? onvolumechange;
312
+ attribute Function? onwaiting;
313
313
  };
314
314
 
315
315
  interface HTMLUnknownElement : HTMLElement { };
@@ -363,26 +363,26 @@ interface HTMLScriptElement : HTMLElement {
363
363
  };
364
364
 
365
365
  interface HTMLBodyElement : HTMLElement {
366
- attribute Function onafterprint;
367
- attribute Function onbeforeprint;
368
- attribute Function onbeforeunload;
369
- attribute Function onblur;
370
- attribute Function onerror;
371
- attribute Function onfocus;
372
- attribute Function onhashchange;
373
- attribute Function onload;
374
- attribute Function onmessage;
375
- attribute Function onoffline;
376
- attribute Function ononline;
377
- attribute Function onpopstate;
378
- attribute Function onpagehide;
379
- attribute Function onpageshow;
380
- attribute Function onredo;
381
- attribute Function onresize;
382
- attribute Function onscroll;
383
- attribute Function onstorage;
384
- attribute Function onundo;
385
- attribute Function onunload;
366
+ attribute Function? onafterprint;
367
+ attribute Function? onbeforeprint;
368
+ attribute Function? onbeforeunload;
369
+ attribute Function? onblur;
370
+ attribute Function? onerror;
371
+ attribute Function? onfocus;
372
+ attribute Function? onhashchange;
373
+ attribute Function? onload;
374
+ attribute Function? onmessage;
375
+ attribute Function? onoffline;
376
+ attribute Function? ononline;
377
+ attribute Function? onpopstate;
378
+ attribute Function? onpagehide;
379
+ attribute Function? onpageshow;
380
+ attribute Function? onredo;
381
+ attribute Function? onresize;
382
+ attribute Function? onscroll;
383
+ attribute Function? onstorage;
384
+ attribute Function? onundo;
385
+ attribute Function? onunload;
386
386
  };
387
387
 
388
388
  interface HTMLHeadingElement : HTMLElement {};
@@ -440,7 +440,7 @@ interface HTMLAnchorElement : HTMLElement {
440
440
  interface HTMLTimeElement : HTMLElement {
441
441
  attribute DOMString dateTime;
442
442
  attribute boolean pubDate;
443
- readonly attribute Date valueAsDate;
443
+ readonly attribute Date? valueAsDate;
444
444
  };
445
445
 
446
446
  interface HTMLSpanElement : HTMLElement {};
@@ -458,6 +458,7 @@ interface HTMLModElement : HTMLElement {
458
458
  interface HTMLImageElement : HTMLElement {
459
459
  attribute DOMString alt;
460
460
  attribute DOMString src;
461
+ attribute DOMString crossOrigin;
461
462
  attribute DOMString useMap;
462
463
  attribute boolean isMap;
463
464
  attribute unsigned long width;
@@ -475,8 +476,8 @@ interface HTMLIFrameElement : HTMLElement {
475
476
  attribute boolean seamless;
476
477
  attribute DOMString width;
477
478
  attribute DOMString height;
478
- readonly attribute Document contentDocument;
479
- readonly attribute WindowProxy contentWindow;
479
+ readonly attribute Document? contentDocument;
480
+ readonly attribute WindowProxy? contentWindow;
480
481
  };
481
482
 
482
483
  interface HTMLEmbedElement : HTMLElement {
@@ -489,13 +490,14 @@ interface HTMLEmbedElement : HTMLElement {
489
490
  interface HTMLObjectElement : HTMLElement {
490
491
  attribute DOMString data;
491
492
  attribute DOMString type;
493
+ attribute boolean typeMustMatch;
492
494
  attribute DOMString name;
493
495
  attribute DOMString useMap;
494
- readonly attribute HTMLFormElement form;
496
+ readonly attribute HTMLFormElement? form;
495
497
  attribute DOMString width;
496
498
  attribute DOMString height;
497
- readonly attribute Document contentDocument;
498
- readonly attribute WindowProxy contentWindow;
499
+ readonly attribute Document? contentDocument;
500
+ readonly attribute WindowProxy? contentWindow;
499
501
 
500
502
  readonly attribute boolean willValidate;
501
503
  readonly attribute ValidityState validity;
@@ -515,7 +517,6 @@ interface HTMLVideoElement : HTMLMediaElement {
515
517
  readonly attribute unsigned long videoWidth;
516
518
  readonly attribute unsigned long videoHeight;
517
519
  attribute DOMString poster;
518
- [PutForwards=value] attribute DOMSettableTokenList audio;
519
520
  };
520
521
 
521
522
  [NamedConstructor=Audio(),
@@ -541,11 +542,12 @@ interface HTMLTrackElement : HTMLElement {
541
542
  interface HTMLMediaElement : HTMLElement {
542
543
 
543
544
  // error state
544
- readonly attribute MediaError error;
545
+ readonly attribute MediaError? error;
545
546
 
546
547
  // network state
547
548
  attribute DOMString src;
548
549
  readonly attribute DOMString currentSrc;
550
+ attribute DOMString crossOrigin;
549
551
  const unsigned short NETWORK_EMPTY = 0;
550
552
  const unsigned short NETWORK_IDLE = 1;
551
553
  const unsigned short NETWORK_LOADING = 2;
@@ -583,21 +585,19 @@ interface HTMLMediaElement : HTMLElement {
583
585
 
584
586
  // media controller
585
587
  attribute DOMString mediaGroup;
586
- attribute MediaController controller;
588
+ attribute MediaController? controller;
587
589
 
588
590
  // controls
589
591
  attribute boolean controls;
590
592
  attribute double volume;
591
593
  attribute boolean muted;
594
+ attribute boolean defaultMuted;
592
595
 
593
596
  // tracks
594
-
595
- readonly attribute MultipleTrackList audioTracks;
596
- readonly attribute ExclusiveTrackList videoTracks;
597
-
598
- readonly attribute TextTrack[] textTracks;
597
+ readonly attribute AudioTrackList audioTracks;
598
+ readonly attribute VideoTrackList videoTracks;
599
+ readonly attribute TextTrackList textTracks;
599
600
  MutableTextTrack addTextTrack(in DOMString kind, in optional DOMString label, in optional DOMString language);
600
-
601
601
  };
602
602
 
603
603
  interface MediaError {
@@ -608,23 +608,35 @@ interface MediaError {
608
608
  readonly attribute unsigned short code;
609
609
  };
610
610
 
611
- interface TrackList {
611
+ interface AudioTrackList {
612
612
  readonly attribute unsigned long length;
613
- DOMString getName(in unsigned long index);
614
- DOMString getLanguage(in unsigned long index);
613
+ getter AudioTrack (in unsigned long index);
614
+ AudioTrack? getTrackById(in DOMString id);
615
+ attribute Function? onchange;
616
+ };
615
617
 
616
- attribute Function onchange;
618
+ interface AudioTrack {
619
+ readonly attribute DOMString id;
620
+ readonly attribute DOMString kind;
621
+ readonly attribute DOMString label;
622
+ readonly attribute DOMString language;
623
+ attribute boolean enabled;
617
624
  };
618
625
 
619
- interface MultipleTrackList : TrackList {
620
- boolean isEnabled(in unsigned long index);
621
- void enable(in unsigned long index);
622
- void disable(in unsigned long index);
626
+ interface VideoTrackList {
627
+ readonly attribute unsigned long length;
628
+ getter VideoTrack (in unsigned long index);
629
+ VideoTrack? getTrackById(in DOMString id);
630
+ readonly attribute long selectedIndex;
631
+ attribute Function? onchange;
623
632
  };
624
633
 
625
- interface ExclusiveTrackList : TrackList {
626
- readonly attribute unsigned long selectedIndex;
627
- void select(in unsigned long index);
634
+ interface VideoTrack {
635
+ readonly attribute DOMString id;
636
+ readonly attribute DOMString kind;
637
+ readonly attribute DOMString label;
638
+ readonly attribute DOMString language;
639
+ attribute boolean selected;
628
640
  };
629
641
 
630
642
  [Constructor]
@@ -635,6 +647,7 @@ interface MediaController {
635
647
  attribute double currentTime;
636
648
 
637
649
  readonly attribute boolean paused;
650
+ readonly attribute TimeRanges played;
638
651
  void play();
639
652
  void pause();
640
653
 
@@ -644,12 +657,21 @@ interface MediaController {
644
657
  attribute double volume;
645
658
  attribute boolean muted;
646
659
 
647
- attribute Function ondurationchange;
648
- attribute Function ontimeupdate;
649
- attribute Function onplay;
650
- attribute Function onpause;
651
- attribute Function onratechange;
652
- attribute Function onvolumechange;
660
+ attribute Function? onemptied;
661
+ attribute Function? onloadedmetadata;
662
+ attribute Function? onloadeddata;
663
+ attribute Function? oncanplay;
664
+ attribute Function? oncanplaythrough;
665
+ attribute Function? onplaying;
666
+ attribute Function? onended;
667
+ attribute Function? onwaiting;
668
+
669
+ attribute Function? ondurationchange;
670
+ attribute Function? ontimeupdate;
671
+ attribute Function? onplay;
672
+ attribute Function? onpause;
673
+ attribute Function? onratechange;
674
+ attribute Function? onvolumechange;
653
675
  };
654
676
 
655
677
  interface TextTrack {
@@ -662,21 +684,23 @@ interface TextTrack {
662
684
  const unsigned short LOADED = 2;
663
685
  const unsigned short ERROR = 3;
664
686
  readonly attribute unsigned short readyState;
665
- attribute Function onload;
666
- attribute Function onerror;
687
+ attribute Function? onload;
688
+ attribute Function? onerror;
667
689
 
668
690
  const unsigned short OFF = 0;
669
691
  const unsigned short HIDDEN = 1;
670
692
  const unsigned short SHOWING = 2;
671
693
  attribute unsigned short mode;
672
694
 
673
- readonly attribute TextTrackCueList cues;
674
- readonly attribute TextTrackCueList activeCues;
695
+ readonly attribute TextTrackCueList? cues;
696
+ readonly attribute TextTrackCueList? activeCues;
675
697
 
676
- attribute Function oncuechange;
698
+ attribute Function? oncuechange;
677
699
  };
678
700
  TextTrack implements EventTarget;
679
701
 
702
+ typedef TextTrack[] TextTrackList;
703
+
680
704
  interface MutableTextTrack : TextTrack {
681
705
  void addCue(in TextTrackCue cue);
682
706
  void removeCue(in TextTrackCue cue);
@@ -685,7 +709,7 @@ interface MutableTextTrack : TextTrack {
685
709
  interface TextTrackCueList {
686
710
  readonly attribute unsigned long length;
687
711
  getter TextTrackCue (in unsigned long index);
688
- TextTrackCue getCueById(in DOMString id);
712
+ TextTrackCue? getCueById(in DOMString id);
689
713
  };
690
714
 
691
715
 
@@ -693,7 +717,7 @@ interface TextTrackCueList {
693
717
  [Constructor(in DOMString id, in double startTime, in double endTime, in DOMString text, in optional DOMString settings, in optional boolean pauseOnExit)]
694
718
 
695
719
  interface TextTrackCue {
696
- readonly attribute TextTrack track;
720
+ readonly attribute TextTrack? track;
697
721
  readonly attribute DOMString id;
698
722
 
699
723
  readonly attribute double startTime;
@@ -712,8 +736,8 @@ interface TextTrackCue {
712
736
  DOMString getCueAsSource();
713
737
  DocumentFragment getCueAsHTML();
714
738
 
715
- attribute Function onenter;
716
- attribute Function onexit;
739
+ attribute Function? onenter;
740
+ attribute Function? onexit;
717
741
  };
718
742
  TextTrackCue implements EventTarget;
719
743
 
@@ -728,8 +752,9 @@ interface HTMLCanvasElement : HTMLElement {
728
752
  attribute unsigned long height;
729
753
 
730
754
  DOMString toDataURL(in optional DOMString type, in any... args);
755
+ void toBlob(in FileCallback? callback, in optional DOMString type, in any... args);
731
756
 
732
- object getContext(in DOMString contextId, in any... args);
757
+ object? getContext(in DOMString contextId, in any... args);
733
758
  };
734
759
 
735
760
  interface CanvasRenderingContext2D {
@@ -790,12 +815,12 @@ interface CanvasRenderingContext2D {
790
815
  void arc(in double x, in double y, in double radius, in double startAngle, in double endAngle, in optional boolean anticlockwise);
791
816
  void fill();
792
817
  void stroke();
818
+ void drawSystemFocusRing(in Element element);
819
+ boolean drawCustomFocusRing(in Element element);
820
+ void scrollPathIntoView();
793
821
  void clip();
794
822
  boolean isPointInPath(in double x, in double y);
795
823
 
796
- // focus management
797
- boolean drawFocusRing(in Element element, in double xCaret, in double yCaret, in optional boolean canDrawCustom);
798
-
799
824
  // text
800
825
  attribute DOMString font; // (default 10px sans-serif)
801
826
  attribute DOMString textAlign; // "start", "end", "left", "right", "center" (default: "start")
@@ -805,18 +830,22 @@ interface CanvasRenderingContext2D {
805
830
  TextMetrics measureText(in DOMString text);
806
831
 
807
832
  // drawing images
808
- void drawImage(in HTMLImageElement image, in double dx, in double dy, in optional double dw, in double dh);
833
+ void drawImage(in HTMLImageElement image, in double dx, in double dy);
834
+ void drawImage(in HTMLImageElement image, in double dx, in double dy, in double dw, in double dh);
809
835
  void drawImage(in HTMLImageElement image, in double sx, in double sy, in double sw, in double sh, in double dx, in double dy, in double dw, in double dh);
810
- void drawImage(in HTMLCanvasElement image, in double dx, in double dy, in optional double dw, in double dh);
836
+ void drawImage(in HTMLCanvasElement image, in double dx, in double dy);
837
+ void drawImage(in HTMLCanvasElement image, in double dx, in double dy, in double dw, in double dh);
811
838
  void drawImage(in HTMLCanvasElement image, in double sx, in double sy, in double sw, in double sh, in double dx, in double dy, in double dw, in double dh);
812
- void drawImage(in HTMLVideoElement image, in double dx, in double dy, in optional double dw, in double dh);
839
+ void drawImage(in HTMLVideoElement image, in double dx, in double dy);
840
+ void drawImage(in HTMLVideoElement image, in double dx, in double dy, in double dw, in double dh);
813
841
  void drawImage(in HTMLVideoElement image, in double sx, in double sy, in double sw, in double sh, in double dx, in double dy, in double dw, in double dh);
814
842
 
815
843
  // pixel manipulation
816
844
  ImageData createImageData(in double sw, in double sh);
817
845
  ImageData createImageData(in ImageData imagedata);
818
846
  ImageData getImageData(in double sx, in double sy, in double sw, in double sh);
819
- void putImageData(in ImageData imagedata, in double dx, in double dy, in optional double dirtyX, in double dirtyY, in double dirtyWidth, in double dirtyHeight);
847
+ void putImageData(in ImageData imagedata, in double dx, in double dy);
848
+ void putImageData(in ImageData imagedata, in double dx, in double dy, in double dirtyX, in double dirtyY, in double dirtyWidth, in double dirtyHeight);
820
849
  };
821
850
 
822
851
  interface CanvasGradient {
@@ -876,13 +905,13 @@ interface HTMLAreaElement : HTMLElement {
876
905
  };
877
906
 
878
907
  interface HTMLTableElement : HTMLElement {
879
- attribute HTMLTableCaptionElement caption;
908
+ attribute HTMLTableCaptionElement? caption;
880
909
  HTMLElement createCaption();
881
910
  void deleteCaption();
882
- attribute HTMLTableSectionElement tHead;
911
+ attribute HTMLTableSectionElement? tHead;
883
912
  HTMLElement createTHead();
884
913
  void deleteTHead();
885
- attribute HTMLTableSectionElement tFoot;
914
+ attribute HTMLTableSectionElement? tFoot;
886
915
  HTMLElement createTFoot();
887
916
  void deleteTFoot();
888
917
  readonly attribute HTMLCollection tBodies;
@@ -890,7 +919,7 @@ interface HTMLTableElement : HTMLElement {
890
919
  readonly attribute HTMLCollection rows;
891
920
  HTMLElement insertRow(in optional long index);
892
921
  void deleteRow(in long index);
893
- attribute DOMString summary;
922
+ attribute DOMString border;
894
923
  };
895
924
 
896
925
  interface HTMLTableCaptionElement : HTMLElement {};
@@ -950,7 +979,7 @@ interface HTMLFormElement : HTMLElement {
950
979
 
951
980
  interface HTMLFieldSetElement : HTMLElement {
952
981
  attribute boolean disabled;
953
- readonly attribute HTMLFormElement form;
982
+ readonly attribute HTMLFormElement? form;
954
983
  attribute DOMString name;
955
984
 
956
985
  readonly attribute DOMString type;
@@ -965,13 +994,13 @@ interface HTMLFieldSetElement : HTMLElement {
965
994
  };
966
995
 
967
996
  interface HTMLLegendElement : HTMLElement {
968
- readonly attribute HTMLFormElement form;
997
+ readonly attribute HTMLFormElement? form;
969
998
  };
970
999
 
971
1000
  interface HTMLLabelElement : HTMLElement {
972
- readonly attribute HTMLFormElement form;
1001
+ readonly attribute HTMLFormElement? form;
973
1002
  attribute DOMString htmlFor;
974
- readonly attribute HTMLElement control;
1003
+ readonly attribute HTMLElement? control;
975
1004
  };
976
1005
 
977
1006
  interface HTMLInputElement : HTMLElement {
@@ -983,8 +1012,8 @@ interface HTMLInputElement : HTMLElement {
983
1012
  attribute boolean checked;
984
1013
  attribute DOMString dirName;
985
1014
  attribute boolean disabled;
986
- readonly attribute HTMLFormElement form;
987
- readonly attribute FileList files;
1015
+ readonly attribute HTMLFormElement? form;
1016
+ readonly attribute FileList? files;
988
1017
  attribute DOMString formAction;
989
1018
  attribute DOMString formEnctype;
990
1019
  attribute DOMString formMethod;
@@ -992,7 +1021,7 @@ interface HTMLInputElement : HTMLElement {
992
1021
  attribute DOMString formTarget;
993
1022
  attribute DOMString height;
994
1023
  attribute boolean indeterminate;
995
- readonly attribute HTMLElement list;
1024
+ readonly attribute HTMLElement? list;
996
1025
  attribute DOMString max;
997
1026
  attribute long maxLength;
998
1027
  attribute DOMString min;
@@ -1010,7 +1039,7 @@ interface HTMLInputElement : HTMLElement {
1010
1039
  attribute DOMString value;
1011
1040
  attribute Date valueAsDate;
1012
1041
  attribute double valueAsNumber;
1013
- readonly attribute HTMLOptionElement selectedOption;
1042
+ readonly attribute HTMLOptionElement? selectedOption;
1014
1043
  attribute DOMString width;
1015
1044
 
1016
1045
  void stepUp(in optional long n);
@@ -1027,13 +1056,14 @@ interface HTMLInputElement : HTMLElement {
1027
1056
  void select();
1028
1057
  attribute unsigned long selectionStart;
1029
1058
  attribute unsigned long selectionEnd;
1030
- void setSelectionRange(in unsigned long start, in unsigned long end);
1059
+ attribute DOMString selectionDirection;
1060
+ void setSelectionRange(in unsigned long start, in unsigned long end, in optional DOMString direction);
1031
1061
  };
1032
1062
 
1033
1063
  interface HTMLButtonElement : HTMLElement {
1034
1064
  attribute boolean autofocus;
1035
1065
  attribute boolean disabled;
1036
- readonly attribute HTMLFormElement form;
1066
+ readonly attribute HTMLFormElement? form;
1037
1067
  attribute DOMString formAction;
1038
1068
  attribute DOMString formEnctype;
1039
1069
  attribute DOMString formMethod;
@@ -1055,7 +1085,7 @@ interface HTMLButtonElement : HTMLElement {
1055
1085
  interface HTMLSelectElement : HTMLElement {
1056
1086
  attribute boolean autofocus;
1057
1087
  attribute boolean disabled;
1058
- readonly attribute HTMLFormElement form;
1088
+ readonly attribute HTMLFormElement? form;
1059
1089
  attribute boolean multiple;
1060
1090
  attribute DOMString name;
1061
1091
  attribute boolean required;
@@ -1067,7 +1097,7 @@ interface HTMLSelectElement : HTMLElement {
1067
1097
  attribute unsigned long length;
1068
1098
  getter any item(in unsigned long index);
1069
1099
  any namedItem(in DOMString name);
1070
- void add(in HTMLElement element, in optional HTMLElement before);
1100
+ void add(in HTMLElement element, in optional HTMLElement? before);
1071
1101
  void add(in HTMLElement element, in long before);
1072
1102
  void remove(in long index);
1073
1103
 
@@ -1100,7 +1130,7 @@ interface HTMLOptGroupElement : HTMLElement {
1100
1130
  NamedConstructor=Option(in DOMString text, in DOMString value, in boolean defaultSelected, in boolean selected)]
1101
1131
  interface HTMLOptionElement : HTMLElement {
1102
1132
  attribute boolean disabled;
1103
- readonly attribute HTMLFormElement form;
1133
+ readonly attribute HTMLFormElement? form;
1104
1134
  attribute DOMString label;
1105
1135
  attribute boolean defaultSelected;
1106
1136
  attribute boolean selected;
@@ -1115,7 +1145,7 @@ interface HTMLTextAreaElement : HTMLElement {
1115
1145
  attribute unsigned long cols;
1116
1146
  attribute DOMString dirName;
1117
1147
  attribute boolean disabled;
1118
- readonly attribute HTMLFormElement form;
1148
+ readonly attribute HTMLFormElement? form;
1119
1149
  attribute long maxLength;
1120
1150
  attribute DOMString name;
1121
1151
  attribute DOMString placeholder;
@@ -1140,14 +1170,15 @@ interface HTMLTextAreaElement : HTMLElement {
1140
1170
  void select();
1141
1171
  attribute unsigned long selectionStart;
1142
1172
  attribute unsigned long selectionEnd;
1143
- void setSelectionRange(in unsigned long start, in unsigned long end);
1173
+ attribute DOMString selectionDirection;
1174
+ void setSelectionRange(in unsigned long start, in unsigned long end, in optional DOMString direction);
1144
1175
  };
1145
1176
 
1146
1177
  interface HTMLKeygenElement : HTMLElement {
1147
1178
  attribute boolean autofocus;
1148
1179
  attribute DOMString challenge;
1149
1180
  attribute boolean disabled;
1150
- readonly attribute HTMLFormElement form;
1181
+ readonly attribute HTMLFormElement? form;
1151
1182
  attribute DOMString keytype;
1152
1183
  attribute DOMString name;
1153
1184
 
@@ -1164,7 +1195,7 @@ interface HTMLKeygenElement : HTMLElement {
1164
1195
 
1165
1196
  interface HTMLOutputElement : HTMLElement {
1166
1197
  [PutForwards=value] readonly attribute DOMSettableTokenList htmlFor;
1167
- readonly attribute HTMLFormElement form;
1198
+ readonly attribute HTMLFormElement? form;
1168
1199
  attribute DOMString name;
1169
1200
 
1170
1201
  readonly attribute DOMString type;
@@ -1184,7 +1215,6 @@ interface HTMLProgressElement : HTMLElement {
1184
1215
  attribute double value;
1185
1216
  attribute double max;
1186
1217
  readonly attribute double position;
1187
- readonly attribute HTMLFormElement form;
1188
1218
  readonly attribute NodeList labels;
1189
1219
  };
1190
1220
 
@@ -1195,7 +1225,6 @@ interface HTMLMeterElement : HTMLElement {
1195
1225
  attribute double low;
1196
1226
  attribute double high;
1197
1227
  attribute double optimum;
1198
- readonly attribute HTMLFormElement form;
1199
1228
  readonly attribute NodeList labels;
1200
1229
  };
1201
1230
 
@@ -1229,13 +1258,13 @@ interface HTMLMenuElement : HTMLElement {
1229
1258
  attribute DOMString label;
1230
1259
  };
1231
1260
 
1232
- [ReplaceableNamedProperties]
1261
+ [ReplaceableNamedProperties]
1233
1262
  interface Window {
1234
1263
  // the current browsing context
1235
1264
  readonly attribute WindowProxy window;
1236
1265
  readonly attribute WindowProxy self;
1237
1266
  readonly attribute Document document;
1238
- attribute DOMString name;
1267
+ attribute DOMString name;
1239
1268
  [PutForwards=href] readonly attribute Location location;
1240
1269
  readonly attribute History history;
1241
1270
 
@@ -1247,6 +1276,7 @@ interface Window {
1247
1276
  [Replaceable] readonly attribute BarProp scrollbars;
1248
1277
  [Replaceable] readonly attribute BarProp statusbar;
1249
1278
  [Replaceable] readonly attribute BarProp toolbar;
1279
+ attribute DOMString status;
1250
1280
  void close();
1251
1281
  void stop();
1252
1282
  void focus();
@@ -1258,97 +1288,96 @@ interface Window {
1258
1288
  readonly attribute WindowProxy top;
1259
1289
  attribute WindowProxy opener;
1260
1290
  readonly attribute WindowProxy parent;
1261
- readonly attribute Element frameElement;
1291
+ readonly attribute Element? frameElement;
1262
1292
  WindowProxy open(in optional DOMString url, in optional DOMString target, in optional DOMString features, in optional DOMString replace);
1263
1293
  getter WindowProxy (in unsigned long index);
1264
1294
  getter any (in DOMString name);
1265
1295
 
1266
1296
  // the user agent
1267
- readonly attribute Navigator navigator;
1297
+ readonly attribute Navigator navigator;
1298
+ readonly attribute External external;
1268
1299
  readonly attribute ApplicationCache applicationCache;
1269
1300
 
1270
1301
  // user prompts
1271
1302
  void alert(in DOMString message);
1272
1303
  boolean confirm(in DOMString message);
1273
- DOMString prompt(in DOMString message, in optional DOMString default);
1304
+ DOMString? prompt(in DOMString message, in optional DOMString default);
1274
1305
  void print();
1275
1306
  any showModalDialog(in DOMString url, in optional any argument);
1276
1307
 
1277
1308
  // cross-document messaging
1278
- void postMessage(in any message, in DOMString targetOrigin, in optional MessagePortArray ports);
1309
+ void postMessage(in any message, in DOMString targetOrigin, in optional sequence<Transferable> transfer);
1279
1310
 
1280
1311
  // event handler IDL attributes
1281
- attribute Function onabort;
1282
- attribute Function onafterprint;
1283
- attribute Function onbeforeprint;
1284
- attribute Function onbeforeunload;
1285
- attribute Function onblur;
1286
- attribute Function oncanplay;
1287
- attribute Function oncanplaythrough;
1288
- attribute Function onchange;
1289
- attribute Function onclick;
1290
- attribute Function oncontextmenu;
1291
-
1292
- attribute Function oncuechange;
1293
-
1294
- attribute Function ondblclick;
1295
- attribute Function ondrag;
1296
- attribute Function ondragend;
1297
- attribute Function ondragenter;
1298
- attribute Function ondragleave;
1299
- attribute Function ondragover;
1300
- attribute Function ondragstart;
1301
- attribute Function ondrop;
1302
- attribute Function ondurationchange;
1303
- attribute Function onemptied;
1304
- attribute Function onended;
1305
- attribute Function onerror;
1306
- attribute Function onfocus;
1307
- attribute Function onhashchange;
1308
- attribute Function oninput;
1309
- attribute Function oninvalid;
1310
- attribute Function onkeydown;
1311
- attribute Function onkeypress;
1312
- attribute Function onkeyup;
1313
- attribute Function onload;
1314
- attribute Function onloadeddata;
1315
- attribute Function onloadedmetadata;
1316
- attribute Function onloadstart;
1317
- attribute Function onmessage;
1318
- attribute Function onmousedown;
1319
- attribute Function onmousemove;
1320
- attribute Function onmouseout;
1321
- attribute Function onmouseover;
1322
- attribute Function onmouseup;
1323
- attribute Function onmousewheel;
1324
- attribute Function onoffline;
1325
- attribute Function ononline;
1326
- attribute Function onpause;
1327
- attribute Function onplay;
1328
- attribute Function onplaying;
1329
- attribute Function onpagehide;
1330
- attribute Function onpageshow;
1331
- attribute Function onpopstate;
1332
- attribute Function onprogress;
1333
- attribute Function onratechange;
1334
- attribute Function onreadystatechange;
1335
- attribute Function onredo;
1336
- attribute Function onreset;
1337
- attribute Function onresize;
1338
- attribute Function onscroll;
1339
- attribute Function onseeked;
1340
- attribute Function onseeking;
1341
- attribute Function onselect;
1342
- attribute Function onshow;
1343
- attribute Function onstalled;
1344
- attribute Function onstorage;
1345
- attribute Function onsubmit;
1346
- attribute Function onsuspend;
1347
- attribute Function ontimeupdate;
1348
- attribute Function onundo;
1349
- attribute Function onunload;
1350
- attribute Function onvolumechange;
1351
- attribute Function onwaiting;
1312
+ attribute Function? onabort;
1313
+ attribute Function? onafterprint;
1314
+ attribute Function? onbeforeprint;
1315
+ attribute Function? onbeforeunload;
1316
+ attribute Function? onblur;
1317
+ attribute Function? oncanplay;
1318
+ attribute Function? oncanplaythrough;
1319
+ attribute Function? onchange;
1320
+ attribute Function? onclick;
1321
+ attribute Function? oncontextmenu;
1322
+ attribute Function? oncuechange;
1323
+ attribute Function? ondblclick;
1324
+ attribute Function? ondrag;
1325
+ attribute Function? ondragend;
1326
+ attribute Function? ondragenter;
1327
+ attribute Function? ondragleave;
1328
+ attribute Function? ondragover;
1329
+ attribute Function? ondragstart;
1330
+ attribute Function? ondrop;
1331
+ attribute Function? ondurationchange;
1332
+ attribute Function? onemptied;
1333
+ attribute Function? onended;
1334
+ attribute Function? onerror;
1335
+ attribute Function? onfocus;
1336
+ attribute Function? onhashchange;
1337
+ attribute Function? oninput;
1338
+ attribute Function? oninvalid;
1339
+ attribute Function? onkeydown;
1340
+ attribute Function? onkeypress;
1341
+ attribute Function? onkeyup;
1342
+ attribute Function? onload;
1343
+ attribute Function? onloadeddata;
1344
+ attribute Function? onloadedmetadata;
1345
+ attribute Function? onloadstart;
1346
+ attribute Function? onmessage;
1347
+ attribute Function? onmousedown;
1348
+ attribute Function? onmousemove;
1349
+ attribute Function? onmouseout;
1350
+ attribute Function? onmouseover;
1351
+ attribute Function? onmouseup;
1352
+ attribute Function? onmousewheel;
1353
+ attribute Function? onoffline;
1354
+ attribute Function? ononline;
1355
+ attribute Function? onpause;
1356
+ attribute Function? onplay;
1357
+ attribute Function? onplaying;
1358
+ attribute Function? onpagehide;
1359
+ attribute Function? onpageshow;
1360
+ attribute Function? onpopstate;
1361
+ attribute Function? onprogress;
1362
+ attribute Function? onratechange;
1363
+ attribute Function? onreadystatechange;
1364
+ attribute Function? onredo;
1365
+ attribute Function? onreset;
1366
+ attribute Function? onresize;
1367
+ attribute Function? onscroll;
1368
+ attribute Function? onseeked;
1369
+ attribute Function? onseeking;
1370
+ attribute Function? onselect;
1371
+ attribute Function? onshow;
1372
+ attribute Function? onstalled;
1373
+ attribute Function? onstorage;
1374
+ attribute Function? onsubmit;
1375
+ attribute Function? onsuspend;
1376
+ attribute Function? ontimeupdate;
1377
+ attribute Function? onundo;
1378
+ attribute Function? onunload;
1379
+ attribute Function? onvolumechange;
1380
+ attribute Function? onwaiting;
1352
1381
  };
1353
1382
  Window implements EventTarget;
1354
1383
 
@@ -1372,7 +1401,7 @@ interface Location {
1372
1401
  void replace(in DOMString url);
1373
1402
  void reload();
1374
1403
 
1375
- // URL decomposition IDL attributes
1404
+ // URL decomposition IDL attributes
1376
1405
  attribute DOMString protocol;
1377
1406
  attribute DOMString host;
1378
1407
  attribute DOMString hostname;
@@ -1421,14 +1450,14 @@ interface ApplicationCache {
1421
1450
  void swapCache();
1422
1451
 
1423
1452
  // events
1424
- attribute Function onchecking;
1425
- attribute Function onerror;
1426
- attribute Function onnoupdate;
1427
- attribute Function ondownloading;
1428
- attribute Function onprogress;
1429
- attribute Function onupdateready;
1430
- attribute Function oncached;
1431
- attribute Function onobsolete;
1453
+ attribute Function? onchecking;
1454
+ attribute Function? onerror;
1455
+ attribute Function? onnoupdate;
1456
+ attribute Function? ondownloading;
1457
+ attribute Function? onprogress;
1458
+ attribute Function? onupdateready;
1459
+ attribute Function? oncached;
1460
+ attribute Function? onobsolete;
1432
1461
  };
1433
1462
  ApplicationCache implements EventTarget;
1434
1463
 
@@ -1491,11 +1520,16 @@ interface NavigatorStorageUtils {
1491
1520
  void yieldForStorageUpdates();
1492
1521
  };
1493
1522
 
1523
+ interface External {
1524
+ void AddSearchProvider(in DOMString engineURL);
1525
+ unsigned long IsSearchProviderInstalled(in DOMString engineURL);
1526
+ };
1527
+
1494
1528
  interface DataTransfer {
1495
1529
  attribute DOMString dropEffect;
1496
1530
  attribute DOMString effectAllowed;
1497
1531
 
1498
- readonly attribute DataTransferItems items;
1532
+ readonly attribute DataTransferItemList items;
1499
1533
 
1500
1534
  void setDragImage(in Element image, in long x, in long y);
1501
1535
  void addElement(in Element element);
@@ -1508,21 +1542,21 @@ interface DataTransfer {
1508
1542
  readonly attribute FileList files;
1509
1543
  };
1510
1544
 
1511
- interface DataTransferItems {
1545
+ interface DataTransferItemList {
1512
1546
  readonly attribute unsigned long length;
1513
1547
  getter DataTransferItem (in unsigned long index);
1514
1548
  deleter void (in unsigned long index);
1515
1549
  void clear();
1516
1550
 
1517
- DataTransferItem add(in DOMString data, in DOMString type);
1518
- DataTransferItem add(in File data);
1551
+ DataTransferItem? add(in DOMString data, in DOMString type);
1552
+ DataTransferItem? add(in File data);
1519
1553
  };
1520
1554
 
1521
1555
  interface DataTransferItem {
1522
1556
  readonly attribute DOMString kind;
1523
1557
  readonly attribute DOMString type;
1524
- void getAsString(in FunctionStringCallback callback);
1525
- File getAsFile();
1558
+ void getAsString(in FunctionStringCallback? callback);
1559
+ File? getAsFile();
1526
1560
  };
1527
1561
 
1528
1562
  [Callback=FunctionOnly, NoInterfaceObject]
@@ -1531,9 +1565,9 @@ interface FunctionStringCallback {
1531
1565
  };
1532
1566
 
1533
1567
  interface DragEvent : MouseEvent {
1534
- readonly attribute DataTransfer dataTransfer;
1568
+ readonly attribute DataTransfer? dataTransfer;
1535
1569
 
1536
- void initDragEvent(in DOMString typeArg, in boolean canBubbleArg, in boolean cancelableArg, in any dummyArg, in long detailArg, in long screenXArg, in long screenYArg, in long clientXArg, in long clientYArg, in boolean ctrlKeyArg, in boolean altKeyArg, in boolean shiftKeyArg, in boolean metaKeyArg, in unsigned short buttonArg, in EventTarget relatedTargetArg, in DataTransfer dataTransferArg);
1570
+ void initDragEvent(in DOMString typeArg, in boolean canBubbleArg, in boolean cancelableArg, in any dummyArg, in long detailArg, in long screenXArg, in long screenYArg, in long clientXArg, in long clientYArg, in boolean ctrlKeyArg, in boolean altKeyArg, in boolean shiftKeyArg, in boolean metaKeyArg, in unsigned short buttonArg, in EventTarget relatedTargetArg, in DataTransfer? dataTransferArg);
1537
1571
  };
1538
1572
 
1539
1573
  interface UndoManager {
@@ -1553,13 +1587,13 @@ interface UndoManagerEvent : Event {
1553
1587
 
1554
1588
  [Supplemental, NoInterfaceObject]
1555
1589
  interface NavigatorUserMedia {
1556
- void getUserMedia(in DOMString options, in NavigatorUserMediaSuccessCallback successCallback, in optional NavigatorUserMediaErrorCallback errorCallback);
1590
+ void getUserMedia(in DOMString options, in NavigatorUserMediaSuccessCallback? successCallback, in optional NavigatorUserMediaErrorCallback? errorCallback);
1557
1591
  };
1558
1592
  Navigator implements NavigatorUserMedia;
1559
1593
 
1560
1594
  [Callback=FunctionOnly, NoInterfaceObject]
1561
1595
  interface NavigatorUserMediaSuccessCallback {
1562
- void handleEvent(in GeneratedStream stream);
1596
+ void handleEvent(in LocalMediaStream stream);
1563
1597
  };
1564
1598
 
1565
1599
  [NoInterfaceObject]
@@ -1573,27 +1607,34 @@ interface NavigatorUserMediaErrorCallback {
1573
1607
  void handleEvent(in NavigatorUserMediaError error);
1574
1608
  };
1575
1609
 
1576
- interface Stream {
1610
+ [Constructor(in MediaStream parentStream)]
1611
+ interface MediaStream {
1577
1612
  readonly attribute DOMString label;
1578
- StreamRecorder record();
1613
+ readonly attribute MediaStreamTrackList tracks;
1614
+
1615
+ MediaStreamRecorder record();
1579
1616
 
1580
1617
  const unsigned short LIVE = 1;
1581
1618
  const unsigned short ENDED = 2;
1582
1619
  readonly attribute unsigned short readyState;
1583
- attribute Function onended;
1620
+ attribute Function? onended;
1584
1621
  };
1585
- Stream implements EventTarget;
1622
+ MediaStream implements EventTarget;
1586
1623
 
1587
- interface GeneratedStream : Stream {
1624
+ interface LocalMediaStream : MediaStream {
1588
1625
  void stop();
1626
+ };
1627
+
1628
+ typedef MediaStreamTrack[] MediaStreamTrackList;
1589
1629
 
1590
- // track control
1591
- readonly attribute MultipleTrackList audioTracks;
1592
- readonly attribute ExclusiveTrackList videoTracks;
1630
+ interface MediaStreamTrack {
1631
+ readonly attribute DOMString kind;
1632
+ readonly attribute DOMString label;
1633
+ attribute boolean enabled;
1593
1634
  };
1594
1635
 
1595
- interface StreamRecorder {
1596
- void getRecordedData(in BlobCallback callback);
1636
+ interface MediaStreamRecorder {
1637
+ void getRecordedData(in BlobCallback? callback);
1597
1638
  };
1598
1639
 
1599
1640
  [Callback=FunctionOnly, NoInterfaceObject]
@@ -1603,12 +1644,12 @@ interface BlobCallback {
1603
1644
 
1604
1645
  [Supplemental]
1605
1646
  interface URL {
1606
- static DOMString createObjectURL(in Stream stream);
1647
+ static DOMString createObjectURL(in MediaStream stream);
1607
1648
  };
1608
1649
 
1609
1650
  [Constructor(in DOMString configuration, in SignalingCallback signalingCallback)]
1610
1651
  interface PeerConnection {
1611
- void signalingMessage(in DOMString message);
1652
+ void processSignalingMessage(in DOMString message);
1612
1653
 
1613
1654
  const unsigned short NEW = 0;
1614
1655
  const unsigned short NEGOTIATING = 1;
@@ -1617,21 +1658,19 @@ interface PeerConnection {
1617
1658
  readonly attribute unsigned short readyState;
1618
1659
 
1619
1660
  void send(in DOMString text);
1620
- void addStream(in Stream stream);
1621
- void removeStream(in Stream stream);
1622
- readonly attribute Stream[] localStreams;
1623
- readonly attribute Stream[] remoteStreams;
1661
+ void addStream(in MediaStream stream);
1662
+ void removeStream(in MediaStream stream);
1663
+ readonly attribute MediaStream[] localStreams;
1664
+ readonly attribute MediaStream[] remoteStreams;
1624
1665
 
1625
1666
  void close();
1626
1667
 
1627
1668
  // connection quality information
1628
- attribute Function onconnecting;
1629
- attribute Function onopen;
1630
- attribute Function onerror;
1631
- attribute Function onclose;
1632
- attribute Function onmessage;
1633
- attribute Function onaddstream;
1634
- attribute Function onremovestream;
1669
+ attribute Function? onconnecting;
1670
+ attribute Function? onopen;
1671
+ attribute Function? onmessage;
1672
+ attribute Function? onaddstream;
1673
+ attribute Function? onremovestream;
1635
1674
  };
1636
1675
  PeerConnection implements EventTarget;
1637
1676
 
@@ -1641,17 +1680,17 @@ interface SignalingCallback {
1641
1680
  };
1642
1681
 
1643
1682
  interface StreamEvent : Event {
1644
- readonly attribute Stream stream;
1645
- void initStreamEvent(in DOMString typeArg, in boolean canBubbleArg, in boolean cancelableArg, in Stream streamArg);
1683
+ readonly attribute MediaStream? stream;
1684
+ void initStreamEvent(in DOMString typeArg, in boolean canBubbleArg, in boolean cancelableArg, in MediaStream? streamArg);
1646
1685
  };
1647
1686
 
1648
1687
  interface MessageEvent : Event {
1649
1688
  readonly attribute any data;
1650
1689
  readonly attribute DOMString origin;
1651
1690
  readonly attribute DOMString lastEventId;
1652
- readonly attribute WindowProxy source;
1653
- readonly attribute MessagePortArray ports;
1654
- void initMessageEvent(in DOMString typeArg, in boolean canBubbleArg, in boolean cancelableArg, in any dataArg, in DOMString originArg, in DOMString lastEventIdArg, in WindowProxy sourceArg, in MessagePortArray portsArg);
1691
+ readonly attribute WindowProxy? source;
1692
+ readonly attribute MessagePort[] ports;
1693
+ void initMessageEvent(in DOMString typeArg, in boolean canBubbleArg, in boolean cancelableArg, in any dataArg, in DOMString originArg, in DOMString lastEventIdArg, in WindowProxy? sourceArg, in sequence<MessagePort> portsArg);
1655
1694
  };
1656
1695
 
1657
1696
  [Constructor]
@@ -1660,17 +1699,16 @@ interface MessageChannel {
1660
1699
  readonly attribute MessagePort port2;
1661
1700
  };
1662
1701
 
1663
- typedef sequence<MessagePort> MessagePortArray;
1664
-
1665
1702
  interface MessagePort {
1666
- void postMessage(in any message, in optional MessagePortArray ports);
1703
+ void postMessage(in any message, in optional sequence<Transferable> transfer);
1667
1704
  void start();
1668
1705
  void close();
1669
1706
 
1670
1707
  // event handlers
1671
- attribute Function onmessage;
1708
+ attribute Function? onmessage;
1672
1709
  };
1673
1710
  MessagePort implements EventTarget;
1711
+ MessagePort implements Transferable;
1674
1712
 
1675
1713
  interface HTMLAppletElement : HTMLElement {
1676
1714
  attribute DOMString align;
@@ -1681,7 +1719,7 @@ interface HTMLAppletElement : HTMLElement {
1681
1719
  attribute DOMString height;
1682
1720
  attribute unsigned long hspace;
1683
1721
  attribute DOMString name;
1684
- attribute DOMString _object; // the underscore is not part of the identifier
1722
+ attribute DOMString _object; // the underscore is not part of the identifier
1685
1723
  attribute unsigned long vspace;
1686
1724
  attribute DOMString width;
1687
1725
  };
@@ -1699,9 +1737,9 @@ interface HTMLMarqueeElement : HTMLElement {
1699
1737
  attribute unsigned long vspace;
1700
1738
  attribute DOMString width;
1701
1739
 
1702
- attribute Function onbounce;
1703
- attribute Function onfinish;
1704
- attribute Function onstart;
1740
+ attribute Function? onbounce;
1741
+ attribute Function? onfinish;
1742
+ attribute Function? onstart;
1705
1743
 
1706
1744
  void start();
1707
1745
  void stop();
@@ -1710,26 +1748,26 @@ interface HTMLMarqueeElement : HTMLElement {
1710
1748
  interface HTMLFrameSetElement : HTMLElement {
1711
1749
  attribute DOMString cols;
1712
1750
  attribute DOMString rows;
1713
- attribute Function onafterprint;
1714
- attribute Function onbeforeprint;
1715
- attribute Function onbeforeunload;
1716
- attribute Function onblur;
1717
- attribute Function onerror;
1718
- attribute Function onfocus;
1719
- attribute Function onhashchange;
1720
- attribute Function onload;
1721
- attribute Function onmessage;
1722
- attribute Function onoffline;
1723
- attribute Function ononline;
1724
- attribute Function onpagehide;
1725
- attribute Function onpageshow;
1726
- attribute Function onpopstate;
1727
- attribute Function onredo;
1728
- attribute Function onresize;
1729
- attribute Function onscroll;
1730
- attribute Function onstorage;
1731
- attribute Function onundo;
1732
- attribute Function onunload;
1751
+ attribute Function? onafterprint;
1752
+ attribute Function? onbeforeprint;
1753
+ attribute Function? onbeforeunload;
1754
+ attribute Function? onblur;
1755
+ attribute Function? onerror;
1756
+ attribute Function? onfocus;
1757
+ attribute Function? onhashchange;
1758
+ attribute Function? onload;
1759
+ attribute Function? onmessage;
1760
+ attribute Function? onoffline;
1761
+ attribute Function? ononline;
1762
+ attribute Function? onpagehide;
1763
+ attribute Function? onpageshow;
1764
+ attribute Function? onpopstate;
1765
+ attribute Function? onredo;
1766
+ attribute Function? onresize;
1767
+ attribute Function? onscroll;
1768
+ attribute Function? onstorage;
1769
+ attribute Function? onundo;
1770
+ attribute Function? onunload;
1733
1771
  };
1734
1772
 
1735
1773
  interface HTMLFrameElement : HTMLElement {
@@ -1741,8 +1779,8 @@ interface HTMLFrameElement : HTMLElement {
1741
1779
  attribute boolean noResize;
1742
1780
  attribute DOMString scrolling;
1743
1781
  attribute DOMString src;
1744
- readonly attribute Document contentDocument;
1745
- readonly attribute WindowProxy contentWindow;
1782
+ readonly attribute Document? contentDocument;
1783
+ readonly attribute WindowProxy? contentWindow;
1746
1784
  };
1747
1785
 
1748
1786
  [Supplemental]
@@ -1762,7 +1800,7 @@ interface HTMLAreaElement {
1762
1800
  interface HTMLBaseFontElement : HTMLElement {
1763
1801
  attribute DOMString color;
1764
1802
  attribute DOMString face;
1765
- attribute long size;
1803
+ attribute long size;
1766
1804
  };
1767
1805
 
1768
1806
  [Supplemental]
@@ -1817,7 +1855,7 @@ interface HTMLEmbedElement {
1817
1855
  interface HTMLFontElement : HTMLElement {
1818
1856
  attribute DOMString color;
1819
1857
  attribute DOMString face;
1820
- attribute DOMString size;
1858
+ attribute DOMString size;
1821
1859
  };
1822
1860
 
1823
1861
  [Supplemental]
@@ -1937,11 +1975,11 @@ interface HTMLScriptElement {
1937
1975
  interface HTMLTableElement {
1938
1976
  attribute DOMString align;
1939
1977
  attribute DOMString bgColor;
1940
- attribute DOMString border;
1941
1978
  attribute DOMString cellPadding;
1942
1979
  attribute DOMString cellSpacing;
1943
1980
  attribute DOMString frame;
1944
1981
  attribute DOMString rules;
1982
+ attribute DOMString summary;
1945
1983
  attribute DOMString width;
1946
1984
  };
1947
1985