15ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark/*
25ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark * Copyright (C) 2008 Apple Inc. All Rights Reserved.
35ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark *
45ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark * Redistribution and use in source and binary forms, with or without
55ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark * modification, are permitted provided that the following conditions
65ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark * are met:
75ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark * 1. Redistributions of source code must retain the above copyright
85ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark *    notice, this list of conditions and the following disclaimer.
95ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark * 2. Redistributions in binary form must reproduce the above copyright
105ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark *    notice, this list of conditions and the following disclaimer in the
115ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark *    documentation and/or other materials provided with the distribution.
125ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark *
135ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
145ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
155ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
165ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
175ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
185ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
195ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
205ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
215ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
225ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
235ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
245ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark */
255ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark
265ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark#if USE(PLUGIN_HOST_PROCESS)
275ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark
285ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark#ifndef HostedNetscapePluginStream_h
295ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark#define HostedNetscapePluginStream_h
305ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark
315ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark#include <WebCore/NetscapePlugInStreamLoader.h>
325ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark#include <WebKit/npapi.h>
335ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark#include <wtf/PassRefPtr.h>
345ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark#include <wtf/RefCounted.h>
355ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark#include <wtf/RefPtr.h>
365ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark#include <wtf/RetainPtr.h>
375ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark
385ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clarknamespace WebCore {
395ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark    class FrameLoader;
405ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark    class NetscapePlugInStreamLoader;
415ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark}
425ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark
435ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clarknamespace WebKit {
445ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark
455ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clarkclass NetscapePluginInstanceProxy;
46231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
475ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clarkclass HostedNetscapePluginStream : public RefCounted<HostedNetscapePluginStream>
485ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark                                 , private WebCore::NetscapePlugInStreamLoaderClient {
495ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clarkpublic:
505ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark    static PassRefPtr<HostedNetscapePluginStream> create(NetscapePluginInstanceProxy* instance, uint32_t streamID, NSURLRequest *request)
515ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark    {
525ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark        return adoptRef(new HostedNetscapePluginStream(instance, streamID, request));
535ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark    }
540bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    static PassRefPtr<HostedNetscapePluginStream> create(NetscapePluginInstanceProxy* instance, WebCore::FrameLoader* frameLoader)
550bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    {
560bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        return adoptRef(new HostedNetscapePluginStream(instance, frameLoader));
570bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    }
58231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
59231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    ~HostedNetscapePluginStream();
60231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
615ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark    uint32_t streamID() const { return m_streamID; }
62231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
635ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark    void startStreamWithResponse(NSURLResponse *response);
645ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark    void didReceiveData(WebCore::NetscapePlugInStreamLoader*, const char* bytes, int length);
655ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark    void didFinishLoading(WebCore::NetscapePlugInStreamLoader*);
660bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    void didFail(WebCore::NetscapePlugInStreamLoader*, const WebCore::ResourceError&);
670bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
685ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark    void start();
695ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark    void stop();
705ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark
715ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark    void cancelLoad(NPReason reason);
725ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark
73d0825bca7fe65beaee391d30da42e937db621564Steve Block    static NPReason reasonForError(NSError* error);
74d0825bca7fe65beaee391d30da42e937db621564Steve Block
755ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clarkprivate:
765ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark    NSError *errorForReason(NPReason) const;
775ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark    void cancelLoad(NSError *);
785ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark
795ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark    HostedNetscapePluginStream(NetscapePluginInstanceProxy*, uint32_t streamID, NSURLRequest *);
800bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    HostedNetscapePluginStream(NetscapePluginInstanceProxy*, WebCore::FrameLoader*);
815ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark
825ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark    void startStream(NSURL *, long long expectedContentLength, NSDate *lastModifiedDate, NSString *mimeType, NSData *headers);
835ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark
845ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark    NSError *pluginCancelledConnectionError() const;
855ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark
865ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark    // NetscapePlugInStreamLoaderClient methods.
875ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark    void didReceiveResponse(WebCore::NetscapePlugInStreamLoader*, const WebCore::ResourceResponse&);
885ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark    bool wantsAllStreams() const;
895ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark
905ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark    RefPtr<NetscapePluginInstanceProxy> m_instance;
915ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark    uint32_t m_streamID;
925ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark    bool m_isTerminated;
935ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark    RetainPtr<NSMutableURLRequest> m_request;
945ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark
955ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark    RetainPtr<NSURL> m_requestURL;
965ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark    RetainPtr<NSURL> m_responseURL;
975ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark    RetainPtr<NSString> m_mimeType;
985ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark
995ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark    WebCore::FrameLoader* m_frameLoader;
1005ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark    RefPtr<WebCore::NetscapePlugInStreamLoader> m_loader;
1015ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark};
1025ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark
1035ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark}
1045ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark
1055ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark#endif // HostedNetscapePluginStream_h
1065ec837f49e9c57d4394ce64b853fd86269c8b340Cary Clark#endif // USE(PLUGIN_HOST_PROCESS)
107