WebDownloadCurl.cpp [plain text]
#include "config.h"
#include "WebKitDLL.h"
#include "WebDownload.h"
#include "DefaultDownloadDelegate.h"
#include "MarshallingHelpers.h"
#include "WebError.h"
#include "WebKit.h"
#include "WebKitLogging.h"
#include "WebMutableURLRequest.h"
#include "WebURLAuthenticationChallenge.h"
#include "WebURLCredential.h"
#include "WebURLResponse.h"
#include <wtf/platform.h>
#include <wtf/text/CString.h>
#include <io.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <WebCore/BString.h>
#include <WebCore/NotImplemented.h>
#include <WebCore/ResourceError.h>
#include <WebCore/ResourceHandle.h>
#include <WebCore/ResourceRequest.h>
#include <WebCore/ResourceResponse.h>
using namespace WebCore;
void WebDownload::init(ResourceHandle* handle, const ResourceRequest& request, const ResourceResponse& response, IWebDownloadDelegate* delegate)
{
notImplemented();
}
void WebDownload::init(const KURL& url, IWebDownloadDelegate* delegate)
{
m_delegate = delegate;
m_download.init(this, url);
}
HRESULT STDMETHODCALLTYPE WebDownload::initWithRequest(
IWebURLRequest* request,
IWebDownloadDelegate* delegate)
{
notImplemented();
return E_FAIL;
}
HRESULT STDMETHODCALLTYPE WebDownload::initToResumeWithBundle(
BSTR bundlePath,
IWebDownloadDelegate* delegate)
{
notImplemented();
return E_FAIL;
}
HRESULT STDMETHODCALLTYPE WebDownload::start()
{
if (!m_download.start())
return E_FAIL;
if (m_delegate)
m_delegate->didBegin(this);
return S_OK;
}
HRESULT STDMETHODCALLTYPE WebDownload::cancel()
{
if (!m_download.cancel())
return E_FAIL;
return S_OK;
}
HRESULT STDMETHODCALLTYPE WebDownload::cancelForResume()
{
notImplemented();
return E_FAIL;
}
HRESULT STDMETHODCALLTYPE WebDownload::deletesFileUponFailure(
BOOL* result)
{
*result = m_download.deletesFileUponFailure() ? TRUE : FALSE;
return S_OK;
}
HRESULT STDMETHODCALLTYPE WebDownload::setDeletesFileUponFailure(
BOOL deletesFileUponFailure)
{
m_download.setDeletesFileUponFailure(deletesFileUponFailure);
return S_OK;
}
HRESULT STDMETHODCALLTYPE WebDownload::setDestination(
BSTR path,
BOOL allowOverwrite)
{
size_t len = wcslen(path);
m_destination = String(path, len);
m_download.setDestination(m_destination);
return S_OK;
}
HRESULT STDMETHODCALLTYPE WebDownload::cancelAuthenticationChallenge(
IWebURLAuthenticationChallenge*)
{
notImplemented();
return E_FAIL;
}
HRESULT STDMETHODCALLTYPE WebDownload::continueWithoutCredentialForAuthenticationChallenge(
IWebURLAuthenticationChallenge* challenge)
{
notImplemented();
return E_FAIL;
}
HRESULT STDMETHODCALLTYPE WebDownload::useCredential(
IWebURLCredential* credential,
IWebURLAuthenticationChallenge* challenge)
{
notImplemented();
return E_FAIL;
}
void WebDownload::didReceiveResponse()
{
COMPtr<WebDownload> protect = this;
if (m_delegate) {
ResourceResponse response = m_download.getResponse();
COMPtr<WebURLResponse> webResponse(AdoptCOM, WebURLResponse::createInstance(response));
m_delegate->didReceiveResponse(this, webResponse.get());
String suggestedFilename = response.suggestedFilename();
if (suggestedFilename.isEmpty())
suggestedFilename = pathGetFileName(response.url().string());
BString suggestedFilenameBSTR(suggestedFilename.characters(), suggestedFilename.length());
m_delegate->decideDestinationWithSuggestedFilename(this, suggestedFilenameBSTR);
}
}
void WebDownload::didReceiveDataOfLength(int size)
{
COMPtr<WebDownload> protect = this;
if (m_delegate)
m_delegate->didReceiveDataOfLength(this, size);
}
void WebDownload::didFinish()
{
COMPtr<WebDownload> protect = this;
if (m_delegate)
m_delegate->didFinish(this);
}
void WebDownload::didFail()
{
COMPtr<WebDownload> protect = this;
if (m_delegate)
m_delegate->didFailWithError(this, 0);
}