18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/* 2d0825bca7fe65beaee391d30da42e937db621564Steve Block * Copyright (C) 2006, 2007, 2008, 2010 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 "WebElementDictionary.h" 308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 310bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#import "DOMNodeInternal.h" 328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import "WebDOMOperations.h" 338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import "WebFrame.h" 348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import "WebFrameInternal.h" 358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import "WebKitLogging.h" 368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import "WebTypesInternal.h" 378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import "WebView.h" 388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import "WebViewPrivate.h" 398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import <WebCore/Frame.h> 408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import <WebCore/HitTestResult.h> 418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import <WebCore/Image.h> 428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import <WebCore/WebCoreObjCExtras.h> 438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import <WebKit/DOMCore.h> 448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import <WebKit/DOMExtensions.h> 45635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#import <runtime/InitializeThreading.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 CFMutableDictionaryRef lookupTable = NULL; 518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatic void addLookupKey(NSString *key, SEL selector) 538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project CFDictionaryAddValue(lookupTable, key, selector); 558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatic void cacheValueForKey(const void *key, const void *value, void *self) 588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // calling objectForKey will cache the value in our _cache dictionary 608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [(WebElementDictionary *)self objectForKey:(NSString *)key]; 618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project@implementation WebElementDictionary 648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project+ (void)initialize 668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 67635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project JSC::initializeThreading(); 6821939df44de1705786c545cd1bf519d47250322dBen Murdoch WTF::initializeMainThreadToProcessMainThread(); 69635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#ifndef BUILDING_ON_TIGER 708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project WebCoreObjCFinalizeOnMainThread(self); 718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 72635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project} 738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project+ (void)initializeLookupTable 758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (lookupTable) 778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project lookupTable = CFDictionaryCreateMutable(kCFAllocatorDefault, 0, &kCFCopyStringDictionaryKeyCallBacks, NULL); 808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project addLookupKey(WebElementDOMNodeKey, @selector(_domNode)); 828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project addLookupKey(WebElementFrameKey, @selector(_webFrame)); 838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project addLookupKey(WebElementImageAltStringKey, @selector(_altDisplayString)); 848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project addLookupKey(WebElementImageKey, @selector(_image)); 858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project addLookupKey(WebElementImageRectKey, @selector(_imageRect)); 868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project addLookupKey(WebElementImageURLKey, @selector(_absoluteImageURL)); 878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project addLookupKey(WebElementIsSelectedKey, @selector(_isSelected)); 88e14391e94c850b8bd03680c23b38978db68687a8John Reck addLookupKey(WebElementMediaURLKey, @selector(_absoluteMediaURL)); 898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project addLookupKey(WebElementSpellingToolTipKey, @selector(_spellingToolTip)); 908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project addLookupKey(WebElementTitleKey, @selector(_title)); 918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project addLookupKey(WebElementLinkURLKey, @selector(_absoluteLinkURL)); 928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project addLookupKey(WebElementLinkTargetFrameKey, @selector(_targetWebFrame)); 938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project addLookupKey(WebElementLinkTitleKey, @selector(_titleDisplayString)); 948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project addLookupKey(WebElementLinkLabelKey, @selector(_textContent)); 958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project addLookupKey(WebElementLinkIsLiveKey, @selector(_isLiveLink)); 968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project addLookupKey(WebElementIsContentEditableKey, @selector(_isContentEditable)); 97d0825bca7fe65beaee391d30da42e937db621564Steve Block addLookupKey(WebElementIsInScrollBarKey, @selector(_isInScrollBar)); 988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (id)initWithHitTestResult:(const HitTestResult&)result 1018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [[self class] initializeLookupTable]; 1038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [super init]; 1048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project _result = new HitTestResult(result); 1058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return self; 1068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)dealloc 1098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (WebCoreObjCScheduleDeallocateOnMainThread([WebElementDictionary class], self)) 1118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 1128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project delete _result; 1148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [_cache release]; 1158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [_nilValues release]; 1168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [super dealloc]; 1178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)finalize 1208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ASSERT_MAIN_THREAD(); 1228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project delete _result; 1238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [super finalize]; 1248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)_fillCache 1278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project CFDictionaryApplyFunction(lookupTable, cacheValueForKey, self); 1298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project _cacheComplete = YES; 1308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (NSUInteger)count 1338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!_cacheComplete) 1358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [self _fillCache]; 1368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return [_cache count]; 1378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (NSEnumerator *)keyEnumerator 1408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!_cacheComplete) 1428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [self _fillCache]; 1438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return [_cache keyEnumerator]; 1448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (id)objectForKey:(id)key 1478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project id value = [_cache objectForKey:key]; 1498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (value || _cacheComplete || [_nilValues containsObject:key]) 1508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return value; 1518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project SEL selector = (SEL)CFDictionaryGetValue(lookupTable, key); 1538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!selector) 1548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return nil; 1558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project value = [self performSelector:selector]; 1568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project unsigned lookupTableCount = CFDictionaryGetCount(lookupTable); 1588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (value) { 1598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!_cache) 1608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project _cache = [[NSMutableDictionary alloc] initWithCapacity:lookupTableCount]; 1618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [_cache setObject:value forKey:key]; 1628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } else { 1638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!_nilValues) 1648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project _nilValues = [[NSMutableSet alloc] initWithCapacity:lookupTableCount]; 1658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [_nilValues addObject:key]; 1668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 1678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project _cacheComplete = ([_cache count] + [_nilValues count]) == lookupTableCount; 1698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return value; 1718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (DOMNode *)_domNode 1748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return kit(_result->innerNonSharedNode()); 1768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (WebFrame *)_webFrame 1798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return [[[self _domNode] ownerDocument] webFrame]; 1818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// String's NSString* operator converts null Strings to empty NSStrings for compatibility 1848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// with AppKit. We need to work around that here. 1858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatic NSString* NSStringOrNil(String coreString) 1868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (coreString.isNull()) 1888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return nil; 1898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return coreString; 1908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (NSString *)_altDisplayString 1938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return NSStringOrNil(_result->altDisplayString()); 1958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (NSString *)_spellingToolTip 1988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1990bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch TextDirection dir; 2000bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return NSStringOrNil(_result->spellingToolTip(dir)); 2018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (NSImage *)_image 2048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Image* image = _result->image(); 2068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return image ? image->getNSImage() : nil; 2078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (NSValue *)_imageRect 2108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project IntRect rect = _result->imageRect(); 2128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return rect.isEmpty() ? nil : [NSValue valueWithRect:rect]; 2138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (NSURL *)_absoluteImageURL 2168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return _result->absoluteImageURL(); 2188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 220e14391e94c850b8bd03680c23b38978db68687a8John Reck- (NSURL *)_absoluteMediaURL 221e14391e94c850b8bd03680c23b38978db68687a8John Reck{ 222e14391e94c850b8bd03680c23b38978db68687a8John Reck return _result->absoluteMediaURL(); 223e14391e94c850b8bd03680c23b38978db68687a8John Reck} 224e14391e94c850b8bd03680c23b38978db68687a8John Reck 2258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (NSNumber *)_isSelected 2268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return [NSNumber numberWithBool:_result->isSelected()]; 2288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (NSString *)_title 2318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2320bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch TextDirection dir; 2330bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return NSStringOrNil(_result->title(dir)); 2348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (NSURL *)_absoluteLinkURL 2378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return _result->absoluteLinkURL(); 2398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (WebFrame *)_targetWebFrame 2428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return kit(_result->targetFrame()); 2448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (NSString *)_titleDisplayString 2478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return NSStringOrNil(_result->titleDisplayString()); 2498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (NSString *)_textContent 2528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return NSStringOrNil(_result->textContent()); 2548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (NSNumber *)_isLiveLink 2578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return [NSNumber numberWithBool:_result->isLiveLink()]; 2598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (NSNumber *)_isContentEditable 2628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return [NSNumber numberWithBool:_result->isContentEditable()]; 2648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 266d0825bca7fe65beaee391d30da42e937db621564Steve Block- (NSNumber *)_isInScrollBar 267d0825bca7fe65beaee391d30da42e937db621564Steve Block{ 268d0825bca7fe65beaee391d30da42e937db621564Steve Block return [NSNumber numberWithBool:_result->scrollbar() != 0]; 269d0825bca7fe65beaee391d30da42e937db621564Steve Block} 270d0825bca7fe65beaee391d30da42e937db621564Steve Block 2718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project@end 272