<!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>[203744] 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/203744">203744</a></dd>
<dt>Author</dt> <dd>cdumez@apple.com</dd>
<dt>Date</dt> <dd>2016-07-26 15:38:13 -0700 (Tue, 26 Jul 2016)</dd>
</dl>

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

Reviewed by Darin Adler.

Source/WebCore:

Align CSSStyleDeclaration with the specification:
- https://drafts.csswg.org/cssom/#the-cssstyledeclaration-interface

In particular, the parameters to removeProperty() / item() and
getPropertyPriority() should be mandatory.

Firefox and Chrome match the specification.

Tests: fast/css/CSSStyleDeclaration-cssText-null.html
       fast/css/CSSStyleDeclaration-parameters.html

* bindings/js/JSCSSStyleDeclarationCustom.cpp:
(WebCore::JSCSSStyleDeclaration::getPropertyCSSValue):
* css/CSSStyleDeclaration.idl:

LayoutTests:

* fast/css/CSSStyleDeclaration-cssText-null-expected.txt: Added.
* fast/css/CSSStyleDeclaration-cssText-null.html: Added.
Add layout test coverage for setting cssText to null. This test
passes in WebKit, Firefox and Chrome, with or without my change.
Our IDL wrongly reported the cssText attribute as nullable but
WebKit was already behaving correctly.

* fast/css/CSSStyleDeclaration-parameters-expected.txt: Added.
* fast/css/CSSStyleDeclaration-parameters.html: Added.
Add testing for omitting CSSStyleDeclaration API parameters, to
make sure they are mandatory. This test passes in Firefox and
Chrome.

