Move URL from WebCore to WTF
[WebKit-https.git] / Source / WebKitLegacy / win / Plugins / PluginStream.h
1 /*
2  * Copyright (C) 2006, 2007, 2008 Apple Inc. All rights reserved.
3  * Copyright (C) 2008 Collabora, Ltd. All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * are met:
8  * 1. Redistributions of source code must retain the above copyright
9  *    notice, this list of conditions and the following disclaimer.
10  * 2. Redistributions in binary form must reproduce the above copyright
11  *    notice, this list of conditions and the following disclaimer in the
12  *    documentation and/or other materials provided with the distribution.
13  *
14  * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
15  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
17  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
18  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
20  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
21  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
22  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
24  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
25  */
26
27 #pragma once
28
29 #include "PluginQuirkSet.h"
30 #include <WebCore/FileSystem.h>
31 #include <WebCore/NetscapePlugInStreamLoader.h>
32 #include <WebCore/ResourceRequest.h>
33 #include <WebCore/ResourceResponse.h>
34 #include <WebCore/Timer.h>
35 #include <WebCore/npruntime_internal.h>
36 #include <wtf/HashMap.h>
37 #include <wtf/RefCounted.h>
38 #include <wtf/URL.h>
39 #include <wtf/Vector.h>
40 #include <wtf/text/CString.h>
41 #include <wtf/text/StringHash.h>
42 #include <wtf/text/WTFString.h>
43
44 namespace WebCore {
45 class Frame;
46 class PluginStream;
47
48 enum PluginStreamState { StreamBeforeStarted, StreamStarted, StreamStopped };
49
50 class PluginStreamClient {
51 public:
52     virtual ~PluginStreamClient() { }
53     virtual void streamDidFinishLoading(PluginStream*) { }
54 };
55
56 class PluginStream : public RefCounted<PluginStream>, private NetscapePlugInStreamLoaderClient {
57 public:
58     static Ref<PluginStream> create(PluginStreamClient* client, Frame* frame, const ResourceRequest& request, bool sendNotification, void* notifyData, const NPPluginFuncs* functions, NPP instance, const PluginQuirkSet& quirks)
59     {
60         return adoptRef(*new PluginStream(client, frame, request, sendNotification, notifyData, functions, instance, quirks));
61     }
62     virtual ~PluginStream();
63     
64     void start();
65     void stop();
66
67     void startStream();
68
69     void setLoadManually(bool loadManually) { m_loadManually = loadManually; }
70
71     void sendJavaScriptStream(const URL& requestURL, const WTF::CString& resultString);
72     void cancelAndDestroyStream(NPReason);
73
74     static NPP ownerForStream(NPStream*);
75
76 private:
77     PluginStream(PluginStreamClient*, Frame*, const ResourceRequest&, bool sendNotification, void* notifyData, const NPPluginFuncs*, NPP instance, const PluginQuirkSet&);
78
79     void deliverData();
80     void destroyStream(NPReason);
81     void destroyStream();
82
83     // NetscapePlugInStreamLoaderClient
84     void willSendRequest(NetscapePlugInStreamLoader*, ResourceRequest&&, const ResourceResponse& redirectResponse, CompletionHandler<void(ResourceRequest&&)>&&) override;
85     void didReceiveResponse(NetscapePlugInStreamLoader*, const ResourceResponse&) override;
86     void didReceiveData(NetscapePlugInStreamLoader*, const char*, int) override;
87     void didFail(NetscapePlugInStreamLoader*, const ResourceError&) override;
88     void didFinishLoading(NetscapePlugInStreamLoader*) override;
89     bool wantsAllStreams() const override;
90
91     ResourceRequest m_resourceRequest;
92     ResourceResponse m_resourceResponse;
93
94     PluginStreamClient* m_client;
95     Frame* m_frame;
96     RefPtr<NetscapePlugInStreamLoader> m_loader;
97     void* m_notifyData;
98     bool m_sendNotification;
99     PluginStreamState m_streamState;
100     bool m_loadManually;
101
102     Timer m_delayDeliveryTimer;
103     void delayDeliveryTimerFired();
104
105     std::unique_ptr<Vector<char>> m_deliveryData;
106
107     FileSystem::PlatformFileHandle m_tempFileHandle;
108
109     const NPPluginFuncs* m_pluginFuncs;
110     NPP m_instance;
111     uint16_t m_transferMode;
112     int32_t m_offset;
113     CString m_headers;
114     String m_path;
115     NPReason m_reason;
116     NPStream m_stream;
117     PluginQuirkSet m_quirks;
118
119     friend class PluginView;
120 };
121
122 } // namespace WebCore