Make MediaResourceLoader behave more like a CachedResourceLoader.
[WebKit.git] / Source / WebCore / loader / MediaResourceLoader.h
1 /*
2  * Copyright (C) 2014 Igalia S.L
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  * 1. Redistributions of source code must retain the above copyright
8  *    notice, this list of conditions and the following disclaimer.
9  * 2. Redistributions in binary form must reproduce the above copyright
10  *    notice, this list of conditions and the following disclaimer in the
11  *    documentation and/or other materials provided with the distribution.
12  *
13  * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
14  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
15  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
17  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
18  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
19  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
20  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
21  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
22  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
23  * THE POSSIBILITY OF SUCH DAMAGE.
24  */
25
26 #ifndef MediaResourceLoader_h
27 #define MediaResourceLoader_h
28
29 #if ENABLE(VIDEO)
30 #include "CachedRawResourceClient.h"
31 #include "CachedResourceHandle.h"
32 #include "PlatformMediaResourceLoader.h"
33 #include <wtf/HashSet.h>
34 #include <wtf/Ref.h>
35 #include <wtf/text/WTFString.h>
36
37 namespace WebCore {
38
39 class CachedRawResource;
40 class Document;
41 class MediaResource;
42
43 class MediaResourceLoader final : public PlatformMediaResourceLoader {
44 public:
45     WEBCORE_EXPORT MediaResourceLoader(Document&, const String& crossOriginMode);
46     WEBCORE_EXPORT virtual ~MediaResourceLoader();
47
48     RefPtr<PlatformMediaResource> requestResource(const ResourceRequest&, LoadOptions) override;
49     void removeResource(MediaResource&);
50
51     Document& document() { return m_document; }
52     const String& crossOriginMode() const { return m_crossOriginMode; }
53
54 private:
55     Document& m_document;
56     String m_crossOriginMode;
57     HashSet<MediaResource*> m_resources;
58 };
59
60 class MediaResource : public PlatformMediaResource, CachedRawResourceClient {
61 public:
62     static Ref<MediaResource> create(MediaResourceLoader&, CachedResourceHandle<CachedRawResource>);
63     virtual ~MediaResource();
64
65     // PlatformMediaResource
66     void stop() override;
67     void setDefersLoading(bool) override;
68     bool didPassAccessControlCheck() const override { return m_didPassAccessControlCheck; }
69
70     // CachedResourceClient
71     void responseReceived(CachedResource*, const ResourceResponse&) override;
72     void redirectReceived(CachedResource*, ResourceRequest&, const ResourceResponse&) override;
73     void dataSent(CachedResource*, unsigned long long, unsigned long long) override;
74     void dataReceived(CachedResource*, const char*, int) override;
75     void notifyFinished(CachedResource*) override;
76 #if USE(SOUP)
77     char* getOrCreateReadBuffer(CachedResource*, size_t /*requestedSize*/, size_t& /*actualSize*/) override;
78 #endif
79
80 private:
81     MediaResource(MediaResourceLoader&, CachedResourceHandle<CachedRawResource>);
82     Ref<MediaResourceLoader> m_loader;
83     bool m_didPassAccessControlCheck { false };
84     CachedResourceHandle<CachedRawResource> m_resource;
85 };
86
87
88 } // namespace WebCore
89
90 #endif
91 #endif