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