* 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="#trunkSourceWebCorebindingsjsJSCSSStyleDeclarationCustomcpp">trunk/Source/WebCore/bindings/js/JSCSSStyleDeclarationCustom.cpp</a></li>
<li><a href="#trunkSourceWebCorecssCSSStyleDeclarationidl">trunk/Source/WebCore/css/CSSStyleDeclaration.idl</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsfastcssCSSStyleDeclarationcssTextnullexpectedtxt">trunk/LayoutTests/fast/css/CSSStyleDeclaration-cssText-null-expected.txt</a></li>
<li><a href="#trunkLayoutTestsfastcssCSSStyleDeclarationcssTextnullhtml">trunk/LayoutTests/fast/css/CSSStyleDeclaration-cssText-null.html</a></li>
<li><a href="#trunkLayoutTestsfastcssCSSStyleDeclarationparametersexpectedtxt">trunk/LayoutTests/fast/css/CSSStyleDeclaration-parameters-expected.txt</a></li>
<li><a href="#trunkLayoutTestsfastcssCSSStyleDeclarationparametershtml">trunk/LayoutTests/fast/css/CSSStyleDeclaration-parameters.html</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkLayoutTestsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/ChangeLog (203743 => 203744)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/ChangeLog        2016-07-26 22:31:25 UTC (rev 203743)
+++ trunk/LayoutTests/ChangeLog        2016-07-26 22:38:13 UTC (rev 203744)
</span><span class="lines">@@ -1,3 +1,27 @@
</span><ins>+2016-07-26  Chris Dumez  &lt;cdumez@apple.com&gt;
+
+        Align CSSStyleDeclaration with the specification
+        https://bugs.webkit.org/show_bug.cgi?id=160214
+
+        Reviewed by Darin Adler.
+
+        * fast/css/CSSStyleDeclaration-cssText-null-expected.txt: Added.
+        * fast/css/CSSStyleDeclaration-cssText-null.html: Added.
+        Add layout test coverage for setting cssText to null. This test
+        passes in WebKit, Firefox and Chrome, with or without my change.
+        Our IDL wrongly reported the cssText attribute as nullable but
+        WebKit was already behaving correctly.
+
+        * fast/css/CSSStyleDeclaration-parameters-expected.txt: Added.
+        * fast/css/CSSStyleDeclaration-parameters.html: Added.
+        Add testing for omitting CSSStyleDeclaration API parameters, to
+        make sure they are mandatory. This test passes in Firefox and
+        Chrome.
+
+        * 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-26  David Kilzer &lt;ddkilzer@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Networking process crash due to missing -[WebCoreAuthenticationClientAsChallengeSender performDefaultHandlingForAuthenticationChallenge:] implementation
</span></span></pre></div>
<a id="trunkLayoutTestsfastcssCSSStyleDeclarationcssTextnullexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/fast/css/CSSStyleDeclaration-cssText-null-expected.txt (0 => 203744)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/css/CSSStyleDeclaration-cssText-null-expected.txt                                (rev 0)
+++ trunk/LayoutTests/fast/css/CSSStyleDeclaration-cssText-null-expected.txt        2016-07-26 22:38:13 UTC (rev 203744)
</span><span class="lines">@@ -0,0 +1,14 @@
</span><ins>+Tests that CSSStyleDeclaration.cssText is not nullable
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+PASS style.cssText is &quot;&quot;
+PASS style.cssText = 'margin: 0px;' did not throw exception.
+PASS style.cssText is &quot;margin: 0px;&quot;
+PASS style.cssText = null did not throw exception.
+PASS style.cssText is &quot;&quot;
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsfastcssCSSStyleDeclarationcssTextnullhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/fast/css/CSSStyleDeclaration-cssText-null.html (0 => 203744)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/css/CSSStyleDeclaration-cssText-null.html                                (rev 0)
+++ trunk/LayoutTests/fast/css/CSSStyleDeclaration-cssText-null.html        2016-07-26 22:38:13 UTC (rev 203744)
</span><span class="lines">@@ -0,0 +1,18 @@
</span><ins>+&lt;!DOCTYPE html&gt;
+&lt;html&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 CSSStyleDeclaration.cssText is not nullable&quot;);
+
+var div = document.createElement(&quot;div&quot;);
+var style = div.style;
+shouldBeEqualToString(&quot;style.cssText&quot;, &quot;&quot;);
+shouldNotThrow(&quot;style.cssText = 'margin: 0px;'&quot;);
+shouldBeEqualToString(&quot;style.cssText&quot;, &quot;margin: 0px;&quot;);
+shouldNotThrow(&quot;style.cssText = null&quot;);
+shouldBeEqualToString(&quot;style.cssText&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="trunkLayoutTestsfastcssCSSStyleDeclarationparametersexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/fast/css/CSSStyleDeclaration-parameters-expected.txt (0 => 203744)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/css/CSSStyleDeclaration-parameters-expected.txt                                (rev 0)
+++ trunk/LayoutTests/fast/css/CSSStyleDeclaration-parameters-expected.txt        2016-07-26 22:38:13 UTC (rev 203744)
</span><span class="lines">@@ -0,0 +1,13 @@
</span><ins>+Tests that parameters to CSSStyleDeclaration API are mandatory.
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+PASS style.item() threw exception TypeError: Not enough arguments.
+PASS style.removeProperty() threw exception TypeError: Not enough arguments.
+PASS style.getPropertyPriority() threw exception TypeError: Not enough arguments.
+PASS style.getPropertyCSSValue() threw exception TypeError: Not enough arguments.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsfastcssCSSStyleDeclarationparametershtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/fast/css/CSSStyleDeclaration-parameters.html (0 => 203744)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/css/CSSStyleDeclaration-parameters.html                                (rev 0)
+++ trunk/LayoutTests/fast/css/CSSStyleDeclaration-parameters.html        2016-07-26 22:38:13 UTC (rev 203744)
</span><span class="lines">@@ -0,0 +1,16 @@
</span><ins>+&lt;!DOCTYPE html&gt;
+&lt;html&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 parameters to CSSStyleDeclaration API are mandatory.&quot;);
+
+var style = document.body.style;
+shouldThrow(&quot;style.item()&quot;, &quot;'TypeError: Not enough arguments'&quot;);
+shouldThrow(&quot;style.removeProperty()&quot;, &quot;'TypeError: Not enough arguments'&quot;);
+shouldThrow(&quot;style.getPropertyPriority()&quot;, &quot;'TypeError: Not enough arguments'&quot;);
+shouldThrow(&quot;style.getPropertyCSSValue()&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 (203743 => 203744)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/dom/non-numeric-values-numeric-parameters-expected.txt        2016-07-26 22:31:25 UTC (rev 203743)
+++ trunk/LayoutTests/fast/dom/non-numeric-values-numeric-parameters-expected.txt        2016-07-26 22:38:13 UTC (rev 203744)
</span><span class="lines">@@ -14,7 +14,7 @@
</span><span class="cx"> PASS nonNumericPolicy('createCSSMediaRule().insertRule(ruleText, x)') is 'any type allowed'
</span><span class="cx"> PASS nonNumericPolicy('createCSSMediaRule().deleteRule(x)') is 'any type allowed'
</span><span class="cx"> PASS nonNumericPolicy('createCSSRuleList().item(x)') is 'any type allowed'
</span><del>-PASS nonNumericPolicy('createCSSStyleDeclaration().item(x)') is 'any type allowed'
</del><ins>+PASS nonNumericPolicy('createCSSStyleDeclaration().item(x)') is 'any type allowed (but not omitted)'
</ins><span class="cx"> PASS nonNumericPolicy('createCSSStyleSheet().insertRule(ruleText, x)') is 'any type allowed'
</span><span class="cx"> PASS nonNumericPolicy('createCSSStyleSheet().deleteRule(x)') is 'any type allowed (but not omitted)'
</span><span class="cx"> PASS nonNumericPolicy('createCSSStyleSheet().addRule(selector, styleText, x)') 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 (203743 => 203744)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/dom/script-tests/non-numeric-values-numeric-parameters.js        2016-07-26 22:31:25 UTC (rev 203743)
+++ trunk/LayoutTests/fast/dom/script-tests/non-numeric-values-numeric-parameters.js        2016-07-26 22:38:13 UTC (rev 203744)
</span><span class="lines">@@ -204,7 +204,7 @@
</span><span class="cx"> 
</span><span class="cx"> // CSSStyleDeclaration
</span><span class="cx"> 
</span><del>-shouldBe(&quot;nonNumericPolicy('createCSSStyleDeclaration().item(x)')&quot;, &quot;'any type allowed'&quot;);
</del><ins>+shouldBe(&quot;nonNumericPolicy('createCSSStyleDeclaration().item(x)')&quot;, &quot;'any type allowed (but not omitted)'&quot;);
</ins><span class="cx"> 
</span><span class="cx"> // CSSStyleSheet
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (203743 => 203744)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2016-07-26 22:31:25 UTC (rev 203743)
+++ trunk/Source/WebCore/ChangeLog        2016-07-26 22:38:13 UTC (rev 203744)
</span><span class="lines">@@ -1,3 +1,25 @@
</span><ins>+2016-07-26  Chris Dumez  &lt;cdumez@apple.com&gt;
+
+        Align CSSStyleDeclaration with the specification
+        https://bugs.webkit.org/show_bug.cgi?id=160214
+
+        Reviewed by Darin Adler.
+
+        Align CSSStyleDeclaration with the specification:
+        - https://drafts.csswg.org/cssom/#the-cssstyledeclaration-interface
+
+        In particular, the parameters to removeProperty() / item() and
+        getPropertyPriority() should be mandatory.
+
+        Firefox and Chrome match the specification.
+
+        Tests: fast/css/CSSStyleDeclaration-cssText-null.html
+               fast/css/CSSStyleDeclaration-parameters.html
+
+        * bindings/js/JSCSSStyleDeclarationCustom.cpp:
+        (WebCore::JSCSSStyleDeclaration::getPropertyCSSValue):
+        * css/CSSStyleDeclaration.idl:
+
</ins><span class="cx"> 2016-07-26  David Kilzer &lt;ddkilzer@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Networking process crash due to missing -[WebCoreAuthenticationClientAsChallengeSender performDefaultHandlingForAuthenticationChallenge:] implementation
</span></span></pre></div>
<a id="trunkSourceWebCorebindingsjsJSCSSStyleDeclarationCustomcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/bindings/js/JSCSSStyleDeclarationCustom.cpp (203743 => 203744)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/bindings/js/JSCSSStyleDeclarationCustom.cpp        2016-07-26 22:31:25 UTC (rev 203743)
+++ trunk/Source/WebCore/bindings/js/JSCSSStyleDeclarationCustom.cpp        2016-07-26 22:38:13 UTC (rev 203744)
</span><span class="lines">@@ -349,7 +349,10 @@
</span><span class="cx"> 
</span><span class="cx"> JSValue JSCSSStyleDeclaration::getPropertyCSSValue(ExecState&amp; state)
</span><span class="cx"> {
</span><del>-    const String&amp; propertyName = state.argument(0).toString(&amp;state)-&gt;value(&amp;state);
</del><ins>+    if (UNLIKELY(state.argumentCount() &lt; 1))
+        return state.vm().throwException(&amp;state, createNotEnoughArgumentsError(&amp;state));
+
+    String propertyName = state.uncheckedArgument(0).toWTFString(&amp;state);
</ins><span class="cx">     if (state.hadException())
</span><span class="cx">         return jsUndefined();
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorecssCSSStyleDeclarationidl"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/css/CSSStyleDeclaration.idl (203743 => 203744)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/css/CSSStyleDeclaration.idl        2016-07-26 22:31:25 UTC (rev 203743)
+++ trunk/Source/WebCore/css/CSSStyleDeclaration.idl        2016-07-26 22:38:13 UTC (rev 203744)
</span><span class="lines">@@ -29,20 +29,19 @@
</span><span class="cx">     SkipVTableValidation,
</span><span class="cx">     ExportMacro=WEBCORE_EXPORT,
</span><span class="cx"> ] interface CSSStyleDeclaration {
</span><del>-    [SetterRaisesException] attribute DOMString? cssText;
</del><ins>+    [SetterRaisesException] attribute DOMString cssText;
</ins><span class="cx"> 
</span><span class="cx">     DOMString getPropertyValue(DOMString propertyName);
</span><del>-    [Custom] CSSValue getPropertyCSSValue(optional DOMString propertyName);
</del><ins>+    [Custom] CSSValue? getPropertyCSSValue(DOMString propertyName);
</ins><span class="cx"> 
</span><del>-    // FIXME: Using &quot;undefined&quot; as default parameter value is wrong.
-    [RaisesException] DOMString removeProperty(optional DOMString propertyName = &quot;undefined&quot;);
-    DOMString? getPropertyPriority(optional DOMString propertyName = &quot;undefined&quot;);
</del><ins>+    [RaisesException] DOMString removeProperty(DOMString propertyName);
+    DOMString? getPropertyPriority(DOMString propertyName);
</ins><span class="cx"> 
</span><span class="cx">     [ObjCLegacyUnnamedParameters, RaisesException] void setProperty(DOMString propertyName, [TreatNullAs=EmptyString] DOMString value, [TreatNullAs=EmptyString] optional DOMString priority = &quot;&quot;);
</span><span class="cx"> 
</span><del>-    readonly attribute unsigned long    length;
-    getter DOMString item(optional unsigned long index = 0);
-    readonly attribute CSSRule          parentRule;
</del><ins>+    readonly attribute unsigned long length;
+    getter DOMString item(unsigned long index);
+    readonly attribute CSSRule? parentRule;
</ins><span class="cx"> 
</span><span class="cx">     // Extensions
</span><span class="cx">     // FIXME: Using &quot;undefined&quot; as default parameter value is wrong.
</span></span></pre>
</div>
</div>

</body>
</html>