layout/style/ServoCSSParser.cpp
author Cosmin Sabou <csabou@mozilla.com>
Thu, 02 Aug 2018 19:59:53 +0300
changeset 484986 f7f4ba3486b5e44b6ccdc3b150f5aa0aab76ffb7
parent 465410 d746dd4fe0e864c2e3c35766bdbb318d0407e7a7
child 492422 8ea1aad78f1f0a3c19590b557c02132cf36a7bc5
permissions -rw-r--r--
Backed out changeset 5950c9d63c3b (bug 1090497) for build bustages on several files. CLOSED TREE

/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim: set ts=8 sts=2 et sw=2 tw=80: */
/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */

/* CSS parsing utility functions */

#include "ServoCSSParser.h"

#include "mozilla/ServoBindings.h"
#include "mozilla/ServoStyleSet.h"
#include "nsIDocument.h"

using namespace mozilla;

/* static */ bool
ServoCSSParser::IsValidCSSColor(const nsAString& aValue)
{
  return Servo_IsValidCSSColor(&aValue);
}

/* static */ bool
ServoCSSParser::ComputeColor(ServoStyleSet* aStyleSet,
                             nscolor aCurrentColor,
                             const nsAString& aValue,
                             nscolor* aResultColor,
                             bool* aWasCurrentColor,
                             css::Loader* aLoader)
{
  return Servo_ComputeColor(aStyleSet ? aStyleSet->RawSet() : nullptr,
                            aCurrentColor, &aValue, aResultColor,
                            aWasCurrentColor, aLoader);
}

/* static */ already_AddRefed<RawServoDeclarationBlock>
ServoCSSParser::ParseProperty(nsCSSPropertyID aProperty,
                              const nsAString& aValue,
                              const ParsingEnvironment& aParsingEnvironment,
                              ParsingMode aParsingMode)
{
  NS_ConvertUTF16toUTF8 value(aValue);
  return Servo_ParseProperty(aProperty,
                             &value,
                             aParsingEnvironment.mUrlExtraData,
                             aParsingMode,
                             aParsingEnvironment.mCompatMode,
                             aParsingEnvironment.mLoader).Consume();
}

/* static */ bool
ServoCSSParser::ParseEasing(const nsAString& aValue,
                            URLExtraData* aUrl,
                            nsTimingFunction& aResult)
{
  return Servo_ParseEasing(&aValue, aUrl, &aResult);
}

/* static */ bool
ServoCSSParser::ParseTransformIntoMatrix(const nsAString& aValue,
                                         bool& aContains3DTransform,
                                         RawGeckoGfxMatrix4x4& aResult)
{
  return Servo_ParseTransformIntoMatrix(&aValue,
                                        &aContains3DTransform,
                                        &aResult);
}

/* static */ bool
ServoCSSParser::ParseFontShorthandForMatching(const nsAString& aValue,
                                              URLExtraData* aUrl,
                                              RefPtr<SharedFontList>& aList,
                                              nsCSSValue& aStyle,
                                              nsCSSValue& aStretch,
                                              nsCSSValue& aWeight)
{
  return Servo_ParseFontShorthandForMatching(&aValue, aUrl, &aList,
                                             &aStyle, &aStretch, &aWeight);
}

/* static */ already_AddRefed<URLExtraData>
ServoCSSParser::GetURLExtraData(nsIDocument* aDocument)
{
  MOZ_ASSERT(aDocument);

  // FIXME this is using the wrong base uri (bug 1343919)
  RefPtr<URLExtraData> url = new URLExtraData(aDocument->GetDocumentURI(),
                                              aDocument->GetDocumentURI(),
                                              aDocument->NodePrincipal());
  return url.forget();
}

/* static */ ServoCSSParser::ParsingEnvironment
ServoCSSParser::GetParsingEnvironment(nsIDocument* aDocument)
{
  return ParsingEnvironment(GetURLExtraData(aDocument),
                            aDocument->GetCompatibilityMode(),
                            aDocument->CSSLoader());
}