/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- *//* 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/. *//* DOM object holding utility CSS functions */#include"CSS.h"#include"mozilla/dom/BindingDeclarations.h"#include"nsCSSParser.h"#include"nsGlobalWindow.h"#include"nsIDocument.h"#include"nsIURI.h"#include"nsStyleUtil.h"#include"xpcpublic.h"namespacemozilla{namespacedom{structSupportsParsingInfo{nsIURI*mDocURI;nsIURI*mBaseURI;nsIPrincipal*mPrincipal;};staticnsresultGetParsingInfo(constGlobalObject&aGlobal,SupportsParsingInfo&aInfo){nsGlobalWindow*win=xpc::WindowOrNull(aGlobal.Get());if(!win){returnNS_ERROR_FAILURE;}nsCOMPtr<nsIDocument>doc=win->GetDoc();if(!doc){returnNS_ERROR_FAILURE;}aInfo.mDocURI=nsCOMPtr<nsIURI>(doc->GetDocumentURI());aInfo.mBaseURI=nsCOMPtr<nsIURI>(doc->GetBaseURI());aInfo.mPrincipal=win->GetPrincipal();returnNS_OK;}/* static */boolCSS::Supports(constGlobalObject&aGlobal,constnsAString&aProperty,constnsAString&aValue,ErrorResult&aRv){nsCSSParserparser;SupportsParsingInfoinfo;nsresultrv=GetParsingInfo(aGlobal,info);if(NS_FAILED(rv)){aRv.Throw(rv);returnfalse;}returnparser.EvaluateSupportsDeclaration(aProperty,aValue,info.mDocURI,info.mBaseURI,info.mPrincipal);}/* static */boolCSS::Supports(constGlobalObject&aGlobal,constnsAString&aCondition,ErrorResult&aRv){nsCSSParserparser;SupportsParsingInfoinfo;nsresultrv=GetParsingInfo(aGlobal,info);if(NS_FAILED(rv)){aRv.Throw(rv);returnfalse;}returnparser.EvaluateSupportsCondition(aCondition,info.mDocURI,info.mBaseURI,info.mPrincipal);}/* static */voidCSS::Escape(constGlobalObject&aGlobal,constnsAString&aIdent,nsAString&aReturn,ErrorResult&aRv){boolsuccess=nsStyleUtil::AppendEscapedCSSIdent(aIdent,aReturn);if(!success){aRv.Throw(NS_ERROR_DOM_INVALID_CHARACTER_ERR);}}}// namespace dom}// namespace mozilla