<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[203795] trunk</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/203795">203795</a></dd>
<dt>Author</dt> <dd>cdumez@apple.com</dd>
<dt>Date</dt> <dd>2016-07-27 14:33:57 -0700 (Wed, 27 Jul 2016)</dd>
</dl>

<h3>Log Message</h3>
<pre>Align MediaList with the CSSOM specification
https://bugs.webkit.org/show_bug.cgi?id=160257

Reviewed by Ryosuke Niwa.

Source/WebCore:

Align MediaList with the CSSOM specification:
- https://www.w3.org/TR/cssom-1/#the-medialist-interface

In particular, the parameter to item() / deleteMedium() and
appendMedium() is now mandatory.

Firefox and Chrome agree with the specification.

Test: fast/css/MediaList-mediaText-null.html
      fast/css/MediaList-parameters.html

* css/MediaList.idl:

LayoutTests:

* fast/css/MediaList-mediaText-null-expected.txt: Added.
* fast/css/MediaList-mediaText-null.html: Added.
Add test coverage for MediaList.mediaText to make sure it is not nullable
and treats null as the empty string. Our IDL did not match the
specification here but our behavior was correct. Therefore, this test is
passing with and without my change. I just wanted to make sure we had
good coverage since I updated our IDL to match the specification.

* fast/css/MediaList-parameters-expected.txt: Added.
* fast/css/MediaList-parameters.html: Added.
Add test coverage for mandatory parameters.

