1/* 2 * Copyright (C) 2006, 2007 Apple Inc. All rights reserved. 3 * 4 * Redistribution and use in source and binary forms, with or without 5 * modification, are permitted provided that the following conditions 6 * are met: 7 * 1. Redistributions of source code must retain the above copyright 8 * notice, this list of conditions and the following disclaimer. 9 * 2. Redistributions in binary form must reproduce the above copyright 10 * notice, this list of conditions and the following disclaimer in the 11 * documentation and/or other materials provided with the distribution. 12 * 13 * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY 14 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 15 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 16 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR 17 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 18 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 19 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 20 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 21 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 23 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 24 */ 25 26#include "config.h" 27#include "WebKitDLL.h" 28#include "DOMCSSClasses.h" 29 30#include <WebCore/BString.h> 31#include <wtf/text/WTFString.h> 32 33// DOMCSSStyleDeclaration - DOMCSSStyleDeclaration ---------------------------- 34 35DOMCSSStyleDeclaration::DOMCSSStyleDeclaration(WebCore::CSSStyleDeclaration* s) 36: m_style(0) 37{ 38 if (s) 39 s->ref(); 40 41 m_style = s; 42} 43 44DOMCSSStyleDeclaration::~DOMCSSStyleDeclaration() 45{ 46 if (m_style) 47 m_style->deref(); 48} 49 50IDOMCSSStyleDeclaration* DOMCSSStyleDeclaration::createInstance(WebCore::CSSStyleDeclaration* s) 51{ 52 if (!s) 53 return 0; 54 55 HRESULT hr; 56 IDOMCSSStyleDeclaration* domStyle = 0; 57 58 DOMCSSStyleDeclaration* newStyle = new DOMCSSStyleDeclaration(s); 59 hr = newStyle->QueryInterface(IID_IDOMCSSStyleDeclaration, (void**)&domStyle); 60 61 if (FAILED(hr)) 62 return 0; 63 64 return domStyle; 65} 66 67// DOMCSSStyleDeclaration - IUnknown ------------------------------------------ 68 69HRESULT STDMETHODCALLTYPE DOMCSSStyleDeclaration::QueryInterface(REFIID riid, void** ppvObject) 70{ 71 *ppvObject = 0; 72 if (IsEqualGUID(riid, IID_IDOMCSSStyleDeclaration)) 73 *ppvObject = static_cast<IDOMCSSStyleDeclaration*>(this); 74 else 75 return DOMObject::QueryInterface(riid, ppvObject); 76 77 AddRef(); 78 return S_OK; 79} 80 81// DOMCSSStyleDeclaration - IDOMCSSStyleDeclaration --------------------------- 82 83HRESULT STDMETHODCALLTYPE DOMCSSStyleDeclaration::cssText( 84 /* [retval][out] */ BSTR* /*result*/) 85{ 86 ASSERT_NOT_REACHED(); 87 return E_NOTIMPL; 88} 89 90HRESULT STDMETHODCALLTYPE DOMCSSStyleDeclaration::setCssText( 91 /* [in] */ BSTR cssText) 92{ 93 WTF::String cssTextString(cssText); 94 // FIXME: <rdar://5148045> return DOM exception info 95 WebCore::ExceptionCode ec; 96 m_style->setCssText(cssTextString, ec); 97 return S_OK; 98} 99 100HRESULT STDMETHODCALLTYPE DOMCSSStyleDeclaration::getPropertyValue( 101 /* [in] */ BSTR propertyName, 102 /* [retval][out] */ BSTR* result) 103{ 104 WTF::String propertyNameString(propertyName); 105 WTF::String value = m_style->getPropertyValue(propertyNameString); 106 *result = WebCore::BString(value).release(); 107 if (value.length() && !*result) 108 return E_OUTOFMEMORY; 109 return S_OK; 110} 111 112HRESULT STDMETHODCALLTYPE DOMCSSStyleDeclaration::getPropertyCSSValue( 113 /* [in] */ BSTR /*propertyName*/, 114 /* [retval][out] */ IDOMCSSValue** /*result*/) 115{ 116 ASSERT_NOT_REACHED(); 117 return E_NOTIMPL; 118} 119 120HRESULT STDMETHODCALLTYPE DOMCSSStyleDeclaration::removeProperty( 121 /* [in] */ BSTR /*propertyName*/, 122 /* [retval][out] */ BSTR* /*result*/) 123{ 124 ASSERT_NOT_REACHED(); 125 return E_NOTIMPL; 126} 127 128HRESULT STDMETHODCALLTYPE DOMCSSStyleDeclaration::getPropertyPriority( 129 /* [in] */ BSTR /*propertyName*/, 130 /* [retval][out] */ BSTR* /*result*/) 131{ 132 ASSERT_NOT_REACHED(); 133 return E_NOTIMPL; 134} 135 136HRESULT STDMETHODCALLTYPE DOMCSSStyleDeclaration::setProperty( 137 /* [in] */ BSTR propertyName, 138 /* [in] */ BSTR value, 139 /* [in] */ BSTR priority) 140{ 141 WTF::String propertyNameString(propertyName); 142 WTF::String valueString(value); 143 WTF::String priorityString(priority); 144 // FIXME: <rdar://5148045> return DOM exception info 145 WebCore::ExceptionCode code; 146 m_style->setProperty(propertyNameString, valueString, priorityString, code); 147 return S_OK; 148} 149 150HRESULT STDMETHODCALLTYPE DOMCSSStyleDeclaration::length( 151 /* [retval][out] */ UINT* /*result*/) 152{ 153 ASSERT_NOT_REACHED(); 154 return E_NOTIMPL; 155} 156 157HRESULT STDMETHODCALLTYPE DOMCSSStyleDeclaration::item( 158 /* [in] */ UINT /*index*/, 159 /* [retval][out] */ BSTR* /*result*/) 160{ 161 ASSERT_NOT_REACHED(); 162 return E_NOTIMPL; 163} 164 165HRESULT STDMETHODCALLTYPE DOMCSSStyleDeclaration::parentRule( 166 /* [retval][out] */ IDOMCSSRule** /*result*/) 167{ 168 ASSERT_NOT_REACHED(); 169 return E_NOTIMPL; 170} 171