// Copyright 2016 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef LinkPreloadResourceClients_h #define LinkPreloadResourceClients_h #include "core/fetch/CSSStyleSheetResource.h" #include "core/fetch/FontResource.h" #include "core/fetch/ImageResource.h" #include "core/fetch/ImageResourceClient.h" #include "core/fetch/RawResource.h" #include "core/fetch/ResourceLoader.h" #include "core/fetch/ResourceOwner.h" #include "core/fetch/ScriptResource.h" #include "core/fetch/StyleSheetResourceClient.h" namespace blink { class LinkLoader; class LinkPreloadResourceClient : public NoBaseWillBeGarbageCollectedFinalized { public: virtual ~LinkPreloadResourceClient() { } void triggerEvents(const Resource*); virtual void clear() = 0; DEFINE_INLINE_VIRTUAL_TRACE() { visitor->trace(m_loader); } protected: LinkPreloadResourceClient(LinkLoader* loader) : m_loader(loader) { ASSERT(loader); } private: RawPtrWillBeMember m_loader; }; class LinkPreloadScriptResourceClient: public LinkPreloadResourceClient, public ResourceOwner { WILL_BE_USING_GARBAGE_COLLECTED_MIXIN(LinkPreloadScriptResourceClient); USING_FAST_MALLOC_WILL_BE_REMOVED(LinkPreloadScriptResourceClient); public: static PassOwnPtrWillBeRawPtr create(LinkLoader* loader, PassRefPtrWillBeRawPtr resource) { return adoptPtrWillBeNoop(new LinkPreloadScriptResourceClient(loader, resource)); } virtual String debugName() const { return "LinkPreloadScript"; } virtual ~LinkPreloadScriptResourceClient() { } void clear() override { clearResource(); } void notifyFinished(Resource* resource) override { ASSERT(this->resource() == resource); triggerEvents(resource); } DEFINE_INLINE_VIRTUAL_TRACE() { LinkPreloadResourceClient::trace(visitor); ResourceOwner::trace(visitor); } private: LinkPreloadScriptResourceClient(LinkLoader* loader, PassRefPtrWillBeRawPtr resource) : LinkPreloadResourceClient(loader) { setResource(resource); } }; class LinkPreloadStyleResourceClient: public LinkPreloadResourceClient, public ResourceOwner { WILL_BE_USING_GARBAGE_COLLECTED_MIXIN(LinkPreloadStyleResourceClient); USING_FAST_MALLOC_WILL_BE_REMOVED(LinkPreloadStyleResourceClient); public: static PassOwnPtrWillBeRawPtr create(LinkLoader* loader, PassRefPtrWillBeRawPtr resource) { return adoptPtrWillBeNoop(new LinkPreloadStyleResourceClient(loader, resource)); } virtual String debugName() const { return "LinkPreloadStyle"; } virtual ~LinkPreloadStyleResourceClient() { } void clear() override { clearResource(); } void setCSSStyleSheet(const String&, const KURL&, const String&, const CSSStyleSheetResource* resource) override { ASSERT(this->resource() == resource); triggerEvents(static_cast(resource)); } DEFINE_INLINE_VIRTUAL_TRACE() { LinkPreloadResourceClient::trace(visitor); ResourceOwner::trace(visitor); } private: LinkPreloadStyleResourceClient(LinkLoader* loader, PassRefPtrWillBeRawPtr resource) : LinkPreloadResourceClient(loader) { setResource(resource); } }; class LinkPreloadImageResourceClient: public LinkPreloadResourceClient, public ResourceOwner { WILL_BE_USING_GARBAGE_COLLECTED_MIXIN(LinkPreloadImageResourceClient); USING_FAST_MALLOC_WILL_BE_REMOVED(LinkPreloadImageResourceClient); public: static PassOwnPtrWillBeRawPtr create(LinkLoader* loader, PassRefPtrWillBeRawPtr resource) { return adoptPtrWillBeNoop(new LinkPreloadImageResourceClient(loader, resource)); } virtual String debugName() const { return "LinkPreloadImage"; } virtual ~LinkPreloadImageResourceClient() { } void clear() override { clearResource(); } void notifyFinished(Resource* resource) override { ASSERT(this->resource() == toImageResource(resource)); triggerEvents(resource); } DEFINE_INLINE_VIRTUAL_TRACE() { LinkPreloadResourceClient::trace(visitor); ResourceOwner::trace(visitor); } private: LinkPreloadImageResourceClient(LinkLoader* loader, PassRefPtrWillBeRawPtr resource) : LinkPreloadResourceClient(loader) { setResource(resource); } }; class LinkPreloadFontResourceClient: public LinkPreloadResourceClient, public ResourceOwner { WILL_BE_USING_GARBAGE_COLLECTED_MIXIN(LinkPreloadFontResourceClient); USING_FAST_MALLOC_WILL_BE_REMOVED(LinkPreloadFontResourceClient); public: static PassOwnPtrWillBeRawPtr create(LinkLoader* loader, PassRefPtrWillBeRawPtr resource) { return adoptPtrWillBeNoop(new LinkPreloadFontResourceClient(loader, resource)); } virtual String debugName() const { return "LinkPreloadFont"; } virtual ~LinkPreloadFontResourceClient() { } void clear() override { clearResource(); } void fontLoaded(FontResource* resource) override { ASSERT(this->resource() == resource); triggerEvents(resource); } DEFINE_INLINE_VIRTUAL_TRACE() { LinkPreloadResourceClient::trace(visitor); ResourceOwner::trace(visitor); } private: LinkPreloadFontResourceClient(LinkLoader* loader, PassRefPtrWillBeRawPtr resource) : LinkPreloadResourceClient(loader) { setResource(resource); } }; class LinkPreloadRawResourceClient: public LinkPreloadResourceClient, public ResourceOwner { WILL_BE_USING_GARBAGE_COLLECTED_MIXIN(LinkPreloadRawResourceClient); USING_FAST_MALLOC_WILL_BE_REMOVED(LinkPreloadRawResourceClient); public: static PassOwnPtrWillBeRawPtr create(LinkLoader* loader, PassRefPtrWillBeRawPtr resource) { return adoptPtrWillBeNoop(new LinkPreloadRawResourceClient(loader, resource)); } virtual String debugName() const { return "LinkPreloadRaw"; } virtual ~LinkPreloadRawResourceClient() { } void clear() override { clearResource(); } void notifyFinished(Resource* resource) override { ASSERT(this->resource() == toRawResource(resource)); triggerEvents(resource); } DEFINE_INLINE_VIRTUAL_TRACE() { LinkPreloadResourceClient::trace(visitor); ResourceOwner::trace(visitor); } private: LinkPreloadRawResourceClient(LinkLoader* loader, PassRefPtrWillBeRawPtr resource) : LinkPreloadResourceClient(loader) { setResource(resource); } }; } // namespace blink #endif // LinkPreloadResourceClients_h