summaryrefslogtreecommitdiffstats
path: root/WebCore/dom/ExceptionCode.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'WebCore/dom/ExceptionCode.cpp')
-rw-r--r--WebCore/dom/ExceptionCode.cpp161
1 files changed, 161 insertions, 0 deletions
diff --git a/WebCore/dom/ExceptionCode.cpp b/WebCore/dom/ExceptionCode.cpp
new file mode 100644
index 0000000..fa0a7a7
--- /dev/null
+++ b/WebCore/dom/ExceptionCode.cpp
@@ -0,0 +1,161 @@
+/*
+ * Copyright (C) 2006, 2007 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 COMPUTER, 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 COMPUTER, 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 "ExceptionCode.h"
+
+#include "EventException.h"
+#include "RangeException.h"
+#include "XMLHttpRequestException.h"
+
+#if ENABLE(SVG)
+#include "SVGException.h"
+#endif
+
+#if ENABLE(XPATH)
+#include "XPathException.h"
+#endif
+
+namespace WebCore {
+
+static const char* const exceptionNames[] = {
+ "INDEX_SIZE_ERR",
+ "DOMSTRING_SIZE_ERR",
+ "HIERARCHY_REQUEST_ERR",
+ "WRONG_DOCUMENT_ERR",
+ "INVALID_CHARACTER_ERR",
+ "NO_DATA_ALLOWED_ERR",
+ "NO_MODIFICATION_ALLOWED_ERR",
+ "NOT_FOUND_ERR",
+ "NOT_SUPPORTED_ERR",
+ "INUSE_ATTRIBUTE_ERR",
+ "INVALID_STATE_ERR",
+ "SYNTAX_ERR",
+ "INVALID_MODIFICATION_ERR",
+ "NAMESPACE_ERR",
+ "INVALID_ACCESS_ERR",
+ "VALIDATION_ERR",
+ "TYPE_MISMATCH_ERR",
+ "SECURITY_ERR"
+};
+
+static const char* const rangeExceptionNames[] = {
+ "BAD_BOUNDARYPOINTS_ERR",
+ "INVALID_NODE_TYPE_ERR"
+};
+
+static const char* const eventExceptionNames[] = {
+ "UNSPECIFIED_EVENT_TYPE_ERR"
+};
+
+static const char* const xmlHttpRequestExceptionNames[] = {
+ "NETWORK_ERR"
+};
+
+#if ENABLE(XPATH)
+static const char* const xpathExceptionNames[] = {
+ "INVALID_EXPRESSION_ERR",
+ "TYPE_ERR"
+};
+#endif
+
+#if ENABLE(SVG)
+static const char* const svgExceptionNames[] = {
+ "SVG_WRONG_TYPE_ERR",
+ "SVG_INVALID_VALUE_ERR",
+ "SVG_MATRIX_NOT_INVERTABLE"
+};
+#endif
+
+void getExceptionCodeDescription(ExceptionCode ec, ExceptionCodeDescription& description)
+{
+ ASSERT(ec);
+
+ const char* typeName;
+ int code = ec;
+ const char* const* nameTable;
+ int nameTableSize;
+ int nameTableOffset;
+ ExceptionType type;
+
+ if (code >= RangeException::RangeExceptionOffset && code <= RangeException::RangeExceptionMax) {
+ type = RangeExceptionType;
+ typeName = "DOM Range";
+ code -= RangeException::RangeExceptionOffset;
+ nameTable = rangeExceptionNames;
+ nameTableSize = sizeof(rangeExceptionNames) / sizeof(rangeExceptionNames[0]);
+ nameTableOffset = RangeException::BAD_BOUNDARYPOINTS_ERR;
+ } else if (code >= EventException::EventExceptionOffset && code <= EventException::EventExceptionMax) {
+ type = EventExceptionType;
+ typeName = "DOM Events";
+ code -= EventException::EventExceptionOffset;
+ nameTable = eventExceptionNames;
+ nameTableSize = sizeof(eventExceptionNames) / sizeof(eventExceptionNames[0]);
+ nameTableOffset = EventException::UNSPECIFIED_EVENT_TYPE_ERR;
+ } else if (code >= XMLHttpRequestException::XMLHttpRequestExceptionOffset && code <= XMLHttpRequestException::XMLHttpRequestExceptionMax) {
+ type = XMLHttpRequestExceptionType;
+ typeName = "XMLHttpRequest";
+ code -= XMLHttpRequestException::XMLHttpRequestExceptionOffset;
+ nameTable = xmlHttpRequestExceptionNames;
+ nameTableSize = sizeof(xmlHttpRequestExceptionNames) / sizeof(xmlHttpRequestExceptionNames[0]);
+ // XMLHttpRequest exception codes start with 101 and we don't want 100 empty elements in the name array
+ nameTableOffset = XMLHttpRequestException::NETWORK_ERR;
+#if ENABLE(XPATH)
+ } else if (code >= XPathException::XPathExceptionOffset && code <= XPathException::XPathExceptionMax) {
+ type = XPathExceptionType;
+ typeName = "DOM XPath";
+ code -= XPathException::XPathExceptionOffset;
+ nameTable = xpathExceptionNames;
+ nameTableSize = sizeof(xpathExceptionNames) / sizeof(xpathExceptionNames[0]);
+ // XPath exception codes start with 51 and we don't want 51 empty elements in the name array
+ nameTableOffset = XPathException::INVALID_EXPRESSION_ERR;
+#endif
+#if ENABLE(SVG)
+ } else if (code >= SVGException::SVGExceptionOffset && code <= SVGException::SVGExceptionMax) {
+ type = SVGExceptionType;
+ typeName = "DOM SVG";
+ code -= SVGException::SVGExceptionOffset;
+ nameTable = svgExceptionNames;
+ nameTableSize = sizeof(svgExceptionNames) / sizeof(svgExceptionNames[0]);
+ nameTableOffset = SVGException::SVG_WRONG_TYPE_ERR;
+#endif
+ } else {
+ type = DOMExceptionType;
+ typeName = "DOM";
+ nameTable = exceptionNames;
+ nameTableSize = sizeof(exceptionNames) / sizeof(exceptionNames[0]);
+ nameTableOffset = INDEX_SIZE_ERR;
+ }
+
+ description.typeName = typeName;
+ description.name = (ec >= nameTableOffset && ec - nameTableOffset < nameTableSize) ? nameTable[ec - nameTableOffset] : 0;
+ description.code = code;
+ description.type = type;
+
+ // All exceptions used in the DOM code should have names.
+ ASSERT(description.name);
+}
+
+} // namespace WebCore