165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch/*
265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * Copyright (C) 2010 Apple Inc. All rights reserved.
365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch *
465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * Redistribution and use in source and binary forms, with or without
565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * modification, are permitted provided that the following conditions
665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * are met:
765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * 1. Redistributions of source code must retain the above copyright
865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch *    notice, this list of conditions and the following disclaimer.
965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * 2. Redistributions in binary form must reproduce the above copyright
1065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch *    notice, this list of conditions and the following disclaimer in the
1165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch *    documentation and/or other materials provided with the distribution.
1265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch *
1365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
1465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
1565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
1665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
1765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
1865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
1965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
2065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
2165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
2265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
2365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * THE POSSIBILITY OF SUCH DAMAGE.
2465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch */
2565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
262fc2651226baac27029e38c9d6ef883fa32084dbSteve Block#include "config.h"
2765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "WebDownloadClient.h"
2865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
2965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "WKAPICast.h"
3065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "WebURLResponse.h"
3165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "WKRetainPtr.h"
3265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
3365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochusing namespace WebCore;
3465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
3565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochnamespace WebKit {
3665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
3765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebDownloadClient::didStart(WebContext* webContext, DownloadProxy* downloadProxy)
3865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
3965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!m_client.didStart)
4065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
4165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
4265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_client.didStart(toAPI(webContext), toAPI(downloadProxy), m_client.clientInfo);
4365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
4465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
452bde8e466a4451c7319e3a072d118917957d6554Steve Blockvoid WebDownloadClient::didReceiveAuthenticationChallenge(WebContext* webContext, DownloadProxy* downloadProxy, AuthenticationChallengeProxy* authenticationChallengeProxy)
462bde8e466a4451c7319e3a072d118917957d6554Steve Block{
472bde8e466a4451c7319e3a072d118917957d6554Steve Block    if (!m_client.didReceiveAuthenticationChallenge)
482bde8e466a4451c7319e3a072d118917957d6554Steve Block        return;
492bde8e466a4451c7319e3a072d118917957d6554Steve Block
502bde8e466a4451c7319e3a072d118917957d6554Steve Block    m_client.didReceiveAuthenticationChallenge(toAPI(webContext), toAPI(downloadProxy), toAPI(authenticationChallengeProxy), m_client.clientInfo);
512bde8e466a4451c7319e3a072d118917957d6554Steve Block}
522bde8e466a4451c7319e3a072d118917957d6554Steve Block
5365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebDownloadClient::didReceiveResponse(WebContext* webContext, DownloadProxy* downloadProxy, const ResourceResponse& response)
5465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
5565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!m_client.didReceiveResponse)
5665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
5765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
5865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_client.didReceiveResponse(toAPI(webContext), toAPI(downloadProxy), toAPI(WebURLResponse::create(response).get()), m_client.clientInfo);
5965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
6065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
6165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebDownloadClient::didReceiveData(WebContext* webContext, DownloadProxy* downloadProxy, uint64_t length)
6265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
6365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!m_client.didReceiveData)
6465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
6565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
6665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_client.didReceiveData(toAPI(webContext), toAPI(downloadProxy), length, m_client.clientInfo);
6765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
6865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
6965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochbool WebDownloadClient::shouldDecodeSourceDataOfMIMEType(WebContext* webContext, DownloadProxy* downloadProxy, const String& mimeType)
7065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
7165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!m_client.shouldDecodeSourceDataOfMIMEType)
7265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return true;
7365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
7465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    return m_client.shouldDecodeSourceDataOfMIMEType(toAPI(webContext), toAPI(downloadProxy), toAPI(mimeType.impl()), m_client.clientInfo);
7565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
7665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
7765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochString WebDownloadClient::decideDestinationWithSuggestedFilename(WebContext* webContext, DownloadProxy* downloadProxy, const String& filename, bool& allowOverwrite)
7865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
7965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!m_client.decideDestinationWithSuggestedFilename)
8065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return String();
8165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
8265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    WKRetainPtr<WKStringRef> destination(AdoptWK, m_client.decideDestinationWithSuggestedFilename(toAPI(webContext), toAPI(downloadProxy), toAPI(filename.impl()), &allowOverwrite, m_client.clientInfo));
8365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    return toWTFString(destination.get());
8465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
8565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
8665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebDownloadClient::didCreateDestination(WebContext* webContext, DownloadProxy* downloadProxy, const String& path)
8765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
8865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!m_client.didCreateDestination)
8965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
9065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
9165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_client.didCreateDestination(toAPI(webContext), toAPI(downloadProxy), toAPI(path.impl()), m_client.clientInfo);
9265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
9365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
9465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebDownloadClient::didFinish(WebContext* webContext, DownloadProxy* downloadProxy)
9565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
9665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!m_client.didFinish)
9765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
9865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
9965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_client.didFinish(toAPI(webContext), toAPI(downloadProxy), m_client.clientInfo);
10065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
10165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
10265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebDownloadClient::didFail(WebContext* webContext, DownloadProxy* downloadProxy, const ResourceError& error)
10365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
10465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!m_client.didFail)
10565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
10665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
10765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_client.didFail(toAPI(webContext), toAPI(downloadProxy), toAPI(error), m_client.clientInfo);
10865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
10965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
11065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebDownloadClient::didCancel(WebContext* webContext, DownloadProxy* downloadProxy)
11165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
11265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!m_client.didCancel)
11365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
11465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
11565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_client.didCancel(toAPI(webContext), toAPI(downloadProxy), m_client.clientInfo);
11665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
11765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
11865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebDownloadClient::processDidCrash(WebContext* webContext, DownloadProxy* downloadProxy)
11965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
12065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!m_client.processDidCrash)
12165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
12265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
12365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_client.processDidCrash(toAPI(webContext), toAPI(downloadProxy), m_client.clientInfo);
12465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
12565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
12665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} // namespace WebKit
127