15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/* 25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2012 Google Inc. All rights reserved. 35c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 45c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Redistribution and use in source and binary forms, with or without 55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * modification, are permitted provided that the following conditions are 65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * met: 75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * * Redistributions of source code must retain the above copyright 95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * notice, this list of conditions and the following disclaimer. 105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * * Redistributions in binary form must reproduce the above 115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * copyright notice, this list of conditions and the following disclaimer 125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * in the documentation and/or other materials provided with the 135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * distribution. 145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * * Neither the name of Google Inc. nor the names of its 155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * contributors may be used to endorse or promote products derived from 165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * this software without specific prior written permission. 175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "config.h" 32d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)#include "core/html/HTMLShadowElement.h" 335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 345d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)#include "core/HTMLNames.h" 35197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch#include "core/dom/Document.h" 36e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles)#include "core/dom/shadow/ShadowRoot.h" 37e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)#include "core/inspector/ConsoleMessage.h" 385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 39c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)namespace blink { 405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class Document; 425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)inline HTMLShadowElement::HTMLShadowElement(Document& document) 4451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) : InsertionPoint(HTMLNames::shadowTag, document) 455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 485d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)DEFINE_NODE_FACTORY(HTMLShadowElement) 495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)HTMLShadowElement::~HTMLShadowElement() 515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 54926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)ShadowRoot* HTMLShadowElement::olderShadowRoot() 555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 56926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) ShadowRoot* containingRoot = containingShadowRoot(); 57926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (!containingRoot) 58926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return 0; 595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 608abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) document().updateDistributionForNodeIfNeeded(this); 615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 62926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) ShadowRoot* older = containingRoot->olderShadowRoot(); 6319cde67944066db31e633d9e386f2aa9bf9fadb3Torne (Richard Coles) if (!older || !older->shouldExposeToBindings() || older->shadowInsertionPointOfYoungerShadowRoot() != this) 64926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return 0; 655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 66521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles) ASSERT(older->shouldExposeToBindings()); 67926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return older; 685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 701fad5ca6c42d689812b66fc493992aa6d747a6fbBen MurdochNode::InsertionNotificationRequest HTMLShadowElement::insertedInto(ContainerNode* insertionPoint) 711fad5ca6c42d689812b66fc493992aa6d747a6fbBen Murdoch{ 72c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) if (insertionPoint->inDocument()) { 73c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) // Warn if trying to reproject between user agent and author shadows. 74c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) ShadowRoot* root = containingShadowRoot(); 75c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) if (root && root->olderShadowRoot() && root->type() != root->olderShadowRoot()->type()) { 76c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) String message = String::format("<shadow> doesn't work for %s element host.", root->host()->tagName().utf8().data()); 77e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) document().addConsoleMessage(ConsoleMessage::create(RenderingMessageSource, WarningMessageLevel, message)); 78c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) } 791fad5ca6c42d689812b66fc493992aa6d747a6fbBen Murdoch } 801fad5ca6c42d689812b66fc493992aa6d747a6fbBen Murdoch return InsertionPoint::insertedInto(insertionPoint); 811fad5ca6c42d689812b66fc493992aa6d747a6fbBen Murdoch} 821fad5ca6c42d689812b66fc493992aa6d747a6fbBen Murdoch 83c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)} // namespace blink 84926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 85