diff options
Diffstat (limited to 'WebKit/mac/Misc/WebDownload.m')
-rw-r--r-- | WebKit/mac/Misc/WebDownload.m | 249 |
1 files changed, 0 insertions, 249 deletions
diff --git a/WebKit/mac/Misc/WebDownload.m b/WebKit/mac/Misc/WebDownload.m deleted file mode 100644 index 2c53c1b..0000000 --- a/WebKit/mac/Misc/WebDownload.m +++ /dev/null @@ -1,249 +0,0 @@ -/* - * Copyright (C) 2005 Apple Computer, 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. - * 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of - * its contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "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 OR ITS 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. - */ - -#import <WebKit/WebDownload.h> - -#import <Foundation/NSURLAuthenticationChallenge.h> -#import <Foundation/NSURLDownload.h> -#import <WebKit/WebPanelAuthenticationHandler.h> -#import <wtf/Assertions.h> - -#import "WebTypesInternal.h" - -@class NSURLConnectionDelegateProxy; - -// FIXME: The following are NSURLDownload SPI - it would be nice to not have to override them at -// some point in the future -@interface NSURLDownload (WebDownloadCapability) -- (id)_initWithLoadingConnection:(NSURLConnection *)connection - request:(NSURLRequest *)request - response:(NSURLResponse *)response - delegate:(id)delegate - proxy:(NSURLConnectionDelegateProxy *)proxy; -- (id)_initWithRequest:(NSURLRequest *)request - delegate:(id)delegate - directory:(NSString *)directory; -@end - -@interface WebDownloadInternal : NSObject -{ -@public - id realDelegate; -} - -- (void)setRealDelegate:(id)rd; - -@end - -@implementation WebDownloadInternal - -- (void)dealloc -{ - [realDelegate release]; - [super dealloc]; -} - -- (void)setRealDelegate:(id)rd -{ - [rd retain]; - [realDelegate release]; - realDelegate = rd; -} - -- (BOOL)respondsToSelector:(SEL)selector -{ - if (selector == @selector(downloadDidBegin:) || - selector == @selector(download:willSendRequest:redirectResponse:) || - selector == @selector(download:didReceiveResponse:) || - selector == @selector(download:didReceiveDataOfLength:) || - selector == @selector(download:shouldDecodeSourceDataOfMIMEType:) || - selector == @selector(download:decideDestinationWithSuggestedFilename:) || - selector == @selector(download:didCreateDestination:) || - selector == @selector(downloadDidFinish:) || - selector == @selector(download:didFailWithError:) || - selector == @selector(download:shouldBeginChildDownloadOfSource:delegate:) || - selector == @selector(download:didBeginChildDownload:)) { - return [realDelegate respondsToSelector:selector]; - } - - return [super respondsToSelector:selector]; -} - -- (void)downloadDidBegin:(NSURLDownload *)download -{ -#if !defined(BUILDING_ON_TIGER) && !defined(BUILDING_ON_LEOPARD) - [[NSProcessInfo processInfo] disableSuddenTermination]; -#endif - [realDelegate downloadDidBegin:download]; -} - -- (NSURLRequest *)download:(NSURLDownload *)download willSendRequest:(NSURLRequest *)request redirectResponse:(NSURLResponse *)redirectResponse -{ - return [realDelegate download:download willSendRequest:request redirectResponse:redirectResponse]; -} - -- (void)download:(NSURLDownload *)download didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge -{ - if ([realDelegate respondsToSelector:@selector(download:didReceiveAuthenticationChallenge:)]) { - [realDelegate download:download didReceiveAuthenticationChallenge:challenge]; - } else { - NSWindow *window = nil; - if ([realDelegate respondsToSelector:@selector(downloadWindowForAuthenticationSheet:)]) { - window = [realDelegate downloadWindowForAuthenticationSheet:(WebDownload *)download]; - } - - [[WebPanelAuthenticationHandler sharedHandler] startAuthentication:challenge window:window]; - } -} - -- (void)download:(NSURLDownload *)download didCancelAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge -{ - if ([realDelegate respondsToSelector:@selector(download:didCancelAuthenticationChallenge:)]) { - [realDelegate download:download didCancelAuthenticationChallenge:challenge]; - } else { - [[WebPanelAuthenticationHandler sharedHandler] cancelAuthentication:challenge]; - } -} - -- (void)download:(NSURLDownload *)download didReceiveResponse:(NSURLResponse *)response -{ - [realDelegate download:download didReceiveResponse:response]; -} - -- (void)download:(NSURLDownload *)download didReceiveDataOfLength:(NSUInteger)length -{ - [realDelegate download:download didReceiveDataOfLength:length]; -} - -- (BOOL)download:(NSURLDownload *)download shouldDecodeSourceDataOfMIMEType:(NSString *)encodingType -{ - return [realDelegate download:download shouldDecodeSourceDataOfMIMEType:encodingType]; -} - -- (void)download:(NSURLDownload *)download decideDestinationWithSuggestedFilename:(NSString *)filename -{ - [realDelegate download:download decideDestinationWithSuggestedFilename:filename]; -} - -- (void)download:(NSURLDownload *)download didCreateDestination:(NSString *)path -{ - [realDelegate download:download didCreateDestination:path]; -} - -- (void)downloadDidFinish:(NSURLDownload *)download -{ -#if !defined(BUILDING_ON_TIGER) && !defined(BUILDING_ON_LEOPARD) - [[NSProcessInfo processInfo] enableSuddenTermination]; -#endif - [realDelegate downloadDidFinish:download]; -} - -- (void)download:(NSURLDownload *)download didFailWithError:(NSError *)error -{ -#if !defined(BUILDING_ON_TIGER) && !defined(BUILDING_ON_LEOPARD) - [[NSProcessInfo processInfo] enableSuddenTermination]; -#endif - [realDelegate download:download didFailWithError:error]; -} - -- (NSURLRequest *)download:(NSURLDownload *)download shouldBeginChildDownloadOfSource:(NSURLRequest *)child delegate:(id *)childDelegate -{ - return [realDelegate download:download shouldBeginChildDownloadOfSource:child delegate:childDelegate]; -} - -- (void)download:(NSURLDownload *)parent didBeginChildDownload:(NSURLDownload *)child -{ - [realDelegate download:parent didBeginChildDownload:child]; -} - -@end - -@implementation WebDownload - -- (void)_setRealDelegate:(id)delegate -{ - if (_webInternal == nil) { - _webInternal = [[WebDownloadInternal alloc] init]; - [_webInternal setRealDelegate:delegate]; - } else { - ASSERT(_webInternal == delegate); - } -} - -- (id)init -{ - self = [super init]; - if (self != nil) { - // _webInternal can be set up before init by _setRealDelegate - if (_webInternal == nil) { - _webInternal = [[WebDownloadInternal alloc] init]; - } - } - return self; -} - -- (void)dealloc -{ - [_webInternal release]; - [super dealloc]; -} - -- (id)initWithRequest:(NSURLRequest *)request delegate:(id)delegate -{ - [self _setRealDelegate:delegate]; - return [super initWithRequest:request delegate:_webInternal]; -} - -- (id)_initWithLoadingConnection:(NSURLConnection *)connection - request:(NSURLRequest *)request - response:(NSURLResponse *)response - delegate:(id)delegate - proxy:(NSURLConnectionDelegateProxy *)proxy -{ - [self _setRealDelegate:delegate]; - return [super _initWithLoadingConnection:connection request:request response:response delegate:_webInternal proxy:proxy]; -} - -- (id)_initWithRequest:(NSURLRequest *)request - delegate:(id)delegate - directory:(NSString *)directory -{ - [self _setRealDelegate:delegate]; - return [super _initWithRequest:request delegate:_webInternal directory:directory]; -} - -- (void)connection:(NSURLConnection *)connection willStopBufferingData:(NSData *)data -{ - // NSURLConnection calls this method even if it is not implemented. - // This happens because NSURLConnection caches the results of respondsToSelector. - // Those results become invalid when the delegate of NSURLConnectionDelegateProxy is changed. - // This is a workaround since this problem needs to be fixed in NSURLConnectionDelegateProxy. - // <rdar://problem/3913270> NSURLConnection calls unimplemented delegate method in WebDownload -} - -@end |