| /* |
| * Copyright (C) 2016-2021 Apple Inc. All rights reserved. |
| * |
| * Redistribution and use in source and binary forms, with or without |
| * modification, are permitted provided that the following conditions |
| * are met: |
| * 1. Redistributions of source code must retain the above copyright |
| * notice, this list of conditions and the following disclaimer. |
| * 2. Redistributions in binary form must reproduce the above copyright |
| * notice, this list of conditions and the following disclaimer in the |
| * documentation and/or other materials provided with the distribution. |
| * |
| * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY |
| * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
| * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR |
| * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR |
| * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, |
| * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, |
| * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR |
| * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY |
| * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
| * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
| * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| */ |
| |
| #include "config.h" |
| #include "DeprecatedCSSOMPrimitiveValue.h" |
| |
| #include "DeprecatedCSSOMCounter.h" |
| #include "DeprecatedCSSOMRGBColor.h" |
| #include "DeprecatedCSSOMRect.h" |
| |
| namespace WebCore { |
| |
| unsigned short DeprecatedCSSOMPrimitiveValue::primitiveType() const |
| { |
| // FIXME: Some of these are never exposed to the web because code elsewhere prevents it. We can ASSERT_NOT_REACHED for those. |
| // FIXME: Some of these should return CSS_UNKNOWN instead of hard-coded numbers not mentioned in the IDL file. |
| |
| switch (m_value->primitiveType()) { |
| case CSSUnitType::CSS_ATTR: return CSS_ATTR; |
| case CSSUnitType::CSS_CALC: return 113; |
| case CSSUnitType::CSS_CALC_PERCENTAGE_WITH_LENGTH: return 115; |
| case CSSUnitType::CSS_CALC_PERCENTAGE_WITH_NUMBER: return 114; |
| case CSSUnitType::CSS_CHS: return 109; |
| case CSSUnitType::CSS_IC: return CSS_UNKNOWN; |
| case CSSUnitType::CSS_CM: return CSS_CM; |
| case CSSUnitType::CSS_COUNTER: return CSS_COUNTER; |
| case CSSUnitType::CSS_COUNTER_NAME: return 110; |
| case CSSUnitType::CSS_DEG: return CSS_DEG; |
| case CSSUnitType::CSS_DIMENSION: return CSS_DIMENSION; |
| case CSSUnitType::CSS_DPCM: return 32; |
| case CSSUnitType::CSS_DPI: return 31; |
| case CSSUnitType::CSS_DPPX: return 30; |
| case CSSUnitType::CSS_EMS: return CSS_EMS; |
| case CSSUnitType::CSS_EXS: return CSS_EXS; |
| case CSSUnitType::CSS_FONT_FAMILY: return CSS_STRING; |
| case CSSUnitType::CSS_FR: return 33; |
| case CSSUnitType::CSS_GRAD: return CSS_GRAD; |
| case CSSUnitType::CSS_HZ: return CSS_HZ; |
| case CSSUnitType::CSS_IDENT: return CSS_IDENT; |
| case CSSUnitType::CustomIdent: return CSS_IDENT; |
| case CSSUnitType::CSS_IN: return CSS_IN; |
| case CSSUnitType::CSS_KHZ: return CSS_KHZ; |
| case CSSUnitType::CSS_LHS: return 35; |
| case CSSUnitType::CSS_MM: return CSS_MM; |
| case CSSUnitType::CSS_MS: return CSS_MS; |
| case CSSUnitType::CSS_NUMBER: return CSS_NUMBER; |
| case CSSUnitType::CSS_PAIR: return 100; |
| case CSSUnitType::CSS_PC: return CSS_PC; |
| case CSSUnitType::CSS_PERCENTAGE: return CSS_PERCENTAGE; |
| case CSSUnitType::CSS_PROPERTY_ID: return CSS_IDENT; |
| case CSSUnitType::CSS_PT: return CSS_PT; |
| case CSSUnitType::CSS_PX: return CSS_PX; |
| case CSSUnitType::CSS_Q: return 34; |
| case CSSUnitType::CSS_QUAD: return 112; |
| case CSSUnitType::CSS_QUIRKY_EMS: return 120; |
| case CSSUnitType::CSS_RAD: return CSS_RAD; |
| case CSSUnitType::CSS_RECT: return CSS_RECT; |
| case CSSUnitType::CSS_REMS: return 108; |
| case CSSUnitType::CSS_RGBCOLOR: return CSS_RGBCOLOR; |
| case CSSUnitType::CSS_RLHS: return 36; |
| case CSSUnitType::CSS_S: return CSS_S; |
| case CSSUnitType::CSS_SHAPE: return 111; |
| case CSSUnitType::CSS_STRING: return CSS_STRING; |
| case CSSUnitType::CSS_TURN: return 107; |
| case CSSUnitType::CSS_UNICODE_RANGE: return 102; |
| case CSSUnitType::CSS_UNKNOWN: return CSS_UNKNOWN; |
| case CSSUnitType::CSS_URI: return CSS_URI; |
| case CSSUnitType::CSS_VALUE_ID: return CSS_IDENT; |
| case CSSUnitType::CSS_VH: return CSS_VH; |
| case CSSUnitType::CSS_VMAX: return CSS_VMAX; |
| case CSSUnitType::CSS_VMIN: return CSS_VMIN; |
| case CSSUnitType::CSS_VW: return CSS_VW; |
| case CSSUnitType::CSS_X: return 37; |
| |
| default: return CSS_UNKNOWN; |
| } |
| } |
| |
| ExceptionOr<float> DeprecatedCSSOMPrimitiveValue::getFloatValue(unsigned short unitType) const |
| { |
| // FIXME: Some of these values do not need to be exposed as a destination type. Remove cases below and give InvalidAccessError instead. |
| |
| switch (unitType) { |
| case CSS_CM: return m_value->getFloatValue(CSSUnitType::CSS_CM); |
| case CSS_DEG: return m_value->getFloatValue(CSSUnitType::CSS_DEG); |
| case CSS_DIMENSION: return m_value->getFloatValue(CSSUnitType::CSS_DIMENSION); |
| case CSS_EMS: return m_value->getFloatValue(CSSUnitType::CSS_EMS); |
| case CSS_EXS: return m_value->getFloatValue(CSSUnitType::CSS_EXS); |
| case CSS_GRAD: return m_value->getFloatValue(CSSUnitType::CSS_GRAD); |
| case CSS_HZ: return m_value->getFloatValue(CSSUnitType::CSS_HZ); |
| case CSS_IN: return m_value->getFloatValue(CSSUnitType::CSS_IN); |
| case CSS_KHZ: return m_value->getFloatValue(CSSUnitType::CSS_KHZ); |
| case CSS_MM: return m_value->getFloatValue(CSSUnitType::CSS_MM); |
| case CSS_MS: return m_value->getFloatValue(CSSUnitType::CSS_MS); |
| case CSS_NUMBER: return m_value->getFloatValue(CSSUnitType::CSS_NUMBER); |
| case CSS_PC: return m_value->getFloatValue(CSSUnitType::CSS_PC); |
| case CSS_PERCENTAGE: return m_value->getFloatValue(CSSUnitType::CSS_PERCENTAGE); |
| case CSS_PT: return m_value->getFloatValue(CSSUnitType::CSS_PT); |
| case CSS_PX: return m_value->getFloatValue(CSSUnitType::CSS_PX); |
| case CSS_RAD: return m_value->getFloatValue(CSSUnitType::CSS_RAD); |
| case CSS_S: return m_value->getFloatValue(CSSUnitType::CSS_S); |
| case CSS_VH: return m_value->getFloatValue(CSSUnitType::CSS_VH); |
| case CSS_VMAX: return m_value->getFloatValue(CSSUnitType::CSS_VMAX); |
| case CSS_VMIN: return m_value->getFloatValue(CSSUnitType::CSS_VMIN); |
| case CSS_VW: return m_value->getFloatValue(CSSUnitType::CSS_VW); |
| |
| case 30: return m_value->getFloatValue(CSSUnitType::CSS_DPPX); |
| case 31: return m_value->getFloatValue(CSSUnitType::CSS_DPI); |
| case 32: return m_value->getFloatValue(CSSUnitType::CSS_DPCM); |
| case 33: return m_value->getFloatValue(CSSUnitType::CSS_FR); |
| case 34: return m_value->getFloatValue(CSSUnitType::CSS_Q); |
| case 35: return m_value->getFloatValue(CSSUnitType::CSS_LHS); |
| case 36: return m_value->getFloatValue(CSSUnitType::CSS_RLHS); |
| case 37: return m_value->getFloatValue(CSSUnitType::CSS_X); |
| case 107: return m_value->getFloatValue(CSSUnitType::CSS_TURN); |
| case 108: return m_value->getFloatValue(CSSUnitType::CSS_REMS); |
| case 109: return m_value->getFloatValue(CSSUnitType::CSS_CHS); |
| case 113: return m_value->getFloatValue(CSSUnitType::CSS_CALC); |
| case 114: return m_value->getFloatValue(CSSUnitType::CSS_CALC_PERCENTAGE_WITH_NUMBER); |
| case 115: return m_value->getFloatValue(CSSUnitType::CSS_CALC_PERCENTAGE_WITH_LENGTH); |
| case 120: return m_value->getFloatValue(CSSUnitType::CSS_QUIRKY_EMS); |
| |
| default: return Exception { InvalidAccessError }; |
| } |
| } |
| |
| ExceptionOr<String> DeprecatedCSSOMPrimitiveValue::getStringValue() const |
| { |
| switch (primitiveType()) { |
| case CSS_ATTR: return m_value->stringValue(); |
| case CSS_IDENT: return m_value->stringValue(); |
| case CSS_STRING: return m_value->stringValue(); |
| case CSS_URI: return m_value->stringValue(); |
| default: return Exception { InvalidAccessError }; |
| } |
| } |
| |
| ExceptionOr<Ref<DeprecatedCSSOMCounter>> DeprecatedCSSOMPrimitiveValue::getCounterValue() const |
| { |
| if (primitiveType() != CSS_COUNTER) |
| return Exception { InvalidAccessError }; |
| return DeprecatedCSSOMCounter::create(*m_value->counterValue(), m_owner); |
| } |
| |
| ExceptionOr<Ref<DeprecatedCSSOMRect>> DeprecatedCSSOMPrimitiveValue::getRectValue() const |
| { |
| if (primitiveType() != CSS_RECT) |
| return Exception { InvalidAccessError }; |
| return DeprecatedCSSOMRect::create(*m_value->rectValue(), m_owner); |
| } |
| |
| ExceptionOr<Ref<DeprecatedCSSOMRGBColor>> DeprecatedCSSOMPrimitiveValue::getRGBColorValue() const |
| { |
| if (primitiveType() != CSS_RGBCOLOR) |
| return Exception { InvalidAccessError }; |
| return DeprecatedCSSOMRGBColor::create(m_owner, m_value->color()); |
| } |
| |
| } |