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