18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/* 28e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Copyright (C) 2005, 2006, 2007, 2008 Apple Inc. All rights reserved. 38e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 48e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Redistribution and use in source and binary forms, with or without 58e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * modification, are permitted provided that the following conditions 68e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * are met: 78e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 88e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 1. Redistributions of source code must retain the above copyright 98e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * notice, this list of conditions and the following disclaimer. 108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 2. Redistributions in binary form must reproduce the above copyright 118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * notice, this list of conditions and the following disclaimer in the 128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * documentation and/or other materials provided with the distribution. 138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of 148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * its contributors may be used to endorse or promote products derived 158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * from this software without specific prior written permission. 168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY 188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY 218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import "WebDataSource.h" 308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import "WebArchive.h" 328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import "WebArchiveInternal.h" 338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import "WebDataSourceInternal.h" 348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import "WebDocument.h" 358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import "WebDocumentLoaderMac.h" 368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import "WebFrameInternal.h" 378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import "WebFrameLoadDelegate.h" 388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import "WebFrameLoaderClient.h" 398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import "WebHTMLRepresentation.h" 408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import "WebKitErrorsPrivate.h" 418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import "WebKitLogging.h" 428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import "WebKitStatisticsPrivate.h" 438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import "WebKitNSStringExtras.h" 448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import "WebNSURLExtras.h" 458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import "WebNSURLRequestExtras.h" 468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import "WebPDFRepresentation.h" 478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import "WebResourceInternal.h" 488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import "WebResourceLoadDelegate.h" 498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import "WebViewInternal.h" 508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import <WebCore/ApplicationCacheStorage.h> 518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import <WebCore/FrameLoader.h> 528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import <WebCore/KURL.h> 538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import <WebCore/LegacyWebArchive.h> 548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import <WebCore/MIMETypeRegistry.h> 558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import <WebCore/ResourceRequest.h> 568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import <WebCore/SharedBuffer.h> 578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import <WebCore/WebCoreObjCExtras.h> 588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import <WebCore/WebCoreURLResponse.h> 598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import <WebKit/DOMHTML.h> 608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import <WebKit/DOMPrivate.h> 61635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#import <runtime/InitializeThreading.h> 628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import <wtf/Assertions.h> 6321939df44de1705786c545cd1bf519d47250322dBen Murdoch#import <wtf/Threading.h> 648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectusing namespace WebCore; 668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project@interface WebDataSourcePrivate : NSObject { 688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project@public 698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project WebDocumentLoaderMac* loader; 708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project id <WebDocumentRepresentation> representation; 728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project BOOL representationFinishedLoading; 74692e5dbf12901edacf14812a6fae25462920af42Steve Block BOOL includedInWebKitStatistics; 758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project@end 778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project@implementation WebDataSourcePrivate 798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project+ (void)initialize 818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 82635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project JSC::initializeThreading(); 8321939df44de1705786c545cd1bf519d47250322dBen Murdoch WTF::initializeMainThreadToProcessMainThread(); 84635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#ifndef BUILDING_ON_TIGER 858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project WebCoreObjCFinalizeOnMainThread(self); 868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 87635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project} 888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)dealloc 908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (WebCoreObjCScheduleDeallocateOnMainThread([WebDataSourcePrivate class], self)) 928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 94563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark ASSERT(loader); 95563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (loader) { 96563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark ASSERT(!loader->isLoading()); 97563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark loader->detachDataSource(); 98563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark loader->deref(); 99563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 1008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [representation release]; 1028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [super dealloc]; 1048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)finalize 1078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ASSERT_MAIN_THREAD(); 1098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 110563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark ASSERT(loader); 111563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (loader) { 112563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark ASSERT(!loader->isLoading()); 113563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark loader->detachDataSource(); 114563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark loader->deref(); 115563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 1168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [super finalize]; 1188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project@end 1218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project@interface WebDataSource (WebFileInternal) 1238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project@end 1248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project@implementation WebDataSource (WebFileInternal) 1268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)_setRepresentation:(id<WebDocumentRepresentation>)representation 1288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [_private->representation release]; 1308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project _private->representation = [representation retain]; 1318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project _private->representationFinishedLoading = NO; 1328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatic inline void addTypesFromClass(NSMutableDictionary *allTypes, Class objCClass, NSArray *supportTypes) 1358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSEnumerator *enumerator = [supportTypes objectEnumerator]; 1378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ASSERT(enumerator != nil); 1388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSString *mime = nil; 1398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project while ((mime = [enumerator nextObject]) != nil) { 1408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Don't clobber previously-registered classes. 1418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if ([allTypes objectForKey:mime] == nil) 1428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [allTypes setObject:objCClass forKey:mime]; 1438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 1448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 146643ca7872b450ea4efacab6188849e5aac2ba161Steve Block+ (Class)_representationClassForMIMEType:(NSString *)MIMEType allowingPlugins:(BOOL)allowPlugins 1478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Class repClass; 149643ca7872b450ea4efacab6188849e5aac2ba161Steve Block return [WebView _viewClass:nil andRepresentationClass:&repClass forMIMEType:MIMEType allowingPlugins:allowPlugins] ? repClass : nil; 1508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project@end 1528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project@implementation WebDataSource (WebPrivate) 1548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (NSError *)_mainDocumentError 1568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return _private->loader->mainDocumentError(); 1588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)_addSubframeArchives:(NSArray *)subframeArchives 1618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // FIXME: This SPI is poor, poor design. Can we come up with another solution for those who need it? 1638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project DocumentLoader* loader = [self _documentLoader]; 1648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ASSERT(loader); 1658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSEnumerator *enumerator = [subframeArchives objectEnumerator]; 1678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project WebArchive *archive; 1688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project while ((archive = [enumerator nextObject]) != nil) 1698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project loader->addAllArchiveResources([archive _coreLegacyWebArchive]); 1708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (NSFileWrapper *)_fileWrapperForURL:(NSURL *)URL 1738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if ([URL isFileURL]) { 1758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSString *path = [[URL path] stringByResolvingSymlinksInPath]; 1768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return [[[NSFileWrapper alloc] initWithPath:path] autorelease]; 1778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 1788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project WebResource *resource = [self subresourceForURL:URL]; 1808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (resource) 1818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return [resource _fileWrapperRepresentation]; 1828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSCachedURLResponse *cachedResponse = [[self _webView] _cachedResponseForURL:URL]; 1848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (cachedResponse) { 1858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSFileWrapper *wrapper = [[[NSFileWrapper alloc] initRegularFileWithContents:[cachedResponse data]] autorelease]; 1868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [wrapper setPreferredFilename:[[cachedResponse response] suggestedFilename]]; 1878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return wrapper; 1888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 1898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return nil; 1918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (NSString *)_responseMIMEType 1948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1950bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return [[self response] MIMEType]; 1968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (BOOL)_transferApplicationCache:(NSString*)destinationBundleIdentifier 1998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 200d0825bca7fe65beaee391d30da42e937db621564Steve Block#if ENABLE(OFFLINE_WEB_APPLICATIONS) 2018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project DocumentLoader* loader = [self _documentLoader]; 2028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!loader) 2048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return NO; 2050bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 2068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSString *cacheDir = [NSString _webkit_localCacheDirectoryWithBundleIdentifier:destinationBundleIdentifier]; 2078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2080bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return ApplicationCacheStorage::storeCopyOfCache(cacheDir, loader->applicationCacheHost()); 209d0825bca7fe65beaee391d30da42e937db621564Steve Block#else 210d0825bca7fe65beaee391d30da42e937db621564Steve Block return NO; 211d0825bca7fe65beaee391d30da42e937db621564Steve Block#endif 2128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 214967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch- (void)_setDeferMainResourceDataLoad:(BOOL)flag 215967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch{ 216967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch DocumentLoader* loader = [self _documentLoader]; 217967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch 218967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch if (!loader) 219967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch return; 220967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch 221967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch loader->setDeferMainResourceDataLoad(flag); 222967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch} 223967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch 2248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project@end 2258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project@implementation WebDataSource (WebInternal) 2278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)_finishedLoading 2298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project _private->representationFinishedLoading = YES; 2318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [[self representation] finishedLoadingWithDataSource:self]; 2328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)_receivedData:(NSData *)data 2358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // protect self temporarily, as the bridge receivedData call could remove our last ref 2378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project RetainPtr<WebDataSource*> protect(self); 2388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [[self representation] receivedData:data withDataSource:self]; 2400bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 2410bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if ([[self _webView] _usesDocumentViews]) 2420bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch [[[[self webFrame] frameView] documentView] dataSourceUpdated:self]; 2438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)_setMainDocumentError:(NSError *)error 2468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!_private->representationFinishedLoading) { 2488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project _private->representationFinishedLoading = YES; 2498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [[self representation] receivedError:error withDataSource:self]; 2508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 2518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)_revertToProvisionalState 2548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [self _setRepresentation:nil]; 2568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project+ (NSMutableDictionary *)_repTypesAllowImageTypeOmission:(BOOL)allowImageTypeOmission 2598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project static NSMutableDictionary *repTypes = nil; 2618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project static BOOL addedImageTypes = NO; 2628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!repTypes) { 2648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project repTypes = [[NSMutableDictionary alloc] init]; 2658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project addTypesFromClass(repTypes, [WebHTMLRepresentation class], [WebHTMLRepresentation supportedNonImageMIMETypes]); 2668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Since this is a "secret default" we don't both registering it. 2688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project BOOL omitPDFSupport = [[NSUserDefaults standardUserDefaults] boolForKey:@"WebKitOmitPDFSupport"]; 2698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!omitPDFSupport) 2708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project addTypesFromClass(repTypes, [WebPDFRepresentation class], [WebPDFRepresentation supportedMIMETypes]); 2718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 2728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!addedImageTypes && !allowImageTypeOmission) { 2748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project addTypesFromClass(repTypes, [WebHTMLRepresentation class], [WebHTMLRepresentation supportedImageMIMETypes]); 2758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project addedImageTypes = YES; 2768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 2778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return repTypes; 2798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)_replaceSelectionWithArchive:(WebArchive *)archive selectReplacement:(BOOL)selectReplacement 2828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project DOMDocumentFragment *fragment = [self _documentFragmentWithArchive:archive]; 2848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (fragment) 2858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [[self webFrame] _replaceSelectionWithFragment:fragment selectReplacement:selectReplacement smartReplace:NO matchStyle:NO]; 2868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// FIXME: There are few reasons why this method and many of its related methods can't be pushed entirely into WebCore in the future. 2898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (DOMDocumentFragment *)_documentFragmentWithArchive:(WebArchive *)archive 2908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ASSERT(archive); 2928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project WebResource *mainResource = [archive mainResource]; 2938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (mainResource) { 2948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSString *MIMEType = [mainResource MIMEType]; 2958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if ([WebView canShowMIMETypeAsHTML:MIMEType]) { 2968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSString *markupString = [[NSString alloc] initWithData:[mainResource data] encoding:NSUTF8StringEncoding]; 2978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // FIXME: seems poor form to do this as a side effect of getting a document fragment 2988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (DocumentLoader* loader = [self _documentLoader]) 2998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project loader->addAllArchiveResources([archive _coreLegacyWebArchive]); 3008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project DOMDocumentFragment *fragment = [[self webFrame] _documentFragmentWithMarkupString:markupString baseURLString:[[mainResource URL] _web_originalDataAsString]]; 3028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [markupString release]; 3038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return fragment; 3048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } else if (MIMETypeRegistry::isSupportedImageMIMEType(MIMEType)) { 3058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return [self _documentFragmentWithImageResource:mainResource]; 3068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 3088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 3098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return nil; 3108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 3118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (DOMDocumentFragment *)_documentFragmentWithImageResource:(WebResource *)resource 3138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 3148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project DOMElement *imageElement = [self _imageElementWithImageResource:resource]; 3158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!imageElement) 3168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return 0; 3178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project DOMDocumentFragment *fragment = [[[self webFrame] DOMDocument] createDocumentFragment]; 3188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [fragment appendChild:imageElement]; 3198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return fragment; 3208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 3218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (DOMElement *)_imageElementWithImageResource:(WebResource *)resource 3238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 3248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!resource) 3258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return 0; 3268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [self addSubresource:resource]; 3288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project DOMElement *imageElement = [[[self webFrame] DOMDocument] createElement:@"img"]; 3308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // FIXME: calling _web_originalDataAsString on a file URL returns an absolute path. Workaround this. 3328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSURL *URL = [resource URL]; 3338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [imageElement setAttribute:@"src" value:[URL isFileURL] ? [URL absoluteString] : [URL _web_originalDataAsString]]; 3348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return imageElement; 3368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 3378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// May return nil if not initialized with a URL. 3398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (NSURL *)_URL 3408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 3418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project const KURL& url = _private->loader->url(); 3428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (url.isEmpty()) 3438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return nil; 3448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return url; 3458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 3468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (WebView *)_webView 3488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 3498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return [[self webFrame] webView]; 3508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 3518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (BOOL)_isDocumentHTML 3538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 3548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSString *MIMEType = [self _responseMIMEType]; 3558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return [WebView canShowMIMETypeAsHTML:MIMEType]; 3568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 3578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3580bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch- (void)_makeRepresentation 3598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 360643ca7872b450ea4efacab6188849e5aac2ba161Steve Block Class repClass = [[self class] _representationClassForMIMEType:[self _responseMIMEType] allowingPlugins:[[[self _webView] preferences] arePlugInsEnabled]]; 3618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Check if the data source was already bound? 3638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (![[self representation] isKindOfClass:repClass]) { 3648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project id newRep = repClass != nil ? [[repClass alloc] init] : nil; 3658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [self _setRepresentation:(id <WebDocumentRepresentation>)newRep]; 3668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [newRep release]; 3678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 3680bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 3698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [_private->representation setDataSource:self]; 3708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 3718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (DocumentLoader*)_documentLoader 3738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 3748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return _private->loader; 3758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 3768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (id)_initWithDocumentLoader:(PassRefPtr<WebDocumentLoaderMac>)loader 3788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 3798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project self = [super init]; 3808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!self) 3818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return nil; 3828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project _private = [[WebDataSourcePrivate alloc] init]; 3848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project _private->loader = loader.releaseRef(); 3868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project LOG(Loading, "creating datasource for %@", static_cast<NSURL *>(_private->loader->request().url())); 388692e5dbf12901edacf14812a6fae25462920af42Steve Block 389692e5dbf12901edacf14812a6fae25462920af42Steve Block if ((_private->includedInWebKitStatistics = [[self webFrame] _isIncludedInWebKitStatistics])) 390692e5dbf12901edacf14812a6fae25462920af42Steve Block ++WebDataSourceCount; 391692e5dbf12901edacf14812a6fae25462920af42Steve Block 392692e5dbf12901edacf14812a6fae25462920af42Steve Block return self; 3938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 3948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project@end 3968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project@implementation WebDataSource 3988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (id)initWithRequest:(NSURLRequest *)request 4008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 4018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return [self _initWithDocumentLoader:WebDocumentLoaderMac::create(request, SubstituteData())]; 4028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 4038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)dealloc 4058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 406692e5dbf12901edacf14812a6fae25462920af42Steve Block if (_private && _private->includedInWebKitStatistics) 407692e5dbf12901edacf14812a6fae25462920af42Steve Block --WebDataSourceCount; 408692e5dbf12901edacf14812a6fae25462920af42Steve Block 4098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [_private release]; 410692e5dbf12901edacf14812a6fae25462920af42Steve Block 4118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [super dealloc]; 4128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 4138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)finalize 4158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 416692e5dbf12901edacf14812a6fae25462920af42Steve Block if (_private && _private->includedInWebKitStatistics) 417692e5dbf12901edacf14812a6fae25462920af42Steve Block --WebDataSourceCount; 4188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [super finalize]; 4208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 4218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (NSData *)data 4238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 4248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project RefPtr<SharedBuffer> mainResourceData = _private->loader->mainResourceData(); 4258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!mainResourceData) 4268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return nil; 4278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return [mainResourceData->createNSData() autorelease]; 4288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 4298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (id <WebDocumentRepresentation>)representation 4318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 4328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return _private->representation; 4338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 4348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (WebFrame *)webFrame 4368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 4378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project FrameLoader* frameLoader = _private->loader->frameLoader(); 4388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!frameLoader) 4398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return nil; 4408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return static_cast<WebFrameLoaderClient*>(frameLoader->client())->webFrame(); 4418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 4428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (NSURLRequest *)initialRequest 4448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 4458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return _private->loader->originalRequest().nsURLRequest(); 4468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 4478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (NSMutableURLRequest *)request 4498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 4508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project FrameLoader* frameLoader = _private->loader->frameLoader(); 4518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!frameLoader || !frameLoader->frameHasLoaded()) 4528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return nil; 4538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // FIXME: this cast is dubious 4558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return (NSMutableURLRequest *)_private->loader->request().nsURLRequest(); 4568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 4578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (NSURLResponse *)response 4598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 4608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return _private->loader->response().nsURLResponse(); 4618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 4628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (NSString *)textEncodingName 4648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 4658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSString *textEncodingName = _private->loader->overrideEncoding(); 4668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!textEncodingName) 4678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project textEncodingName = [[self response] textEncodingName]; 4688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return textEncodingName; 4698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 4708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (BOOL)isLoading 4728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 4738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return _private->loader->isLoadingInAPISense(); 4748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 4758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// Returns nil or the page title. 4778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (NSString *)pageTitle 4788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 4798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return [[self representation] title]; 4808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 4818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (NSURL *)unreachableURL 4838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 4848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project const KURL& unreachableURL = _private->loader->unreachableURL(); 4858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (unreachableURL.isEmpty()) 4868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return nil; 4878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return unreachableURL; 4888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 4898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (WebArchive *)webArchive 4918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 4928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // it makes no sense to grab a WebArchive from an uncommitted document. 4938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!_private->loader->isCommitted()) 4948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return nil; 4958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return [[[WebArchive alloc] _initWithCoreLegacyWebArchive:LegacyWebArchive::create(core([self webFrame]))] autorelease]; 4978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 4988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (WebResource *)mainResource 5008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 5018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project RefPtr<ArchiveResource> coreResource = _private->loader->mainResource(); 5028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return [[[WebResource alloc] _initWithCoreResource:coreResource.release()] autorelease]; 5038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 5048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (NSArray *)subresources 5068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 5078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Vector<PassRefPtr<ArchiveResource> > coreSubresources; 5088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project _private->loader->getSubresources(coreSubresources); 5098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSMutableArray *subresources = [[NSMutableArray alloc] initWithCapacity:coreSubresources.size()]; 511563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark for (unsigned i = 0; i < coreSubresources.size(); ++i) { 512563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark WebResource *resource = [[WebResource alloc] _initWithCoreResource:coreSubresources[i]]; 513563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (resource) { 514563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark [subresources addObject:resource]; 515563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark [resource release]; 516563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 517563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 518563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 5198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return [subresources autorelease]; 5208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 5218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (WebResource *)subresourceForURL:(NSURL *)URL 5238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 5248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project RefPtr<ArchiveResource> subresource = _private->loader->subresource(URL); 5258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return subresource ? [[[WebResource alloc] _initWithCoreResource:subresource.get()] autorelease] : nil; 5278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 5288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)addSubresource:(WebResource *)subresource 5308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 5318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project _private->loader->addArchiveResource([subresource _coreResource]); 5328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 5338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project@end 535