1635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project/* 2635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * Copyright (C) 2009 Google Inc. All rights reserved. 3635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * 4635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * Redistribution and use in source and binary forms, with or without 5635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * modification, are permitted provided that the following conditions are 6635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * met: 7635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * 8635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * * Redistributions of source code must retain the above copyright 9635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * notice, this list of conditions and the following disclaimer. 10635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * * Redistributions in binary form must reproduce the above 11635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * copyright notice, this list of conditions and the following disclaimer 12635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * in the documentation and/or other materials provided with the 13635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * distribution. 14635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * * Neither the name of Google Inc. nor the names of its 15635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * contributors may be used to endorse or promote products derived from 16635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * this software without specific prior written permission. 17635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * 18635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 19635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 20635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 21635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 22635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 23635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 24635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 25635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 26635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 27635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 28635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project */ 30635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 318f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian#include <config.h> 32635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 338f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian#if ENABLE(SVG) 34d0825bca7fe65beaee391d30da42e937db621564Steve Block#include "V8SVGLength.h" 35635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 36e14391e94c850b8bd03680c23b38978db68687a8John Reck#include "SVGPropertyTearOff.h" 378f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian#include "V8Binding.h" 3828040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu#include "V8BindingMacros.h" 39635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 408f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qiannamespace WebCore { 41635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 42d0825bca7fe65beaee391d30da42e937db621564Steve Blockv8::Handle<v8::Value> V8SVGLength::valueAccessorGetter(v8::Local<v8::String> name, const v8::AccessorInfo& info) 43635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project{ 4428040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu INC_STATS("DOM.SVGLength.value._get"); 45e14391e94c850b8bd03680c23b38978db68687a8John Reck SVGPropertyTearOff<SVGLength>* wrapper = V8SVGLength::toNative(info.Holder()); 46e14391e94c850b8bd03680c23b38978db68687a8John Reck SVGLength& imp = wrapper->propertyReference(); 4728040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu ExceptionCode ec = 0; 4828040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu float value = imp.value(wrapper->contextElement(), ec); 4928040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu if (UNLIKELY(ec)) { 5028040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu V8Proxy::setDOMException(ec); 5128040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu return v8::Handle<v8::Value>(); 5228040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu } 5328040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu return v8::Number::New(value); 5428040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu} 5528040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu 5628040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhuvoid V8SVGLength::valueAccessorSetter(v8::Local<v8::String> name, v8::Local<v8::Value> value, const v8::AccessorInfo& info) 5728040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu{ 5828040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu INC_STATS("DOM.SVGLength.value._set"); 594576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang SVGPropertyTearOff<SVGLength>* wrapper = V8SVGLength::toNative(info.Holder()); 604576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang if (wrapper->role() == AnimValRole) { 614576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang V8Proxy::setDOMException(NO_MODIFICATION_ALLOWED_ERR); 624576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang return; 634576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang } 644576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang 6528040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu if (!isUndefinedOrNull(value) && !value->IsNumber() && !value->IsBoolean()) { 6628040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu V8Proxy::throwTypeError(); 6728040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu return; 6828040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu } 6928040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu 7028040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu SVGLength& imp = wrapper->propertyReference(); 7128040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu ExceptionCode ec = 0; 7228040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu imp.setValue(static_cast<float>(value->NumberValue()), wrapper->contextElement(), ec); 7328040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu if (UNLIKELY(ec)) 7428040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu V8Proxy::setDOMException(ec); 7528040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu else 7628040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu wrapper->commitChange(); 77635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project} 78635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 79d0825bca7fe65beaee391d30da42e937db621564Steve Blockv8::Handle<v8::Value> V8SVGLength::convertToSpecifiedUnitsCallback(const v8::Arguments& args) 80635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project{ 818f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian INC_STATS("DOM.SVGLength.convertToSpecifiedUnits"); 824576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang SVGPropertyTearOff<SVGLength>* wrapper = V8SVGLength::toNative(args.Holder()); 834576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang if (wrapper->role() == AnimValRole) { 844576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang V8Proxy::setDOMException(NO_MODIFICATION_ALLOWED_ERR); 854576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang return v8::Handle<v8::Value>(); 864576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang } 874576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang 8828040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu if (args.Length() < 1) 8928040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu return throwError("Not enough arguments", V8Proxy::SyntaxError); 9028040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu 91e14391e94c850b8bd03680c23b38978db68687a8John Reck SVGLength& imp = wrapper->propertyReference(); 9228040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu ExceptionCode ec = 0; 9328040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu EXCEPTION_BLOCK(int, unitType, toUInt32(args[0])); 9428040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu imp.convertToSpecifiedUnits(unitType, wrapper->contextElement(), ec); 9528040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu if (UNLIKELY(ec)) 9628040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu V8Proxy::setDOMException(ec); 9728040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu else 9828040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu wrapper->commitChange(); 9928040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu return v8::Handle<v8::Value>(); 100635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project} 101635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 102635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project} // namespace WebCore 103635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 1048f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian#endif 105