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 29635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#import "WebResourceInternal.h" 308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import "WebFrameInternal.h" 32635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#import "WebKitLogging.h" 33635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#import "WebKitVersionChecks.h" 348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import "WebNSDictionaryExtras.h" 35635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#import "WebNSObjectExtras.h" 368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import "WebNSURLExtras.h" 37635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#import <JavaScriptCore/InitializeThreading.h> 38635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#import <JavaScriptCore/PassRefPtr.h> 398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import <WebCore/ArchiveResource.h> 408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import <WebCore/LegacyWebArchive.h> 410bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#import <WebCore/RuntimeApplicationChecks.h> 428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import <WebCore/TextEncoding.h> 43635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#import <WebCore/ThreadCheck.h> 448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import <WebCore/WebCoreObjCExtras.h> 458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import <WebCore/WebCoreURLResponse.h> 4621939df44de1705786c545cd1bf519d47250322dBen Murdoch#import <wtf/Threading.h> 478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectusing namespace WebCore; 498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatic NSString * const WebResourceDataKey = @"WebResourceData"; 518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatic NSString * const WebResourceFrameNameKey = @"WebResourceFrameName"; 528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatic NSString * const WebResourceMIMETypeKey = @"WebResourceMIMEType"; 538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatic NSString * const WebResourceURLKey = @"WebResourceURL"; 548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatic NSString * const WebResourceTextEncodingNameKey = @"WebResourceTextEncodingName"; 558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatic NSString * const WebResourceResponseKey = @"WebResourceResponse"; 568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 57635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project@interface WebResourcePrivate : NSObject { 588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project@public 598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ArchiveResource* coreResource; 608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (id)initWithCoreResource:(PassRefPtr<ArchiveResource>)coreResource; 628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project@end 638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project@implementation WebResourcePrivate 658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project+ (void)initialize 678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 68635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project JSC::initializeThreading(); 6921939df44de1705786c545cd1bf519d47250322dBen Murdoch WTF::initializeMainThreadToProcessMainThread(); 70635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#ifndef BUILDING_ON_TIGER 718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project WebCoreObjCFinalizeOnMainThread(self); 728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 73635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project} 748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (id)init 768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return [super init]; 788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (id)initWithCoreResource:(PassRefPtr<ArchiveResource>)passedResource 818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project self = [super init]; 838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!self) 84635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return nil; 858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Acquire the PassRefPtr<>'s ref as our own manual ref 868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project coreResource = passedResource.releaseRef(); 878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return self; 888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)dealloc 918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (WebCoreObjCScheduleDeallocateOnMainThread([WebResourcePrivate class], self)) 938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (coreResource) 968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project coreResource->deref(); 978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [super dealloc]; 988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)finalize 1018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (coreResource) 1038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project coreResource->deref(); 1048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [super finalize]; 1058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project@end 1088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project@implementation WebResource 1108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (id)init 1128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project self = [super init]; 1148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!self) 1158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return nil; 1168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project _private = [[WebResourcePrivate alloc] init]; 1178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return self; 1188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (id)initWithData:(NSData *)data URL:(NSURL *)URL MIMEType:(NSString *)MIMEType textEncodingName:(NSString *)textEncodingName frameName:(NSString *)frameName 1218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return [self _initWithData:data URL:URL MIMEType:MIMEType textEncodingName:textEncodingName frameName:frameName response:nil copyData:YES]; 1238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (id)initWithCoder:(NSCoder *)decoder 1268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 127563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark WebCoreThreadViolationCheckRoundTwo(); 128635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 1298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project self = [super init]; 1308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!self) 1318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return nil; 1328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSData *data = nil; 1348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSURL *url = nil; 1358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSString *mimeType = nil, *textEncoding = nil, *frameName = nil; 1368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSURLResponse *response = nil; 1378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project @try { 1398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project id object = [decoder decodeObjectForKey:WebResourceDataKey]; 1408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if ([object isKindOfClass:[NSData class]]) 1418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project data = object; 1428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project object = [decoder decodeObjectForKey:WebResourceURLKey]; 1438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if ([object isKindOfClass:[NSURL class]]) 1448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project url = object; 1458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project object = [decoder decodeObjectForKey:WebResourceMIMETypeKey]; 1468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if ([object isKindOfClass:[NSString class]]) 1478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project mimeType = object; 1488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project object = [decoder decodeObjectForKey:WebResourceTextEncodingNameKey]; 1498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if ([object isKindOfClass:[NSString class]]) 1508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project textEncoding = object; 1518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project object = [decoder decodeObjectForKey:WebResourceFrameNameKey]; 1528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if ([object isKindOfClass:[NSString class]]) 1538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project frameName = object; 1548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project object = [decoder decodeObjectForKey:WebResourceResponseKey]; 1558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if ([object isKindOfClass:[NSURLResponse class]]) 1568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project response = object; 1578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } @catch(id) { 1588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [self release]; 1598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return nil; 1608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 1618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project _private = [[WebResourcePrivate alloc] initWithCoreResource:ArchiveResource::create(SharedBuffer::wrapNSData(data), url, mimeType, textEncoding, frameName, response)]; 1638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return self; 1658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)encodeWithCoder:(NSCoder *)encoder 1688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ArchiveResource *resource = _private->coreResource; 1708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSData *data = nil; 1728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSURL *url = nil; 1738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSString *mimeType = nil, *textEncoding = nil, *frameName = nil; 1748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSURLResponse *response = nil; 1758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (resource) { 1778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (resource->data()) 1788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project data = [resource->data()->createNSData() autorelease]; 1798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project url = resource->url(); 1808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project mimeType = resource->mimeType(); 1818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project textEncoding = resource->textEncoding(); 1828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project frameName = resource->frameName(); 1838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project response = resource->response().nsURLResponse(); 1848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 1858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [encoder encodeObject:data forKey:WebResourceDataKey]; 1868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [encoder encodeObject:url forKey:WebResourceURLKey]; 1878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [encoder encodeObject:mimeType forKey:WebResourceMIMETypeKey]; 1888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [encoder encodeObject:textEncoding forKey:WebResourceTextEncodingNameKey]; 1898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [encoder encodeObject:frameName forKey:WebResourceFrameNameKey]; 1908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [encoder encodeObject:response forKey:WebResourceResponseKey]; 1918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)dealloc 1948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [_private release]; 1968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [super dealloc]; 1978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (id)copyWithZone:(NSZone *)zone 2008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return [self retain]; 2028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (NSData *)data 2058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 206635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#ifdef MAIL_THREAD_WORKAROUND 207635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project if (needMailThreadWorkaround()) 208635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return [[self _webkit_invokeOnMainThread] data]; 209635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#endif 210635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 211563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark WebCoreThreadViolationCheckRoundTwo(); 212635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 213635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project if (!_private->coreResource) 214635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return nil; 215635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project if (!_private->coreResource->data()) 216635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return nil; 217635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return [_private->coreResource->data()->createNSData() autorelease]; 2188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (NSURL *)URL 2218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 222635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#ifdef MAIL_THREAD_WORKAROUND 223635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project if (needMailThreadWorkaround()) 224635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return [[self _webkit_invokeOnMainThread] URL]; 225635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#endif 226635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 227563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark WebCoreThreadViolationCheckRoundTwo(); 228635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 229635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project if (!_private->coreResource) 230635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return nil; 231635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project NSURL *url = _private->coreResource->url(); 232635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return url; 2338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (NSString *)MIMEType 2368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 237635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#ifdef MAIL_THREAD_WORKAROUND 238635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project if (needMailThreadWorkaround()) 239635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return [[self _webkit_invokeOnMainThread] MIMEType]; 240635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#endif 241635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 242563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark WebCoreThreadViolationCheckRoundTwo(); 243635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 244635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project if (!_private->coreResource) 245635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return nil; 246635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project NSString *mimeType = _private->coreResource->mimeType(); 247635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return mimeType; 2488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (NSString *)textEncodingName 2518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 252635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#ifdef MAIL_THREAD_WORKAROUND 253635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project if (needMailThreadWorkaround()) 254635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return [[self _webkit_invokeOnMainThread] textEncodingName]; 255635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#endif 256635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 257563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark WebCoreThreadViolationCheckRoundTwo(); 258635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 259635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project if (!_private->coreResource) 260635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return nil; 261635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project NSString *textEncodingName = _private->coreResource->textEncoding(); 262635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return textEncodingName; 2638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (NSString *)frameName 2668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 267635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#ifdef MAIL_THREAD_WORKAROUND 268635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project if (needMailThreadWorkaround()) 269635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return [[self _webkit_invokeOnMainThread] frameName]; 270635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#endif 271635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 272563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark WebCoreThreadViolationCheckRoundTwo(); 273635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 274635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project if (!_private->coreResource) 275635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return nil; 276635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project NSString *frameName = _private->coreResource->frameName(); 277635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return frameName; 2788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 28006ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen- (NSString *)description 2818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return [NSString stringWithFormat:@"<%@ %@>", [self className], [self URL]]; 2838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project@end 2868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project@implementation WebResource (WebResourceInternal) 2888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (id)_initWithCoreResource:(PassRefPtr<ArchiveResource>)coreResource 2908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project self = [super init]; 2928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!self) 2938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return nil; 2948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ASSERT(coreResource); 2968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // WebResources should not be init'ed with nil data, and doing so breaks certain uses of NSHTMLReader 2988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // See <rdar://problem/5820157> for more info 2998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!coreResource->data()) { 3008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [self release]; 3018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return nil; 3028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 3038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project _private = [[WebResourcePrivate alloc] initWithCoreResource:coreResource]; 3058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return self; 3078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 3088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (WebCore::ArchiveResource *)_coreResource 3108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 3118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return _private->coreResource; 3128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 3138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project@end 3158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project@implementation WebResource (WebResourcePrivate) 3178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// SPI for Mail (5066325) 3198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// FIXME: This "ignoreWhenUnarchiving" concept is an ugly one - can we find a cleaner solution for those who need this SPI? 3208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)_ignoreWhenUnarchiving 3218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 322635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#ifdef MAIL_THREAD_WORKAROUND 323635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project if (needMailThreadWorkaround()) { 324635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project [[self _webkit_invokeOnMainThread] _ignoreWhenUnarchiving]; 325635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return; 326635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project } 327635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#endif 328635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 329563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark WebCoreThreadViolationCheckRoundTwo(); 330635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 331635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project if (!_private->coreResource) 332635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return; 333635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project _private->coreResource->ignoreWhenUnarchiving(); 3348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 3358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (id)_initWithData:(NSData *)data 3378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project URL:(NSURL *)URL 3388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project MIMEType:(NSString *)MIMEType 3398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project textEncodingName:(NSString *)textEncodingName 3408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project frameName:(NSString *)frameName 3418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project response:(NSURLResponse *)response 3428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project copyData:(BOOL)copyData 3438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 344635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#ifdef MAIL_THREAD_WORKAROUND 345635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project if (needMailThreadWorkaround()) 346635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return [[self _webkit_invokeOnMainThread] _initWithData:data URL:URL MIMEType:MIMEType textEncodingName:textEncodingName frameName:frameName response:response copyData:copyData]; 347635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#endif 348635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 349563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark WebCoreThreadViolationCheckRoundTwo(); 350635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 3518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project self = [super init]; 3528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!self) 3538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return nil; 3548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!data || !URL || !MIMEType) { 3568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [self release]; 3578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return nil; 3588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 359635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 3608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project _private = [[WebResourcePrivate alloc] initWithCoreResource:ArchiveResource::create(SharedBuffer::wrapNSData(copyData ? [[data copy] autorelease] : data), URL, MIMEType, textEncodingName, frameName, response)]; 361635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 3628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return self; 3638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 3648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (id)_initWithData:(NSData *)data URL:(NSURL *)URL response:(NSURLResponse *)response 3668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 3678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Pass NO for copyData since the data doesn't need to be copied since we know that callers will no longer modify it. 3688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Copying it will also cause a performance regression. 3698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return [self _initWithData:data 3708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project URL:URL 3710bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch MIMEType:[response MIMEType] 3728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project textEncodingName:[response textEncodingName] 3738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project frameName:nil 3748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project response:response 375635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project copyData:NO]; 376635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project} 377635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 378635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project- (NSString *)_suggestedFilename 379635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project{ 380635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#ifdef MAIL_THREAD_WORKAROUND 381635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project if (needMailThreadWorkaround()) 382635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return [[self _webkit_invokeOnMainThread] _suggestedFilename]; 383635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#endif 384635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 385563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark WebCoreThreadViolationCheckRoundTwo(); 386635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 387635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project if (!_private->coreResource) 388635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return nil; 389635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project NSString *suggestedFilename = _private->coreResource->response().suggestedFilename(); 390635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return suggestedFilename; 3918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 3928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (NSFileWrapper *)_fileWrapperRepresentation 3948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 395635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project NSFileWrapper *wrapper = [[[NSFileWrapper alloc] initRegularFileWithContents:[self data]] autorelease]; 396635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project NSString *filename = [self _suggestedFilename]; 397635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project if (!filename || ![filename length]) 398635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project filename = [[self URL] _webkit_suggestedFilenameWithMIMEType:[self MIMEType]]; 399635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project [wrapper setPreferredFilename:filename]; 4008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return wrapper; 4018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 4028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (NSURLResponse *)_response 4048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 405635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#ifdef MAIL_THREAD_WORKAROUND 406635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project if (needMailThreadWorkaround()) 407635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return [[self _webkit_invokeOnMainThread] _response]; 408635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#endif 409635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 410563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark WebCoreThreadViolationCheckRoundTwo(); 411635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 4128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSURLResponse *response = nil; 4138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (_private->coreResource) 4148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project response = _private->coreResource->response().nsURLResponse(); 4158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return response ? response : [[[NSURLResponse alloc] init] autorelease]; 4168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 4178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (NSString *)_stringValue 4198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 420635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#ifdef MAIL_THREAD_WORKAROUND 421635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project if (needMailThreadWorkaround()) 422635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return [[self _webkit_invokeOnMainThread] _stringValue]; 423635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#endif 424635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 425563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark WebCoreThreadViolationCheckRoundTwo(); 426635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 427635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project WebCore::TextEncoding encoding; 428635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project if (_private->coreResource) 429635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project encoding = _private->coreResource->textEncoding(); 4308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!encoding.isValid()) 4318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project encoding = WindowsLatin1Encoding(); 4328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project SharedBuffer* coreData = _private->coreResource ? _private->coreResource->data() : 0; 4348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return encoding.decode(reinterpret_cast<const char*>(coreData ? coreData->data() : 0), coreData ? coreData->size() : 0); 4358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 4368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project@end 438635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 439635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#ifdef MAIL_THREAD_WORKAROUND 440635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 441563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkstatic const double newMailBundleVersion = 1050.0; 442563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 443635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project@implementation WebResource (WebMailThreadWorkaround) 444635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 445635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project+ (BOOL)_needMailThreadWorkaroundIfCalledOffMainThread 446635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project{ 4470bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch static BOOL isOldMail = applicationIsAppleMail() && [[[NSBundle mainBundle] objectForInfoDictionaryKey:(NSString *)kCFBundleVersionKey] doubleValue] < newMailBundleVersion; 448635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return isOldMail; 449635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project} 450635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 451635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project@end 452635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 453635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#endif 454