18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/* 2231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block * Copyright (C) 2007, 2008, 2009 Apple Inc. All rights reserved. 38e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 48e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Redistribution and use in source and binary forms, with or without 58e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * modification, are permitted provided that the following conditions 68e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * are met: 78e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 1. Redistributions of source code must retain the above copyright 88e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * notice, this list of conditions and the following disclaimer. 98e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 2. Redistributions in binary form must reproduce the above copyright 108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * notice, this list of conditions and the following disclaimer in the 118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * documentation and/or other materials provided with the distribution. 128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY 148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR 178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "config.h" 278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "JSCSSStyleDeclarationCustom.h" 288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 29231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#include "CSSMutableStyleDeclaration.h" 308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "CSSPrimitiveValue.h" 318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "CSSValue.h" 328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "PlatformString.h" 338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include <runtime/StringObjectThatMasqueradesAsUndefined.h> 348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include <runtime/StringPrototype.h> 358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include <wtf/ASCIICType.h> 36f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick#include <wtf/text/AtomicString.h> 372daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#include <wtf/text/StringBuilder.h> 382daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#include <wtf/text/StringConcatenate.h> 398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectusing namespace JSC; 418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectusing namespace WTF; 428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectnamespace WebCore { 448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 45231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blockvoid JSCSSStyleDeclaration::markChildren(MarkStack& markStack) 46231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block{ 47231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block Base::markChildren(markStack); 48231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 49231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block CSSStyleDeclaration* declaration = impl(); 50231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block JSGlobalData& globalData = *Heap::heap(this)->globalData(); 51231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 52f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch if (CSSRule* parentRule = declaration->parentRule()) 53f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch markDOMObjectWrapper(markStack, globalData, parentRule); 54f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 55231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block if (declaration->isMutableStyleDeclaration()) { 56231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block CSSMutableStyleDeclaration* mutableDeclaration = static_cast<CSSMutableStyleDeclaration*>(declaration); 57231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block CSSMutableStyleDeclaration::const_iterator end = mutableDeclaration->end(); 58231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block for (CSSMutableStyleDeclaration::const_iterator it = mutableDeclaration->begin(); it != end; ++it) 59231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block markDOMObjectWrapper(markStack, globalData, it->value()); 60231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block } 61231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block} 62231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// Check for a CSS prefix. 648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// Passed prefix is all lowercase. 658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// First character of the prefix within the property name may be upper or lowercase. 668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// Other characters in the prefix within the property name must be lowercase. 678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// The prefix within the property name must be followed by a capital letter. 688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatic bool hasCSSPropertyNamePrefix(const Identifier& propertyName, const char* prefix) 698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#ifndef NDEBUG 718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ASSERT(*prefix); 728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project for (const char* p = prefix; *p; ++p) 738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ASSERT(isASCIILower(*p)); 74f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick ASSERT(propertyName.length()); 758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 77f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick if (toASCIILower(propertyName.characters()[0]) != prefix[0]) 788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return false; 798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 80f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick unsigned length = propertyName.length(); 818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project for (unsigned i = 1; i < length; ++i) { 828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!prefix[i]) 83f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick return isASCIIUpper(propertyName.characters()[i]); 84f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick if (propertyName.characters()[i] != prefix[i]) 858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return false; 868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return false; 888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatic String cssPropertyName(const Identifier& propertyName, bool* hadPixelOrPosPrefix = 0) 918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (hadPixelOrPosPrefix) 938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *hadPixelOrPosPrefix = false; 948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 95f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick unsigned length = propertyName.length(); 968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!length) 978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return String(); 988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 992daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch StringBuilder builder; 1002daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch builder.reserveCapacity(length); 1018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project unsigned i = 0; 1038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (hasCSSPropertyNamePrefix(propertyName, "css")) 1058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project i += 3; 1068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project else if (hasCSSPropertyNamePrefix(propertyName, "pixel")) { 1078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project i += 5; 1088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (hadPixelOrPosPrefix) 1098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *hadPixelOrPosPrefix = true; 1108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } else if (hasCSSPropertyNamePrefix(propertyName, "pos")) { 1118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project i += 3; 1128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (hadPixelOrPosPrefix) 1138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *hadPixelOrPosPrefix = true; 1148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } else if (hasCSSPropertyNamePrefix(propertyName, "webkit") 1158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project || hasCSSPropertyNamePrefix(propertyName, "khtml") 1168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project || hasCSSPropertyNamePrefix(propertyName, "apple")) 1172daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch builder.append('-'); 1188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project else { 119f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick if (isASCIIUpper(propertyName.characters()[0])) 1208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return String(); 1218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 1228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1232daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch builder.append(toASCIILower(propertyName.characters()[i++])); 1248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project for (; i < length; ++i) { 126f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick UChar c = propertyName.characters()[i]; 1278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!isASCIIUpper(c)) 1282daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch builder.append(c); 1292daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch else 1302daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch builder.append(makeString('-', toASCIILower(c))); 1318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 1328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1332daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch return builder.toString(); 1348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1362daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochstatic bool isCSSPropertyName(const Identifier& propertyIdentifier) 1378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 13881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch // FIXME: This mallocs a string for the property name and then throws it 13981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch // away. This shows up on peacekeeper's domDynamicCreationCreateElement. 1402daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch return CSSStyleDeclaration::isPropertyName(cssPropertyName(propertyIdentifier)); 1418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool JSCSSStyleDeclaration::canGetItemsForName(ExecState*, CSSStyleDeclaration*, const Identifier& propertyName) 1448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return isCSSPropertyName(propertyName); 1468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1480bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch// FIXME: You can get these properties, and set them (see putDelegate below), 1498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// but you should also be able to enumerate them. 150dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve BlockJSValue JSCSSStyleDeclaration::nameGetter(ExecState* exec, JSValue slotBase, const Identifier& propertyName) 1518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 152dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block JSCSSStyleDeclaration* thisObj = static_cast<JSCSSStyleDeclaration*>(asObject(slotBase)); 1538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Set up pixelOrPos boolean to handle the fact that 1558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // pixelTop returns "CSS Top" as number value in unit pixels 1568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // posTop returns "CSS top" as number value in unit pixels _if_ its a 1578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // positioned element. if it is not a positioned element, return 0 1588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // from MSIE documentation FIXME: IMPLEMENT THAT (Dirk) 1598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool pixelOrPos; 1608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project String prop = cssPropertyName(propertyName, &pixelOrPos); 1618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project RefPtr<CSSValue> v = thisObj->impl()->getPropertyCSSValue(prop); 1628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (v) { 1638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (pixelOrPos && v->cssValueType() == CSSValue::CSS_PRIMITIVE_VALUE) 164e14391e94c850b8bd03680c23b38978db68687a8John Reck return jsNumber(static_pointer_cast<CSSPrimitiveValue>(v)->getFloatValue(CSSPrimitiveValue::CSS_PX)); 1658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return jsStringOrNull(exec, v->cssText()); 1668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 1678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // If the property is a shorthand property (such as "padding"), 1698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // it can only be accessed using getPropertyValue. 1708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Make the SVG 'filter' attribute undetectable, to avoid confusion with the IE 'filter' attribute. 1728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (propertyName == "filter") 173dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return StringObjectThatMasqueradesAsUndefined::create(exec, stringToUString(thisObj->impl()->getPropertyValue(prop))); 1748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return jsString(exec, thisObj->impl()->getPropertyValue(prop)); 1768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1790bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochbool JSCSSStyleDeclaration::putDelegate(ExecState* exec, const Identifier& propertyName, JSValue value, PutPropertySlot&) 1808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool pixelOrPos; 1828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project String prop = cssPropertyName(propertyName, &pixelOrPos); 1832daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch if (!CSSStyleDeclaration::isPropertyName(prop)) 1842daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch return false; 1852daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 1868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project String propValue = valueToStringWithNullCheck(exec, value); 1878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (pixelOrPos) 1888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project propValue += "px"; 1898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ExceptionCode ec = 0; 1908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project impl()->setProperty(prop, propValue, ec); 1918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project setDOMException(exec, ec); 1928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return true; 1938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} // namespace WebCore 196