Reviewed by Geoff.
authorap <ap@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 5 Jan 2007 16:15:22 +0000 (16:15 +0000)
committerap <ap@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 5 Jan 2007 16:15:22 +0000 (16:15 +0000)
        http://bugs.webkit.org/show_bug.cgi?id=7296
        Disable JavaScript exceptions when dynamically changing CSS properties.

        * bindings/js/kjs_css.cpp:
        (KJS::DOMCSSStyleDeclaration::put): Removed the Dashboard quirk logic.

        * css/CSSMutableStyleDeclaration.cpp:
        (WebCore::CSSMutableStyleDeclaration::setProperty): Don't raise an exception if parsing fails.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@18618 268f45cc-cd09-0410-ab3c-d52691b4dbfc

LayoutTests/ChangeLog
LayoutTests/fast/dom/css-set-property-exception-expected.txt
LayoutTests/fast/dom/css-set-property-exception.html
WebCore/ChangeLog
WebCore/bindings/js/kjs_css.cpp
WebCore/css/CSSMutableStyleDeclaration.cpp

index 49d9f18..cafbc80 100644 (file)
@@ -1,3 +1,13 @@
+2007-01-04  Alexey Proskuryakov  <ap@webkit.org>
+
+        Reviewed by Geoff.
+
+        http://bugs.webkit.org/show_bug.cgi?id=7296
+        Disable JavaScript exceptions when dynamically changing CSS properties.
+
+        * fast/dom/css-set-property-exception-expected.txt:
+        * fast/dom/css-set-property-exception.html:
+
 2007-01-05  Antti Koivisto  <koivisto@iki.fi>
 
         Reviewed by hyatt.
index e45b0e2..e902ee4 100644 (file)
@@ -2,18 +2,16 @@ Test for bug 7296.
 
 This test checks to see whether you get exceptions when setting a property with a "bad value". Setting using JavaScript property syntax and with setProperty() should behave the same.
 
-The results below should show success, except for cases 2 and 6, in which exceptions should be raised.
-
 It is OK if the order of properties changes from the expected results - IE 6 and Firefox 2 don't agree on it anyway.
 
 This is the test element.
 
 Successfully set display to "block"; cssText is now: "top: 0px; bottom: 1px; display: block; ".
-Got exception trying to set display to "foobar"; cssText is now: "top: 0px; display: none; bottom: 1px; ".
+Successfully set display to "foobar"; cssText is now: "top: 0px; display: none; bottom: 1px; ".
 Successfully set display to ""; cssText is now: "top: 0px; bottom: 1px; ".
 Successfully set display to null; cssText is now: "top: 0px; bottom: 1px; ".
 Successfully set display to "block" with setProperty; cssText is now: "top: 0px; bottom: 1px; display: block; ".
-Got exception trying to set display to "foobar" with setProperty; cssText is now: "top: 0px; display: none; bottom: 1px; ".
+Successfully set display to "foobar" with setProperty; cssText is now: "top: 0px; display: none; bottom: 1px; ".
 Successfully set display to "" with setProperty; cssText is now: "top: 0px; bottom: 1px; ".
 Successfully set display to null with setProperty; cssText is now: "top: 0px; bottom: 1px; ".
 
index 59bb294..39ae3e0 100644 (file)
@@ -93,7 +93,6 @@ function test()
 <p>Test for <a href="http://bugs.webkit.org/show_bug.cgi?id=7296">bug 7296</a>.</p>
 <p>This test checks to see whether you get exceptions when setting a property with a "bad value".
 Setting using JavaScript property syntax and with setProperty() should behave the same.</p>
-<p>The results below should show success, except for cases 2 and 6, in which exceptions should be raised.</p>
 <P>It is OK if the order of properties changes from the expected results - IE 6 and Firefox 2 don't agree on it anyway.</p>
 <hr>
 <p id="e">This is the test element.</p>
index 142d71c..0e2e481 100644 (file)
@@ -1,3 +1,16 @@
+2007-01-04  Alexey Proskuryakov  <ap@webkit.org>
+
+        Reviewed by Geoff.
+
+        http://bugs.webkit.org/show_bug.cgi?id=7296
+        Disable JavaScript exceptions when dynamically changing CSS properties.
+
+        * bindings/js/kjs_css.cpp:
+        (KJS::DOMCSSStyleDeclaration::put): Removed the Dashboard quirk logic.
+
+        * css/CSSMutableStyleDeclaration.cpp:
+        (WebCore::CSSMutableStyleDeclaration::setProperty): Don't raise an exception if parsing fails.
+
 2007-01-05  Antti Koivisto  <koivisto@iki.fi>
 
         Reviewed by hyatt.
index 6eccafe..e9b3b0a 100644 (file)
@@ -35,7 +35,6 @@
 #include "CSSStyleRule.h"
 #include "CSSValueList.h"
 #include "Document.h"
-#include "Frame.h"
 #include "HTMLNames.h"
 #include "HTMLStyleElement.h"
 #include "JSCSSPrimitiveValue.h"
@@ -44,7 +43,6 @@
 #include "JSCSSRuleList.h"
 #include "JSCSSValueList.h"
 #include "MediaList.h"
-#include "Settings.h"
 #include "StyleSheetList.h"
 #include "kjs_dom.h"
 
@@ -55,6 +53,8 @@
 #ifdef SVG_SUPPORT
 #include "JSSVGColor.h"
 #include "JSSVGPaint.h"
+#include "SVGColor.h"
+#include "SVGPaint.h"
 #endif
 
 using namespace WebCore;
@@ -225,20 +225,6 @@ void DOMCSSStyleDeclaration::put(ExecState* exec, const Identifier &propertyName
 #ifdef KJS_VERBOSE
       kdDebug(6070) << "DOMCSSStyleDeclaration: prop=" << prop << " propvalue=" << propvalue << endl;
 #endif
-      StyleSheet* stylesheet = styleDecl.stylesheet();
-      // Computed style declarations don't have stylesheets.
-      if (stylesheet) {
-        ASSERT(stylesheet->isCSSStyleSheet());
-        if (Frame* frame = static_cast<CSSStyleSheet*>(stylesheet)->doc()->frame())
-          if (frame->settings()->usesDashboardBackwardCompatibilityMode()) {
-            styleDecl.removeProperty(prop, exception);
-            if (!exception) {
-              ExceptionCode exceptionIgnored = 0;
-              styleDecl.setProperty(prop, propValue, exceptionIgnored);
-            }
-            return;
-          }
-      }
       styleDecl.setProperty(prop, propValue, exception);
     } else {
       DOMObject::put(exec, propertyName, value, attr);
index 6634f6f..f90837b 100644 (file)
@@ -298,6 +298,7 @@ bool CSSMutableStyleDeclaration::setProperty(int propertyID, const String &value
     ec = 0;
 
     // Setting the value to an empty string just removes the property in both IE and Gecko.
+    // Setting it to null seems to produce less consistent results, but we treat it just the same.
     if (value.isEmpty()) {
         removeProperty(propertyID, notifyChanged, ec);
         return ec == 0;
@@ -308,9 +309,11 @@ bool CSSMutableStyleDeclaration::setProperty(int propertyID, const String &value
     CSSParser parser(useStrictParsing());
     bool success = parser.parseValue(this, propertyID, value, important);
     if (!success) {
-        ec = SYNTAX_ERR;
+        // CSS DOM requires raising SYNTAX_ERR here, but this is too dangerous for compatibility,
+        // see <http://bugs.webkit.org/show_bug.cgi?id=7296>.
     } else if (notifyChanged)
         setChanged();
+    ASSERT(!ec);
     return success;
 }