165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch/* 22fc2651226baac27029e38c9d6ef883fa32084dbSteve Block * Copyright (C) 2010, 2011 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#import "config.h" 272fc2651226baac27029e38c9d6ef883fa32084dbSteve Block#import "Download.h" 2865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 292bde8e466a4451c7319e3a072d118917957d6554Steve Block#import <WebCore/AuthenticationMac.h> 302fc2651226baac27029e38c9d6ef883fa32084dbSteve Block#import <WebCore/BackForwardController.h> 312fc2651226baac27029e38c9d6ef883fa32084dbSteve Block#import <WebCore/HistoryItem.h> 3281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch#import <WebCore/NotImplemented.h> 332fc2651226baac27029e38c9d6ef883fa32084dbSteve Block#import <WebCore/Page.h> 342fc2651226baac27029e38c9d6ef883fa32084dbSteve Block#import <WebCore/ResourceHandle.h> 352fc2651226baac27029e38c9d6ef883fa32084dbSteve Block#import <WebCore/ResourceResponse.h> 362fc2651226baac27029e38c9d6ef883fa32084dbSteve Block#import "DataReference.h" 372fc2651226baac27029e38c9d6ef883fa32084dbSteve Block#import "WebPage.h" 3865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 3965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch@interface NSURLDownload (WebNSURLDownloadDetails) 4065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch+(id)_downloadWithLoadingConnection:(NSURLConnection *)connection 4165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch request:(NSURLRequest *)request 4265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch response:(NSURLResponse *)r 4365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch delegate:(id)delegate 4465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch proxy:(id)proxy; 4565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch- (void)_setOriginatingURL:(NSURL *)originatingURL; 4665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch@end 4765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 482daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch@interface WKDownloadAsDelegate : NSObject <NSURLDownloadDelegate> { 4965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch WebKit::Download* _download; 5065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 5165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch- (id)initWithDownload:(WebKit::Download*)download; 5265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch- (void)invalidate; 5365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch@end 5465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 5565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochusing namespace WebCore; 5665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 5765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochnamespace WebKit { 5865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 5965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochstatic KURL originatingURLFromBackForwardList(WebPage *webPage) 6065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 6165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (!webPage) 6265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return KURL(); 6365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 6465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch Page* page = webPage->corePage(); 6565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (!page) 6665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return KURL(); 6765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 6865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch KURL originalURL; 6965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch int backCount = page->backForward()->backCount(); 7065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch for (int backIndex = 0; backIndex <= backCount; backIndex++) { 7165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // FIXME: At one point we had code here to check a "was user gesture" flag. 7265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Do we need to restore that logic? 7365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch HistoryItem* historyItem = page->backForward()->itemAtIndex(-backIndex); 7465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (!historyItem) 7565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch continue; 7665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 7765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch originalURL = historyItem->originalURL(); 7865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (!originalURL.isNull()) 7965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return originalURL; 8065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } 8165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 8265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return KURL(); 8365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 8465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 8565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochstatic void setOriginalURLForDownload(WebPage *webPage, NSURLDownload *download, const ResourceRequest& initialRequest) 8665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 8765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch KURL originalURL; 8865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 8965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // If there was no referrer, don't traverse the back/forward history 9065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // since this download was initiated directly. <rdar://problem/5294691> 9165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (!initialRequest.httpReferrer().isNull()) { 9265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // find the first item in the history that was originated by the user 9365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch originalURL = originatingURLFromBackForwardList(webPage); 9465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } 9565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 9665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (originalURL.isNull()) 9765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch originalURL = initialRequest.url(); 9865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 9965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch NSURL *originalNSURL = originalURL; 10065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 10165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch NSString *scheme = [originalNSURL scheme]; 10265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch NSString *host = [originalNSURL host]; 10365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (scheme && host && [scheme length] && [host length]) { 10465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch NSNumber *port = [originalNSURL port]; 10565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (port && [port intValue] < 0) 10665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch port = nil; 10765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch RetainPtr<NSString> hostOnlyURLString; 10865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (port) 10965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch hostOnlyURLString.adoptNS([[NSString alloc] initWithFormat:@"%@://%@:%d", scheme, host, [port intValue]]); 11065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch else 11165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch hostOnlyURLString.adoptNS([[NSString alloc] initWithFormat:@"%@://%@", scheme, host]); 11265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 11365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch RetainPtr<NSURL> hostOnlyURL = [[NSURL alloc] initWithString:hostOnlyURLString.get()]; 11465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 11565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ASSERT([download respondsToSelector:@selector(_setOriginatingURL:)]); 11665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch [download _setOriginatingURL:hostOnlyURL.get()]; 11765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } 11865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 11965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 12065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid Download::start(WebPage* initiatingPage) 12165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 12265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ASSERT(!m_nsURLDownload); 12365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ASSERT(!m_delegate); 12465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 12565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_delegate.adoptNS([[WKDownloadAsDelegate alloc] initWithDownload:this]); 12665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_nsURLDownload.adoptNS([[NSURLDownload alloc] initWithRequest:m_request.nsURLRequest() delegate:m_delegate.get()]); 12765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 12865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // FIXME: Allow this to be changed by the client. 12965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch [m_nsURLDownload.get() setDeletesFileUponFailure:NO]; 13065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 13165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch setOriginalURLForDownload(initiatingPage, m_nsURLDownload.get(), m_request); 13265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 13365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 13465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid Download::startWithHandle(WebPage* initiatingPage, ResourceHandle* handle, const ResourceRequest& initialRequest, const ResourceResponse& response) 13565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 13665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ASSERT(!m_nsURLDownload); 13765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ASSERT(!m_delegate); 13865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 13965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch id proxy = handle->releaseProxy(); 14065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ASSERT(proxy); 14165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 14265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_delegate.adoptNS([[WKDownloadAsDelegate alloc] initWithDownload:this]); 14365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_nsURLDownload = [NSURLDownload _downloadWithLoadingConnection:handle->connection() 14465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch request:m_request.nsURLRequest() 14565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch response:response.nsURLResponse() 14665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch delegate:m_delegate.get() 14765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch proxy:proxy]; 14865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 14965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // FIXME: Allow this to be changed by the client. 15065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch [m_nsURLDownload.get() setDeletesFileUponFailure:NO]; 15165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 15265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch setOriginalURLForDownload(initiatingPage, m_nsURLDownload.get(), initialRequest); 15365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 15465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 15565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid Download::cancel() 15665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 15765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch [m_nsURLDownload.get() cancel]; 15865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 15965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch RetainPtr<NSData> resumeData = [m_nsURLDownload.get() resumeData]; 16065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch didCancel(CoreIPC::DataReference(reinterpret_cast<const uint8_t*>([resumeData.get() bytes]), [resumeData.get() length])); 16165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 16265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 16365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid Download::platformInvalidate() 16465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 16565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ASSERT(m_nsURLDownload); 16665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ASSERT(m_delegate); 16765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 16865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch [m_delegate.get() invalidate]; 16965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_delegate = nullptr; 17065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_nsURLDownload = nullptr; 17165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 17265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 1732fc2651226baac27029e38c9d6ef883fa32084dbSteve Blockvoid Download::didDecideDestination(const String& destination, bool allowOverwrite) 1742fc2651226baac27029e38c9d6ef883fa32084dbSteve Block{ 1752fc2651226baac27029e38c9d6ef883fa32084dbSteve Block} 1762fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 1772fc2651226baac27029e38c9d6ef883fa32084dbSteve Blockvoid Download::platformDidFinish() 1782fc2651226baac27029e38c9d6ef883fa32084dbSteve Block{ 1792fc2651226baac27029e38c9d6ef883fa32084dbSteve Block} 1802fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 1812bde8e466a4451c7319e3a072d118917957d6554Steve Blockvoid Download::receivedCredential(const AuthenticationChallenge& authenticationChallenge, const Credential& credential) 1822bde8e466a4451c7319e3a072d118917957d6554Steve Block{ 1832bde8e466a4451c7319e3a072d118917957d6554Steve Block [authenticationChallenge.sender() useCredential:mac(credential) forAuthenticationChallenge:authenticationChallenge.nsURLAuthenticationChallenge()]; 1842bde8e466a4451c7319e3a072d118917957d6554Steve Block} 1852bde8e466a4451c7319e3a072d118917957d6554Steve Block 1862bde8e466a4451c7319e3a072d118917957d6554Steve Blockvoid Download::receivedRequestToContinueWithoutCredential(const AuthenticationChallenge& authenticationChallenge) 1872bde8e466a4451c7319e3a072d118917957d6554Steve Block{ 1882bde8e466a4451c7319e3a072d118917957d6554Steve Block [authenticationChallenge.sender() continueWithoutCredentialForAuthenticationChallenge:authenticationChallenge.nsURLAuthenticationChallenge()]; 1892bde8e466a4451c7319e3a072d118917957d6554Steve Block} 1902bde8e466a4451c7319e3a072d118917957d6554Steve Block 1912bde8e466a4451c7319e3a072d118917957d6554Steve Blockvoid Download::receivedCancellation(const AuthenticationChallenge& authenticationChallenge) 1922bde8e466a4451c7319e3a072d118917957d6554Steve Block{ 1932bde8e466a4451c7319e3a072d118917957d6554Steve Block [authenticationChallenge.sender() cancelAuthenticationChallenge:authenticationChallenge.nsURLAuthenticationChallenge()]; 1942bde8e466a4451c7319e3a072d118917957d6554Steve Block} 1952bde8e466a4451c7319e3a072d118917957d6554Steve Block 19665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} // namespace WebKit 19765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 19865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch@implementation WKDownloadAsDelegate 19965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 20065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch- (id)initWithDownload:(WebKit::Download*)download 20165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 20265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch self = [super init]; 20365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (!self) 20465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return nil; 20565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 20665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch _download = download; 20765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return self; 20865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 20965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 21065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch- (void)invalidate 21165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 21265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch _download = 0; 21365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 21465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 21565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch- (void)downloadDidBegin:(NSURLDownload *)download 21665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 21765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (_download) 21865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch _download->didStart(); 21965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 22065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 22165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch- (NSURLRequest *)download:(NSURLDownload *)download willSendRequest:(NSURLRequest *)request redirectResponse:(NSURLResponse *)redirectResponse 22265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 22365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return request; 22465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 22565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 22665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch- (BOOL)download:(NSURLDownload *)connection canAuthenticateAgainstProtectionSpace:(NSURLProtectionSpace *)protectionSpace 22765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 22865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // FIXME: Implement. 22965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch notImplemented(); 23065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return NO; 23165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 23265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 23365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch- (void)download:(NSURLDownload *)download didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge 23465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 2352bde8e466a4451c7319e3a072d118917957d6554Steve Block if (_download) 2362bde8e466a4451c7319e3a072d118917957d6554Steve Block _download->didReceiveAuthenticationChallenge(core(challenge)); 23765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 23865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 23965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch- (void)download:(NSURLDownload *)download didCancelAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge 24065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 24165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // FIXME: Implement. 24265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch notImplemented(); 24365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 24465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 24565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch- (BOOL)downloadShouldUseCredentialStorage:(NSURLDownload *)download 24665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 2472bde8e466a4451c7319e3a072d118917957d6554Steve Block return NO; 24865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 24965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 25065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch- (void)download:(NSURLDownload *)download didReceiveResponse:(NSURLResponse *)response 25165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 25265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (_download) 25365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch _download->didReceiveResponse(response); 25465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 25565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 25665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch- (void)download:(NSURLDownload *)download willResumeWithResponse:(NSURLResponse *)response fromByte:(long long)startingByte 25765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 25865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // FIXME: Implement. 25965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch notImplemented(); 26065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 26165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 26265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch- (void)download:(NSURLDownload *)download didReceiveDataOfLength:(NSUInteger)length 26365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 26465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (_download) 26565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch _download->didReceiveData(length); 26665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 26765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 26865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch- (BOOL)download:(NSURLDownload *)download shouldDecodeSourceDataOfMIMEType:(NSString *)encodingType 26965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 27065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (_download) 27165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return _download->shouldDecodeSourceDataOfMIMEType(encodingType); 27265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 27365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return YES; 27465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 27565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 27665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch- (void)download:(NSURLDownload *)download decideDestinationWithSuggestedFilename:(NSString *)filename 27765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 27865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch String destination; 27965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch bool allowOverwrite; 28065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (_download) 28165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch destination = _download->decideDestinationWithSuggestedFilename(filename, allowOverwrite); 28265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 28365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (!destination.isNull()) 28465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch [download setDestination:destination allowOverwrite:allowOverwrite]; 28565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 28665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 28765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch- (void)download:(NSURLDownload *)download didCreateDestination:(NSString *)path 28865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 28965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (_download) 29065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch _download->didCreateDestination(path); 29165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 29265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 29365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch- (void)downloadDidFinish:(NSURLDownload *)download 29465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 29565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (_download) 29665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch _download->didFinish(); 29765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 29865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 29965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch- (void)download:(NSURLDownload *)download didFailWithError:(NSError *)error 30065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 30165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (!_download) 30265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return; 30365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 30465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch RetainPtr<NSData> resumeData = [download resumeData]; 30565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch CoreIPC::DataReference dataReference(reinterpret_cast<const uint8_t*>([resumeData.get() bytes]), [resumeData.get() length]); 30665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 30765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch _download->didFail(error, dataReference); 30865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 30965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 31065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch@end 311