1e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)/*
2e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) * Copyright (C) 2013 Google Inc. All rights reserved.
3e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) *
4e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) * Redistribution and use in source and binary forms, with or without
5e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) * modification, are permitted provided that the following conditions
6e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) * are met:
7e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) *
8e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) * 1. Redistributions of source code must retain the above copyright
9e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) *    notice, this list of conditions and the following disclaimer.
10e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) * 2. Redistributions in binary form must reproduce the above copyright
11e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) *    notice, this list of conditions and the following disclaimer
12e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) *    in the documentation and/or other materials provided with the
13e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) *    distribution.
14e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) * 3. Neither the name of Google Inc. nor the names of its contributors
15e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) *    may be used to endorse or promote products derived from this
16e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) *    software without specific prior written permission.
17e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) *
18e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
22e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
24e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) */
30e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)
31e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)#include "config.h"
321e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)#include "core/dom/custom/CustomElementException.h"
33e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)
34197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch#include "bindings/core/v8/ExceptionState.h"
35e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)#include "core/dom/ExceptionCode.h"
36e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)
37c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)namespace blink {
38e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)
39e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)String CustomElementException::preamble(const AtomicString& type)
40e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles){
41a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)    return "Registration failed for type '" + type + "'. ";
42e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)}
43e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)
4451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)void CustomElementException::throwException(Reason reason, const AtomicString& type, ExceptionState& exceptionState)
45e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles){
46e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)    switch (reason) {
47e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)    case CannotRegisterFromExtension:
48a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)        exceptionState.throwDOMException(NotSupportedError, preamble(type) + "Elements cannot be registered from extensions.");
49e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)        return;
50e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)
51e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)    case ConstructorPropertyNotConfigurable:
52a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)        exceptionState.throwDOMException(NotSupportedError, preamble(type) + "Prototype constructor property is not configurable.");
53e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)        return;
54e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)
55e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)    case ContextDestroyedCheckingPrototype:
56a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)        exceptionState.throwDOMException(InvalidStateError, preamble(type) + "The context is no longer valid.");
57e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)        return;
58e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)
59e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)    case ContextDestroyedCreatingCallbacks:
6009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)        exceptionState.throwDOMException(InvalidStateError, preamble(type) + "The context is no longer valid.");
61e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)        return;
62e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)
63e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)    case ContextDestroyedRegisteringDefinition:
64197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch        exceptionState.throwDOMException(InvalidStateError, preamble(type) + "The context is no longer valid.");
65e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)        return;
66e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)
678abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)    case ExtendsIsInvalidName:
6809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)        exceptionState.throwDOMException(NotSupportedError, preamble(type) + "The tag name specified in 'extends' is not a valid tag name.");
69e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)        return;
70e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)
718abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)    case ExtendsIsCustomElementName:
7209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)        exceptionState.throwDOMException(NotSupportedError, preamble(type) + "The tag name specified in 'extends' is a custom element name. Use inheritance instead.");
73e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)        return;
74e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)
758abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)    case InvalidName:
7609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)        exceptionState.throwDOMException(SyntaxError, preamble(type) + "The type name is invalid.");
77e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)        return;
78e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)
79e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)    case PrototypeInUse:
80a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)        exceptionState.throwDOMException(NotSupportedError, preamble(type) + "The prototype is already in-use as an interface prototype object.");
81e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)        return;
82e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)
83e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)    case PrototypeNotAnObject:
8409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)        exceptionState.throwDOMException(NotSupportedError, preamble(type) + "The prototype option is not an object.");
85e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)        return;
86e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)
87e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)    case TypeAlreadyRegistered:
8809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)        exceptionState.throwDOMException(NotSupportedError, preamble(type) + "A type with that name is already registered.");
89e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)        return;
90e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)    }
91e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)
92e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)    ASSERT_NOT_REACHED();
93e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)}
94e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)
95c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)} // namespace blink
96