1e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch/* 2e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch * Copyright (C) 2013 Google Inc. All rights reserved. 3e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch * 4e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch * Redistribution and use in source and binary forms, with or without 5e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch * modification, are permitted provided that the following conditions are 6e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch * met: 7e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch * 8e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch * * Redistributions of source code must retain the above copyright 9e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch * notice, this list of conditions and the following disclaimer. 10e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch * * Redistributions in binary form must reproduce the above 11e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch * copyright notice, this list of conditions and the following disclaimer 12e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch * in the documentation and/or other materials provided with the 13e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch * distribution. 14e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch * * Neither the name of Google Inc. nor the names of its 15e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch * contributors may be used to endorse or promote products derived from 16e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch * this software without specific prior written permission. 17e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch * 18e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 19e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 20e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 21e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 22e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 23e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 24e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 25e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 26e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 27e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 28e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch */ 30e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch 31e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch#ifndef CustomElementDescriptor_h 32e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch#define CustomElementDescriptor_h 33e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch 340019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch#include "wtf/HashTableDeletedValueType.h" 35e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch#include "wtf/text/AtomicString.h" 36e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch 37e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdochnamespace WebCore { 38e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch 39e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdochstruct CustomElementDescriptorHash; 40e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch 41e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch// A Custom Element descriptor is everything necessary to match a 42e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch// Custom Element instance to a definition. 43e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdochclass CustomElementDescriptor { 44e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdochpublic: 45e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch CustomElementDescriptor(const AtomicString& type, const AtomicString& namespaceURI, const AtomicString& localName) 46e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch : m_type(type) 47e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch , m_namespaceURI(namespaceURI) 48e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch , m_localName(localName) 49e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch { 50e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch } 51e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch 52e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch ~CustomElementDescriptor() { } 53e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch 54e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch // Specifies whether the custom element is in the HTML or SVG 55e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch // namespace. 56e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch const AtomicString& namespaceURI() const { return m_namespaceURI; } 57e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch 58e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch // The tag name. 59e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch const AtomicString& localName() const { return m_localName; } 60e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch 61e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch // The name of the definition. For custom tags, this is the tag 62e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch // name and the same as "localName". For type extensions, this is 63e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch // the value of the "is" attribute. 64e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch const AtomicString& type() const { return m_type; } 65e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch 66e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch bool isTypeExtension() const { return m_type != m_localName; } 67e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch 68e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch // Stuff for hashing. 69e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch 70e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch CustomElementDescriptor() { } 71e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch explicit CustomElementDescriptor(WTF::HashTableDeletedValueType value) 72e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch : m_type(value) { } 73e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch bool isHashTableDeletedValue() const { return m_type.isHashTableDeletedValue(); } 74e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch 75e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch bool operator==(const CustomElementDescriptor& other) const 76e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch { 77e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch return m_type == other.m_type 78e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch && m_localName == other.m_localName 79e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch && m_namespaceURI == other.m_namespaceURI; 80e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch } 81e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch 82e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdochprivate: 83e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch AtomicString m_type; 84e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch AtomicString m_namespaceURI; 85e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch AtomicString m_localName; 86e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch}; 87e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch 88e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch} // namespace WebCore 89e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch 90e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdochnamespace WTF { 91e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch 92e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdochtemplate<typename T> struct DefaultHash; 93e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdochtemplate<> struct DefaultHash<WebCore::CustomElementDescriptor> { 94e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch typedef WebCore::CustomElementDescriptorHash Hash; 95e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch}; 96e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch 97e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch} // namespace WTF 98e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch 99e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch#endif // CustomElementDescriptor_h 100