/*
 *  Copyright (C) 2006-2017 Apple Inc. All rights reserved.
 *
 *  This library is free software; you can redistribute it and/or
 *  modify it under the terms of the GNU Lesser General Public
 *  License as published by the Free Software Foundation; either
 *  version 2 of the License, or (at your option) any later version.
 *
 *  This library is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 *  Lesser General Public License for more details.
 *
 *  You should have received a copy of the GNU Lesser General Public
 *  License along with this library; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
 */

#pragma once

#include <wtf/EnumTraits.h>

namespace WebCore {

enum ExceptionCode {
    // DOMException error names (https://heycam.github.io/webidl/#idl-DOMException-error-names).
    // Those need to be kept in sync with the array in DOMException.cpp.
    IndexSizeError, // Deprecated. Use RangeError instead.
    HierarchyRequestError,
    WrongDocumentError,
    InvalidCharacterError,
    NoModificationAllowedError,
    NotFoundError,
    NotSupportedError,
    InUseAttributeError,
    InvalidStateError,
    SyntaxError,
    InvalidModificationError,
    NamespaceError,
    InvalidAccessError, // Deprecated. use NotAllowedError instead.
    TypeMismatchError, // Deprecated. Use TypeError instead.
    SecurityError,
    NetworkError,
    AbortError,
    URLMismatchError,
    QuotaExceededError,
    TimeoutError,
    InvalidNodeTypeError,
    DataCloneError,
    EncodingError,
    NotReadableError,
    UnknownError,
    ConstraintError,
    DataError,
    TransactionInactiveError,
    ReadonlyError,
    VersionError,
    OperationError,
    NotAllowedError,

    // Simple exceptions (https://heycam.github.io/webidl/#idl-exceptions).
    RangeError,
    TypeError,

    // Non-standard error.
    StackOverflowError,

    // Used to indicate to the bindings that a JS exception was thrown below and it should be propagated.
    ExistingExceptionError,
};

} // namespace WebCore

namespace WTF {

template<> struct EnumTraits<WebCore::ExceptionCode> {
    using values = EnumValues<
    WebCore::ExceptionCode,
    WebCore::ExceptionCode::IndexSizeError,
    WebCore::ExceptionCode::HierarchyRequestError,
    WebCore::ExceptionCode::WrongDocumentError,
    WebCore::ExceptionCode::InvalidCharacterError,
    WebCore::ExceptionCode::NoModificationAllowedError,
    WebCore::ExceptionCode::NotFoundError,
    WebCore::ExceptionCode::NotSupportedError,
    WebCore::ExceptionCode::InUseAttributeError,
    WebCore::ExceptionCode::InvalidStateError,
    WebCore::ExceptionCode::SyntaxError,
    WebCore::ExceptionCode::InvalidModificationError,
    WebCore::ExceptionCode::NamespaceError,
    WebCore::ExceptionCode::InvalidAccessError,
    WebCore::ExceptionCode::TypeMismatchError,
    WebCore::ExceptionCode::SecurityError,
    WebCore::ExceptionCode::NetworkError,
    WebCore::ExceptionCode::AbortError,
    WebCore::ExceptionCode::URLMismatchError,
    WebCore::ExceptionCode::QuotaExceededError,
    WebCore::ExceptionCode::TimeoutError,
    WebCore::ExceptionCode::InvalidNodeTypeError,
    WebCore::ExceptionCode::DataCloneError,
    WebCore::ExceptionCode::EncodingError,
    WebCore::ExceptionCode::NotReadableError,
    WebCore::ExceptionCode::UnknownError,
    WebCore::ExceptionCode::ConstraintError,
    WebCore::ExceptionCode::DataError,
    WebCore::ExceptionCode::TransactionInactiveError,
    WebCore::ExceptionCode::ReadonlyError,
    WebCore::ExceptionCode::VersionError,
    WebCore::ExceptionCode::OperationError,
    WebCore::ExceptionCode::NotAllowedError,
    WebCore::ExceptionCode::RangeError,
    WebCore::ExceptionCode::TypeError,
    WebCore::ExceptionCode::StackOverflowError,
    WebCore::ExceptionCode::ExistingExceptionError
    >;
};

} // namespace WTF
