JSCSSStyleDeclarationCustom.cpp revision 81bc750723a18f21cd17d1b173cd2a4dda9cea6e
14c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom/* 28212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom * Copyright (C) 2007, 2008, 2009 Apple Inc. All rights reserved. 38212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom * 48212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom * Redistribution and use in source and binary forms, with or without 58212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom * modification, are permitted provided that the following conditions 68212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom * are met: 78212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom * 1. Redistributions of source code must retain the above copyright 88212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom * notice, this list of conditions and the following disclaimer. 98212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom * 2. Redistributions in binary form must reproduce the above copyright 108212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom * notice, this list of conditions and the following disclaimer in the 118212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom * documentation and/or other materials provided with the distribution. 124c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom * 138212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY 148212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 158212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 168212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR 178212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 188212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 198212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 208212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 218212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 228212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 238212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 248212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom */ 258212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom 264c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom#include "config.h" 274c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom#include "JSCSSStyleDeclarationCustom.h" 284c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom 298212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom#include "CSSMutableStyleDeclaration.h" 308212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom#include "CSSPrimitiveValue.h" 318212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom#include "CSSValue.h" 328212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom#include "PlatformString.h" 338212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom#include <runtime/StringObjectThatMasqueradesAsUndefined.h> 344c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom#include <runtime/StringPrototype.h> 354c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom#include <wtf/ASCIICType.h> 368212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom#include <wtf/text/AtomicString.h> 374c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom 388212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstromusing namespace JSC; 398212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstromusing namespace WTF; 408212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom 418212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstromnamespace WebCore { 428212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom 434c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromvoid JSCSSStyleDeclaration::markChildren(MarkStack& markStack) 448212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom{ 458212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom Base::markChildren(markStack); 468212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom 478212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom CSSStyleDeclaration* declaration = impl(); 488212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom JSGlobalData& globalData = *Heap::heap(this)->globalData(); 498212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom 508212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom if (CSSRule* parentRule = declaration->parentRule()) 518212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom markDOMObjectWrapper(markStack, globalData, parentRule); 528212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom 534c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom if (declaration->isMutableStyleDeclaration()) { 548212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom CSSMutableStyleDeclaration* mutableDeclaration = static_cast<CSSMutableStyleDeclaration*>(declaration); 558212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom CSSMutableStyleDeclaration::const_iterator end = mutableDeclaration->end(); 568212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom for (CSSMutableStyleDeclaration::const_iterator it = mutableDeclaration->begin(); it != end; ++it) 578212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom markDOMObjectWrapper(markStack, globalData, it->value()); 588212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom } 598212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom} 606e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom 616e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom// Check for a CSS prefix. 626e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom// Passed prefix is all lowercase. 636e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom// First character of the prefix within the property name may be upper or lowercase. 648212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom// Other characters in the prefix within the property name must be lowercase. 656e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom// The prefix within the property name must be followed by a capital letter. 666e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstromstatic bool hasCSSPropertyNamePrefix(const Identifier& propertyName, const char* prefix) 676e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom{ 686e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom#ifndef NDEBUG 698212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom ASSERT(*prefix); 708212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom for (const char* p = prefix; *p; ++p) 718212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom ASSERT(isASCIILower(*p)); 728212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom ASSERT(propertyName.length()); 738212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom#endif 748212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom 754c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom if (toASCIILower(propertyName.characters()[0]) != prefix[0]) 768212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom return false; 778212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom 788212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom unsigned length = propertyName.length(); 794c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom for (unsigned i = 1; i < length; ++i) { 804c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom if (!prefix[i]) 818212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom return isASCIIUpper(propertyName.characters()[i]); 828212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom if (propertyName.characters()[i] != prefix[i]) 838212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom return false; 844c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom } 858212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom return false; 868212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom} 878212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom 888212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstromstatic String cssPropertyName(const Identifier& propertyName, bool* hadPixelOrPosPrefix = 0) 898212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom{ 908212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom if (hadPixelOrPosPrefix) 918212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom *hadPixelOrPosPrefix = false; 928212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom 938212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom unsigned length = propertyName.length(); 948212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom if (!length) 958212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom return String(); 968212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom 978212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom Vector<UChar> name; 988212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom name.reserveInitialCapacity(length); 996e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom 1004c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom unsigned i = 0; 1016e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom 1028212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom if (hasCSSPropertyNamePrefix(propertyName, "css")) 1038212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom i += 3; 1048212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom else if (hasCSSPropertyNamePrefix(propertyName, "pixel")) { 1058212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom i += 5; 1068212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom if (hadPixelOrPosPrefix) 1074c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom *hadPixelOrPosPrefix = true; 1088212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom } else if (hasCSSPropertyNamePrefix(propertyName, "pos")) { 1098212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom i += 3; 1108212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom if (hadPixelOrPosPrefix) 1118212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom *hadPixelOrPosPrefix = true; 1128212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom } else if (hasCSSPropertyNamePrefix(propertyName, "webkit") 1138212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom || hasCSSPropertyNamePrefix(propertyName, "khtml") 1148212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom || hasCSSPropertyNamePrefix(propertyName, "apple")) 1158212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom name.append('-'); 1168212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom else { 1178212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom if (isASCIIUpper(propertyName.characters()[0])) 1188212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom return String(); 1198212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom } 1208212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom 1218212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom name.append(toASCIILower(propertyName.characters()[i++])); 1228212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom 1238212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom for (; i < length; ++i) { 1248212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom UChar c = propertyName.characters()[i]; 1258212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom if (!isASCIIUpper(c)) 1268212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom name.append(c); 1278212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom else { 1288212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom name.append('-'); 1298212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom name.append(toASCIILower(c)); 1308212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom } 1318212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom } 1328212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom 1338212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom return String::adopt(name); 1348212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom} 1358212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom 1368212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstromstatic bool isCSSPropertyName(const Identifier& propertyName) 1378212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom{ 1388212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom // FIXME: This mallocs a string for the property name and then throws it 1398212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom // away. This shows up on peacekeeper's domDynamicCreationCreateElement. 1408212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom return CSSStyleDeclaration::isPropertyName(cssPropertyName(propertyName)); 1418212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom} 1428212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom 1438212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrombool JSCSSStyleDeclaration::canGetItemsForName(ExecState*, CSSStyleDeclaration*, const Identifier& propertyName) 1448212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom{ 1458212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom return isCSSPropertyName(propertyName); 1468212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom} 1478212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom 1488212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom// FIXME: You can get these properties, and set them (see putDelegate below), 1498212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom// but you should also be able to enumerate them. 1508212855a312dc8ebe081a3e08b1d2d8f8757af02Brian CarlstromJSValue JSCSSStyleDeclaration::nameGetter(ExecState* exec, JSValue slotBase, const Identifier& propertyName) 1518212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom{ 1528212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom JSCSSStyleDeclaration* thisObj = static_cast<JSCSSStyleDeclaration*>(asObject(slotBase)); 1534c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom 1548212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom // Set up pixelOrPos boolean to handle the fact that 1554c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom // pixelTop returns "CSS Top" as number value in unit pixels 1568212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom // posTop returns "CSS top" as number value in unit pixels _if_ its a 1574c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom // positioned element. if it is not a positioned element, return 0 1584c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom // from MSIE documentation FIXME: IMPLEMENT THAT (Dirk) 1594c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom bool pixelOrPos; 1604c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom String prop = cssPropertyName(propertyName, &pixelOrPos); 1614c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom RefPtr<CSSValue> v = thisObj->impl()->getPropertyCSSValue(prop); 1628212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom if (v) { 1634c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom if (pixelOrPos && v->cssValueType() == CSSValue::CSS_PRIMITIVE_VALUE) 1644c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom return jsNumber(static_pointer_cast<CSSPrimitiveValue>(v)->getFloatValue(CSSPrimitiveValue::CSS_PX)); 1654c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom return jsStringOrNull(exec, v->cssText()); 1664c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom } 1674c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom 1684c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom // If the property is a shorthand property (such as "padding"), 1694c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom // it can only be accessed using getPropertyValue. 1708212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom 1718212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom // Make the SVG 'filter' attribute undetectable, to avoid confusion with the IE 'filter' attribute. 1724c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom if (propertyName == "filter") 1734c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom return StringObjectThatMasqueradesAsUndefined::create(exec, stringToUString(thisObj->impl()->getPropertyValue(prop))); 1744c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom 1754c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom return jsString(exec, thisObj->impl()->getPropertyValue(prop)); 1764c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom} 1774c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom 1784c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom 1794c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrombool JSCSSStyleDeclaration::putDelegate(ExecState* exec, const Identifier& propertyName, JSValue value, PutPropertySlot&) 1804c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom{ 1814c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom if (!isCSSPropertyName(propertyName)) 1824c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom return false; 1834c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom 1848212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom bool pixelOrPos; 1854c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom String prop = cssPropertyName(propertyName, &pixelOrPos); 1864c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom String propValue = valueToStringWithNullCheck(exec, value); 1874c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom if (pixelOrPos) 1884c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom propValue += "px"; 1894c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom ExceptionCode ec = 0; 1904c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom impl()->setProperty(prop, propValue, ec); 1914c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom setDOMException(exec, ec); 1928212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom return true; 1934c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom} 1948212855a312dc8ebe081a3e08b1d2d8f8757af02Brian Carlstrom 1954c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom} // namespace WebCore 1964c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom