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 "WebFrameInternal.h" 308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import "DOMCSSStyleDeclarationInternal.h" 328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import "DOMDocumentFragmentInternal.h" 338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import "DOMDocumentInternal.h" 348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import "DOMElementInternal.h" 358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import "DOMHTMLElementInternal.h" 368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import "DOMNodeInternal.h" 378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import "DOMRangeInternal.h" 388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import "WebArchiveInternal.h" 398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import "WebChromeClient.h" 408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import "WebDataSourceInternal.h" 418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import "WebDocumentLoaderMac.h" 42dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#import "WebDynamicScrollBarsView.h" 438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import "WebFrameLoaderClient.h" 448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import "WebFrameViewInternal.h" 458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import "WebHTMLView.h" 468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import "WebHTMLViewInternal.h" 478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import "WebKitStatisticsPrivate.h" 48635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#import "WebKitVersionChecks.h" 490bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#import "WebNSObjectExtras.h" 508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import "WebNSURLExtras.h" 518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import "WebScriptDebugger.h" 52643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#import "WebScriptWorldInternal.h" 538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import "WebViewInternal.h" 548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import <JavaScriptCore/APICast.h> 550bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#import <WebCore/AXObjectCache.h> 568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import <WebCore/AccessibilityObject.h> 57635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#import <WebCore/AnimationController.h> 580bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#import <WebCore/CSSMutableStyleDeclaration.h> 59cad810f21b803229eb11403f9209855525a25d57Steve Block#import <WebCore/CachedResourceLoader.h> 60d0825bca7fe65beaee391d30da42e937db621564Steve Block#import <WebCore/Chrome.h> 618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import <WebCore/ColorMac.h> 628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import <WebCore/DOMImplementation.h> 638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import <WebCore/DocumentFragment.h> 6481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch#import <WebCore/DocumentLoader.h> 65cad810f21b803229eb11403f9209855525a25d57Steve Block#import <WebCore/DocumentMarkerController.h> 668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import <WebCore/EventHandler.h> 670bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#import <WebCore/EventNames.h> 688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import <WebCore/Frame.h> 698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import <WebCore/FrameLoader.h> 7006ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen#import <WebCore/FrameLoaderStateMachine.h> 718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import <WebCore/FrameTree.h> 728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import <WebCore/GraphicsContext.h> 738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import <WebCore/HTMLFrameOwnerElement.h> 748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import <WebCore/HistoryItem.h> 758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import <WebCore/HitTestResult.h> 768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import <WebCore/LegacyWebArchive.h> 778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import <WebCore/Page.h> 788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import <WebCore/PluginData.h> 79dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#import <WebCore/PrintContext.h> 800bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#import <WebCore/RenderLayer.h> 818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import <WebCore/RenderPart.h> 828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import <WebCore/RenderView.h> 838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import <WebCore/ReplaceSelectionCommand.h> 840bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#import <WebCore/RuntimeApplicationChecks.h> 850bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#import <WebCore/ScriptValue.h> 868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import <WebCore/SmartReplace.h> 8765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#import <WebCore/SVGDocumentExtensions.h> 88643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#import <WebCore/SVGSMILElement.h> 898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import <WebCore/TextIterator.h> 900bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#import <WebCore/ThreadCheck.h> 918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import <WebCore/TypingCommand.h> 928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import <WebCore/htmlediting.h> 938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import <WebCore/markup.h> 948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import <WebCore/visible_units.h> 95692e5dbf12901edacf14812a6fae25462920af42Steve Block#import <WebKitSystemInterface.h> 968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import <runtime/JSLock.h> 97cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block#import <runtime/JSObject.h> 98635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#import <runtime/JSValue.h> 990bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#import <wtf/CurrentTime.h> 1008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectusing namespace std; 1028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectusing namespace WebCore; 1038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectusing namespace HTMLNames; 1048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectusing JSC::JSGlobalObject; 1068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectusing JSC::JSLock; 1070bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochusing JSC::JSValue; 1080bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochusing JSC::SilenceAssertionsOnly; 1098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/* 1118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectHere is the current behavior matrix for four types of navigations: 1128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectStandard Nav: 1148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Restore form state: YES 1168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Restore scroll and focus state: YES 1178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Cache policy: NSURLRequestUseProtocolCachePolicy 1188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Add to back/forward list: YES 1198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectBack/Forward: 1218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Restore form state: YES 1238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Restore scroll and focus state: YES 1248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Cache policy: NSURLRequestReturnCacheDataElseLoad 1258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Add to back/forward list: NO 1268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectReload (meaning only the reload button): 1288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Restore form state: NO 1308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Restore scroll and focus state: YES 1318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Cache policy: NSURLRequestReloadIgnoringCacheData 1328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Add to back/forward list: NO 1338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectRepeat load of the same URL (by any other means of navigation other than the reload button, including hitting return in the location field): 1358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Restore form state: NO 1378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Restore scroll and focus state: NO, reset to initial conditions 1388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Cache policy: NSURLRequestReloadIgnoringCacheData 1398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Add to back/forward list: NO 1408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/ 1418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectNSString *WebPageCacheEntryDateKey = @"WebPageCacheEntryDateKey"; 1438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectNSString *WebPageCacheDataSourceKey = @"WebPageCacheDataSourceKey"; 1448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectNSString *WebPageCacheDocumentViewKey = @"WebPageCacheDocumentViewKey"; 1458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1460bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochNSString *WebFrameMainDocumentError = @"WebFrameMainDocumentErrorKey"; 1470bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochNSString *WebFrameHasPlugins = @"WebFrameHasPluginsKey"; 1480bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochNSString *WebFrameHasUnloadListener = @"WebFrameHasUnloadListenerKey"; 1490bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochNSString *WebFrameUsesDatabases = @"WebFrameUsesDatabasesKey"; 1500bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochNSString *WebFrameUsesGeolocation = @"WebFrameUsesGeolocationKey"; 1510bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochNSString *WebFrameUsesApplicationCache = @"WebFrameUsesApplicationCacheKey"; 1520bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochNSString *WebFrameCanSuspendActiveDOMObjects = @"WebFrameCanSuspendActiveDOMObjectsKey"; 1530bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 1548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// FIXME: Remove when this key becomes publicly defined 1558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectNSString *NSAccessibilityEnhancedUserInterfaceAttribute = @"AXEnhancedUserInterface"; 1568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project@implementation WebFramePrivate 1588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)dealloc 1608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [webFrameView release]; 1628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project delete scriptDebugger; 1648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [super dealloc]; 1668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)finalize 1698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project delete scriptDebugger; 1718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [super finalize]; 1738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)setWebFrameView:(WebFrameView *)v 1768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [v retain]; 1788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [webFrameView release]; 1798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project webFrameView = v; 1808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project@end 1838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectEditableLinkBehavior core(WebKitEditableLinkBehavior editableLinkBehavior) 1858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project switch (editableLinkBehavior) { 1878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case WebKitEditableLinkDefaultBehavior: 1888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return EditableLinkDefaultBehavior; 1898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case WebKitEditableLinkAlwaysLive: 1908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return EditableLinkAlwaysLive; 1918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case WebKitEditableLinkOnlyLiveWithShiftKey: 1928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return EditableLinkOnlyLiveWithShiftKey; 1938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case WebKitEditableLinkLiveWhenNotFocused: 1948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return EditableLinkLiveWhenNotFocused; 1958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case WebKitEditableLinkNeverLive: 1968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return EditableLinkNeverLive; 1978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 1988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ASSERT_NOT_REACHED(); 1998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return EditableLinkDefaultBehavior; 2008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 202545e470e52f0ac6a3a072bf559c796b42c6066b6Ben MurdochWebCore::EditingBehaviorType core(WebKitEditingBehavior behavior) 203e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block{ 204e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block switch (behavior) { 205e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block case WebKitEditingMacBehavior: 206e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block return WebCore::EditingMacBehavior; 207e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block case WebKitEditingWinBehavior: 208e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block return WebCore::EditingWindowsBehavior; 20928040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu case WebKitEditingUnixBehavior: 21028040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu return WebCore::EditingUnixBehavior; 211e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block } 212e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block ASSERT_NOT_REACHED(); 213e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block return WebCore::EditingMacBehavior; 214e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block} 215e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block 216635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source ProjectTextDirectionSubmenuInclusionBehavior core(WebTextDirectionSubmenuInclusionBehavior behavior) 217635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project{ 218635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project switch (behavior) { 219635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project case WebTextDirectionSubmenuNeverIncluded: 220635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return TextDirectionSubmenuNeverIncluded; 221635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project case WebTextDirectionSubmenuAutomaticallyIncluded: 222635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return TextDirectionSubmenuAutomaticallyIncluded; 223635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project case WebTextDirectionSubmenuAlwaysIncluded: 224635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return TextDirectionSubmenuAlwaysIncluded; 225635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project } 226635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project ASSERT_NOT_REACHED(); 227635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return TextDirectionSubmenuNeverIncluded; 228635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project} 229635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 2308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project@implementation WebFrame (WebInternal) 2318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectFrame* core(WebFrame *frame) 2338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return frame ? frame->_private->coreFrame : 0; 2358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectWebFrame *kit(Frame* frame) 2388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return frame ? static_cast<WebFrameLoaderClient*>(frame->loader()->client())->webFrame() : nil; 2408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectPage* core(WebView *webView) 2438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return [webView page]; 2458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectWebView *kit(Page* page) 2488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 24954cdeeebc7adcbcd900e8b6a141a8cae27d9a631Steve Block return page ? static_cast<WebView*>(page->chrome()->client()->webView()) : nil; 2508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectWebView *getWebView(WebFrame *webFrame) 2538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Frame* coreFrame = core(webFrame); 2558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!coreFrame) 2568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return nil; 2578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return kit(coreFrame->page()); 2588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project+ (PassRefPtr<Frame>)_createFrameWithPage:(Page*)page frameName:(const String&)name frameView:(WebFrameView *)frameView ownerElement:(HTMLFrameOwnerElement*)ownerElement 2618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project WebView *webView = kit(page); 2638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project WebFrame *frame = [[self alloc] _initWithWebFrameView:frameView webView:webView]; 2658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project RefPtr<Frame> coreFrame = Frame::create(page, ownerElement, new WebFrameLoaderClient(frame)); 2668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [frame release]; 2678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project frame->_private->coreFrame = coreFrame.get(); 2688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project coreFrame->tree()->setName(name); 2708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (ownerElement) { 2718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ASSERT(ownerElement->document()->frame()); 2728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ownerElement->document()->frame()->tree()->appendChild(coreFrame.get()); 2738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 2748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project coreFrame->init(); 2768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [webView _setZoomMultiplier:[webView _realZoomMultiplier] isTextOnly:[webView _realZoomMultiplierIsTextOnly]]; 2788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return coreFrame.release(); 2808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project+ (void)_createMainFrameWithPage:(Page*)page frameName:(const String&)name frameView:(WebFrameView *)frameView 2838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [self _createFrameWithPage:page frameName:name frameView:frameView ownerElement:0]; 2858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project+ (PassRefPtr<WebCore::Frame>)_createSubframeWithOwnerElement:(HTMLFrameOwnerElement*)ownerElement frameName:(const String&)name frameView:(WebFrameView *)frameView 2888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return [self _createFrameWithPage:ownerElement->document()->frame()->page() frameName:name frameView:frameView ownerElement:ownerElement]; 2908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 292692e5dbf12901edacf14812a6fae25462920af42Steve Block- (BOOL)_isIncludedInWebKitStatistics 293692e5dbf12901edacf14812a6fae25462920af42Steve Block{ 294692e5dbf12901edacf14812a6fae25462920af42Steve Block return _private && _private->includedInWebKitStatistics; 295692e5dbf12901edacf14812a6fae25462920af42Steve Block} 296692e5dbf12901edacf14812a6fae25462920af42Steve Block 2978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)_attachScriptDebugger 2988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ScriptController* scriptController = _private->coreFrame->script(); 3008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Calling ScriptController::globalObject() would create a window shell, and dispatch corresponding callbacks, which may be premature 302cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block // if the script debugger is attached before a document is created. These calls use the debuggerWorld(), we will need to pass a world 303cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block // to be able to debug isolated worlds. 304cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block if (!scriptController->existingWindowShell(debuggerWorld())) 3058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 3068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 307cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block JSGlobalObject* globalObject = scriptController->globalObject(debuggerWorld()); 3088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!globalObject) 3098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 3108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (_private->scriptDebugger) { 3128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ASSERT(_private->scriptDebugger == globalObject->debugger()); 3138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 3148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 3158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project _private->scriptDebugger = new WebScriptDebugger(globalObject); 3178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 3188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)_detachScriptDebugger 3208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 3218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!_private->scriptDebugger) 3228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 3238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project delete _private->scriptDebugger; 3258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project _private->scriptDebugger = 0; 3268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 3278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (id)_initWithWebFrameView:(WebFrameView *)fv webView:(WebView *)v 3298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 3308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project self = [super init]; 3318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!self) 3328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return nil; 3338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project _private = [[WebFramePrivate alloc] init]; 3358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 336692e5dbf12901edacf14812a6fae25462920af42Steve Block // Set includedInWebKitStatistics before calling WebFrameView _setWebFrame, since 337692e5dbf12901edacf14812a6fae25462920af42Steve Block // it calls WebFrame _isIncludedInWebKitStatistics. 338692e5dbf12901edacf14812a6fae25462920af42Steve Block if ((_private->includedInWebKitStatistics = [[v class] shouldIncludeInWebKitStatistics])) 339692e5dbf12901edacf14812a6fae25462920af42Steve Block ++WebFrameCount; 340692e5dbf12901edacf14812a6fae25462920af42Steve Block 3418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (fv) { 3428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [_private setWebFrameView:fv]; 3438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [fv _setWebFrame:self]; 3448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 3458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project _private->shouldCreateRenderers = YES; 3478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return self; 3498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 3508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)_clearCoreFrame 3528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 3538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project _private->coreFrame = 0; 3548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 3558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)_updateBackgroundAndUpdatesWhileOffscreen 3578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 3588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project WebView *webView = getWebView(self); 3598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project BOOL drawsBackground = [webView drawsBackground]; 3608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSColor *backgroundColor = [webView backgroundColor]; 3618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Frame* coreFrame = _private->coreFrame; 3638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project for (Frame* frame = coreFrame; frame; frame = frame->tree()->traverseNext(coreFrame)) { 3640bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if ([webView _usesDocumentViews]) { 3650bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch // Don't call setDrawsBackground:YES here because it may be NO because of a load 3660bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch // in progress; WebFrameLoaderClient keeps it set to NO during the load process. 3670bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch WebFrame *webFrame = kit(frame); 3680bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!drawsBackground) 3690bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch [[[webFrame frameView] _scrollView] setDrawsBackground:NO]; 3700bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch [[[webFrame frameView] _scrollView] setBackgroundColor:backgroundColor]; 3710bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch id documentView = [[webFrame frameView] documentView]; 3720bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if ([documentView respondsToSelector:@selector(setDrawsBackground:)]) 3730bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch [documentView setDrawsBackground:drawsBackground]; 3740bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if ([documentView respondsToSelector:@selector(setBackgroundColor:)]) 3750bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch [documentView setBackgroundColor:backgroundColor]; 3760bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch } 3770bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 3780bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (FrameView* view = frame->view()) { 3790bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch view->setTransparent(!drawsBackground); 3800bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch view->setBaseBackgroundColor(colorFromNSColor([backgroundColor colorUsingColorSpaceName:NSDeviceRGBColorSpace])); 3810bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch view->setShouldUpdateWhileOffscreen([webView shouldUpdateWhileOffscreen]); 3828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 3838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 3848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 3858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)_setInternalLoadDelegate:(id)internalLoadDelegate 3878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 3888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project _private->internalLoadDelegate = internalLoadDelegate; 3898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 3908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (id)_internalLoadDelegate 3928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 3938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return _private->internalLoadDelegate; 3948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 3958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#ifndef BUILDING_ON_TIGER 3978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)_unmarkAllBadGrammar 3988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 3998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Frame* coreFrame = _private->coreFrame; 4008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project for (Frame* frame = coreFrame; frame; frame = frame->tree()->traverseNext(coreFrame)) { 4018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (Document* document = frame->document()) 402e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block document->markers()->removeMarkers(DocumentMarker::Grammar); 4038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 4048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 4058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 4068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)_unmarkAllMisspellings 4088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 4098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Frame* coreFrame = _private->coreFrame; 4108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project for (Frame* frame = coreFrame; frame; frame = frame->tree()->traverseNext(coreFrame)) { 4118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (Document* document = frame->document()) 412e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block document->markers()->removeMarkers(DocumentMarker::Spelling); 4138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 4148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 4158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (BOOL)_hasSelection 4178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 4180bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if ([getWebView(self) _usesDocumentViews]) { 4190bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch id documentView = [_private->webFrameView documentView]; 4208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4210bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch // optimization for common case to avoid creating potentially large selection string 4220bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if ([documentView isKindOfClass:[WebHTMLView class]]) 4230bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (Frame* coreFrame = _private->coreFrame) 4240bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return coreFrame->selection()->isRange(); 4258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4260bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if ([documentView conformsToProtocol:@protocol(WebDocumentText)]) 4270bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return [[documentView selectedString] length] > 0; 4280bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 4290bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return NO; 4300bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch } 4310bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 4320bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch Frame* coreFrame = _private->coreFrame; 4330bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return coreFrame && coreFrame->selection()->isRange(); 4348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 4358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)_clearSelection 4378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 4380bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch ASSERT([getWebView(self) _usesDocumentViews]); 4398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project id documentView = [_private->webFrameView documentView]; 4408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if ([documentView conformsToProtocol:@protocol(WebDocumentText)]) 4418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [documentView deselectAll]; 4428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 4438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if !ASSERT_DISABLED 4458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (BOOL)_atMostOneFrameHasSelection 4468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 4478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // FIXME: 4186050 is one known case that makes this debug check fail. 4488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project BOOL found = NO; 4498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Frame* coreFrame = _private->coreFrame; 4508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project for (Frame* frame = coreFrame; frame; frame = frame->tree()->traverseNext(coreFrame)) 4518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if ([kit(frame) _hasSelection]) { 4528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (found) 4538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return NO; 4548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project found = YES; 4558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 4568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return YES; 4578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 4588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 4598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (WebFrame *)_findFrameWithSelection 4618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 4628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Frame* coreFrame = _private->coreFrame; 4638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project for (Frame* frame = coreFrame; frame; frame = frame->tree()->traverseNext(coreFrame)) { 4648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project WebFrame *webFrame = kit(frame); 4658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if ([webFrame _hasSelection]) 4668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return webFrame; 4678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 4688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return nil; 4698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 4708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)_clearSelectionInOtherFrames 4728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 4738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // We rely on WebDocumentSelection protocol implementors to call this method when they become first 4748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // responder. It would be nicer to just notice first responder changes here instead, but there's no 4758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // notification sent when the first responder changes in general (Radar 2573089). 4768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project WebFrame *frameWithSelection = [[getWebView(self) mainFrame] _findFrameWithSelection]; 4778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (frameWithSelection != self) 4788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [frameWithSelection _clearSelection]; 4798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // While we're in the general area of selection and frames, check that there is only one now. 4818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ASSERT([[getWebView(self) mainFrame] _atMostOneFrameHasSelection]); 4828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 4838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatic inline WebDataSource *dataSource(DocumentLoader* loader) 4858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 4868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return loader ? static_cast<WebDocumentLoaderMac*>(loader)->dataSource() : nil; 4878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 4888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (WebDataSource *)_dataSource 4908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 4918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return dataSource(_private->coreFrame->loader()->documentLoader()); 4928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 4938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (NSString *)_stringWithDocumentTypeStringAndMarkupString:(NSString *)markupString 4958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 4968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return _private->coreFrame->documentTypeString() + markupString; 4978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 4988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (NSArray *)_nodesFromList:(Vector<Node*> *)nodesVector 5008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 5018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project size_t size = nodesVector->size(); 5028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSMutableArray *nodes = [NSMutableArray arrayWithCapacity:size]; 5038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project for (size_t i = 0; i < size; ++i) 5040bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch [nodes addObject:kit((*nodesVector)[i])]; 5058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return nodes; 5068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 5078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (NSString *)_markupStringFromRange:(DOMRange *)range nodes:(NSArray **)nodes 5098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 5108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // FIXME: This is always "for interchange". Is that right? See the previous method. 5118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Vector<Node*> nodeList; 5120bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch NSString *markupString = createMarkup(core(range), nodes ? &nodeList : 0, AnnotateForInterchange); 5138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (nodes) 5148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *nodes = [self _nodesFromList:&nodeList]; 5158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return [self _stringWithDocumentTypeStringAndMarkupString:markupString]; 5178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 5188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (NSString *)_selectedString 5208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 5215abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick return _private->coreFrame->displayStringModifiedByEncoding(_private->coreFrame->editor()->selectedText()); 5228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 5238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (NSString *)_stringForRange:(DOMRange *)range 5258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 5268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // This will give a system malloc'd buffer that can be turned directly into an NSString 5278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project unsigned length; 5280bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch UChar* buf = plainTextToMallocAllocatedBuffer(core(range), length, true); 5298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!buf) 5318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return [NSString string]; 5328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Transfer buffer ownership to NSString 5348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return [[[NSString alloc] initWithCharactersNoCopy:buf length:length freeWhenDone:YES] autorelease]; 5358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 5368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 537a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch- (BOOL)_shouldFlattenCompositingLayers:(CGContextRef)context 538a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch{ 539a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch // -currentContextDrawingToScreen returns YES for bitmap contexts. 540a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch BOOL isPrinting = ![NSGraphicsContext currentContextDrawingToScreen]; 541a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch if (isPrinting) 542a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch return YES; 543a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 544a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch if (!WKCGContextIsBitmapContext(context)) 545a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch return NO; 546a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 547a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch // If we're drawing into a bitmap, we might be snapshotting, or drawing into a layer-backed view. 548a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch if ([getWebView(self) _usesDocumentViews]) { 549a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch id documentView = [_private->webFrameView documentView]; 550a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch if ([documentView isKindOfClass:[WebHTMLView class]] && [(WebHTMLView *)documentView _web_isDrawingIntoLayer]) 551a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch return NO; 552a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch } 553a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 554a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch return [getWebView(self) _includesFlattenedCompositingLayersWhenDrawingToBitmap]; 555a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch} 556a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 5578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)_drawRect:(NSRect)rect contentsOnly:(BOOL)contentsOnly 5588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 5598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ASSERT([[NSGraphicsContext currentContext] isFlipped]); 560692e5dbf12901edacf14812a6fae25462920af42Steve Block 561692e5dbf12901edacf14812a6fae25462920af42Steve Block CGContextRef ctx = static_cast<CGContextRef>([[NSGraphicsContext currentContext] graphicsPort]); 562692e5dbf12901edacf14812a6fae25462920af42Steve Block GraphicsContext context(ctx); 563692e5dbf12901edacf14812a6fae25462920af42Steve Block 564692e5dbf12901edacf14812a6fae25462920af42Steve Block FrameView* view = _private->coreFrame->view(); 565692e5dbf12901edacf14812a6fae25462920af42Steve Block 5666c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen bool shouldFlatten = false; 5676c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen if (Frame* parentFrame = _private->coreFrame->tree()->parent()) { 5686c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen // For subframes, we need to inherit the paint behavior from our parent 5696c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen FrameView* parentView = parentFrame ? parentFrame->view() : 0; 5706c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen if (parentView) 5716c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen shouldFlatten = parentView->paintBehavior() & PaintBehaviorFlattenCompositingLayers; 5726c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen } else 573a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch shouldFlatten = [self _shouldFlattenCompositingLayers:ctx]; 5746c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen 575692e5dbf12901edacf14812a6fae25462920af42Steve Block PaintBehavior oldBehavior = PaintBehaviorNormal; 576692e5dbf12901edacf14812a6fae25462920af42Steve Block if (shouldFlatten) { 577692e5dbf12901edacf14812a6fae25462920af42Steve Block oldBehavior = view->paintBehavior(); 578692e5dbf12901edacf14812a6fae25462920af42Steve Block view->setPaintBehavior(oldBehavior | PaintBehaviorFlattenCompositingLayers); 579692e5dbf12901edacf14812a6fae25462920af42Steve Block } 5808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (contentsOnly) 5822bde8e466a4451c7319e3a072d118917957d6554Steve Block view->paintContents(&context, enclosingIntRect(rect)); 5838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project else 5842bde8e466a4451c7319e3a072d118917957d6554Steve Block view->paint(&context, enclosingIntRect(rect)); 585692e5dbf12901edacf14812a6fae25462920af42Steve Block 586692e5dbf12901edacf14812a6fae25462920af42Steve Block if (shouldFlatten) 587692e5dbf12901edacf14812a6fae25462920af42Steve Block view->setPaintBehavior(oldBehavior); 5888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 5898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 590563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark- (BOOL)_getVisibleRect:(NSRect*)rect 5918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 5928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ASSERT_ARG(rect, rect); 5938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (RenderPart* ownerRenderer = _private->coreFrame->ownerRenderer()) { 5948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (ownerRenderer->needsLayout()) 5958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return NO; 5968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *rect = ownerRenderer->absoluteClippedOverflowRect(); 5978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return YES; 5988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 5998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return NO; 6018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 6028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (NSString *)_stringByEvaluatingJavaScriptFromString:(NSString *)string 6048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 6058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return [self _stringByEvaluatingJavaScriptFromString:string forceUserGesture:true]; 6068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 6078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (NSString *)_stringByEvaluatingJavaScriptFromString:(NSString *)string forceUserGesture:(BOOL)forceUserGesture 6098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 6108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ASSERT(_private->coreFrame->document()); 6118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 612cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block JSValue result = _private->coreFrame->script()->executeScript(string, forceUserGesture).jsValue(); 6138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!_private->coreFrame) // In case the script removed our frame from the page. 6158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return @""; 6168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // This bizarre set of rules matches behavior from WebKit for Safari 2.0. 6188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // If you don't like it, use -[WebScriptObject evaluateWebScript:] or 6198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // JSEvaluateScript instead, since they have less surprising semantics. 620f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch if (!result || (!result.isBoolean() && !result.isString() && !result.isNumber())) 6218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return @""; 6228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6230bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch JSLock lock(SilenceAssertionsOnly); 624dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return ustringToString(result.toString(_private->coreFrame->script()->globalObject(mainThreadNormalWorld())->globalExec())); 6258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 6268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 62781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch- (NSRect)_caretRectAtPosition:(const Position&)pos affinity:(NSSelectionAffinity)affinity 6288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 62981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch VisiblePosition visiblePosition(pos, static_cast<EAffinity>(affinity)); 630635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return visiblePosition.absoluteCaretBounds(); 6318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 6328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (NSRect)_firstRectForDOMRange:(DOMRange *)range 6348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 6355abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick return _private->coreFrame->editor()->firstRectForRange(core(range)); 6368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 6378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)_scrollDOMRangeToVisible:(DOMRange *)range 6398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 6408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSRect rangeRect = [self _firstRectForDOMRange:range]; 6410bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch Node *startNode = core([range startContainer]); 6428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (startNode && startNode->renderer()) { 6448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project RenderLayer *layer = startNode->renderer()->enclosingLayer(); 6458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (layer) 646563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark layer->scrollRectToVisible(enclosingIntRect(rangeRect), false, ScrollAlignment::alignToEdgeIfNeeded, ScrollAlignment::alignToEdgeIfNeeded); 6478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 6488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 6498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (BOOL)_needsLayout 6518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 6528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return _private->coreFrame->view() ? _private->coreFrame->view()->needsLayout() : false; 6538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 6548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 655cad810f21b803229eb11403f9209855525a25d57Steve Block- (DOMRange *)_rangeByAlteringCurrentSelection:(SelectionController::EAlteration)alteration direction:(SelectionDirection)direction granularity:(TextGranularity)granularity 6568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 6578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (_private->coreFrame->selection()->isNone()) 6588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return nil; 6598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project SelectionController selection; 6618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project selection.setSelection(_private->coreFrame->selection()->selection()); 6628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project selection.modify(alteration, direction, granularity); 6630bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return kit(selection.toNormalizedRange().get()); 6648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 6658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (TextGranularity)_selectionGranularity 6678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 66868513a70bcd92384395513322f1b801e7bf9c729Steve Block return _private->coreFrame->selection()->granularity(); 6698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 6708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (NSRange)_convertToNSRange:(Range *)range 6728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 6732daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch if (!range) 6748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return NSMakeRange(NSNotFound, 0); 6758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6762daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch size_t location; 6772daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch size_t length; 6782daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch if (!TextIterator::locationAndLengthFromRange(range, location, length)) 6798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return NSMakeRange(NSNotFound, 0); 6808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6812daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch return NSMakeRange(location, length); 6828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 6838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (PassRefPtr<Range>)_convertToDOMRange:(NSRange)nsrange 6858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 6868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (nsrange.location > INT_MAX) 6878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return 0; 6888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (nsrange.length > INT_MAX || nsrange.location + nsrange.length > INT_MAX) 6898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project nsrange.length = INT_MAX - nsrange.location; 6908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // our critical assumption is that we are only called by input methods that 6928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // concentrate on a given area containing the selection 6938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // We have to do this because of text fields and textareas. The DOM for those is not 6948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // directly in the document DOM, so serialization is problematic. Our solution is 6958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // to use the root editable element of the selection start as the positional base. 6968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // That fits with AppKit's idea of an input context. 6978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Element* selectionRoot = _private->coreFrame->selection()->rootEditableElement(); 6988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Element* scope = selectionRoot ? selectionRoot : _private->coreFrame->document()->documentElement(); 6998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return TextIterator::rangeFromLocationAndLength(scope, nsrange.location, nsrange.length); 7008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 7018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 702635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project- (DOMRange *)convertNSRangeToDOMRange:(NSRange)nsrange 703635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project{ 704635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project // This method exists to maintain compatibility with Leopard's Dictionary.app. <rdar://problem/6002160> 705635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return [self _convertNSRangeToDOMRange:nsrange]; 706635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project} 707635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 7088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (DOMRange *)_convertNSRangeToDOMRange:(NSRange)nsrange 7098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 7100bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return kit([self _convertToDOMRange:nsrange].get()); 7118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 7128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 713635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project- (NSRange)convertDOMRangeToNSRange:(DOMRange *)range 714635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project{ 715635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project // This method exists to maintain compatibility with Leopard's Dictionary.app. <rdar://problem/6002160> 716635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return [self _convertDOMRangeToNSRange:range]; 717635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project} 718635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 7198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (NSRange)_convertDOMRangeToNSRange:(DOMRange *)range 7208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 7210bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return [self _convertToNSRange:core(range)]; 7228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 7238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (DOMRange *)_markDOMRange 7258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 7265abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick return kit(_private->coreFrame->editor()->mark().toNormalizedRange().get()); 7278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 7288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// Given proposedRange, returns an extended range that includes adjacent whitespace that should 7308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// be deleted along with the proposed range in order to preserve proper spacing and punctuation of 7318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// the text surrounding the deletion. 7328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (DOMRange *)_smartDeleteRangeForProposedRange:(DOMRange *)proposedRange 7338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 7340bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch Node* startContainer = core([proposedRange startContainer]); 7350bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch Node* endContainer = core([proposedRange endContainer]); 7368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (startContainer == nil || endContainer == nil) 7378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return nil; 7388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ASSERT(startContainer->document() == endContainer->document()); 7408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project _private->coreFrame->document()->updateLayoutIgnorePendingStylesheets(); 7428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Position start(startContainer, [proposedRange startOffset]); 7448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Position end(endContainer, [proposedRange endOffset]); 7458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Position newStart = start.upstream().leadingWhitespacePosition(DOWNSTREAM, true); 7468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (newStart.isNull()) 7478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project newStart = start; 7488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Position newEnd = end.downstream().trailingWhitespacePosition(DOWNSTREAM, true); 7498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (newEnd.isNull()) 7508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project newEnd = end; 7518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 752ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch newStart = newStart.parentAnchoredEquivalent(); 753ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch newEnd = newEnd.parentAnchoredEquivalent(); 7548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project RefPtr<Range> range = _private->coreFrame->document()->createRange(); 7568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project int exception = 0; 75781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch range->setStart(newStart.containerNode(), newStart.offsetInContainerNode(), exception); 75881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch range->setEnd(newStart.containerNode(), newStart.offsetInContainerNode(), exception); 7590bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return kit(range.get()); 7608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 7618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (DOMDocumentFragment *)_documentFragmentWithMarkupString:(NSString *)markupString baseURLString:(NSString *)baseURLString 7638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 7648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!_private->coreFrame || !_private->coreFrame->document()) 7650bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return nil; 7668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 767d0825bca7fe65beaee391d30da42e937db621564Steve Block return kit(createFragmentFromMarkup(_private->coreFrame->document(), markupString, baseURLString, FragmentScriptingNotAllowed).get()); 7688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 7698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (DOMDocumentFragment *)_documentFragmentWithNodesAsParagraphs:(NSArray *)nodes 7718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 7728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!_private->coreFrame || !_private->coreFrame->document()) 7730bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return nil; 7748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSEnumerator *nodeEnum = [nodes objectEnumerator]; 7768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Vector<Node*> nodesVector; 7778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project DOMNode *node; 7788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project while ((node = [nodeEnum nextObject])) 7790bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch nodesVector.append(core(node)); 7808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7810bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return kit(createFragmentFromNodes(_private->coreFrame->document(), nodesVector).get()); 7828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 7838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)_replaceSelectionWithNode:(DOMNode *)node selectReplacement:(BOOL)selectReplacement smartReplace:(BOOL)smartReplace matchStyle:(BOOL)matchStyle 7858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 7860bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch DOMDocumentFragment *fragment = kit(_private->coreFrame->document()->createDocumentFragment().get()); 7878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [fragment appendChild:node]; 7888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [self _replaceSelectionWithFragment:fragment selectReplacement:selectReplacement smartReplace:smartReplace matchStyle:matchStyle]; 7898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 7908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)_insertParagraphSeparatorInQuotedContent 7928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 7938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (_private->coreFrame->selection()->isNone()) 7948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 7958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project TypingCommand::insertParagraphSeparatorInQuotedContent(_private->coreFrame->document()); 79768513a70bcd92384395513322f1b801e7bf9c729Steve Block _private->coreFrame->selection()->revealSelection(ScrollAlignment::alignToEdgeIfNeeded); 7988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 7998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 8008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (VisiblePosition)_visiblePositionForPoint:(NSPoint)point 8018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 802563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark // FIXME: Someone with access to Apple's sources could remove this needless wrapper call. 803563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return _private->coreFrame->visiblePositionForPoint(IntPoint(point)); 8048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 8058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 8068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (DOMRange *)_characterRangeAtPoint:(NSPoint)point 8078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 8082daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch return kit(_private->coreFrame->rangeForPoint(IntPoint(point)).get()); 8098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 8108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 8118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (DOMCSSStyleDeclaration *)_typingStyle 8128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 8134576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang if (!_private->coreFrame) 8144576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang return nil; 8154576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang RefPtr<CSSMutableStyleDeclaration> typingStyle = _private->coreFrame->selection()->copyTypingStyle(); 8164576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang if (!typingStyle) 8178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return nil; 8184576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang return kit(typingStyle.get()); 8198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 8208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 8218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)_setTypingStyle:(DOMCSSStyleDeclaration *)style withUndoAction:(EditAction)undoAction 8228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 8238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!_private->coreFrame) 8248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 8255abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick _private->coreFrame->editor()->computeAndSetTypingStyle(core(style), undoAction); 8268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 8278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 8288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)_dragSourceEndedAt:(NSPoint)windowLoc operation:(NSDragOperation)operation 8298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 8308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!_private->coreFrame) 8318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 8328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project FrameView* view = _private->coreFrame->view(); 8338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!view) 8348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 8350bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch ASSERT([getWebView(self) _usesDocumentViews]); 8368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // FIXME: These are fake modifier keys here, but they should be real ones instead. 8378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project PlatformMouseEvent event(IntPoint(windowLoc), globalPoint(windowLoc, [view->platformWidget() window]), 8388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project LeftButton, MouseEventMoved, 0, false, false, false, false, currentTime()); 8398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project _private->coreFrame->eventHandler()->dragSourceEndedAt(event, (DragOperation)operation); 8408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 8418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 8428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (BOOL)_canProvideDocumentSource 8438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 844635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project Frame* frame = _private->coreFrame; 8452fc2651226baac27029e38c9d6ef883fa32084dbSteve Block String mimeType = frame->document()->loader()->writer()->mimeType(); 846635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project PluginData* pluginData = frame->page() ? frame->page()->pluginData() : 0; 847635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 8488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (WebCore::DOMImplementation::isTextMIMEType(mimeType) || 8498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Image::supportsType(mimeType) || 850635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project (pluginData && pluginData->supportsMimeType(mimeType))) 8518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return NO; 852635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 8538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return YES; 8548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 8558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 8568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (BOOL)_canSaveAsWebArchive 8578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 8588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Currently, all documents that we can view source for 8598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // (HTML and XML documents) can also be saved as web archives 8608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return [self _canProvideDocumentSource]; 8618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 8628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 86368513a70bcd92384395513322f1b801e7bf9c729Steve Block- (void)_commitData:(NSData *)data 8648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 86568513a70bcd92384395513322f1b801e7bf9c729Steve Block // FIXME: This really should be a setting. 86668513a70bcd92384395513322f1b801e7bf9c729Steve Block Document* document = _private->coreFrame->document(); 86768513a70bcd92384395513322f1b801e7bf9c729Steve Block document->setShouldCreateRenderers(_private->shouldCreateRenderers); 86868513a70bcd92384395513322f1b801e7bf9c729Steve Block 86968513a70bcd92384395513322f1b801e7bf9c729Steve Block _private->coreFrame->loader()->documentLoader()->commitData((const char *)[data bytes], [data length]); 8708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 8718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 8728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project@end 8738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 8748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project@implementation WebFrame (WebPrivate) 8758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 8768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// FIXME: This exists only as a convenience for Safari, consider moving there. 8778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (BOOL)_isDescendantOfFrame:(WebFrame *)ancestor 8788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 8798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Frame* coreFrame = _private->coreFrame; 8808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return coreFrame && coreFrame->tree()->isDescendantOf(core(ancestor)); 8818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 8828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 8838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)_setShouldCreateRenderers:(BOOL)shouldCreateRenderers 8848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 8858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project _private->shouldCreateRenderers = shouldCreateRenderers; 8868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 8878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 8888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (NSColor *)_bodyBackgroundColor 8898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 8908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Document* document = _private->coreFrame->document(); 8918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!document) 8928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return nil; 8938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project HTMLElement* body = document->body(); 8948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!body) 8958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return nil; 8968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project RenderObject* bodyRenderer = body->renderer(); 8978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!bodyRenderer) 8988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return nil; 899e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block Color color = bodyRenderer->style()->visitedDependentColor(CSSPropertyBackgroundColor); 9008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!color.isValid()) 9018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return nil; 9028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return nsColor(color); 9038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 9048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 9058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (BOOL)_isFrameSet 9068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 907563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark Document* document = _private->coreFrame->document(); 908563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return document && document->isFrameSet(); 9098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 9108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 9118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (BOOL)_firstLayoutDone 9128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 91306ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen return _private->coreFrame->loader()->stateMachine()->firstLayoutDone(); 9148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 9158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 9168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (WebFrameLoadType)_loadType 9178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 9188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return (WebFrameLoadType)_private->coreFrame->loader()->loadType(); 9198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 9208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 9218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (NSRange)_selectedNSRange 9228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 923563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return [self _convertToNSRange:_private->coreFrame->selection()->toNormalizedRange().get()]; 9248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 9258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 9268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)_selectNSRange:(NSRange)range 9278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 9288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project RefPtr<Range> domRange = [self _convertToDOMRange:range]; 9298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (domRange) 930563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark _private->coreFrame->selection()->setSelection(VisibleSelection(domRange.get(), SEL_DEFAULT_AFFINITY)); 9318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 9328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 9338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (BOOL)_isDisplayingStandaloneImage 9348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 9358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Document* document = _private->coreFrame->document(); 9368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return document && document->isImageDocument(); 9378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 9388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 9398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (unsigned)_pendingFrameUnloadEventCount 9408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 9410bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return _private->coreFrame->domWindow()->pendingUnloadEventListeners(); 9428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 9438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 9448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)_setIsDisconnected:(bool)isDisconnected 9458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 9468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project _private->coreFrame->setIsDisconnected(isDisconnected); 9478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 9488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 9498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)_setExcludeFromTextSearch:(bool)exclude 9508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 9518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project _private->coreFrame->setExcludeFromTextSearch(exclude); 9528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 9538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 9548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if ENABLE(NETSCAPE_PLUGIN_API) 9558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)_recursive_resumeNullEventsForAllNetscapePlugins 9568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 9578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Frame* coreFrame = core(self); 9588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project for (Frame* frame = coreFrame; frame; frame = frame->tree()->traverseNext(coreFrame)) { 9598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSView <WebDocumentView> *documentView = [[kit(frame) frameView] documentView]; 9608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if ([documentView isKindOfClass:[WebHTMLView class]]) 9618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [(WebHTMLView *)documentView _resumeNullEventsForAllNetscapePlugins]; 9628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 9638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 9648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 9658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)_recursive_pauseNullEventsForAllNetscapePlugins 9668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 9678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Frame* coreFrame = core(self); 9688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project for (Frame* frame = coreFrame; frame; frame = frame->tree()->traverseNext(coreFrame)) { 9698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSView <WebDocumentView> *documentView = [[kit(frame) frameView] documentView]; 9708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if ([documentView isKindOfClass:[WebHTMLView class]]) 9718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [(WebHTMLView *)documentView _pauseNullEventsForAllNetscapePlugins]; 9728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 9738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 9748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 9758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 976635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project- (BOOL)_pauseAnimation:(NSString*)name onNode:(DOMNode *)node atTime:(NSTimeInterval)time 977635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project{ 978635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project Frame* frame = core(self); 979635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project if (!frame) 980635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return false; 981635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 982635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project AnimationController* controller = frame->animation(); 983635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project if (!controller) 984635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return false; 985635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 9860bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch Node* coreNode = core(node); 987635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project if (!coreNode || !coreNode->renderer()) 988635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return false; 989635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 990635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return controller->pauseAnimationAtTime(coreNode->renderer(), name, time); 991635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project} 992635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 993635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project- (BOOL)_pauseTransitionOfProperty:(NSString*)name onNode:(DOMNode*)node atTime:(NSTimeInterval)time 994635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project{ 995635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project Frame* frame = core(self); 996635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project if (!frame) 997635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return false; 998635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 999635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project AnimationController* controller = frame->animation(); 1000635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project if (!controller) 1001635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return false; 1002635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 10030bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch Node* coreNode = core(node); 1004635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project if (!coreNode || !coreNode->renderer()) 1005635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return false; 1006635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 1007635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return controller->pauseTransitionAtTime(coreNode->renderer(), name, time); 1008635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project} 1009635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 1010643ca7872b450ea4efacab6188849e5aac2ba161Steve Block// Pause a given SVG animation on the target node at a specific time. 1011643ca7872b450ea4efacab6188849e5aac2ba161Steve Block// This method is only intended to be used for testing the SVG animation system. 1012643ca7872b450ea4efacab6188849e5aac2ba161Steve Block- (BOOL)_pauseSVGAnimation:(NSString*)elementId onSMILNode:(DOMNode *)node atTime:(NSTimeInterval)time 1013643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{ 1014643ca7872b450ea4efacab6188849e5aac2ba161Steve Block Frame* frame = core(self); 1015643ca7872b450ea4efacab6188849e5aac2ba161Steve Block if (!frame) 1016643ca7872b450ea4efacab6188849e5aac2ba161Steve Block return false; 1017643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 1018643ca7872b450ea4efacab6188849e5aac2ba161Steve Block Document* document = frame->document(); 1019643ca7872b450ea4efacab6188849e5aac2ba161Steve Block if (!document || !document->svgExtensions()) 1020643ca7872b450ea4efacab6188849e5aac2ba161Steve Block return false; 1021643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 1022643ca7872b450ea4efacab6188849e5aac2ba161Steve Block Node* coreNode = core(node); 1023643ca7872b450ea4efacab6188849e5aac2ba161Steve Block if (!coreNode || !SVGSMILElement::isSMILElement(coreNode)) 1024643ca7872b450ea4efacab6188849e5aac2ba161Steve Block return false; 1025643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 1026643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#if ENABLE(SVG) 1027643ca7872b450ea4efacab6188849e5aac2ba161Steve Block return document->accessSVGExtensions()->sampleAnimationAtTime(elementId, static_cast<SVGSMILElement*>(coreNode), time); 1028643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#else 1029643ca7872b450ea4efacab6188849e5aac2ba161Steve Block return false; 1030643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#endif 1031643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} 1032643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 1033635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project- (unsigned) _numberOfActiveAnimations 1034635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project{ 1035635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project Frame* frame = core(self); 1036635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project if (!frame) 1037635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return false; 1038635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 1039635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project AnimationController* controller = frame->animation(); 1040635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project if (!controller) 1041635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return false; 1042635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 1043635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return controller->numberOfActiveAnimations(); 1044635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project} 1045635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 1046f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick- (void) _suspendAnimations 1047f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick{ 1048f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick Frame* frame = core(self); 1049f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick if (!frame) 1050f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick return; 105128040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu 105228040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu frame->animation()->suspendAnimations(); 1053f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick} 1054f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick 1055f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick- (void) _resumeAnimations 1056f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick{ 1057f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick Frame* frame = core(self); 1058f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick if (!frame) 1059f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick return; 1060f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick 106128040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu frame->animation()->resumeAnimations(); 1062f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick} 1063f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick 1064563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark- (void)_replaceSelectionWithFragment:(DOMDocumentFragment *)fragment selectReplacement:(BOOL)selectReplacement smartReplace:(BOOL)smartReplace matchStyle:(BOOL)matchStyle 1065563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark{ 1066563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (_private->coreFrame->selection()->isNone() || !fragment) 1067563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return; 106881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch ReplaceSelectionCommand::CommandOptions options = ReplaceSelectionCommand::PreventNesting; 106981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch if (selectReplacement) 107081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch options |= ReplaceSelectionCommand::SelectReplacement; 107181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch if (smartReplace) 107281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch options |= ReplaceSelectionCommand::SmartReplace; 107381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch if (matchStyle) 107481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch options |= ReplaceSelectionCommand::MatchStyle; 107581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch applyCommand(ReplaceSelectionCommand::create(_private->coreFrame->document(), core(fragment), options)); 107668513a70bcd92384395513322f1b801e7bf9c729Steve Block _private->coreFrame->selection()->revealSelection(ScrollAlignment::alignToEdgeIfNeeded); 1077563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 1078563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 1079563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark- (void)_replaceSelectionWithText:(NSString *)text selectReplacement:(BOOL)selectReplacement smartReplace:(BOOL)smartReplace 1080563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark{ 1081563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark DOMDocumentFragment* fragment = kit(createFragmentFromText(_private->coreFrame->selection()->toNormalizedRange().get(), text).get()); 1082563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark [self _replaceSelectionWithFragment:fragment selectReplacement:selectReplacement smartReplace:smartReplace matchStyle:YES]; 1083563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 1084563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 1085563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark- (void)_replaceSelectionWithMarkupString:(NSString *)markupString baseURLString:(NSString *)baseURLString selectReplacement:(BOOL)selectReplacement smartReplace:(BOOL)smartReplace 1086563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark{ 1087563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark DOMDocumentFragment *fragment = [self _documentFragmentWithMarkupString:markupString baseURLString:baseURLString]; 1088563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark [self _replaceSelectionWithFragment:fragment selectReplacement:selectReplacement smartReplace:smartReplace matchStyle:NO]; 1089563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 1090563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 10915ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen// Determines whether whitespace needs to be added around aString to preserve proper spacing and 10925ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen// punctuation when it's inserted into the receiver's text over charRange. Returns by reference 10935ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen// in beforeString and afterString any whitespace that should be added, unless either or both are 10945ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen// nil. Both are returned as nil if aString is nil or if smart insertion and deletion are disabled. 10955ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen- (void)_smartInsertForString:(NSString *)pasteString replacingRange:(DOMRange *)rangeToReplace beforeString:(NSString **)beforeString afterString:(NSString **)afterString 10965ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen{ 10975ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen // give back nil pointers in case of early returns 10985ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen if (beforeString) 10995ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen *beforeString = nil; 11005ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen if (afterString) 11015ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen *afterString = nil; 11025ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen 11035ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen // inspect destination 11045ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen Node *startContainer = core([rangeToReplace startContainer]); 11055ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen Node *endContainer = core([rangeToReplace endContainer]); 11065ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen 11075ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen Position startPos(startContainer, [rangeToReplace startOffset]); 11085ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen Position endPos(endContainer, [rangeToReplace endOffset]); 11095ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen 11105ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen VisiblePosition startVisiblePos = VisiblePosition(startPos, VP_DEFAULT_AFFINITY); 11115ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen VisiblePosition endVisiblePos = VisiblePosition(endPos, VP_DEFAULT_AFFINITY); 11125ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen 11135ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen // this check also ensures startContainer, startPos, endContainer, and endPos are non-null 11145ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen if (startVisiblePos.isNull() || endVisiblePos.isNull()) 11155ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen return; 11165ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen 11175ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen bool addLeadingSpace = startPos.leadingWhitespacePosition(VP_DEFAULT_AFFINITY, true).isNull() && !isStartOfParagraph(startVisiblePos); 11185ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen if (addLeadingSpace) 11195ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen if (UChar previousChar = startVisiblePos.previous().characterAfter()) 11205ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen addLeadingSpace = !isCharacterSmartReplaceExempt(previousChar, true); 11215ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen 11225ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen bool addTrailingSpace = endPos.trailingWhitespacePosition(VP_DEFAULT_AFFINITY, true).isNull() && !isEndOfParagraph(endVisiblePos); 11235ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen if (addTrailingSpace) 11245ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen if (UChar thisChar = endVisiblePos.characterAfter()) 11255ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen addTrailingSpace = !isCharacterSmartReplaceExempt(thisChar, false); 11265ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen 11275ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen // inspect source 11285ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen bool hasWhitespaceAtStart = false; 11295ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen bool hasWhitespaceAtEnd = false; 11305ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen unsigned pasteLength = [pasteString length]; 11315ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen if (pasteLength > 0) { 11325ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen NSCharacterSet *whiteSet = [NSCharacterSet whitespaceAndNewlineCharacterSet]; 11335ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen 11345ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen if ([whiteSet characterIsMember:[pasteString characterAtIndex:0]]) { 11355ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen hasWhitespaceAtStart = YES; 11365ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen } 11375ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen if ([whiteSet characterIsMember:[pasteString characterAtIndex:(pasteLength - 1)]]) { 11385ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen hasWhitespaceAtEnd = YES; 11395ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen } 11405ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen } 11415ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen 11425ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen // issue the verdict 11435ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen if (beforeString && addLeadingSpace && !hasWhitespaceAtStart) 11445ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen *beforeString = @" "; 11455ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen if (afterString && addTrailingSpace && !hasWhitespaceAtEnd) 11465ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen *afterString = @" "; 11475ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen} 11485ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen 11490bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch- (NSMutableDictionary *)_cacheabilityDictionary 11500bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 11510bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch NSMutableDictionary *result = [NSMutableDictionary dictionary]; 11520bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 11530bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch FrameLoader* frameLoader = _private->coreFrame->loader(); 11540bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch DocumentLoader* documentLoader = frameLoader->documentLoader(); 11550bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (documentLoader && !documentLoader->mainDocumentError().isNull()) 11560bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch [result setObject:(NSError *)documentLoader->mainDocumentError() forKey:WebFrameMainDocumentError]; 11570bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 115806ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen if (frameLoader->subframeLoader()->containsPlugins()) 11590bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch [result setObject:[NSNumber numberWithBool:YES] forKey:WebFrameHasPlugins]; 11600bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 11610bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (DOMWindow* domWindow = _private->coreFrame->domWindow()) { 1162231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block if (domWindow->hasEventListeners(eventNames().unloadEvent)) 11630bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch [result setObject:[NSNumber numberWithBool:YES] forKey:WebFrameHasUnloadListener]; 11640bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 1165d0825bca7fe65beaee391d30da42e937db621564Steve Block#if ENABLE(OFFLINE_WEB_APPLICATIONS) 11660bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (domWindow->optionalApplicationCache()) 11670bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch [result setObject:[NSNumber numberWithBool:YES] forKey:WebFrameUsesApplicationCache]; 1168d0825bca7fe65beaee391d30da42e937db621564Steve Block#endif 11690bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch } 11700bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 11710bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (Document* document = _private->coreFrame->document()) { 1172d0825bca7fe65beaee391d30da42e937db621564Steve Block#if ENABLE(DATABASE) 11730bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (document->hasOpenDatabases()) 11740bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch [result setObject:[NSNumber numberWithBool:YES] forKey:WebFrameUsesDatabases]; 1175d0825bca7fe65beaee391d30da42e937db621564Steve Block#endif 11760bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 11770bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (document->usingGeolocation()) 11780bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch [result setObject:[NSNumber numberWithBool:YES] forKey:WebFrameUsesGeolocation]; 11790bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 11800bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!document->canSuspendActiveDOMObjects()) 11810bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch [result setObject:[NSNumber numberWithBool:YES] forKey:WebFrameCanSuspendActiveDOMObjects]; 11820bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch } 11830bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 11840bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return result; 11850bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 11860bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 1187231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block- (BOOL)_allowsFollowingLink:(NSURL *)URL 1188231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block{ 1189231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block if (!_private->coreFrame) 1190231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block return YES; 119168513a70bcd92384395513322f1b801e7bf9c729Steve Block return _private->coreFrame->document()->securityOrigin()->canDisplay(URL); 1192231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block} 1193231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 1194643ca7872b450ea4efacab6188849e5aac2ba161Steve Block- (NSString *)_stringByEvaluatingJavaScriptFromString:(NSString *)string withGlobalObject:(JSObjectRef)globalObjectRef inScriptWorld:(WebScriptWorld *)world 1195cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block{ 1196cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block // Start off with some guess at a frame and a global object, we'll try to do better...! 1197cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block JSDOMWindow* anyWorldGlobalObject = _private->coreFrame->script()->globalObject(mainThreadNormalWorld()); 1198cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 1199cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block // The global object is probably a shell object? - if so, we know how to use this! 1200cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block JSC::JSObject* globalObjectObj = toJS(globalObjectRef); 1201cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block if (!strcmp(globalObjectObj->classInfo()->className, "JSDOMWindowShell")) 1202cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block anyWorldGlobalObject = static_cast<JSDOMWindowShell*>(globalObjectObj)->window(); 1203cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 1204cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block // Get the frame frome the global object we've settled on. 1205cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block Frame* frame = anyWorldGlobalObject->impl()->frame(); 1206cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block ASSERT(frame->document()); 1207643ca7872b450ea4efacab6188849e5aac2ba161Steve Block JSValue result = frame->script()->executeScriptInWorld(core(world), string, true).jsValue(); 1208cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 1209cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block if (!frame) // In case the script removed our frame from the page. 1210cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block return @""; 1211cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 1212cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block // This bizarre set of rules matches behavior from WebKit for Safari 2.0. 1213cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block // If you don't like it, use -[WebScriptObject evaluateWebScript:] or 1214cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block // JSEvaluateScript instead, since they have less surprising semantics. 1215f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch if (!result || (!result.isBoolean() && !result.isString() && !result.isNumber())) 1216cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block return @""; 1217cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 1218cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block JSLock lock(SilenceAssertionsOnly); 1219dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return ustringToString(result.toString(anyWorldGlobalObject->globalExec())); 1220cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block} 1221cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 1222643ca7872b450ea4efacab6188849e5aac2ba161Steve Block- (JSGlobalContextRef)_globalContextForScriptWorld:(WebScriptWorld *)world 1223cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block{ 1224cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block Frame* coreFrame = _private->coreFrame; 1225cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block if (!coreFrame) 1226cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block return 0; 1227643ca7872b450ea4efacab6188849e5aac2ba161Steve Block DOMWrapperWorld* coreWorld = core(world); 1228643ca7872b450ea4efacab6188849e5aac2ba161Steve Block if (!coreWorld) 1229643ca7872b450ea4efacab6188849e5aac2ba161Steve Block return 0; 1230643ca7872b450ea4efacab6188849e5aac2ba161Steve Block return toGlobalRef(coreFrame->script()->globalObject(coreWorld)->globalExec()); 1231cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block} 1232cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 1233dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block- (void)setAllowsScrollersToOverlapContent:(BOOL)flag 1234dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 1235dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block ASSERT([[[self frameView] _scrollView] isKindOfClass:[WebDynamicScrollBarsView class]]); 1236dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block [(WebDynamicScrollBarsView *)[[self frameView] _scrollView] setAllowsScrollersToOverlapContent:flag]; 1237dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 1238dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1239dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block- (void)setAlwaysHideHorizontalScroller:(BOOL)flag 1240dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 1241dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block ASSERT([[[self frameView] _scrollView] isKindOfClass:[WebDynamicScrollBarsView class]]); 1242dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block [(WebDynamicScrollBarsView *)[[self frameView] _scrollView] setAlwaysHideHorizontalScroller:flag]; 1243dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 1244dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block- (void)setAlwaysHideVerticalScroller:(BOOL)flag 1245dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 1246dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block ASSERT([[[self frameView] _scrollView] isKindOfClass:[WebDynamicScrollBarsView class]]); 1247dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block [(WebDynamicScrollBarsView *)[[self frameView] _scrollView] setAlwaysHideVerticalScroller:flag]; 1248dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 1249dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1250dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block- (void)setAccessibleName:(NSString *)name 1251dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 1252dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#if HAVE(ACCESSIBILITY) 1253dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (!AXObjectCache::accessibilityEnabled()) 1254dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return; 1255dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1256cad810f21b803229eb11403f9209855525a25d57Steve Block if (!_private->coreFrame || !_private->coreFrame->document()) 1257dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return; 1258dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1259cad810f21b803229eb11403f9209855525a25d57Steve Block AccessibilityObject* rootObject = _private->coreFrame->document()->axObjectCache()->rootObject(); 1260cad810f21b803229eb11403f9209855525a25d57Steve Block if (rootObject) { 1261cad810f21b803229eb11403f9209855525a25d57Steve Block String strName(name); 1262cad810f21b803229eb11403f9209855525a25d57Steve Block rootObject->setAccessibleName(strName); 1263cad810f21b803229eb11403f9209855525a25d57Steve Block } 1264dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#endif 1265dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 1266dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1267dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block- (NSString*)_layerTreeAsText 1268dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 1269dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block Frame* coreFrame = _private->coreFrame; 1270dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (!coreFrame) 1271dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return @""; 1272dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1273dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return coreFrame->layerTreeAsText(); 1274dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 1275dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 12765abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick- (BOOL)hasSpellingMarker:(int)from length:(int)length 12775abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick{ 12782bde8e466a4451c7319e3a072d118917957d6554Steve Block Frame* coreFrame = core(self); 12792bde8e466a4451c7319e3a072d118917957d6554Steve Block if (!coreFrame) 12802bde8e466a4451c7319e3a072d118917957d6554Steve Block return NO; 12812bde8e466a4451c7319e3a072d118917957d6554Steve Block return coreFrame->editor()->selectionStartHasMarkerFor(DocumentMarker::Spelling, from, length); 12822bde8e466a4451c7319e3a072d118917957d6554Steve Block} 12832bde8e466a4451c7319e3a072d118917957d6554Steve Block 12842bde8e466a4451c7319e3a072d118917957d6554Steve Block- (BOOL)hasGrammarMarker:(int)from length:(int)length 12852bde8e466a4451c7319e3a072d118917957d6554Steve Block{ 12862bde8e466a4451c7319e3a072d118917957d6554Steve Block Frame* coreFrame = core(self); 12875abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick if (!coreFrame) 12885abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick return NO; 12892bde8e466a4451c7319e3a072d118917957d6554Steve Block return coreFrame->editor()->selectionStartHasMarkerFor(DocumentMarker::Grammar, from, length); 12905abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick} 12915abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick 1292cad810f21b803229eb11403f9209855525a25d57Steve Block- (id)accessibilityRoot 1293cad810f21b803229eb11403f9209855525a25d57Steve Block{ 1294cad810f21b803229eb11403f9209855525a25d57Steve Block#if HAVE(ACCESSIBILITY) 1295cad810f21b803229eb11403f9209855525a25d57Steve Block if (!AXObjectCache::accessibilityEnabled()) { 1296cad810f21b803229eb11403f9209855525a25d57Steve Block AXObjectCache::enableAccessibility(); 12972bde8e466a4451c7319e3a072d118917957d6554Steve Block AXObjectCache::setEnhancedUserInterfaceAccessibility([[NSApp accessibilityAttributeValue:NSAccessibilityEnhancedUserInterfaceAttribute] boolValue]); 1298cad810f21b803229eb11403f9209855525a25d57Steve Block } 1299cad810f21b803229eb11403f9209855525a25d57Steve Block 1300cad810f21b803229eb11403f9209855525a25d57Steve Block if (!_private->coreFrame || !_private->coreFrame->document()) 1301cad810f21b803229eb11403f9209855525a25d57Steve Block return nil; 1302cad810f21b803229eb11403f9209855525a25d57Steve Block 130381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch AccessibilityObject* rootObject = _private->coreFrame->document()->axObjectCache()->rootObjectForFrame(_private->coreFrame); 130481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch if (!rootObject) 130581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch return nil; 130681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 130781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch // The root object will be a WebCore scroll view object. In WK1, scroll views are handled 130881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch // by the system and the root object should be the web area (instead of the scroll view). 130981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch if (rootObject->isAttachment() && rootObject->firstChild()) 131081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch return rootObject->firstChild()->wrapper(); 131181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 131281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch return rootObject->wrapper(); 1313cad810f21b803229eb11403f9209855525a25d57Steve Block#else 1314cad810f21b803229eb11403f9209855525a25d57Steve Block return nil; 1315cad810f21b803229eb11403f9209855525a25d57Steve Block#endif 1316cad810f21b803229eb11403f9209855525a25d57Steve Block} 1317cad810f21b803229eb11403f9209855525a25d57Steve Block 131881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch- (void)_clearOpener 131981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch{ 132081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch Frame* coreFrame = _private->coreFrame; 132181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch if (coreFrame) 132281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch coreFrame->loader()->setOpener(0); 132381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch} 132481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 13252bde8e466a4451c7319e3a072d118917957d6554Steve Block// Used by pagination code called from AppKit when a standalone web page is printed. 13262bde8e466a4451c7319e3a072d118917957d6554Steve Block- (NSArray *)_computePageRectsWithPrintScaleFactor:(float)printScaleFactor pageSize:(NSSize)pageSize 13272bde8e466a4451c7319e3a072d118917957d6554Steve Block{ 13282bde8e466a4451c7319e3a072d118917957d6554Steve Block if (printScaleFactor <= 0) { 13292bde8e466a4451c7319e3a072d118917957d6554Steve Block LOG_ERROR("printScaleFactor has bad value %.2f", printScaleFactor); 13302bde8e466a4451c7319e3a072d118917957d6554Steve Block return [NSArray array]; 13312bde8e466a4451c7319e3a072d118917957d6554Steve Block } 13322bde8e466a4451c7319e3a072d118917957d6554Steve Block 13332bde8e466a4451c7319e3a072d118917957d6554Steve Block if (!_private->coreFrame) 13342bde8e466a4451c7319e3a072d118917957d6554Steve Block return [NSArray array]; 13352bde8e466a4451c7319e3a072d118917957d6554Steve Block if (!_private->coreFrame->document()) 13362bde8e466a4451c7319e3a072d118917957d6554Steve Block return [NSArray array]; 13372bde8e466a4451c7319e3a072d118917957d6554Steve Block if (!_private->coreFrame->view()) 13382bde8e466a4451c7319e3a072d118917957d6554Steve Block return [NSArray array]; 13392bde8e466a4451c7319e3a072d118917957d6554Steve Block if (!_private->coreFrame->view()->documentView()) 13402bde8e466a4451c7319e3a072d118917957d6554Steve Block return [NSArray array]; 13412bde8e466a4451c7319e3a072d118917957d6554Steve Block 13422bde8e466a4451c7319e3a072d118917957d6554Steve Block RenderView* root = toRenderView(_private->coreFrame->document()->renderer()); 13432bde8e466a4451c7319e3a072d118917957d6554Steve Block if (!root) 13442bde8e466a4451c7319e3a072d118917957d6554Steve Block return [NSArray array]; 13452bde8e466a4451c7319e3a072d118917957d6554Steve Block 13462bde8e466a4451c7319e3a072d118917957d6554Steve Block float printWidth = root->style()->isHorizontalWritingMode() ? root->docWidth() / printScaleFactor : pageSize.width; 13472bde8e466a4451c7319e3a072d118917957d6554Steve Block float printHeight = root->style()->isHorizontalWritingMode() ? pageSize.height : root->docHeight() / printScaleFactor; 13482bde8e466a4451c7319e3a072d118917957d6554Steve Block 13492bde8e466a4451c7319e3a072d118917957d6554Steve Block PrintContext printContext(_private->coreFrame); 13502bde8e466a4451c7319e3a072d118917957d6554Steve Block printContext.computePageRectsWithPageSize(FloatSize(printWidth, printHeight), true); 13512bde8e466a4451c7319e3a072d118917957d6554Steve Block const Vector<IntRect>& pageRects = printContext.pageRects(); 13522bde8e466a4451c7319e3a072d118917957d6554Steve Block 13532bde8e466a4451c7319e3a072d118917957d6554Steve Block size_t size = pageRects.size(); 13542bde8e466a4451c7319e3a072d118917957d6554Steve Block NSMutableArray *pages = [NSMutableArray arrayWithCapacity:size]; 13552bde8e466a4451c7319e3a072d118917957d6554Steve Block for (size_t i = 0; i < size; ++i) 13562bde8e466a4451c7319e3a072d118917957d6554Steve Block [pages addObject:[NSValue valueWithRect:NSRect(pageRects[i])]]; 13572bde8e466a4451c7319e3a072d118917957d6554Steve Block return pages; 13582bde8e466a4451c7319e3a072d118917957d6554Steve Block} 13592bde8e466a4451c7319e3a072d118917957d6554Steve Block 13608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project@end 13618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 13628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project@implementation WebFrame 13638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 13648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (id)init 13658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 13668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return nil; 13678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 13688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 13698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// Should be deprecated. 13708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (id)initWithName:(NSString *)name webFrameView:(WebFrameView *)view webView:(WebView *)webView 13718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 13728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return nil; 13738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 13748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 13758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)dealloc 13768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1377692e5dbf12901edacf14812a6fae25462920af42Steve Block if (_private && _private->includedInWebKitStatistics) 1378692e5dbf12901edacf14812a6fae25462920af42Steve Block --WebFrameCount; 1379692e5dbf12901edacf14812a6fae25462920af42Steve Block 13808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [_private release]; 1381692e5dbf12901edacf14812a6fae25462920af42Steve Block 13828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [super dealloc]; 13838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 13848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 13858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)finalize 13868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1387692e5dbf12901edacf14812a6fae25462920af42Steve Block if (_private && _private->includedInWebKitStatistics) 1388692e5dbf12901edacf14812a6fae25462920af42Steve Block --WebFrameCount; 1389692e5dbf12901edacf14812a6fae25462920af42Steve Block 13908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [super finalize]; 13918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 13928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 13938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (NSString *)name 13948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 13958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Frame* coreFrame = _private->coreFrame; 13968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!coreFrame) 13978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return nil; 139828040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu return coreFrame->tree()->uniqueName(); 13998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 14008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 14018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (WebFrameView *)frameView 14028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 14030bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch ASSERT(!getWebView(self) || [getWebView(self) _usesDocumentViews]); 14048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return _private->webFrameView; 14058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 14068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 14078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (WebView *)webView 14088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 14098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return getWebView(self); 14108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 14118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 14120bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochstatic bool needsMicrosoftMessengerDOMDocumentWorkaround() 14130bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 14140bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch static bool needsWorkaround = applicationIsMicrosoftMessenger() && [[[NSBundle mainBundle] objectForInfoDictionaryKey:(NSString *)kCFBundleVersionKey] compare:@"7.1" options:NSNumericSearch] == NSOrderedAscending; 14150bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return needsWorkaround; 14160bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 14170bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 14188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (DOMDocument *)DOMDocument 14198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 14200bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (needsMicrosoftMessengerDOMDocumentWorkaround() && !pthread_main_np()) 14210bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return nil; 14220bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 14238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Frame* coreFrame = _private->coreFrame; 14248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!coreFrame) 14258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return nil; 14268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 14278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // FIXME: <rdar://problem/5145841> When loading a custom view/representation 14288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // into a web frame, the old document can still be around. This makes sure that 14298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // we'll return nil in those cases. 14308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (![[self _dataSource] _isDocumentHTML]) 14318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return nil; 14328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 14338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Document* document = coreFrame->document(); 14348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 14358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // According to the documentation, we should return nil if the frame doesn't have a document. 14368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // While full-frame images and plugins do have an underlying HTML document, we return nil here to be 14378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // backwards compatible. 14388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (document && (document->isPluginDocument() || document->isImageDocument())) 14398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return nil; 14408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 14418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return kit(coreFrame->document()); 14428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 14438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 14448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (DOMHTMLElement *)frameElement 14458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 14468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Frame* coreFrame = _private->coreFrame; 14478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!coreFrame) 14488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return nil; 14498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return kit(coreFrame->ownerElement()); 14508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 14518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 14528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (WebDataSource *)provisionalDataSource 14538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 14548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Frame* coreFrame = _private->coreFrame; 14558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return coreFrame ? dataSource(coreFrame->loader()->provisionalDocumentLoader()) : nil; 14568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 14578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 14588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (WebDataSource *)dataSource 14598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 14608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Frame* coreFrame = _private->coreFrame; 14618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return coreFrame && coreFrame->loader()->frameHasLoaded() ? [self _dataSource] : nil; 14628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 14638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 14648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)loadRequest:(NSURLRequest *)request 14658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1466d0825bca7fe65beaee391d30da42e937db621564Steve Block Frame* coreFrame = _private->coreFrame; 1467d0825bca7fe65beaee391d30da42e937db621564Steve Block if (!coreFrame) 1468d0825bca7fe65beaee391d30da42e937db621564Steve Block return; 1469d0825bca7fe65beaee391d30da42e937db621564Steve Block coreFrame->loader()->load(request, false); 14708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 14718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 14728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatic NSURL *createUniqueWebDataURL() 14738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 14748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project CFUUIDRef UUIDRef = CFUUIDCreate(kCFAllocatorDefault); 14758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSString *UUIDString = (NSString *)CFUUIDCreateString(kCFAllocatorDefault, UUIDRef); 14768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project CFRelease(UUIDRef); 14778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSURL *URL = [NSURL URLWithString:[NSString stringWithFormat:@"applewebdata://%@", UUIDString]]; 14788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project CFRelease(UUIDString); 14798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return URL; 14808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 14818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 14828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)_loadData:(NSData *)data MIMEType:(NSString *)MIMEType textEncodingName:(NSString *)encodingName baseURL:(NSURL *)baseURL unreachableURL:(NSURL *)unreachableURL 14838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 14840bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!pthread_main_np()) 14850bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return [[self _webkit_invokeOnMainThread] _loadData:data MIMEType:MIMEType textEncodingName:encodingName baseURL:baseURL unreachableURL:unreachableURL]; 14860bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 14878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project KURL responseURL; 14888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!baseURL) { 14898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project baseURL = blankURL(); 14908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project responseURL = createUniqueWebDataURL(); 14918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 14928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 14938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ResourceRequest request([baseURL absoluteURL]); 14948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 14958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // hack because Mail checks for this property to detect data / archive loads 14968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [NSURLProtocol setProperty:@"" forKey:@"WebDataRequest" inRequest:(NSMutableURLRequest *)request.nsURLRequest()]; 14978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 14988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project SubstituteData substituteData(WebCore::SharedBuffer::wrapNSData(data), MIMEType, encodingName, [unreachableURL absoluteURL], responseURL); 14998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1500635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project _private->coreFrame->loader()->load(request, substituteData, false); 15018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 15028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 15038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 15048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)loadData:(NSData *)data MIMEType:(NSString *)MIMEType textEncodingName:(NSString *)encodingName baseURL:(NSURL *)baseURL 15058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 15060bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch WebCoreThreadViolationCheckRoundTwo(); 15070bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 15088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!MIMEType) 15098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project MIMEType = @"text/html"; 15108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [self _loadData:data MIMEType:MIMEType textEncodingName:encodingName baseURL:baseURL unreachableURL:nil]; 15118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 15128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 15138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)_loadHTMLString:(NSString *)string baseURL:(NSURL *)baseURL unreachableURL:(NSURL *)unreachableURL 15148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 15158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSData *data = [string dataUsingEncoding:NSUTF8StringEncoding]; 15168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [self _loadData:data MIMEType:@"text/html" textEncodingName:@"UTF-8" baseURL:baseURL unreachableURL:unreachableURL]; 15178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 15188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 15198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)loadHTMLString:(NSString *)string baseURL:(NSURL *)baseURL 15208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 15210bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch WebCoreThreadViolationCheckRoundTwo(); 15220bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 15238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [self _loadHTMLString:string baseURL:baseURL unreachableURL:nil]; 15248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 15258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 15268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)loadAlternateHTMLString:(NSString *)string baseURL:(NSURL *)baseURL forUnreachableURL:(NSURL *)unreachableURL 15278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 15280bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch WebCoreThreadViolationCheckRoundTwo(); 15290bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 15308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [self _loadHTMLString:string baseURL:baseURL unreachableURL:unreachableURL]; 15318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 15328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 15338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)loadArchive:(WebArchive *)archive 15348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 15358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (LegacyWebArchive* coreArchive = [archive _coreLegacyWebArchive]) 15368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project _private->coreFrame->loader()->loadArchive(coreArchive); 15378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 15388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 15398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)stopLoading 15408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 15418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!_private->coreFrame) 15428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 15438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project _private->coreFrame->loader()->stopForUserCancel(); 15448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 15458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 15468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)reload 15478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 15480bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!WebKitLinkedOnOrAfter(WEBKIT_FIRST_VERSION_WITH_RELOAD_FROM_ORIGIN) && applicationIsSafari()) 1549635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project _private->coreFrame->loader()->reload(GetCurrentKeyModifiers() & shiftKey); 1550635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project else 1551635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project _private->coreFrame->loader()->reload(false); 1552635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project} 1553635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 1554635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project- (void)reloadFromOrigin 1555635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project{ 1556635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project _private->coreFrame->loader()->reload(true); 15578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 15588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 15598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (WebFrame *)findFrameNamed:(NSString *)name 15608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 15618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Frame* coreFrame = _private->coreFrame; 15628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!coreFrame) 15638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return nil; 15648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return kit(coreFrame->tree()->find(name)); 15658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 15668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 15678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (WebFrame *)parentFrame 15688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 15698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Frame* coreFrame = _private->coreFrame; 15708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!coreFrame) 15718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return nil; 15728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return [[kit(coreFrame->tree()->parent()) retain] autorelease]; 15738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 15748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 15758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (NSArray *)childFrames 15768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 15778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Frame* coreFrame = _private->coreFrame; 15788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!coreFrame) 15798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return [NSArray array]; 15808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSMutableArray *children = [NSMutableArray arrayWithCapacity:coreFrame->tree()->childCount()]; 15818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project for (Frame* child = coreFrame->tree()->firstChild(); child; child = child->tree()->nextSibling()) 15828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [children addObject:kit(child)]; 15838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return children; 15848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 15858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 15868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (WebScriptObject *)windowObject 15878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 15888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Frame* coreFrame = _private->coreFrame; 15898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!coreFrame) 15908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return 0; 15918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return coreFrame->script()->windowScriptObject(); 15928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 15938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 15948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (JSGlobalContextRef)globalContext 15958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 15968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Frame* coreFrame = _private->coreFrame; 15978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!coreFrame) 15988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return 0; 1599cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block return toGlobalRef(coreFrame->script()->globalObject(mainThreadNormalWorld())->globalExec()); 16008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 16018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 16028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project@end 1603