webengine/osswebengine/WebKit/win/WebDownload.h
changeset 0 dd21522fd290
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/webengine/osswebengine/WebKit/win/WebDownload.h	Mon Mar 30 12:54:55 2009 +0300
@@ -0,0 +1,138 @@
+/*
+ * Copyright (C) 2007 Apple Inc.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
+ */
+
+#ifndef WebDownload_h
+#define WebDownload_h
+
+#include "COMPtr.h"
+#include "IWebDownload.h"
+#include "IWebURLAuthenticationChallenge.h"
+
+#include <CFNetwork/CFURLDownloadPriv.h>
+#include <WebCore/PlatformString.h>
+#include <wtf/RetainPtr.h>
+
+namespace WebCore {
+    class KURL;
+    class ResourceHandle;
+    struct ResourceRequest;
+    class ResourceResponse;
+}
+
+class WebDownload : public IWebDownload, public IWebURLAuthenticationChallengeSender
+{
+public:
+    static WebDownload* createInstance(const WebCore::KURL&, IWebDownloadDelegate*);
+    static WebDownload* createInstance(WebCore::ResourceHandle*, const WebCore::ResourceRequest&, const WebCore::ResourceResponse&, IWebDownloadDelegate*);
+    static WebDownload* createInstance();
+private:
+    WebDownload();
+    void init(WebCore::ResourceHandle*, const WebCore::ResourceRequest&, const WebCore::ResourceResponse&, IWebDownloadDelegate*);
+    void init(const WebCore::KURL&, IWebDownloadDelegate*);
+    ~WebDownload();
+public:
+    // IUnknown
+    virtual HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid, void** ppvObject);
+    virtual ULONG STDMETHODCALLTYPE AddRef(void);
+    virtual ULONG STDMETHODCALLTYPE Release(void);
+
+    // IWebDownload
+    virtual HRESULT STDMETHODCALLTYPE initWithRequest(
+        /* [in] */ IWebURLRequest* request, 
+        /* [in] */ IWebDownloadDelegate* delegate);
+
+    virtual HRESULT STDMETHODCALLTYPE initToResumeWithBundle(
+        /* [in] */ BSTR bundlePath, 
+        /* [in] */ IWebDownloadDelegate* delegate);
+
+    virtual HRESULT STDMETHODCALLTYPE canResumeDownloadDecodedWithEncodingMIMEType(
+        /* [in] */ BSTR mimeType, 
+        /* [out, retval] */ BOOL* result);
+
+    virtual HRESULT STDMETHODCALLTYPE start();
+
+    virtual HRESULT STDMETHODCALLTYPE cancel();
+
+    virtual HRESULT STDMETHODCALLTYPE cancelForResume();
+
+    virtual HRESULT STDMETHODCALLTYPE deletesFileUponFailure(
+        /* [out, retval] */ BOOL* result);
+
+    virtual HRESULT STDMETHODCALLTYPE bundlePathForTargetPath(
+        /* [in] */ BSTR target, 
+        /* [out, retval] */ BSTR* bundle);
+
+    virtual HRESULT STDMETHODCALLTYPE request(
+        /* [out, retval] */ IWebURLRequest** request);
+
+    virtual HRESULT STDMETHODCALLTYPE setDeletesFileUponFailure(
+        /* [in] */ BOOL deletesFileUponFailure);
+
+    virtual HRESULT STDMETHODCALLTYPE setDestination(
+        /* [in] */ BSTR path, 
+        /* [in] */ BOOL allowOverwrite);
+
+    // IWebURLAuthenticationChallengeSender
+    virtual HRESULT STDMETHODCALLTYPE cancelAuthenticationChallenge(
+        /* [in] */ IWebURLAuthenticationChallenge* challenge);
+
+    virtual HRESULT STDMETHODCALLTYPE continueWithoutCredentialForAuthenticationChallenge(
+        /* [in] */ IWebURLAuthenticationChallenge* challenge);
+
+    virtual HRESULT STDMETHODCALLTYPE useCredential(
+        /* [in] */ IWebURLCredential* credential, 
+        /* [in] */ IWebURLAuthenticationChallenge* challenge);
+
+    // CFURLDownload Callbacks
+    void didStart();
+    CFURLRequestRef willSendRequest(CFURLRequestRef, CFURLResponseRef);
+    void didReceiveAuthenticationChallenge(CFURLAuthChallengeRef);
+    void didReceiveResponse(CFURLResponseRef);
+    void willResumeWithResponse(CFURLResponseRef, UInt64);
+    void didReceiveData(CFIndex);
+    bool shouldDecodeDataOfMIMEType(CFStringRef);
+    void decideDestinationWithSuggestedObjectName(CFStringRef);
+    void didCreateDestination(CFURLRef);
+    void didFinish();
+    void didFail(CFErrorRef);
+
+protected:
+    ULONG m_refCount;
+
+    WebCore::String m_destination;
+    WebCore::String m_bundlePath;
+    RetainPtr<CFURLDownloadRef> m_download;
+    COMPtr<IWebMutableURLRequest> m_request;
+    COMPtr<IWebDownloadDelegate> m_delegate;
+
+#ifndef NDEBUG
+    double m_startTime;
+    double m_dataTime;
+    int m_received;
+#endif
+};
+
+
+#endif