diff -r 000000000000 -r 6474c204b198 content/xul/templates/src/nsXULContentUtils.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/content/xul/templates/src/nsXULContentUtils.h Wed Dec 31 06:09:35 2014 +0100 @@ -0,0 +1,174 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* 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/. */ + +/* + + A package of routines shared by the XUL content code. + + */ + +#ifndef nsXULContentUtils_h__ +#define nsXULContentUtils_h__ + +#include "nsISupports.h" + +class nsIAtom; +class nsIContent; +class nsIDocument; +class nsIDOMNodeList; +class nsIRDFNode; +class nsCString; +class nsString; +class nsIRDFResource; +class nsIRDFLiteral; +class nsIRDFService; +class nsIDateTimeFormat; +class nsICollation; + +// errors to pass to LogTemplateError +#define ERROR_TEMPLATE_INVALID_QUERYPROCESSOR \ + "querytype attribute doesn't specify a valid query processor" +#define ERROR_TEMPLATE_INVALID_QUERYSET \ + "unexpected element" +#define ERROR_TEMPLATE_NO_MEMBERVAR \ + "no member variable found. Action body should have an element with uri attribute" +#define ERROR_TEMPLATE_WHERE_NO_SUBJECT \ + " element is missing a subject attribute" +#define ERROR_TEMPLATE_WHERE_NO_RELATION \ + " element is missing a rel attribute" +#define ERROR_TEMPLATE_WHERE_NO_VALUE \ + " element is missing a value attribute" +#define ERROR_TEMPLATE_WHERE_NO_VAR \ + " element must have at least one variable as a subject or value" +#define ERROR_TEMPLATE_BINDING_BAD_SUBJECT \ + " requires a variable for its subject attribute" +#define ERROR_TEMPLATE_BINDING_BAD_PREDICATE \ + " element is missing a predicate attribute" +#define ERROR_TEMPLATE_BINDING_BAD_OBJECT \ + " requires a variable for its object attribute" +#define ERROR_TEMPLATE_CONTENT_NOT_FIRST \ + "expected to be first" +#define ERROR_TEMPLATE_MEMBER_NOCONTAINERVAR \ + " requires a variable for its container attribute" +#define ERROR_TEMPLATE_MEMBER_NOCHILDVAR \ + " requires a variable for its child attribute" +#define ERROR_TEMPLATE_TRIPLE_NO_VAR \ + " should have at least one variable as a subject or object" +#define ERROR_TEMPLATE_TRIPLE_BAD_SUBJECT \ + " requires a variable for its subject attribute" +#define ERROR_TEMPLATE_TRIPLE_BAD_PREDICATE \ + " should have a non-variable value as a predicate" +#define ERROR_TEMPLATE_TRIPLE_BAD_OBJECT \ + " requires a variable for its object attribute" +#define ERROR_TEMPLATE_MEMBER_UNBOUND \ + "neither container or child variables of has a value" +#define ERROR_TEMPLATE_TRIPLE_UNBOUND \ + "neither subject or object variables of has a value" +#define ERROR_TEMPLATE_BAD_XPATH \ + "XPath expression in query could not be parsed" +#define ERROR_TEMPLATE_BAD_ASSIGN_XPATH \ + "XPath expression in could not be parsed" +#define ERROR_TEMPLATE_BAD_BINDING_XPATH \ + "XPath expression in could not be parsed" +#define ERROR_TEMPLATE_STORAGE_BAD_URI \ + "only profile: or file URI are allowed" +#define ERROR_TEMPLATE_STORAGE_CANNOT_OPEN_DATABASE \ + "cannot open given database" +#define ERROR_TEMPLATE_STORAGE_BAD_QUERY \ + "syntax error in the SQL query" +#define ERROR_TEMPLATE_STORAGE_UNKNOWN_QUERY_PARAMETER \ + "the given named parameter is unknown in the SQL query" +#define ERROR_TEMPLATE_STORAGE_WRONG_TYPE_QUERY_PARAMETER \ + "the type of a query parameter is wrong" +#define ERROR_TEMPLATE_STORAGE_QUERY_PARAMETER_NOT_BOUND \ + "a query parameter cannot be bound to the SQL query" + +class nsXULContentUtils +{ +protected: + static nsIRDFService* gRDF; + static nsIDateTimeFormat* gFormat; + static nsICollation *gCollation; + + static bool gDisableXULCache; + + static int + DisableXULCacheChangedCallback(const char* aPrefName, void* aClosure); + +public: + static nsresult + Init(); + + static nsresult + Finish(); + + static nsresult + FindChildByTag(nsIContent *aElement, + int32_t aNameSpaceID, + nsIAtom* aTag, + nsIContent **aResult); + + static nsresult + FindChildByResource(nsIContent* aElement, + nsIRDFResource* aResource, + nsIContent** aResult); + + static nsresult + GetElementResource(nsIContent* aElement, nsIRDFResource** aResult); + + static nsresult + GetTextForNode(nsIRDFNode* aNode, nsAString& aResult); + + /** + * Construct a URI from the element ID given. This uses aElement as the + * ref and aDocument's document URI as the base. If aDocument's document + * URI does not support refs, this will throw NS_ERROR_NOT_AVAILABLE. + */ + static nsresult + MakeElementURI(nsIDocument* aDocument, const nsAString& aElementID, nsCString& aURI); + + static nsresult + MakeElementResource(nsIDocument* aDocument, const nsAString& aElementID, nsIRDFResource** aResult); + + /** + * Extract the element ID from aURI. Note that aURI must be an absolute + * URI string in UTF8; the element ID is the ref from the URI. If the + * scheme does not support refs, then the ID will be empty. + */ + static nsresult + MakeElementID(nsIDocument* aDocument, const nsACString& aURI, nsAString& aElementID); + + static nsresult + GetResource(int32_t aNameSpaceID, nsIAtom* aAttribute, nsIRDFResource** aResult); + + static nsresult + GetResource(int32_t aNameSpaceID, const nsAString& aAttribute, nsIRDFResource** aResult); + + static nsresult + SetCommandUpdater(nsIDocument* aDocument, nsIContent* aElement); + + /** + * Log a message to the error console + */ + static void + LogTemplateError(const char* aMsg); + + static nsIRDFService* + RDFService() + { + return gRDF; + } + + static nsICollation* + GetCollation(); + +#define XUL_RESOURCE(ident, uri) static nsIRDFResource* ident +#define XUL_LITERAL(ident, val) static nsIRDFLiteral* ident +#include "nsXULResourceList.h" +#undef XUL_RESOURCE +#undef XUL_LITERAL +}; + +#endif // nsXULContentUtils_h__