18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/* 28e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Copyright (C) 2006, 2007, 2008 Apple Inc. All rights reserved. 38e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Copyright (C) 2008 Collabora, Ltd. All rights reserved. 48e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 58e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Redistribution and use in source and binary forms, with or without 68e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * modification, are permitted provided that the following conditions 78e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * are met: 88e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 1. Redistributions of source code must retain the above copyright 98e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * notice, this list of conditions and the following disclaimer. 108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 2. Redistributions in binary form must reproduce the above copyright 118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * notice, this list of conditions and the following disclaimer in the 128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * documentation and/or other materials provided with the distribution. 138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY 158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR 188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2706ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen#ifndef PluginStream_h 2806ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen#define PluginStream_h 298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "FileSystem.h" 318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "KURL.h" 328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "NetscapePlugInStreamLoader.h" 338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "PlatformString.h" 348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "PluginQuirkSet.h" 358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "ResourceRequest.h" 368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "ResourceResponse.h" 378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "Timer.h" 388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "npruntime_internal.h" 398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include <wtf/HashMap.h> 408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include <wtf/OwnPtr.h> 418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include <wtf/RefCounted.h> 428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include <wtf/Vector.h> 43dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include <wtf/text/CString.h> 44f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick#include <wtf/text/StringHash.h> 458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectnamespace WebCore { 478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project class Frame; 488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project class PluginStream; 498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project enum PluginStreamState { StreamBeforeStarted, StreamStarted, StreamStopped }; 518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project class PluginStreamClient { 538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project public: 548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual ~PluginStreamClient() {} 558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual void streamDidFinishLoading(PluginStream*) {} 568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project }; 578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project class PluginStream : public RefCounted<PluginStream>, private NetscapePlugInStreamLoaderClient { 598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project public: 608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project static PassRefPtr<PluginStream> create(PluginStreamClient* client, Frame* frame, const ResourceRequest& request, bool sendNotification, void* notifyData, const NPPluginFuncs* functions, NPP instance, const PluginQuirkSet& quirks) 618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return adoptRef(new PluginStream(client, frame, request, sendNotification, notifyData, functions, instance, quirks)); 638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual ~PluginStream(); 658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void start(); 678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void stop(); 688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void startStream(); 708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void setLoadManually(bool loadManually) { m_loadManually = loadManually; } 728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 73dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block void sendJavaScriptStream(const KURL& requestURL, const WTF::CString& resultString); 748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void cancelAndDestroyStream(NPReason); 758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project static NPP ownerForStream(NPStream*); 778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // NetscapePlugInStreamLoaderClient 798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual void didReceiveResponse(NetscapePlugInStreamLoader*, const ResourceResponse&); 808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual void didReceiveData(NetscapePlugInStreamLoader*, const char*, int); 818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual void didFail(NetscapePlugInStreamLoader*, const ResourceError&); 828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual void didFinishLoading(NetscapePlugInStreamLoader*); 838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual bool wantsAllStreams() const; 848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project private: 868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project PluginStream(PluginStreamClient*, Frame*, const ResourceRequest&, bool sendNotification, void* notifyData, const NPPluginFuncs*, NPP instance, const PluginQuirkSet&); 878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void deliverData(); 898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void destroyStream(NPReason); 908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void destroyStream(); 91f9115700a452dad0c9d5d9556045d0be30da33adAndrei Popescu#if PLATFORM(ANDROID) 92f9115700a452dad0c9d5d9556045d0be30da33adAndrei Popescu int deliveryDelay() const; 93f9115700a452dad0c9d5d9556045d0be30da33adAndrei Popescu#endif 948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ResourceRequest m_resourceRequest; 958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ResourceResponse m_resourceResponse; 968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project PluginStreamClient* m_client; 988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Frame* m_frame; 998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project RefPtr<NetscapePlugInStreamLoader> m_loader; 1008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void* m_notifyData; 1018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool m_sendNotification; 1028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project PluginStreamState m_streamState; 1038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool m_loadManually; 1048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Timer<PluginStream> m_delayDeliveryTimer; 1068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void delayDeliveryTimerFired(Timer<PluginStream>*); 1078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project OwnPtr< Vector<char> > m_deliveryData; 1098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project PlatformFileHandle m_tempFileHandle; 1118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project const NPPluginFuncs* m_pluginFuncs; 1138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NPP m_instance; 11421939df44de1705786c545cd1bf519d47250322dBen Murdoch uint16_t m_transferMode; 11521939df44de1705786c545cd1bf519d47250322dBen Murdoch int32_t m_offset; 1162bde8e466a4451c7319e3a072d118917957d6554Steve Block CString m_headers; 1172bde8e466a4451c7319e3a072d118917957d6554Steve Block String m_path; 1188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NPReason m_reason; 1198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NPStream m_stream; 1208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project PluginQuirkSet m_quirks; 1218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project }; 1228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} // namespace WebCore 1248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 126