* fast/dom/non-numeric-values-numeric-parameters-expected.txt:
* fast/dom/script-tests/non-numeric-values-numeric-parameters.js:
Update existing test to reflect behavior change.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsChangeLog">trunk/LayoutTests/ChangeLog</a></li>
<li><a href="#trunkLayoutTestsfastdomnonnumericvaluesnumericparametersexpectedtxt">trunk/LayoutTests/fast/dom/non-numeric-values-numeric-parameters-expected.txt</a></li>
<li><a href="#trunkLayoutTestsfastdomscripttestsnonnumericvaluesnumericparametersjs">trunk/LayoutTests/fast/dom/script-tests/non-numeric-values-numeric-parameters.js</a></li>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCorecssMediaListidl">trunk/Source/WebCore/css/MediaList.idl</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsfastcssMediaListmediaTextnullexpectedtxt">trunk/LayoutTests/fast/css/MediaList-mediaText-null-expected.txt</a></li>
<li><a href="#trunkLayoutTestsfastcssMediaListmediaTextnullhtml">trunk/LayoutTests/fast/css/MediaList-mediaText-null.html</a></li>
<li><a href="#trunkLayoutTestsfastcssMediaListparametersexpectedtxt">trunk/LayoutTests/fast/css/MediaList-parameters-expected.txt</a></li>
<li><a href="#trunkLayoutTestsfastcssMediaListparametershtml">trunk/LayoutTests/fast/css/MediaList-parameters.html</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkLayoutTestsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/ChangeLog (203794 => 203795)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/ChangeLog        2016-07-27 21:18:50 UTC (rev 203794)
+++ trunk/LayoutTests/ChangeLog        2016-07-27 21:33:57 UTC (rev 203795)
</span><span class="lines">@@ -1,3 +1,26 @@
</span><ins>+2016-07-27  Chris Dumez  &lt;cdumez@apple.com&gt;
+
+        Align MediaList with the CSSOM specification
+        https://bugs.webkit.org/show_bug.cgi?id=160257
+
+        Reviewed by Ryosuke Niwa.
+
+        * fast/css/MediaList-mediaText-null-expected.txt: Added.
+        * fast/css/MediaList-mediaText-null.html: Added.
+        Add test coverage for MediaList.mediaText to make sure it is not nullable
+        and treats null as the empty string. Our IDL did not match the
+        specification here but our behavior was correct. Therefore, this test is
+        passing with and without my change. I just wanted to make sure we had
+        good coverage since I updated our IDL to match the specification.
+
+        * fast/css/MediaList-parameters-expected.txt: Added.
+        * fast/css/MediaList-parameters.html: Added.
+        Add test coverage for mandatory parameters.
+
+        * fast/dom/non-numeric-values-numeric-parameters-expected.txt:
+        * fast/dom/script-tests/non-numeric-values-numeric-parameters.js:
+        Update existing test to reflect behavior change.
+
</ins><span class="cx"> 2016-07-27  Ryan Haddad  &lt;ryanhaddad@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Correct the syntax used to skip js/regress/script-tests/bigswitch-indirect-symbol.js
</span></span></pre></div>
<a id="trunkLayoutTestsfastcssMediaListmediaTextnullexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/fast/css/MediaList-mediaText-null-expected.txt (0 => 203795)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/css/MediaList-mediaText-null-expected.txt                                (rev 0)
+++ trunk/LayoutTests/fast/css/MediaList-mediaText-null-expected.txt        2016-07-27 21:33:57 UTC (rev 203795)
</span><span class="lines">@@ -0,0 +1,18 @@
</span><ins>+Tests that MediaList.mediaText is not nullable and treats null as the empty string.
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+PASS mediaList.__proto__ is MediaList.prototype
+PASS mediaList.length is 1
+PASS mediaList.mediaText is &quot;screen and (min-width: 480px)&quot;
+PASS mediaList.mediaText = null did not throw exception.
+PASS mediaList.mediaText is &quot;&quot;
+PASS mediaList.mediaText = 'screen and (min-width: 480px)' did not throw exception.
+PASS mediaList.mediaText is &quot;screen and (min-width: 480px)&quot;
+PASS style.removeAttribute('media') did not throw exception.
+PASS mediaList.mediaText is &quot;&quot;
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsfastcssMediaListmediaTextnullhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/fast/css/MediaList-mediaText-null.html (0 => 203795)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/css/MediaList-mediaText-null.html                                (rev 0)
+++ trunk/LayoutTests/fast/css/MediaList-mediaText-null.html        2016-07-27 21:33:57 UTC (rev 203795)
</span><span class="lines">@@ -0,0 +1,27 @@
</span><ins>+&lt;!DOCTYPE html&gt;
+&lt;html&gt;
+&lt;head&gt;
+&lt;style media=&quot;screen and (min-width: 480px)&quot;&gt;
+&lt;/style&gt;
+&lt;/head&gt;
+&lt;body&gt;
+&lt;script src=&quot;../../resources/js-test-pre.js&quot;&gt;&lt;/script&gt;
+&lt;script&gt;
+description(&quot;Tests that MediaList.mediaText is not nullable and treats null as the empty string.&quot;);
+
+var style = document.getElementsByTagName(&quot;style&quot;)[0];
+var mediaList = style.sheet.media;
+shouldBe(&quot;mediaList.__proto__&quot;, &quot;MediaList.prototype&quot;);
+shouldBe(&quot;mediaList.length&quot;, &quot;1&quot;);
+
+shouldBeEqualToString(&quot;mediaList.mediaText&quot;, &quot;screen and (min-width: 480px)&quot;);
+shouldNotThrow(&quot;mediaList.mediaText = null&quot;);
+shouldBeEqualToString(&quot;mediaList.mediaText&quot;, &quot;&quot;);
+shouldNotThrow(&quot;mediaList.mediaText = 'screen and (min-width: 480px)'&quot;);
+shouldBeEqualToString(&quot;mediaList.mediaText&quot;, &quot;screen and (min-width: 480px)&quot;);
+shouldNotThrow(&quot;style.removeAttribute('media')&quot;);
+shouldBeEqualToString(&quot;mediaList.mediaText&quot;, &quot;&quot;);
+&lt;/script&gt;
+&lt;script src=&quot;../../resources/js-test-post.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsfastcssMediaListparametersexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/fast/css/MediaList-parameters-expected.txt (0 => 203795)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/css/MediaList-parameters-expected.txt                                (rev 0)
+++ trunk/LayoutTests/fast/css/MediaList-parameters-expected.txt        2016-07-27 21:33:57 UTC (rev 203795)
</span><span class="lines">@@ -0,0 +1,13 @@
</span><ins>+Tests that the parameters to MediaList.item() / deleteMedium() / appendMedium() are mandatory.
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+PASS mediaList.__proto__ is MediaList.prototype
+PASS mediaList.item() threw exception TypeError: Not enough arguments.
+PASS mediaList.deleteMedium() threw exception TypeError: Not enough arguments.
+PASS mediaList.appendMedium() threw exception TypeError: Not enough arguments.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsfastcssMediaListparametershtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/fast/css/MediaList-parameters.html (0 => 203795)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/css/MediaList-parameters.html                                (rev 0)
+++ trunk/LayoutTests/fast/css/MediaList-parameters.html        2016-07-27 21:33:57 UTC (rev 203795)
</span><span class="lines">@@ -0,0 +1,22 @@
</span><ins>+&lt;!DOCTYPE html&gt;
+&lt;html&gt;
+&lt;head&gt;
+&lt;style&gt;
+@media screen { a { text-weight: bold } }
+&lt;/style&gt;
+&lt;/head&gt;
+&lt;body&gt;
+&lt;script src=&quot;../../resources/js-test-pre.js&quot;&gt;&lt;/script&gt;
+&lt;script&gt;
+description(&quot;Tests that the parameters to MediaList.item() / deleteMedium() / appendMedium() are mandatory.&quot;);
+
+var mediaList = document.getElementsByTagName(&quot;style&quot;)[0].sheet.media;
+shouldBe(&quot;mediaList.__proto__&quot;, &quot;MediaList.prototype&quot;);
+
+shouldThrow(&quot;mediaList.item()&quot;, &quot;'TypeError: Not enough arguments'&quot;);
+shouldThrow(&quot;mediaList.deleteMedium()&quot;, &quot;'TypeError: Not enough arguments'&quot;);
+shouldThrow(&quot;mediaList.appendMedium()&quot;, &quot;'TypeError: Not enough arguments'&quot;);
+&lt;/script&gt;
+&lt;script src=&quot;../../resources/js-test-post.js&quot;&gt;&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsfastdomnonnumericvaluesnumericparametersexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/fast/dom/non-numeric-values-numeric-parameters-expected.txt (203794 => 203795)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/dom/non-numeric-values-numeric-parameters-expected.txt        2016-07-27 21:18:50 UTC (rev 203794)
+++ trunk/LayoutTests/fast/dom/non-numeric-values-numeric-parameters-expected.txt        2016-07-27 21:33:57 UTC (rev 203795)
</span><span class="lines">@@ -42,7 +42,7 @@
</span><span class="cx"> PASS nonNumericPolicy('document.createElement(&quot;textarea&quot;).setSelectionRange(x, 0)') is 'any type allowed'
</span><span class="cx"> PASS nonNumericPolicy('document.createElement(&quot;textarea&quot;).setSelectionRange(0, x)') is 'any type allowed'
</span><span class="cx"> PASS nonNumericPolicy('document.createEvent(&quot;KeyboardEvent&quot;).initKeyboardEvent(&quot;a&quot;, false, false, null, &quot;b&quot;, x, false, false, false, false, false)') is 'any type allowed'
</span><del>-PASS nonNumericPolicy('createMediaList().item(x)') is 'any type allowed'
</del><ins>+PASS nonNumericPolicy('createMediaList().item(x)') is 'any type allowed (but not omitted)'
</ins><span class="cx"> PASS nonNumericPolicy('document.createEvent(&quot;MouseEvent&quot;).initMouseEvent(&quot;a&quot;, false, false, null, x, 0, 0, 0, 0, false, false, false, false, 0, null)') is 'any type allowed'
</span><span class="cx"> PASS nonNumericPolicy('document.createEvent(&quot;MouseEvent&quot;).initMouseEvent(&quot;a&quot;, false, false, null, 0, x, 0, 0, 0, false, false, false, false, 0, null)') is 'any type allowed'
</span><span class="cx"> PASS nonNumericPolicy('document.createEvent(&quot;MouseEvent&quot;).initMouseEvent(&quot;a&quot;, false, false, null, 0, 0, x, 0, 0, false, false, false, false, 0, null)') is 'any type allowed'
</span></span></pre></div>
<a id="trunkLayoutTestsfastdomscripttestsnonnumericvaluesnumericparametersjs"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/fast/dom/script-tests/non-numeric-values-numeric-parameters.js (203794 => 203795)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/dom/script-tests/non-numeric-values-numeric-parameters.js        2016-07-27 21:18:50 UTC (rev 203794)
+++ trunk/LayoutTests/fast/dom/script-tests/non-numeric-values-numeric-parameters.js        2016-07-27 21:33:57 UTC (rev 203795)
</span><span class="lines">@@ -278,7 +278,7 @@
</span><span class="cx"> 
</span><span class="cx"> // MediaList
</span><span class="cx"> 
</span><del>-shouldBe(&quot;nonNumericPolicy('createMediaList().item(x)')&quot;, &quot;'any type allowed'&quot;);
</del><ins>+shouldBe(&quot;nonNumericPolicy('createMediaList().item(x)')&quot;, &quot;'any type allowed (but not omitted)'&quot;);
</ins><span class="cx"> 
</span><span class="cx"> // MouseEvent
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (203794 => 203795)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2016-07-27 21:18:50 UTC (rev 203794)
+++ trunk/Source/WebCore/ChangeLog        2016-07-27 21:33:57 UTC (rev 203795)
</span><span class="lines">@@ -1,3 +1,23 @@
</span><ins>+2016-07-27  Chris Dumez  &lt;cdumez@apple.com&gt;
+
+        Align MediaList with the CSSOM specification
+        https://bugs.webkit.org/show_bug.cgi?id=160257
+
+        Reviewed by Ryosuke Niwa.
+
+        Align MediaList with the CSSOM specification:
+        - https://www.w3.org/TR/cssom-1/#the-medialist-interface
+
+        In particular, the parameter to item() / deleteMedium() and
+        appendMedium() is now mandatory.
+
+        Firefox and Chrome agree with the specification.
+
+        Test: fast/css/MediaList-mediaText-null.html
+              fast/css/MediaList-parameters.html
+
+        * css/MediaList.idl:
+
</ins><span class="cx"> 2016-07-27  Jeremy Jones  &lt;jeremyj@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Fullscreen video zoom button does not work after rotating when aspect ratio matches display.
</span></span></pre></div>
<a id="trunkSourceWebCorecssMediaListidl"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/css/MediaList.idl (203794 => 203795)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/css/MediaList.idl        2016-07-27 21:18:50 UTC (rev 203794)
+++ trunk/Source/WebCore/css/MediaList.idl        2016-07-27 21:33:57 UTC (rev 203795)
</span><span class="lines">@@ -30,14 +30,13 @@
</span><span class="cx">     ImplementationLacksVTable,
</span><span class="cx"> ] interface MediaList {
</span><span class="cx"> 
</span><del>-    [SetterRaisesException] attribute DOMString? mediaText;
</del><ins>+    [SetterRaisesException, TreatNullAs=EmptyString] attribute DOMString mediaText;
</ins><span class="cx">     readonly attribute unsigned long length;
</span><span class="cx"> 
</span><del>-    getter DOMString? item(optional unsigned long index = 0);
</del><ins>+    getter DOMString? item(unsigned long index);
</ins><span class="cx"> 
</span><del>-    // FIXME: Using &quot;undefined&quot; as default parameter value is wrong.
-    [RaisesException] void deleteMedium(optional DOMString oldMedium = &quot;undefined&quot;);
-    [RaisesException] void appendMedium(optional DOMString newMedium = &quot;undefined&quot;);
</del><ins>+    [RaisesException] void deleteMedium(DOMString oldMedium);
+    [RaisesException] void appendMedium(DOMString newMedium);
</ins><span class="cx"> 
</span><span class="cx"> };
</span><span class="cx"> 
</span></span></pre>
</div>
</div>

</body>
</html>