13c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch/* 23c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch * Copyright (C) 2013 Google Inc. All rights reserved. 33c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch * 43c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch * Redistribution and use in source and binary forms, with or without 53c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch * modification, are permitted provided that the following conditions are 63c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch * met: 73c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch * 83c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch * * Redistributions of source code must retain the above copyright 93c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch * notice, this list of conditions and the following disclaimer. 103c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch * * Redistributions in binary form must reproduce the above 113c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch * copyright notice, this list of conditions and the following disclaimer 123c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch * in the documentation and/or other materials provided with the 133c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch * distribution. 143c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch * * Neither the name of Google Inc. nor the names of its 153c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch * contributors may be used to endorse or promote products derived from 163c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch * this software without specific prior written permission. 173c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch * 183c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 193c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 203c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 213c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 223c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 233c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 243c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 253c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 263c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 273c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 283c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 293c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch */ 303c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch 31a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)#ifndef HTMLImportChild_h 32a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)#define HTMLImportChild_h 333c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch 34d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)#include "core/html/imports/HTMLImport.h" 35f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "platform/heap/Handle.h" 3651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)#include "platform/weborigin/KURL.h" 3709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)#include "wtf/Vector.h" 38323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)#include "wtf/WeakPtr.h" 393c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch 403c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdochnamespace WebCore { 413c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch 4209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)class CustomElementMicrotaskImportStep; 4309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)class HTMLImportLoader; 44a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)class HTMLImportChildClient; 4509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)class HTMLLinkElement; 46a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) 47a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)// 48a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)// An import tree node subclas to encapsulate imported document 49d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)// lifecycle. This class is owned by HTMLImportsController. The actual loading 5009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)// is done by HTMLImportLoader, which can be shared among multiple 51a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)// HTMLImportChild of same link URL. 52a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)// 53d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)class HTMLImportChild FINAL : public HTMLImport { 543c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdochpublic: 55f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) HTMLImportChild(const KURL&, HTMLImportLoader*, SyncMode); 56a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) virtual ~HTMLImportChild(); 573c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch 5809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) HTMLLinkElement* link() const; 593c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch const KURL& url() const { return m_url; } 603c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch 615d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) void ownerInserted(); 62f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) void didShareLoader(); 63f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) void didStartLoading(); 64f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)#if !ENABLE(OILPAN) 653c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch void importDestroyed(); 66323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) WeakPtr<HTMLImportChild> weakPtr() { return m_weakFactory.createWeakPtr(); } 67f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)#endif 683c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch 693c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch // HTMLImport 703c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch virtual Document* document() const OVERRIDE; 71a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) virtual bool isDone() const OVERRIDE; 72f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) virtual HTMLImportLoader* loader() const OVERRIDE; 736f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch virtual void stateWillChange() OVERRIDE; 7409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) virtual void stateDidChange() OVERRIDE; 75f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) virtual void trace(Visitor*) OVERRIDE; 763c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch 7709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)#if !defined(NDEBUG) 7809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) virtual void showThis() OVERRIDE; 7909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)#endif 8009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 8109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) void setClient(HTMLImportChildClient*); 82f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)#if !ENABLE(OILPAN) 8309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) void clearClient(); 84f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)#endif 853c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch 8607a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch void didFinishLoading(); 87323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) void didFinishUpgradingCustomElements(); 88d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) void normalize(); 8907a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch 90a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)private: 9109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) void didFinish(); 92d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) void shareLoader(); 93d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) void createCustomElementMicrotaskStepIfNeeded(); 94d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) 953c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch KURL m_url; 96f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) WeakPtrWillBeWeakMember<CustomElementMicrotaskImportStep> m_customElementMicrotaskStep; 97f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)#if !ENABLE(OILPAN) 98323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) WeakPtrFactory<HTMLImportChild> m_weakFactory; 99f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)#endif 100f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) RawPtrWillBeMember<HTMLImportLoader> m_loader; 101f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) RawPtrWillBeMember<HTMLImportChildClient> m_client; 1023c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch}; 1033c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch 10409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)inline HTMLImportChild* toHTMLImportChild(HTMLImport* import) 10509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles){ 106f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) ASSERT(!import || !import->isRoot()); 10709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) return static_cast<HTMLImportChild*>(import); 10809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)} 10909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 1103c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch} // namespace WebCore 1113c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch 112a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)#endif // HTMLImportChild_h 113