WebView.mm revision 2daae5fd11344eaa88a0d92b0f6d65f8d2255c00
18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/* 22daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch * Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All rights reserved. 38e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Copyright (C) 2006 David Smith (catfish.man@gmail.com) 4967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch * Copyright (C) 2010 Igalia S.L 58e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 68e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Redistribution and use in source and binary forms, with or without 78e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * modification, are permitted provided that the following conditions 88e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * are met: 98e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 1. Redistributions of source code must retain the above copyright 118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * notice, this list of conditions and the following disclaimer. 128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 2. Redistributions in binary form must reproduce the above copyright 138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * notice, this list of conditions and the following disclaimer in the 148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * documentation and/or other materials provided with the distribution. 158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of 168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * its contributors may be used to endorse or promote products derived 178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * from this software without specific prior written permission. 188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY 208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY 238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import "WebViewInternal.h" 320bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#import "WebViewData.h" 338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 340bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#import "DOMCSSStyleDeclarationInternal.h" 350bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#import "DOMNodeInternal.h" 368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import "DOMRangeInternal.h" 37db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block#import "WebApplicationCache.h" 388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import "WebBackForwardListInternal.h" 39cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block#import "WebBaseNetscapePluginView.h" 40635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#import "WebCache.h" 418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import "WebChromeClient.h" 428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import "WebContextMenuClient.h" 438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import "WebDOMOperationsPrivate.h" 448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import "WebDataSourceInternal.h" 458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import "WebDatabaseManagerInternal.h" 468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import "WebDefaultEditingDelegate.h" 478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import "WebDefaultPolicyDelegate.h" 488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import "WebDefaultUIDelegate.h" 490bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#import "WebDelegateImplementationCaching.h" 505abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick#import "WebDeviceOrientationClient.h" 515abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick#import "WebDeviceOrientationProvider.h" 528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import "WebDocument.h" 538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import "WebDocumentInternal.h" 548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import "WebDownload.h" 558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import "WebDownloadInternal.h" 568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import "WebDragClient.h" 578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import "WebDynamicScrollBarsViewInternal.h" 588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import "WebEditingDelegate.h" 598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import "WebEditorClient.h" 608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import "WebFormDelegatePrivate.h" 618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import "WebFrameInternal.h" 628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import "WebFrameViewInternal.h" 63cad810f21b803229eb11403f9209855525a25d57Steve Block#import "WebFullScreenController.h" 646b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner#import "WebGeolocationClient.h" 65d0825bca7fe65beaee391d30da42e937db621564Steve Block#import "WebGeolocationPositionInternal.h" 668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import "WebHTMLRepresentation.h" 678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import "WebHTMLViewInternal.h" 688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import "WebHistoryItemInternal.h" 698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import "WebIconDatabaseInternal.h" 708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import "WebInspector.h" 718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import "WebInspectorClient.h" 728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import "WebKitErrors.h" 738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import "WebKitLogging.h" 748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import "WebKitNSStringExtras.h" 758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import "WebKitStatisticsPrivate.h" 768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import "WebKitSystemBits.h" 778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import "WebKitVersionChecks.h" 788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import "WebLocalizableStrings.h" 798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import "WebNSDataExtras.h" 808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import "WebNSDataExtrasPrivate.h" 818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import "WebNSDictionaryExtras.h" 828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import "WebNSEventExtras.h" 838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import "WebNSObjectExtras.h" 848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import "WebNSPasteboardExtras.h" 858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import "WebNSPrintOperationExtras.h" 868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import "WebNSURLExtras.h" 878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import "WebNSURLRequestExtras.h" 888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import "WebNSViewExtras.h" 890bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#import "WebNodeHighlight.h" 908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import "WebPDFView.h" 918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import "WebPanelAuthenticationHandler.h" 9206ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen#import "WebPlatformStrategies.h" 938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import "WebPluginDatabase.h" 94231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#import "WebPluginHalterClient.h" 958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import "WebPolicyDelegate.h" 968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import "WebPreferenceKeysPrivate.h" 978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import "WebPreferencesPrivate.h" 98563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark#import "WebScriptDebugDelegate.h" 99643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#import "WebScriptWorldInternal.h" 1002bde8e466a4451c7319e3a072d118917957d6554Steve Block#import "WebStorageManagerInternal.h" 1010bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#import "WebSystemInterface.h" 1020bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#import "WebTextCompletionController.h" 1038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import "WebTextIterator.h" 1048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import "WebUIDelegate.h" 1058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import "WebUIDelegatePrivate.h" 106231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#import "WebVideoFullscreenController.h" 1078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import <CoreFoundation/CFSet.h> 1088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import <Foundation/NSURLConnection.h> 109dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#import <JavaScriptCore/APICast.h> 110dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#import <JavaScriptCore/JSValueRef.h> 11106ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen#import <WebCore/AbstractDatabase.h> 1128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import <WebCore/ApplicationCacheStorage.h> 113e14391e94c850b8bd03680c23b38978db68687a8John Reck#import <WebCore/BackForwardListImpl.h> 11428040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu#import <WebCore/MemoryCache.h> 1158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import <WebCore/ColorMac.h> 116dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#import <WebCore/CSSComputedStyleDeclaration.h> 117563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark#import <WebCore/Cursor.h> 1188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import <WebCore/Document.h> 1198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import <WebCore/DocumentLoader.h> 1208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import <WebCore/DragController.h> 1218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import <WebCore/DragData.h> 1228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import <WebCore/Editor.h> 1238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import <WebCore/EventHandler.h> 1248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import <WebCore/ExceptionHandlers.h> 1258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import <WebCore/FocusController.h> 1268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import <WebCore/Frame.h> 1278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import <WebCore/FrameLoader.h> 1288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import <WebCore/FrameTree.h> 1290bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#import <WebCore/FrameView.h> 1308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import <WebCore/GCController.h> 131643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#import <WebCore/HTMLMediaElement.h> 1328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import <WebCore/HTMLNames.h> 1338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import <WebCore/HistoryItem.h> 134635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#import <WebCore/IconDatabase.h> 135dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#import <WebCore/JSCSSStyleDeclaration.h> 136bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen#import <WebCore/JSDocument.h> 137dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#import <WebCore/JSElement.h> 138bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen#import <WebCore/JSNodeList.h> 1398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import <WebCore/Logging.h> 1408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import <WebCore/MIMETypeRegistry.h> 141bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen#import <WebCore/NodeList.h> 1428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import <WebCore/Page.h> 1438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import <WebCore/PageCache.h> 1448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import <WebCore/PageGroup.h> 1458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import <WebCore/PlatformMouseEvent.h> 1468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import <WebCore/ProgressTracker.h> 147e14391e94c850b8bd03680c23b38978db68687a8John Reck#import <WebCore/RenderView.h> 148cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block#import <WebCore/RenderWidget.h> 1490bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#import <WebCore/ResourceHandle.h> 1506b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner#import <WebCore/ResourceLoadScheduler.h> 1512daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#import <WebCore/ResourceRequest.h> 1520bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#import <WebCore/RuntimeApplicationChecks.h> 1530617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen#import <WebCore/SchemeRegistry.h> 1548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import <WebCore/ScriptController.h> 155635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#import <WebCore/ScriptValue.h> 1560bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#import <WebCore/SecurityOrigin.h> 1578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import <WebCore/SelectionController.h> 1588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import <WebCore/Settings.h> 1598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import <WebCore/TextResourceDecoder.h> 160635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#import <WebCore/ThreadCheck.h> 1618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import <WebCore/WebCoreObjCExtras.h> 1628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import <WebCore/WebCoreView.h> 1630bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#import <WebCore/Widget.h> 1648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import <WebKit/DOM.h> 1658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import <WebKit/DOMExtensions.h> 1668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import <WebKit/DOMPrivate.h> 1678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import <WebKitSystemInterface.h> 168563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark#import <mach-o/dyld.h> 169563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark#import <objc/objc-auto.h> 170563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark#import <objc/objc-runtime.h> 1718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import <runtime/ArrayPrototype.h> 1728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import <runtime/DateInstance.h> 1738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import <runtime/InitializeThreading.h> 1748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import <runtime/JSLock.h> 175635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#import <runtime/JSValue.h> 1768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import <wtf/Assertions.h> 1778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import <wtf/HashTraits.h> 1788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import <wtf/RefCountedLeakCounter.h> 1798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import <wtf/RefPtr.h> 180635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#import <wtf/StdLibExtras.h> 18121939df44de1705786c545cd1bf519d47250322dBen Murdoch#import <wtf/Threading.h> 1828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if ENABLE(DASHBOARD_SUPPORT) 1848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import <WebKit/WebDashboardRegion.h> 1858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 1868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 187d0825bca7fe65beaee391d30da42e937db621564Steve Block#if ENABLE(CLIENT_BASED_GEOLOCATION) 188d0825bca7fe65beaee391d30da42e937db621564Steve Block#import <WebCore/GeolocationController.h> 189d0825bca7fe65beaee391d30da42e937db621564Steve Block#import <WebCore/GeolocationError.h> 190d0825bca7fe65beaee391d30da42e937db621564Steve Block#endif 191d0825bca7fe65beaee391d30da42e937db621564Steve Block 192a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch#if ENABLE(GLIB_SUPPORT) 193ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block#import <glib.h> 194ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block#endif 195ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block 1960bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch@interface NSSpellChecker (WebNSSpellCheckerDetails) 1970bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch- (void)_preflightChosenSpellServer; 1980bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch@end 1990bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 2000bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch@interface NSView (WebNSViewDetails) 2010bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch- (NSView *)_hitTest:(NSPoint *)aPoint dragTypes:(NSSet *)types; 2020bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch- (void)_autoscrollForDraggingInfo:(id)dragInfo timeDelta:(NSTimeInterval)repeatDelta; 2030bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch- (BOOL)_shouldAutoscrollForDraggingInfo:(id)dragInfo; 2040bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch@end 2050bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 2060bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch@interface NSWindow (WebNSWindowDetails) 2070bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch- (id)_oldFirstResponderBeforeBecoming; 20821939df44de1705786c545cd1bf519d47250322dBen Murdoch- (void)_enableScreenUpdatesIfNeeded; 20906ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen- (BOOL)_wrapsCarbonWindow; 2100bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch@end 2110bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 2128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectusing namespace WebCore; 2138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectusing namespace JSC; 2148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if defined(__ppc__) || defined(__ppc64__) 2168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define PROCESSOR "PPC" 2178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#elif defined(__i386__) || defined(__x86_64__) 2188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define PROCESSOR "Intel" 2198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#else 2208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#error Unknown architecture 2218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 2228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define FOR_EACH_RESPONDER_SELECTOR(macro) \ 2248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectmacro(alignCenter) \ 2258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectmacro(alignJustified) \ 2268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectmacro(alignLeft) \ 2278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectmacro(alignRight) \ 2288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectmacro(capitalizeWord) \ 2298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectmacro(centerSelectionInVisibleArea) \ 2308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectmacro(changeAttributes) \ 2318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectmacro(changeBaseWritingDirection) \ 2328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectmacro(changeBaseWritingDirectionToLTR) \ 2338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectmacro(changeBaseWritingDirectionToRTL) \ 2348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectmacro(changeColor) \ 2358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectmacro(changeDocumentBackgroundColor) \ 2368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectmacro(changeFont) \ 2378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectmacro(changeSpelling) \ 2388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectmacro(checkSpelling) \ 2398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectmacro(complete) \ 2408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectmacro(copy) \ 2418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectmacro(copyFont) \ 2428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectmacro(cut) \ 2438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectmacro(delete) \ 2448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectmacro(deleteBackward) \ 2458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectmacro(deleteBackwardByDecomposingPreviousCharacter) \ 2468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectmacro(deleteForward) \ 2478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectmacro(deleteToBeginningOfLine) \ 2488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectmacro(deleteToBeginningOfParagraph) \ 2498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectmacro(deleteToEndOfLine) \ 2508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectmacro(deleteToEndOfParagraph) \ 2518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectmacro(deleteToMark) \ 2528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectmacro(deleteWordBackward) \ 2538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectmacro(deleteWordForward) \ 2548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectmacro(ignoreSpelling) \ 2558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectmacro(indent) \ 2568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectmacro(insertBacktab) \ 2578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectmacro(insertLineBreak) \ 2588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectmacro(insertNewline) \ 2598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectmacro(insertNewlineIgnoringFieldEditor) \ 2608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectmacro(insertParagraphSeparator) \ 2618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectmacro(insertTab) \ 2628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectmacro(insertTabIgnoringFieldEditor) \ 2638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectmacro(lowercaseWord) \ 264635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectmacro(makeBaseWritingDirectionLeftToRight) \ 265635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectmacro(makeBaseWritingDirectionRightToLeft) \ 266635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectmacro(makeTextWritingDirectionLeftToRight) \ 267635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectmacro(makeTextWritingDirectionNatural) \ 268635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectmacro(makeTextWritingDirectionRightToLeft) \ 2698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectmacro(moveBackward) \ 2708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectmacro(moveBackwardAndModifySelection) \ 2718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectmacro(moveDown) \ 2728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectmacro(moveDownAndModifySelection) \ 2738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectmacro(moveForward) \ 2748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectmacro(moveForwardAndModifySelection) \ 2758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectmacro(moveLeft) \ 2768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectmacro(moveLeftAndModifySelection) \ 2778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectmacro(moveParagraphBackwardAndModifySelection) \ 2788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectmacro(moveParagraphForwardAndModifySelection) \ 2798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectmacro(moveRight) \ 2808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectmacro(moveRightAndModifySelection) \ 2818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectmacro(moveToBeginningOfDocument) \ 2828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectmacro(moveToBeginningOfDocumentAndModifySelection) \ 2838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectmacro(moveToBeginningOfLine) \ 2848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectmacro(moveToBeginningOfLineAndModifySelection) \ 2858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectmacro(moveToBeginningOfParagraph) \ 2868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectmacro(moveToBeginningOfParagraphAndModifySelection) \ 2878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectmacro(moveToBeginningOfSentence) \ 2888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectmacro(moveToBeginningOfSentenceAndModifySelection) \ 2898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectmacro(moveToEndOfDocument) \ 2908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectmacro(moveToEndOfDocumentAndModifySelection) \ 2918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectmacro(moveToEndOfLine) \ 2928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectmacro(moveToEndOfLineAndModifySelection) \ 2938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectmacro(moveToEndOfParagraph) \ 2948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectmacro(moveToEndOfParagraphAndModifySelection) \ 2958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectmacro(moveToEndOfSentence) \ 2968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectmacro(moveToEndOfSentenceAndModifySelection) \ 297563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkmacro(moveToLeftEndOfLine) \ 298563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkmacro(moveToLeftEndOfLineAndModifySelection) \ 299563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkmacro(moveToRightEndOfLine) \ 300563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkmacro(moveToRightEndOfLineAndModifySelection) \ 3018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectmacro(moveUp) \ 3028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectmacro(moveUpAndModifySelection) \ 3038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectmacro(moveWordBackward) \ 3048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectmacro(moveWordBackwardAndModifySelection) \ 3058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectmacro(moveWordForward) \ 3068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectmacro(moveWordForwardAndModifySelection) \ 3078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectmacro(moveWordLeft) \ 3088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectmacro(moveWordLeftAndModifySelection) \ 3098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectmacro(moveWordRight) \ 3108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectmacro(moveWordRightAndModifySelection) \ 3118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectmacro(outdent) \ 3120bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochmacro(orderFrontSubstitutionsPanel) \ 3138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectmacro(pageDown) \ 3148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectmacro(pageDownAndModifySelection) \ 3158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectmacro(pageUp) \ 3168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectmacro(pageUpAndModifySelection) \ 3178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectmacro(paste) \ 3188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectmacro(pasteAsPlainText) \ 3198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectmacro(pasteAsRichText) \ 3208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectmacro(pasteFont) \ 3218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectmacro(performFindPanelAction) \ 3228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectmacro(scrollLineDown) \ 3238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectmacro(scrollLineUp) \ 3248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectmacro(scrollPageDown) \ 3258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectmacro(scrollPageUp) \ 3268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectmacro(scrollToBeginningOfDocument) \ 3278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectmacro(scrollToEndOfDocument) \ 3288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectmacro(selectAll) \ 3298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectmacro(selectLine) \ 3308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectmacro(selectParagraph) \ 3318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectmacro(selectSentence) \ 3328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectmacro(selectToMark) \ 3338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectmacro(selectWord) \ 3348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectmacro(setMark) \ 3358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectmacro(showGuessPanel) \ 3368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectmacro(startSpeaking) \ 3378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectmacro(stopSpeaking) \ 3388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectmacro(subscript) \ 3398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectmacro(superscript) \ 3408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectmacro(swapWithMark) \ 3418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectmacro(takeFindStringFromSelection) \ 3428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectmacro(toggleBaseWritingDirection) \ 3438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectmacro(transpose) \ 3448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectmacro(underline) \ 3458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectmacro(unscript) \ 3468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectmacro(uppercaseWord) \ 3478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectmacro(yank) \ 3488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectmacro(yankAndSelect) \ 3498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define WebKitOriginalTopPrintingMarginKey @"WebKitOriginalTopMargin" 3518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define WebKitOriginalBottomPrintingMarginKey @"WebKitOriginalBottomMargin" 3528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define KeyboardUIModeDidChangeNotification @"com.apple.KeyboardUIModeDidChange" 3548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define AppleKeyboardUIMode CFSTR("AppleKeyboardUIMode") 3558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define UniversalAccessDomain CFSTR("com.apple.universalaccess") 3568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatic BOOL s_didSetCacheModel; 3588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatic WebCacheModel s_cacheModel = WebCacheModelDocumentViewer; 3598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#ifndef NDEBUG 3618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatic const char webViewIsOpen[] = "At least one WebView is still open."; 3628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 3638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3640bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch@interface NSObject (WebValidateWithoutDelegate) 3658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (BOOL)validateUserInterfaceItemWithoutDelegate:(id <NSValidatedUserInterfaceItem>)item; 3668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project@end 3678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project@interface _WebSafeForwarder : NSObject 3698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 3708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project id target; // Non-retained. Don't retain delegates. 3718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project id defaultTarget; 3728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project BOOL catchExceptions; 3738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 3748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (id)initWithTarget:(id)target defaultTarget:(id)defaultTarget catchExceptions:(BOOL)catchExceptions; 3758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project@end 3768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project@interface WebView (WebFileInternal) 3788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (BOOL)_isLoading; 3798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (WebFrameView *)_frameViewAtWindowPoint:(NSPoint)point; 3808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (WebFrame *)_focusedFrame; 3818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project+ (void)_preflightSpellChecker; 3828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (BOOL)_continuousCheckingAllowed; 3838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (NSResponder *)_responderForResponderOperations; 3840bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#if USE(ACCELERATED_COMPOSITING) 3850bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch- (void)_clearLayerSyncLoopObserver; 3860bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#endif 387a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch#if ENABLE(GLIB_SUPPORT) 388ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block- (void)_clearGlibLoopObserver; 389ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block#endif 3908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project@end 3918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 392635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectstatic void patchMailRemoveAttributesMethod(); 393635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 3948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectNSString *WebElementDOMNodeKey = @"WebElementDOMNode"; 3958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectNSString *WebElementFrameKey = @"WebElementFrame"; 3968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectNSString *WebElementImageKey = @"WebElementImage"; 3978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectNSString *WebElementImageAltStringKey = @"WebElementImageAltString"; 3988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectNSString *WebElementImageRectKey = @"WebElementImageRect"; 3998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectNSString *WebElementImageURLKey = @"WebElementImageURL"; 4008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectNSString *WebElementIsSelectedKey = @"WebElementIsSelected"; 4018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectNSString *WebElementLinkLabelKey = @"WebElementLinkLabel"; 4028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectNSString *WebElementLinkTargetFrameKey = @"WebElementTargetFrame"; 4038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectNSString *WebElementLinkTitleKey = @"WebElementLinkTitle"; 4048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectNSString *WebElementLinkURLKey = @"WebElementLinkURL"; 405e14391e94c850b8bd03680c23b38978db68687a8John ReckNSString *WebElementMediaURLKey = @"WebElementMediaURL"; 4068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectNSString *WebElementSpellingToolTipKey = @"WebElementSpellingToolTip"; 4078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectNSString *WebElementTitleKey = @"WebElementTitle"; 4088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectNSString *WebElementLinkIsLiveKey = @"WebElementLinkIsLive"; 409d0825bca7fe65beaee391d30da42e937db621564Steve BlockNSString *WebElementIsInScrollBarKey = @"WebElementIsInScrollBar"; 4108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectNSString *WebElementIsContentEditableKey = @"WebElementIsContentEditableKey"; 4118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectNSString *WebViewProgressStartedNotification = @"WebProgressStartedNotification"; 4138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectNSString *WebViewProgressEstimateChangedNotification = @"WebProgressEstimateChangedNotification"; 4148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectNSString *WebViewProgressFinishedNotification = @"WebProgressFinishedNotification"; 4158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectNSString * const WebViewDidBeginEditingNotification = @"WebViewDidBeginEditingNotification"; 4178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectNSString * const WebViewDidChangeNotification = @"WebViewDidChangeNotification"; 4188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectNSString * const WebViewDidEndEditingNotification = @"WebViewDidEndEditingNotification"; 4198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectNSString * const WebViewDidChangeTypingStyleNotification = @"WebViewDidChangeTypingStyleNotification"; 4208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectNSString * const WebViewDidChangeSelectionNotification = @"WebViewDidChangeSelectionNotification"; 4218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectenum { WebViewVersion = 4 }; 4238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define timedLayoutSize 4096 4258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatic NSMutableSet *schemesWithRepresentationsSet; 4278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectNSString *_WebCanGoBackKey = @"canGoBack"; 4298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectNSString *_WebCanGoForwardKey = @"canGoForward"; 4308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectNSString *_WebEstimatedProgressKey = @"estimatedProgress"; 4318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectNSString *_WebIsLoadingKey = @"isLoading"; 4328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectNSString *_WebMainFrameIconKey = @"mainFrameIcon"; 4338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectNSString *_WebMainFrameTitleKey = @"mainFrameTitle"; 4348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectNSString *_WebMainFrameURLKey = @"mainFrameURL"; 4358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectNSString *_WebMainFrameDocumentKey = @"mainFrameDocument"; 4368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 437643ca7872b450ea4efacab6188849e5aac2ba161Steve BlockNSString *_WebViewDidStartAcceleratedCompositingNotification = @"_WebViewDidStartAcceleratedCompositing"; 438643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 4398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project@interface WebProgressItem : NSObject 4408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 4418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project@public 4428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project long long bytesReceived; 4438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project long long estimatedLength; 4448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 4458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project@end 4468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project@implementation WebProgressItem 4488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project@end 4498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatic BOOL continuousSpellCheckingEnabled; 4518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#ifndef BUILDING_ON_TIGER 4528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatic BOOL grammarCheckingEnabled; 4538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 4540bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#if !defined(BUILDING_ON_TIGER) && !defined(BUILDING_ON_LEOPARD) 4550bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochstatic BOOL automaticQuoteSubstitutionEnabled; 4560bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochstatic BOOL automaticLinkDetectionEnabled; 4570bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochstatic BOOL automaticDashSubstitutionEnabled; 4580bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochstatic BOOL automaticTextReplacementEnabled; 4590bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochstatic BOOL automaticSpellingCorrectionEnabled; 4608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 4618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project@implementation WebView (AllWebViews) 4638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatic CFSetCallBacks NonRetainingSetCallbacks = { 4658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 0, 4668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NULL, 4678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NULL, 4688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project CFCopyDescription, 4698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project CFEqual, 4708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project CFHash 4718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}; 4728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatic CFMutableSetRef allWebViewsSet; 4748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project+ (void)_makeAllWebViewsPerformSelector:(SEL)selector 4768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 4778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!allWebViewsSet) 4788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 4798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [(NSMutableSet *)allWebViewsSet makeObjectsPerformSelector:selector]; 4818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 4828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)_removeFromAllWebViewsSet 4848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 4858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (allWebViewsSet) 4868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project CFSetRemoveValue(allWebViewsSet, self); 4878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 4888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)_addToAllWebViewsSet 4908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 4918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!allWebViewsSet) 4928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project allWebViewsSet = CFSetCreateMutable(NULL, 0, &NonRetainingSetCallbacks); 4938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project CFSetSetValue(allWebViewsSet, self); 4958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 4968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project@end 4988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project@implementation WebView (WebPrivate) 5008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatic inline int callGestalt(OSType selector) 5028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 5038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project SInt32 value = 0; 5048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Gestalt(selector, &value); 5058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return value; 5068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 5078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// Uses underscores instead of dots because if "4." ever appears in a user agent string, old DHTML libraries treat it as Netscape 4. 5098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatic NSString *createMacOSXVersionString() 5108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 5118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Can't use -[NSProcessInfo operatingSystemVersionString] because it has too much stuff we don't want. 5128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project int major = callGestalt(gestaltSystemVersionMajor); 5138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ASSERT(major); 5148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project int minor = callGestalt(gestaltSystemVersionMinor); 5168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project int bugFix = callGestalt(gestaltSystemVersionBugFix); 5178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (bugFix) 5188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return [[NSString alloc] initWithFormat:@"%d_%d_%d", major, minor, bugFix]; 5198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (minor) 5208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return [[NSString alloc] initWithFormat:@"%d_%d", major, minor]; 5218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return [[NSString alloc] initWithFormat:@"%d", major]; 5228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 5238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatic NSString *createUserVisibleWebKitVersionString() 5258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 5268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // If the version is 4 digits long or longer, then the first digit represents 5278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // the version of the OS. Our user agent string should not include this first digit, 5288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // so strip it off and report the rest as the version. <rdar://problem/4997547> 5298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSString *fullVersion = [[NSBundle bundleForClass:[WebView class]] objectForInfoDictionaryKey:(NSString *)kCFBundleVersionKey]; 5308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSRange nonDigitRange = [fullVersion rangeOfCharacterFromSet:[[NSCharacterSet decimalDigitCharacterSet] invertedSet]]; 5318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (nonDigitRange.location == NSNotFound && [fullVersion length] >= 4) 5328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return [[fullVersion substringFromIndex:1] copy]; 5338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (nonDigitRange.location != NSNotFound && nonDigitRange.location >= 4) 5348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return [[fullVersion substringFromIndex:1] copy]; 5358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return [fullVersion copy]; 5368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 5378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project+ (NSString *)_standardUserAgentWithApplicationName:(NSString *)applicationName 5398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 5408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Note: Do *not* move the initialization of osVersion nor webKitVersion into the declaration. 5418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Garbage collection won't correctly mark the global variable in that case <rdar://problem/5733674>. 5428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project static NSString *osVersion; 5438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project static NSString *webKitVersion; 5448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!osVersion) 5458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project osVersion = createMacOSXVersionString(); 5468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!webKitVersion) 5478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project webKitVersion = createUserVisibleWebKitVersionString(); 5488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if ([applicationName length]) 54981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch return [NSString stringWithFormat:@"Mozilla/5.0 (Macintosh; " PROCESSOR " Mac OS X %@) AppleWebKit/%@ (KHTML, like Gecko) %@", osVersion, webKitVersion, applicationName]; 55081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch return [NSString stringWithFormat:@"Mozilla/5.0 (Macintosh; " PROCESSOR " Mac OS X %@) AppleWebKit/%@ (KHTML, like Gecko)", osVersion, webKitVersion]; 5518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 5528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5536c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen+ (void)_reportException:(JSValueRef)exception inContext:(JSContextRef)context 5546c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen{ 5556c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen if (!exception || !context) 5566c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen return; 5576c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen 5586c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen JSLock lock(SilenceAssertionsOnly); 5596c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen JSC::ExecState* execState = toJS(context); 5606c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen 5616c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen // Make sure the context has a DOMWindow global object, otherwise this context didn't originate from a WebView. 5626c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen if (!toJSDOMWindow(execState->lexicalGlobalObject())) 5636c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen return; 5646c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen 5656c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen reportException(execState, toJS(execState, exception)); 5666c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen} 5676c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen 5688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatic void WebKitInitializeApplicationCachePathIfNecessary() 5698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 570d0825bca7fe65beaee391d30da42e937db621564Steve Block#if ENABLE(OFFLINE_WEB_APPLICATIONS) 5718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project static BOOL initialized = NO; 5728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (initialized) 5738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 5748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSString *appName = [[NSBundle mainBundle] bundleIdentifier]; 5768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!appName) 5778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project appName = [[NSProcessInfo processInfo] processName]; 5788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ASSERT(appName); 5808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSString* cacheDir = [NSString _webkit_localCacheDirectoryWithBundleIdentifier:appName]; 5828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project cacheStorage().setCacheDirectory(cacheDir); 5848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project initialized = YES; 585d0825bca7fe65beaee391d30da42e937db621564Steve Block#endif 5868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 5878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 588563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkstatic bool runningLeopardMail() 589563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark{ 590563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark#ifdef BUILDING_ON_LEOPARD 5910bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return applicationIsAppleMail(); 592563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark#endif 593563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return NO; 594563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 595563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 596563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkstatic bool runningTigerMail() 597563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark{ 598563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark#ifdef BUILDING_ON_TIGER 5990bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return applicationIsAppleMail(); 600563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark#endif 601563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return NO; 602563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 603563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 604dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockstatic bool coreVideoHas7228836Fix() 605dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 606dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#ifdef BUILDING_ON_LEOPARD 607dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block NSBundle* coreVideoFrameworkBundle = [NSBundle bundleWithPath:@"/System/Library/Frameworks/CoreVideo.framework"]; 608dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block double version = [[coreVideoFrameworkBundle objectForInfoDictionaryKey:(NSString *)kCFBundleVersionKey] doubleValue]; 609dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return (version >= 48); 610dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#endif 611dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return true; 612dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 613dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 614d0825bca7fe65beaee391d30da42e937db621564Steve Blockstatic bool shouldEnableLoadDeferring() 615d0825bca7fe65beaee391d30da42e937db621564Steve Block{ 616d0825bca7fe65beaee391d30da42e937db621564Steve Block return !applicationIsAdobeInstaller(); 617d0825bca7fe65beaee391d30da42e937db621564Steve Block} 618d0825bca7fe65beaee391d30da42e937db621564Steve Block 6190bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch- (void)_dispatchPendingLoadRequests 6200bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 6216b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner resourceLoadScheduler()->servePendingRequests(); 6220bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 6230bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 6248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)_registerDraggedTypes 6258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 6268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSArray *editableTypes = [WebHTMLView _insertablePasteboardTypes]; 6278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSArray *URLTypes = [NSPasteboard _web_dragTypesForURL]; 6288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSMutableSet *types = [[NSMutableSet alloc] initWithArray:editableTypes]; 6298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [types addObjectsFromArray:URLTypes]; 6308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [self registerForDraggedTypes:[types allObjects]]; 6318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [types release]; 6328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 6338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (BOOL)_usesDocumentViews 6358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 6360bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return _private->usesDocumentViews; 6378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 6388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6392daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochstatic NSString *leakMailQuirksUserScriptContents() 640a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch{ 641a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch NSString *scriptPath = [[NSBundle bundleForClass:[WebView class]] pathForResource:@"MailQuirksUserScript" ofType:@"js"]; 6422daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch NSStringEncoding encoding; 6432daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch return [[NSString alloc] initWithContentsOfFile:scriptPath usedEncoding:&encoding error:0]; 644a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch} 645a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 646a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch- (void)_injectMailQuirksScript 647a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch{ 6482daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch static NSString *mailQuirksScriptContents = leakMailQuirksUserScriptContents(); 6492daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch core(self)->group().addUserScriptToWorld(core([WebScriptWorld world]), 6502daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch mailQuirksScriptContents, KURL(), 0, 0, InjectAtDocumentEnd, InjectInAllFrames); 6512daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch} 6522daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 6532daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochstatic bool needsOutlookQuirksScript() 6542daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch{ 6552daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch static bool isOutlookNeedingQuirksScript = !WebKitLinkedOnOrAfter(WEBKIT_FIRST_VERSION_WITH_HTML5_PARSER) 6562daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch && applicationIsMicrosoftOutlook(); 6572daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch return isOutlookNeedingQuirksScript; 6582daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch} 6592daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 6602daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochstatic NSString *leakOutlookQuirksUserScriptContents() 6612daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch{ 6622daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch NSString *scriptPath = [[NSBundle bundleForClass:[WebView class]] pathForResource:@"OutlookQuirksUserScript" ofType:@"js"]; 6632daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch NSStringEncoding encoding; 6642daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch return [[NSString alloc] initWithContentsOfFile:scriptPath usedEncoding:&encoding error:0]; 6652daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch} 6662daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 6672daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch-(void)_injectOutlookQuirksScript 6682daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch{ 6692daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch static NSString *outlookQuirksScriptContents = leakOutlookQuirksUserScriptContents(); 670a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch core(self)->group().addUserScriptToWorld(core([WebScriptWorld world]), 6712daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch outlookQuirksScriptContents, KURL(), 0, 0, InjectAtDocumentEnd, InjectInAllFrames); 672a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch} 673a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 6748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)_commonInitializationWithFrameName:(NSString *)frameName groupName:(NSString *)groupName usesDocumentViews:(BOOL)usesDocumentViews 6758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 676563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark WebCoreThreadViolationCheckRoundTwo(); 677635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 6788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#ifndef NDEBUG 6798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project WTF::RefCountedLeakCounter::suppressMessages(webViewIsOpen); 6808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 6818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project WebPreferences *standardPreferences = [WebPreferences standardPreferences]; 6838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [standardPreferences willAddToWebView]; 6848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project _private->preferences = [standardPreferences retain]; 6868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project _private->catchesDelegateExceptions = YES; 6878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project _private->mainFrameDocumentReady = NO; 6888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project _private->drawsBackground = YES; 6890bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch _private->backgroundColor = [[NSColor colorWithDeviceWhite:1 alpha:1] retain]; 6900bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch _private->usesDocumentViews = usesDocumentViews; 691692e5dbf12901edacf14812a6fae25462920af42Steve Block _private->includesFlattenedCompositingLayersWhenDrawingToBitmap = YES; 6928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project WebFrameView *frameView = nil; 6940bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (_private->usesDocumentViews) { 6958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSRect f = [self frame]; 6968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project frameView = [[WebFrameView alloc] initWithFrame: NSMakeRect(0,0,f.size.width,f.size.height)]; 6978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [frameView setAutoresizingMask:NSViewWidthSizable | NSViewHeightSizable]; 6988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [self addSubview:frameView]; 6998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [frameView release]; 7008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 7018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 702635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project static bool didOneTimeInitialization = false; 703635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project if (!didOneTimeInitialization) { 704635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project WebKitInitializeLoggingChannelsIfNecessary(); 705635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project WebCore::InitializeLoggingChannelsIfNecessary(); 706635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project [WebHistoryItem initWindowWatcherIfNecessary]; 7078ccf722629b08f2a06b2cadbdc3d0c9dc885e25dBen Murdoch#if ENABLE(DATABASE) 708635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project WebKitInitializeDatabasesIfNecessary(); 7098ccf722629b08f2a06b2cadbdc3d0c9dc885e25dBen Murdoch#endif 7102bde8e466a4451c7319e3a072d118917957d6554Steve Block 7112bde8e466a4451c7319e3a072d118917957d6554Steve Block#if ENABLE(DOM_STORAGE) 7122bde8e466a4451c7319e3a072d118917957d6554Steve Block WebKitInitializeStorageIfNecessary(); 7132bde8e466a4451c7319e3a072d118917957d6554Steve Block#endif 714635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project WebKitInitializeApplicationCachePathIfNecessary(); 715635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project patchMailRemoveAttributesMethod(); 71606ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen 71706ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen // Initialize our platform strategies. 71806ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen WebPlatformStrategies::initialize(); 71981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch Settings::setDefaultMinDOMTimerInterval(0.004); 72006ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen 721635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project didOneTimeInitialization = true; 722635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project } 723635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 7240617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen Page::PageClients pageClients; 7250617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen pageClients.chromeClient = new WebChromeClient(self); 7260617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen pageClients.contextMenuClient = new WebContextMenuClient(self); 7270617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen pageClients.editorClient = new WebEditorClient(self); 7280617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen pageClients.dragClient = new WebDragClient(self); 7290617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen pageClients.inspectorClient = new WebInspectorClient(self); 7300617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen pageClients.pluginHalterClient = new WebPluginHalterClient(self); 731d0825bca7fe65beaee391d30da42e937db621564Steve Block#if ENABLE(CLIENT_BASED_GEOLOCATION) 7326b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner pageClients.geolocationClient = new WebGeolocationClient(self); 733d0825bca7fe65beaee391d30da42e937db621564Steve Block#endif 7345abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick#if ENABLE(DEVICE_ORIENTATION) 7355abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick pageClients.deviceOrientationClient = new WebDeviceOrientationClient(self); 7365abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick#endif 7370617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen _private->page = new Page(pageClients); 7388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 739692e5dbf12901edacf14812a6fae25462920af42Steve Block _private->page->setCanStartMedia([self window]); 7408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project _private->page->settings()->setLocalStorageDatabasePath([[self preferences] _localStorageDatabasePath]); 7418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7422daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch if (needsOutlookQuirksScript()) { 7432daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch _private->page->settings()->setShouldInjectUserScriptsInInitialEmptyDocument(true); 7442daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch [self _injectOutlookQuirksScript]; 7452daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch } 7462daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 7478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [WebFrame _createMainFrameWithPage:_private->page frameName:frameName frameView:frameView]; 7488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#ifndef BUILDING_ON_TIGER 750563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark NSRunLoop *runLoop = [NSRunLoop mainRunLoop]; 751563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark#else 752563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark NSRunLoop *runLoop = [NSRunLoop currentRunLoop]; 753563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark#endif 754563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 7558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (WebKitLinkedOnOrAfter(WEBKIT_FIRST_VERSION_WITH_LOADING_DURING_COMMON_RUNLOOP_MODES)) 756563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark [self scheduleInRunLoop:runLoop forMode:(NSString *)kCFRunLoopCommonModes]; 7578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project else 758563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark [self scheduleInRunLoop:runLoop forMode:NSDefaultRunLoopMode]; 7598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [self _addToAllWebViewsSet]; 7618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [self setGroupName:groupName]; 7628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // If there's already a next key view (e.g., from a nib), wire it up to our 7648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // contained frame view. In any case, wire our next key view up to the our 7658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // contained frame view. This works together with our becomeFirstResponder 7668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // and setNextKeyView overrides. 7678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSView *nextKeyView = [self nextKeyView]; 7688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (nextKeyView && nextKeyView != frameView) 7698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [frameView setNextKeyView:nextKeyView]; 7708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [super setNextKeyView:frameView]; 7718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 772692e5dbf12901edacf14812a6fae25462920af42Steve Block if ([[self class] shouldIncludeInWebKitStatistics]) 773692e5dbf12901edacf14812a6fae25462920af42Steve Block ++WebViewCount; 7748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [self _registerDraggedTypes]; 7768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project WebPreferences *prefs = [self preferences]; 7788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(_preferencesChangedNotification:) 7792daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch name:WebPreferencesChangedInternalNotification object:prefs]; 7808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7812daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch [self _preferencesChanged:[self preferences]]; 7822daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch [[self preferences] _postPreferencesChangedAPINotification]; 7838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!WebKitLinkedOnOrAfter(WEBKIT_FIRST_VERSION_WITH_LOCAL_RESOURCE_SECURITY_RESTRICTION)) { 7858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Originally, we allowed all local loads. 786231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block SecurityOrigin::setLocalLoadPolicy(SecurityOrigin::AllowLocalLoadsForAll); 7878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } else if (!WebKitLinkedOnOrAfter(WEBKIT_FIRST_VERSION_WITH_MORE_STRICT_LOCAL_RESOURCE_SECURITY_RESTRICTION)) { 7888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Later, we allowed local loads for local URLs and documents loaded 7898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // with substitute data. 790231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block SecurityOrigin::setLocalLoadPolicy(SecurityOrigin::AllowLocalLoadsForLocalAndSubstituteData); 7918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 7920bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 7930bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!WebKitLinkedOnOrAfter(WEBKIT_FIRST_VERSION_WITHOUT_CONTENT_SNIFFING_FOR_FILE_URLS)) 7940bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch ResourceHandle::forceContentSniffing(); 795ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block 796a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch#if ENABLE(GLIB_SUPPORT) 797ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block [self _scheduleGlibContextIterations]; 798ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block#endif 799ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block 800a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch if (runningTigerMail() || runningLeopardMail()) 801a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch [self _injectMailQuirksScript]; 8028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 8038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 8048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (id)_initWithFrame:(NSRect)f frameName:(NSString *)frameName groupName:(NSString *)groupName usesDocumentViews:(BOOL)usesDocumentViews 8058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 8068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project self = [super initWithFrame:f]; 8078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!self) 8088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return nil; 8098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 8108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#ifdef ENABLE_WEBKIT_UNSET_DYLD_FRAMEWORK_PATH 8118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // DYLD_FRAMEWORK_PATH is used so Safari will load the development version of WebKit, which 8128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // may not work with other WebKit applications. Unsetting DYLD_FRAMEWORK_PATH removes the 8138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // need for Safari to unset it to prevent it from being passed to applications it launches. 8148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Unsetting it when a WebView is first created is as good a place as any. 8158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // See <http://bugs.webkit.org/show_bug.cgi?id=4286> for more details. 8168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (getenv("WEBKIT_UNSET_DYLD_FRAMEWORK_PATH")) { 8178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project unsetenv("DYLD_FRAMEWORK_PATH"); 8188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project unsetenv("WEBKIT_UNSET_DYLD_FRAMEWORK_PATH"); 8198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 8208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 8218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 8228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project _private = [[WebViewPrivate alloc] init]; 8238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [self _commonInitializationWithFrameName:frameName groupName:groupName usesDocumentViews:usesDocumentViews]; 8248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [self setMaintainsBackForwardList: YES]; 8258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return self; 8268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 8278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 8288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (BOOL)_mustDrawUnionedRect:(NSRect)rect singleRects:(const NSRect *)rects count:(NSInteger)count 8298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 8308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // If count == 0 here, use the rect passed in for drawing. This is a workaround for: 8318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // <rdar://problem/3908282> REGRESSION (Mail): No drag image dragging selected text in Blot and Mail 8328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // The reason for the workaround is that this method is called explicitly from the code 8338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // to generate a drag image, and at that time, getRectsBeingDrawn:count: will return a zero count. 8348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project const int cRectThreshold = 10; 8358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project const float cWastedSpaceThreshold = 0.75f; 8368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project BOOL useUnionedRect = (count <= 1) || (count > cRectThreshold); 8378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!useUnionedRect) { 8388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Attempt to guess whether or not we should use the unioned rect or the individual rects. 8398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // We do this by computing the percentage of "wasted space" in the union. If that wasted space 8408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // is too large, then we will do individual rect painting instead. 8418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project float unionPixels = (rect.size.width * rect.size.height); 8428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project float singlePixels = 0; 8438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project for (int i = 0; i < count; ++i) 8448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project singlePixels += rects[i].size.width * rects[i].size.height; 8458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project float wastedSpace = 1 - (singlePixels / unionPixels); 8468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (wastedSpace <= cWastedSpaceThreshold) 8478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project useUnionedRect = YES; 8488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 8498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return useUnionedRect; 8508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 8518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 8528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)drawSingleRect:(NSRect)rect 8538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 8540bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch ASSERT(!_private->usesDocumentViews); 8558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 8568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [NSGraphicsContext saveGraphicsState]; 8578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSRectClip(rect); 8588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 8598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project @try { 8608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [[self mainFrame] _drawRect:rect contentsOnly:NO]; 8618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 86221939df44de1705786c545cd1bf519d47250322dBen Murdoch [[self _UIDelegateForwarder] webView:self didDrawRect:rect]; 8638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 86421939df44de1705786c545cd1bf519d47250322dBen Murdoch if (WebNodeHighlight *currentHighlight = [self currentNodeHighlight]) 8658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [currentHighlight setNeedsUpdateInTargetViewRect:rect]; 8668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 8678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [NSGraphicsContext restoreGraphicsState]; 8688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } @catch (NSException *localException) { 8698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [NSGraphicsContext restoreGraphicsState]; 8708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project LOG_ERROR("Exception caught while drawing: %@", localException); 8718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [localException raise]; 8728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 8738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 8748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 8758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (BOOL)isFlipped 8768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 8770bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return _private && !_private->usesDocumentViews; 8780bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 8790bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 8800bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch- (void)setFrameSize:(NSSize)size 8810bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 8820bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!_private->usesDocumentViews && !NSEqualSizes(_private->lastLayoutSize, size)) { 8830bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch Frame* frame = [self _mainCoreFrame]; 8840bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch // FIXME: Viewless WebKit is broken with Safari banners (e.g., the Find banner). We'll have to figure out a way for 8850bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch // Safari to communicate that this space is being consumed. For WebKit with document views, there's no 8860bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch // need to do an explicit resize, since WebFrameViews have auto resizing turned on and will handle changing 8870bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch // their bounds automatically. See <rdar://problem/6835573> for details. 8880bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch frame->view()->resize(IntSize(size)); 8890bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch frame->view()->setNeedsLayout(); 8900bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch [self setNeedsDisplay:YES]; 8910bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch _private->lastLayoutSize = size; 8920bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch } 8930bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 8940bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch [super setFrameSize:size]; 8950bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 8960bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 8970bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#if USE(ACCELERATED_COMPOSITING) || !defined(BUILDING_ON_TIGER) 8980bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 8990bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch- (void)_viewWillDrawInternal 9000bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 9010bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch Frame* frame = [self _mainCoreFrame]; 9020bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (frame && frame->view()) 9035ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen frame->view()->updateLayoutAndStyleIfNeededRecursive(); 9048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 9058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 9060bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#endif 9070bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 9088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#ifndef BUILDING_ON_TIGER 9098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 9108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)viewWillDraw 9118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 9120bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!_private->usesDocumentViews) 9130bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch [self _viewWillDrawInternal]; 9148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [super viewWillDraw]; 9158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 9168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 9178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 9188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 9198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 9208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)drawRect:(NSRect)rect 9218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 9220bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (_private->usesDocumentViews) 9238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return [super drawRect:rect]; 9248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 9258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ASSERT_MAIN_THREAD(); 9268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 9278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project const NSRect *rects; 9288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSInteger count; 9298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [self getRectsBeingDrawn:&rects count:&count]; 9308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 9318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 9328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if ([self _mustDrawUnionedRect:rect singleRects:rects count:count]) 9338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [self drawSingleRect:rect]; 9348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project else 9358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project for (int i = 0; i < count; ++i) 9368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [self drawSingleRect:rects[i]]; 9378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 9388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 9398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project+ (NSArray *)_supportedMIMETypes 9408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 9418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Load the plug-in DB allowing plug-ins to install types. 9428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [WebPluginDatabase sharedDatabase]; 9438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return [[WebFrameView _viewTypesAllowImageTypeOmission:NO] allKeys]; 9448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 9458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 9468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project+ (NSArray *)_supportedFileExtensions 9478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 9488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSMutableSet *extensions = [[NSMutableSet alloc] init]; 9498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSArray *MIMETypes = [self _supportedMIMETypes]; 9508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSEnumerator *enumerator = [MIMETypes objectEnumerator]; 9518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSString *MIMEType; 9528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project while ((MIMEType = [enumerator nextObject]) != nil) { 9538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSArray *extensionsForType = WKGetExtensionsForMIMEType(MIMEType); 9548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (extensionsForType) { 9558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [extensions addObjectsFromArray:extensionsForType]; 9568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 9578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 9588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSArray *uniqueExtensions = [extensions allObjects]; 9598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [extensions release]; 9608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return uniqueExtensions; 9618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 9628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 96321939df44de1705786c545cd1bf519d47250322dBen Murdochstatic NSMutableSet *knownPluginMIMETypes() 96421939df44de1705786c545cd1bf519d47250322dBen Murdoch{ 96521939df44de1705786c545cd1bf519d47250322dBen Murdoch static NSMutableSet *mimeTypes = [[NSMutableSet alloc] init]; 96621939df44de1705786c545cd1bf519d47250322dBen Murdoch 96721939df44de1705786c545cd1bf519d47250322dBen Murdoch return mimeTypes; 96821939df44de1705786c545cd1bf519d47250322dBen Murdoch} 96921939df44de1705786c545cd1bf519d47250322dBen Murdoch 97021939df44de1705786c545cd1bf519d47250322dBen Murdoch+ (void)_registerPluginMIMEType:(NSString *)MIMEType 97121939df44de1705786c545cd1bf519d47250322dBen Murdoch{ 97221939df44de1705786c545cd1bf519d47250322dBen Murdoch [WebView registerViewClass:[WebHTMLView class] representationClass:[WebHTMLRepresentation class] forMIMEType:MIMEType]; 97321939df44de1705786c545cd1bf519d47250322dBen Murdoch [knownPluginMIMETypes() addObject:MIMEType]; 97421939df44de1705786c545cd1bf519d47250322dBen Murdoch} 97521939df44de1705786c545cd1bf519d47250322dBen Murdoch 97621939df44de1705786c545cd1bf519d47250322dBen Murdoch+ (void)_unregisterPluginMIMEType:(NSString *)MIMEType 97721939df44de1705786c545cd1bf519d47250322dBen Murdoch{ 97821939df44de1705786c545cd1bf519d47250322dBen Murdoch [self _unregisterViewClassAndRepresentationClassForMIMEType:MIMEType]; 97921939df44de1705786c545cd1bf519d47250322dBen Murdoch [knownPluginMIMETypes() removeObject:MIMEType]; 98021939df44de1705786c545cd1bf519d47250322dBen Murdoch} 98121939df44de1705786c545cd1bf519d47250322dBen Murdoch 982643ca7872b450ea4efacab6188849e5aac2ba161Steve Block+ (BOOL)_viewClass:(Class *)vClass andRepresentationClass:(Class *)rClass forMIMEType:(NSString *)MIMEType allowingPlugins:(BOOL)allowPlugins 9838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 9848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project MIMEType = [MIMEType lowercaseString]; 9858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Class viewClass = [[WebFrameView _viewTypesAllowImageTypeOmission:YES] _webkit_objectForMIMEType:MIMEType]; 9868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Class repClass = [[WebDataSource _repTypesAllowImageTypeOmission:YES] _webkit_objectForMIMEType:MIMEType]; 987643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 9888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!viewClass || !repClass || [[WebPDFView supportedMIMETypes] containsObject:MIMEType]) { 9898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Our optimization to avoid loading the plug-in DB and image types for the HTML case failed. 990643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 991643ca7872b450ea4efacab6188849e5aac2ba161Steve Block if (allowPlugins) { 992643ca7872b450ea4efacab6188849e5aac2ba161Steve Block // Load the plug-in DB allowing plug-ins to install types. 993643ca7872b450ea4efacab6188849e5aac2ba161Steve Block [WebPluginDatabase sharedDatabase]; 994643ca7872b450ea4efacab6188849e5aac2ba161Steve Block } 995643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 9968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Load the image types and get the view class and rep class. This should be the fullest picture of all handled types. 9978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project viewClass = [[WebFrameView _viewTypesAllowImageTypeOmission:NO] _webkit_objectForMIMEType:MIMEType]; 9988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project repClass = [[WebDataSource _repTypesAllowImageTypeOmission:NO] _webkit_objectForMIMEType:MIMEType]; 9998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 10008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 10018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (viewClass && repClass) { 100221939df44de1705786c545cd1bf519d47250322dBen Murdoch if (viewClass == [WebHTMLView class] && repClass == [WebHTMLRepresentation class]) { 100321939df44de1705786c545cd1bf519d47250322dBen Murdoch // Special-case WebHTMLView for text types that shouldn't be shown. 100421939df44de1705786c545cd1bf519d47250322dBen Murdoch if ([[WebHTMLView unsupportedTextMIMETypes] containsObject:MIMEType]) 100521939df44de1705786c545cd1bf519d47250322dBen Murdoch return NO; 100621939df44de1705786c545cd1bf519d47250322dBen Murdoch 100721939df44de1705786c545cd1bf519d47250322dBen Murdoch // If the MIME type is a known plug-in we might not want to load it. 100821939df44de1705786c545cd1bf519d47250322dBen Murdoch if (!allowPlugins && [knownPluginMIMETypes() containsObject:MIMEType]) { 100921939df44de1705786c545cd1bf519d47250322dBen Murdoch BOOL isSupportedByWebKit = [[WebHTMLView supportedNonImageMIMETypes] containsObject:MIMEType] || 101021939df44de1705786c545cd1bf519d47250322dBen Murdoch [[WebHTMLView supportedMIMETypes] containsObject:MIMEType]; 101121939df44de1705786c545cd1bf519d47250322dBen Murdoch 101221939df44de1705786c545cd1bf519d47250322dBen Murdoch // If this is a known plug-in MIME type and WebKit can't show it natively, we don't want to show it. 101321939df44de1705786c545cd1bf519d47250322dBen Murdoch if (!isSupportedByWebKit) 101421939df44de1705786c545cd1bf519d47250322dBen Murdoch return NO; 101521939df44de1705786c545cd1bf519d47250322dBen Murdoch } 10168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 10178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (vClass) 10188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *vClass = viewClass; 10198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (rClass) 10208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *rClass = repClass; 10218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return YES; 10228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 10238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 10248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return NO; 10258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 10268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1027563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark- (BOOL)_viewClass:(Class *)vClass andRepresentationClass:(Class *)rClass forMIMEType:(NSString *)MIMEType 10288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 102921939df44de1705786c545cd1bf519d47250322dBen Murdoch if ([[self class] _viewClass:vClass andRepresentationClass:rClass forMIMEType:MIMEType allowingPlugins:[_private->preferences arePlugInsEnabled]]) 10308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return YES; 10318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 10328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (_private->pluginDatabase) { 10338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project WebBasePluginPackage *pluginPackage = [_private->pluginDatabase pluginForMIMEType:MIMEType]; 10348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (pluginPackage) { 10358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (vClass) 10368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *vClass = [WebHTMLView class]; 10378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (rClass) 10388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *rClass = [WebHTMLRepresentation class]; 10398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return YES; 10408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 10418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 10428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 10438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return NO; 10448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 10458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 10468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project+ (void)_setAlwaysUseATSU:(BOOL)f 10478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 10488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [self _setAlwaysUsesComplexTextCodePath:f]; 10498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 10508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 10518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project+ (void)_setAlwaysUsesComplexTextCodePath:(BOOL)f 10528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 10530bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch Font::setCodePath(f ? Font::Complex : Font::Auto); 10540bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 10550bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 10560bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch+ (BOOL)canCloseAllWebViews 10570bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 10580bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return DOMWindow::dispatchAllPendingBeforeUnloadEvents(); 10590bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 10600bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 10610bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch+ (void)closeAllWebViews 10620bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 10630bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch DOMWindow::dispatchAllPendingUnloadEvents(); 10640bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 10650bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch // This will close the WebViews in a random order. Change this if close order is important. 106621939df44de1705786c545cd1bf519d47250322dBen Murdoch // Make a new set to avoid mutating the set we are enumerating. 106721939df44de1705786c545cd1bf519d47250322dBen Murdoch NSSet *webViewsToClose = [NSSet setWithSet:(NSSet *)allWebViewsSet]; 106821939df44de1705786c545cd1bf519d47250322dBen Murdoch NSEnumerator *enumerator = [webViewsToClose objectEnumerator]; 10690bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch while (WebView *webView = [enumerator nextObject]) 10700bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch [webView close]; 10718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 10728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 10738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project+ (BOOL)canShowFile:(NSString *)path 10748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 10758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return [[self class] canShowMIMEType:[WebView _MIMETypeForFile:path]]; 10768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 10778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 10788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project+ (NSString *)suggestedFileExtensionForMIMEType:(NSString *)type 10798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 10808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return WKGetPreferredExtensionForMIMEType(type); 10818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 10828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 10838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (BOOL)_isClosed 10848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 10858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return !_private || _private->closed; 10868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 10878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 10888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)_closePluginDatabases 10898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 10908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project pluginDatabaseClientCount--; 10918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 10928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Close both sets of plug-in databases because plug-ins need an opportunity to clean up files, etc. 10938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 10948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Unload the WebView local plug-in database. 10958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (_private->pluginDatabase) { 10968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [_private->pluginDatabase destroyAllPluginInstanceViews]; 10978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [_private->pluginDatabase close]; 10988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [_private->pluginDatabase release]; 10998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project _private->pluginDatabase = nil; 11008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 11018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 11028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Keep the global plug-in database active until the app terminates to avoid having to reload plug-in bundles. 11038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!pluginDatabaseClientCount && applicationIsTerminating) 11048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [WebPluginDatabase closeSharedDatabase]; 11058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 11068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 11078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)_closeWithFastTeardown 11088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 11098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#ifndef NDEBUG 11108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project WTF::RefCountedLeakCounter::suppressMessages("At least one WebView was closed with fast teardown."); 11118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 11128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 11130bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch [[NSDistributedNotificationCenter defaultCenter] removeObserver:self]; 11140bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch [[NSNotificationCenter defaultCenter] removeObserver:self]; 11158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 11168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [self _closePluginDatabases]; 11178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 11188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 11190bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochstatic bool fastDocumentTeardownEnabled() 11200bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 11210bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#ifdef NDEBUG 11220bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch static bool enabled = ![[NSUserDefaults standardUserDefaults] boolForKey:WebKitEnableFullDocumentTeardownPreferenceKey]; 11230bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#else 11240bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch static bool initialized = false; 11250bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch static bool enabled = false; 11260bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!initialized) { 11270bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch // This allows debug builds to default to not have fast teardown, so leak checking still works. 11280bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch // But still allow the WebKitEnableFullDocumentTeardown default to override it if present. 11290bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch NSNumber *setting = [[NSUserDefaults standardUserDefaults] objectForKey:WebKitEnableFullDocumentTeardownPreferenceKey]; 11300bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (setting) 11310bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch enabled = ![setting boolValue]; 11320bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch initialized = true; 11330bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch } 11340bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#endif 11350bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return enabled; 11360bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 11370bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 11388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// _close is here only for backward compatibility; clients and subclasses should use 11398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// public method -close instead. 11408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)_close 11418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 11428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!_private || _private->closed) 11438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 11448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1145dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block _private->closed = YES; 114621939df44de1705786c545cd1bf519d47250322dBen Murdoch [self _removeFromAllWebViewsSet]; 1147dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1148cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block [self _closingEventHandling]; 11490bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 11508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#ifndef NDEBUG 11518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project WTF::RefCountedLeakCounter::cancelMessageSuppression(webViewIsOpen); 11528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 11530bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 11540bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch // To quit the apps fast we skip document teardown, except plugins 11550bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch // need to be destroyed and unloaded. 11560bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (applicationIsTerminating && fastDocumentTeardownEnabled()) { 11578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [self _closeWithFastTeardown]; 11588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 11598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 11608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1161d0825bca7fe65beaee391d30da42e937db621564Steve Block#if ENABLE(VIDEO) 1162231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block [self _exitFullscreen]; 1163d0825bca7fe65beaee391d30da42e937db621564Steve Block#endif 1164231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 11650bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (Frame* mainFrame = [self _mainCoreFrame]) 11668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project mainFrame->loader()->detachFromParent(); 11678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 11688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [self setHostWindow:nil]; 11698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 11708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [self setDownloadDelegate:nil]; 11718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [self setEditingDelegate:nil]; 11728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [self setFrameLoadDelegate:nil]; 11738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [self setPolicyDelegate:nil]; 11748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [self setResourceLoadDelegate:nil]; 11758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [self setScriptDebugDelegate:nil]; 11768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [self setUIDelegate:nil]; 11778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 11788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [_private->inspector webViewClosed]; 11798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 11808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // To avoid leaks, call removeDragCaret in case it wasn't called after moveDragCaretToPoint. 11818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [self removeDragCaret]; 11828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 11838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Deleteing the WebCore::Page will clear the page cache so we call destroy on 11848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // all the plug-ins in the page cache to break any retain cycles. 11858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // See comment in HistoryItem::releaseAllPendingPageCaches() for more information. 11866c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen Page* page = _private->page; 11878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project _private->page = 0; 11886c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen delete page; 11898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 11908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (_private->hasSpellCheckerDocumentTag) { 11918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [[NSSpellChecker sharedSpellChecker] closeSpellDocumentWithTag:_private->spellCheckerDocumentTag]; 11928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project _private->hasSpellCheckerDocumentTag = NO; 11938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 11940bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 11950bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#if USE(ACCELERATED_COMPOSITING) 11960bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch [self _clearLayerSyncLoopObserver]; 11970bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#endif 11988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1199a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch#if ENABLE(GLIB_SUPPORT) 1200ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block [self _clearGlibLoopObserver]; 1201ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block#endif 1202ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block 12038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [[NSDistributedNotificationCenter defaultCenter] removeObserver:self]; 12048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [[NSNotificationCenter defaultCenter] removeObserver:self]; 12058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 12068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [WebPreferences _removeReferenceForIdentifier:[self preferencesIdentifier]]; 12078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 12080bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch WebPreferences *preferences = _private->preferences; 12098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project _private->preferences = nil; 12108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [preferences didRemoveFromWebView]; 12118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [preferences release]; 12128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 12138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [self _closePluginDatabases]; 12148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 12158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#ifndef NDEBUG 12168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Need this to make leak messages accurate. 1217635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project if (applicationIsTerminating) { 12188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project gcController().garbageCollectNow(); 1219563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark [WebCache setDisabled:YES]; 1220635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project } 12218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 12228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 12238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 12240bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch// Indicates if the WebView is in the midst of a user gesture. 12250bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch- (BOOL)_isProcessingUserGesture 12260bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 12270bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch WebFrame *frame = [self mainFrame]; 12280bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return core(frame)->loader()->isProcessingUserGesture(); 12290bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 12300bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 12318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project+ (NSString *)_MIMETypeForFile:(NSString *)path 12328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 12338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSString *extension = [path pathExtension]; 12348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSString *MIMEType = nil; 12358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 12368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Get the MIME type from the extension. 12378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if ([extension length] != 0) { 12388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project MIMEType = WKGetMIMETypeForExtension(extension); 12398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 12408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 12418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // If we can't get a known MIME type from the extension, sniff. 12428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if ([MIMEType length] == 0 || [MIMEType isEqualToString:@"application/octet-stream"]) { 12438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSFileHandle *handle = [NSFileHandle fileHandleForReadingAtPath:path]; 12448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSData *data = [handle readDataOfLength:WEB_GUESS_MIME_TYPE_PEEK_LENGTH]; 12458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [handle closeFile]; 12468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if ([data length] != 0) { 12478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project MIMEType = [data _webkit_guessedMIMEType]; 12488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 12498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if ([MIMEType length] == 0) { 12508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project MIMEType = @"application/octet-stream"; 12518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 12528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 12538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 12548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return MIMEType; 12558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 12568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 12578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (WebDownload *)_downloadURL:(NSURL *)URL 12588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 12598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ASSERT(URL); 12608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 12618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSURLRequest *request = [[NSURLRequest alloc] initWithURL:URL]; 12628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project WebDownload *download = [WebDownload _downloadWithRequest:request 12638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project delegate:_private->downloadDelegate 12648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project directory:nil]; 12658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [request release]; 12668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 12678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return download; 12688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 12698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 12708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (WebView *)_openNewWindowWithRequest:(NSURLRequest *)request 12718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 12728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSDictionary *features = [[NSDictionary alloc] init]; 12738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project WebView *newWindowWebView = [[self _UIDelegateForwarder] webView:self 12748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project createWebViewWithRequest:nil 12758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project windowFeatures:features]; 12768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [features release]; 12778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!newWindowWebView) 12788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return nil; 12798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 12808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project CallUIDelegate(newWindowWebView, @selector(webViewShow:)); 12818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return newWindowWebView; 12828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 12838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 12848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (WebInspector *)inspector 12858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 12868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!_private->inspector) 12878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project _private->inspector = [[WebInspector alloc] initWithWebView:self]; 12888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return _private->inspector; 12898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 12908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 12918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (WebCore::Page*)page 12928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 12938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return _private->page; 12948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 12958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 12968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (NSMenu *)_menuForElement:(NSDictionary *)element defaultItems:(NSArray *)items 12978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 12988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSArray *defaultMenuItems = [[WebDefaultUIDelegate sharedUIDelegate] webView:self contextMenuItemsForElement:element defaultMenuItems:items]; 12992daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch NSArray *menuItems = defaultMenuItems; 13002daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 13012daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch // CallUIDelegate returns nil if UIDelegate is nil or doesn't respond to the selector. So we need to check that here 13022daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch // to distinguish between using defaultMenuItems or the delegate really returning nil to say "no context menu". 13032daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch SEL selector = @selector(webView:contextMenuItemsForElement:defaultMenuItems:); 13042daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch if (_private->UIDelegate && [_private->UIDelegate respondsToSelector:selector]) { 13052daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch menuItems = CallUIDelegate(self, selector, element, defaultMenuItems); 13062daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch if (!menuItems) 13072daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch return nil; 13082daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch } 13098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 13108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project unsigned count = [menuItems count]; 13118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!count) 13128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return nil; 13138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 13148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSMenu *menu = [[NSMenu alloc] init]; 13158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project for (unsigned i = 0; i < count; i++) 13168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [menu addItem:[menuItems objectAtIndex:i]]; 13178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 13188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return [menu autorelease]; 13198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 13208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 13218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)_mouseDidMoveOverElement:(NSDictionary *)dictionary modifierFlags:(NSUInteger)modifierFlags 13228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 13238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // We originally intended to call this delegate method sometimes with a nil dictionary, but due to 13248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // a bug dating back to WebKit 1.0 this delegate was never called with nil! Unfortunately we can't 13258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // start calling this with nil since it will break Adobe Help Viewer, and possibly other clients. 13268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!dictionary) 13278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 13288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project CallUIDelegate(self, @selector(webView:mouseDidMoveOverElement:modifierFlags:), dictionary, modifierFlags); 13298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 13308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 13318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)_loadBackForwardListFromOtherView:(WebView *)otherView 13328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 13338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!_private->page) 13348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 13358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 13368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!otherView->_private->page) 13378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 13388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 13398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // It turns out the right combination of behavior is done with the back/forward load 13408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // type. (See behavior matrix at the top of WebFramePrivate.) So we copy all the items 13418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // in the back forward list, and go to the current one. 13428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 13438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project BackForwardList* backForwardList = _private->page->backForwardList(); 13448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ASSERT(!backForwardList->currentItem()); // destination list should be empty 13458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 13468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project BackForwardList* otherBackForwardList = otherView->_private->page->backForwardList(); 13478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!otherBackForwardList->currentItem()) 13488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; // empty back forward list, bail 13498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 13508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project HistoryItem* newItemToGoTo = 0; 13518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 13528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project int lastItemIndex = otherBackForwardList->forwardListCount(); 13538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project for (int i = -otherBackForwardList->backListCount(); i <= lastItemIndex; ++i) { 13548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (i == 0) { 13558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // If this item is showing , save away its current scroll and form state, 13568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // since that might have changed since loading and it is normally not saved 13578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // until we leave that page. 1358cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block otherView->_private->page->mainFrame()->loader()->history()->saveDocumentAndScrollState(); 13598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 13608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project RefPtr<HistoryItem> newItem = otherBackForwardList->itemAtIndex(i)->copy(); 13618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (i == 0) 13628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project newItemToGoTo = newItem.get(); 13638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project backForwardList->addItem(newItem.release()); 13648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 13658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 13668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ASSERT(newItemToGoTo); 13678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project _private->page->goToItem(newItemToGoTo, FrameLoadTypeIndexedBackForward); 13688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 13698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 13708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)_setFormDelegate: (id<WebFormDelegate>)delegate 13718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 13728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project _private->formDelegate = delegate; 13738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 13748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 13758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (id<WebFormDelegate>)_formDelegate 13768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 13778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return _private->formDelegate; 13788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 13798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 13808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (BOOL)_needsAdobeFrameReloadingQuirk 13818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 13820bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch static BOOL needsQuirk = WKAppVersionCheckLessThan(@"com.adobe.Acrobat", -1, 9.0) 13838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project || WKAppVersionCheckLessThan(@"com.adobe.Acrobat.Pro", -1, 9.0) 13848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project || WKAppVersionCheckLessThan(@"com.adobe.Reader", -1, 9.0) 13858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project || WKAppVersionCheckLessThan(@"com.adobe.distiller", -1, 9.0) 13868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project || WKAppVersionCheckLessThan(@"com.adobe.Contribute", -1, 4.2) 13878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project || WKAppVersionCheckLessThan(@"com.adobe.dreamweaver-9.0", -1, 9.1) 13888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project || WKAppVersionCheckLessThan(@"com.macromedia.fireworks", -1, 9.1) 13898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project || WKAppVersionCheckLessThan(@"com.adobe.InCopy", -1, 5.1) 13908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project || WKAppVersionCheckLessThan(@"com.adobe.InDesign", -1, 5.1) 13918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project || WKAppVersionCheckLessThan(@"com.adobe.Soundbooth", -1, 2); 13928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 13938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return needsQuirk; 13948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 13958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 13960bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch- (BOOL)_needsLinkElementTextCSSQuirk 13978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 13980bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch static BOOL needsQuirk = !WebKitLinkedOnOrAfter(WEBKIT_FIRST_VERSION_WITHOUT_LINK_ELEMENT_TEXT_CSS_QUIRK) 13990bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch && WKAppVersionCheckLessThan(@"com.e-frontier.shade10", -1, 10.6); 14000bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return needsQuirk; 14010bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 14028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 14030bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch- (BOOL)_needsKeyboardEventDisambiguationQuirks 14040bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 14050bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch static BOOL needsQuirks = !WebKitLinkedOnOrAfter(WEBKIT_FIRST_VERSION_WITH_IE_COMPATIBLE_KEYBOARD_EVENT_DISPATCH) && !applicationIsSafari(); 14068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return needsQuirks; 14078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 14088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 14090bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch- (BOOL)_needsFrameLoadDelegateRetainQuirk 14100bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 14110bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch static BOOL needsQuirk = WKAppVersionCheckLessThan(@"com.equinux.iSale5", -1, 5.6); 14120bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return needsQuirk; 14130bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 14140bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 1415bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1416bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen- (BOOL)_needsPreHTML5ParserQuirks 1417bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen{ 1418bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen // AOL Instant Messenger and Microsoft My Day contain markup incompatible 1419bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen // with the new HTML5 parser. If these applications were linked against a 1420bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen // version of WebKit prior to the introduction of the HTML5 parser, enable 1421bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen // parser quirks to maintain compatibility. For details, see 1422bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen // <https://bugs.webkit.org/show_bug.cgi?id=46134> and 1423bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen // <https://bugs.webkit.org/show_bug.cgi?id=46334>. 1424bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen static bool isApplicationNeedingParserQuirks = !WebKitLinkedOnOrAfter(WEBKIT_FIRST_VERSION_WITH_HTML5_PARSER) 1425bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen && (applicationIsAOLInstantMessenger() || applicationIsMicrosoftMyDay()); 1426f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 1427f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch // Mail.app must continue to display HTML email that contains quirky markup. 1428f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch static bool isAppleMail = applicationIsAppleMail(); 1429bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1430bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen return isApplicationNeedingParserQuirks 1431f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch || isAppleMail 1432bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen#if ENABLE(DASHBOARD_SUPPORT) 1433bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen // Pre-HTML5 parser quirks are required to remain compatible with many 1434bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen // Dashboard widgets. See <rdar://problem/8175982>. 1435bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen || (_private->page && _private->page->settings()->usesDashboardBackwardCompatibilityMode()) 1436bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen#endif 1437bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen || [[self preferences] usePreHTML5ParserQuirks]; 1438bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen} 1439bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 1440e14391e94c850b8bd03680c23b38978db68687a8John Reck- (BOOL)_needsUnrestrictedGetMatchedCSSRules 1441e14391e94c850b8bd03680c23b38978db68687a8John Reck{ 1442e14391e94c850b8bd03680c23b38978db68687a8John Reck static bool needsUnrestrictedGetMatchedCSSRules = !WebKitLinkedOnOrAfter(WEBKIT_FIRST_VERSION_WITH_GET_MATCHED_CSS_RULES_RESTRICTIONS) && applicationIsSafari(); 1443e14391e94c850b8bd03680c23b38978db68687a8John Reck return needsUnrestrictedGetMatchedCSSRules; 1444e14391e94c850b8bd03680c23b38978db68687a8John Reck} 1445e14391e94c850b8bd03680c23b38978db68687a8John Reck 14468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)_preferencesChangedNotification:(NSNotification *)notification 14478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 14488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project WebPreferences *preferences = (WebPreferences *)[notification object]; 14492daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch [self _preferencesChanged:preferences]; 14502daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch} 14512daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 14522daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch- (void)_preferencesChanged:(WebPreferences *)preferences 14532daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch{ 14548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ASSERT(preferences == [self preferences]); 14558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!_private->userAgentOverridden) 14568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project _private->userAgent = String(); 14578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 14588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Cache this value so we don't have to read NSUserDefaults on each page load 14598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project _private->useSiteSpecificSpoofing = [preferences _useSiteSpecificSpoofing]; 14608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 14618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Update corresponding WebCore Settings object. 14628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!_private->page) 14638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 14648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 14658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Settings* settings = _private->page->settings(); 14668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 14678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project settings->setCursiveFontFamily([preferences cursiveFontFamily]); 14688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project settings->setDefaultFixedFontSize([preferences defaultFixedFontSize]); 14698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project settings->setDefaultFontSize([preferences defaultFontSize]); 14708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project settings->setDefaultTextEncodingName([preferences defaultTextEncodingName]); 1471563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark settings->setUsesEncodingDetector([preferences usesEncodingDetector]); 14728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project settings->setFantasyFontFamily([preferences fantasyFontFamily]); 14738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project settings->setFixedFontFamily([preferences fixedFontFamily]); 14748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project settings->setForceFTPDirectoryListings([preferences _forceFTPDirectoryListings]); 14758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project settings->setFTPDirectoryTemplatePath([preferences _ftpDirectoryTemplatePath]); 14768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project settings->setLocalStorageDatabasePath([preferences _localStorageDatabasePath]); 14778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project settings->setJavaEnabled([preferences isJavaEnabled]); 14788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project settings->setJavaScriptEnabled([preferences isJavaScriptEnabled]); 1479563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark settings->setWebSecurityEnabled([preferences isWebSecurityEnabled]); 1480563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark settings->setAllowUniversalAccessFromFileURLs([preferences allowUniversalAccessFromFileURLs]); 1481692e5dbf12901edacf14812a6fae25462920af42Steve Block settings->setAllowFileAccessFromFileURLs([preferences allowFileAccessFromFileURLs]); 14828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project settings->setJavaScriptCanOpenWindowsAutomatically([preferences javaScriptCanOpenWindowsAutomatically]); 14838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project settings->setMinimumFontSize([preferences minimumFontSize]); 14848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project settings->setMinimumLogicalFontSize([preferences minimumLogicalFontSize]); 14858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project settings->setPluginsEnabled([preferences arePlugInsEnabled]); 1486dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#if ENABLE(DATABASE) 148706ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen AbstractDatabase::setIsAvailable([preferences databasesEnabled]); 1488dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#endif 1489635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project settings->setLocalStorageEnabled([preferences localStorageEnabled]); 1490231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block settings->setExperimentalNotificationsEnabled([preferences experimentalNotificationsEnabled]); 14918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project settings->setPrivateBrowsingEnabled([preferences privateBrowsingEnabled]); 14928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project settings->setSansSerifFontFamily([preferences sansSerifFontFamily]); 14938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project settings->setSerifFontFamily([preferences serifFontFamily]); 14948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project settings->setStandardFontFamily([preferences standardFontFamily]); 14958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project settings->setLoadsImagesAutomatically([preferences loadsImagesAutomatically]); 14962daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch settings->setLoadsSiteIconsIgnoringImageLoadingSetting([preferences loadsSiteIconsIgnoringImageLoadingPreference]); 14978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project settings->setShouldPrintBackgrounds([preferences shouldPrintBackgrounds]); 14988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project settings->setTextAreasAreResizable([preferences textAreasAreResizable]); 14998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project settings->setShrinksStandaloneImagesToFit([preferences shrinksStandaloneImagesToFit]); 15008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project settings->setEditableLinkBehavior(core([preferences editableLinkBehavior])); 1501545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch settings->setEditingBehaviorType(core([preferences editingBehavior])); 1502635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project settings->setTextDirectionSubmenuInclusionBehavior(core([preferences textDirectionSubmenuInclusionBehavior])); 15038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project settings->setDOMPasteAllowed([preferences isDOMPasteAllowed]); 15048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project settings->setUsesPageCache([self usesPageCache]); 15058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project settings->setShowsURLsInToolTips([preferences showsURLsInToolTips]); 15068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project settings->setDeveloperExtrasEnabled([preferences developerExtrasEnabled]); 15078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project settings->setAuthorAndUserStylesEnabled([preferences authorAndUserStylesEnabled]); 15088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project settings->setApplicationChromeMode([preferences applicationChromeModeEnabled]); 15098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if ([preferences userStyleSheetEnabled]) { 15108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSString* location = [[preferences userStyleSheetLocation] _web_originalDataAsString]; 1511d0825bca7fe65beaee391d30da42e937db621564Steve Block if ([location isEqualToString:@"apple-dashboard://stylesheet"]) 1512d0825bca7fe65beaee391d30da42e937db621564Steve Block location = @"file:///System/Library/PrivateFrameworks/DashboardClient.framework/Resources/widget.css"; 15138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project settings->setUserStyleSheetLocation([NSURL URLWithString:(location ? location : @"")]); 15148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } else 15158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project settings->setUserStyleSheetLocation([NSURL URLWithString:@""]); 15168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project settings->setNeedsAdobeFrameReloadingQuirk([self _needsAdobeFrameReloadingQuirk]); 15170bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch settings->setTreatsAnyTextCSSLinkAsStylesheet([self _needsLinkElementTextCSSQuirk]); 15188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project settings->setNeedsKeyboardEventDisambiguationQuirks([self _needsKeyboardEventDisambiguationQuirks]); 1519563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark settings->setNeedsLeopardMailQuirks(runningLeopardMail()); 1520563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark settings->setNeedsTigerMailQuirks(runningTigerMail()); 15218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project settings->setNeedsSiteSpecificQuirks(_private->useSiteSpecificSpoofing); 15228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project settings->setWebArchiveDebugModeEnabled([preferences webArchiveDebugModeEnabled]); 15230bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch settings->setLocalFileContentSniffingEnabled([preferences localFileContentSniffingEnabled]); 15248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project settings->setOfflineWebApplicationCacheEnabled([preferences offlineWebApplicationCacheEnabled]); 152521939df44de1705786c545cd1bf519d47250322dBen Murdoch settings->setJavaScriptCanAccessClipboard([preferences javaScriptCanAccessClipboard]); 15260bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch settings->setXSSAuditorEnabled([preferences isXSSAuditorEnabled]); 15275ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen settings->setEnforceCSSMIMETypeInNoQuirksMode(!WKAppVersionCheckLessThan(@"com.apple.iWeb", -1, 2.1)); 1528ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block settings->setDNSPrefetchingEnabled([preferences isDNSPrefetchingEnabled]); 1529dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1530dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // FIXME: Enabling accelerated compositing when WebGL is enabled causes tests to fail on Leopard which expect HW compositing to be disabled. 1531dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // Until we fix that, I will comment out the test (CFM) 153268513a70bcd92384395513322f1b801e7bf9c729Steve Block settings->setAcceleratedCompositingEnabled((coreVideoHas7228836Fix() || [preferences webGLEnabled] || 153368513a70bcd92384395513322f1b801e7bf9c729Steve Block [preferences accelerated2dCanvasEnabled]) && [preferences acceleratedCompositingEnabled]); 15342bde8e466a4451c7319e3a072d118917957d6554Steve Block settings->setAcceleratedDrawingEnabled([preferences acceleratedDrawingEnabled]); 15352bde8e466a4451c7319e3a072d118917957d6554Steve Block settings->setCanvasUsesAcceleratedDrawing([preferences canvasUsesAcceleratedDrawing]); 1536643ca7872b450ea4efacab6188849e5aac2ba161Steve Block settings->setShowDebugBorders([preferences showDebugBorders]); 1537643ca7872b450ea4efacab6188849e5aac2ba161Steve Block settings->setShowRepaintCounter([preferences showRepaintCounter]); 1538231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block settings->setPluginAllowedRunTime([preferences pluginAllowedRunTime]); 1539ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch settings->setWebAudioEnabled([preferences webAudioEnabled]); 1540231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block settings->setWebGLEnabled([preferences webGLEnabled]); 154168513a70bcd92384395513322f1b801e7bf9c729Steve Block settings->setAccelerated2dCanvasEnabled([preferences accelerated2dCanvasEnabled]); 1542d0825bca7fe65beaee391d30da42e937db621564Steve Block settings->setLoadDeferringEnabled(shouldEnableLoadDeferring()); 1543dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block settings->setFrameFlatteningEnabled([preferences isFrameFlatteningEnabled]); 1544a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch settings->setSpatialNavigationEnabled([preferences isSpatialNavigationEnabled]); 1545545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch settings->setPaginateDuringLayoutEnabled([preferences paginateDuringLayoutEnabled]); 15465ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen#if ENABLE(FULLSCREEN_API) 15475ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen settings->setFullScreenEnabled([preferences fullScreenEnabled]); 15485ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen#endif 1549f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch#if !defined(BUILDING_ON_TIGER) && !defined(BUILDING_ON_LEOPARD) 1550f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch // Asynchronous spell checking API is available for 10.6 or later. 1551f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch settings->setAsynchronousSpellCheckingEnabled([preferences asynchronousSpellCheckingEnabled]); 1552f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch#endif 1553967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch settings->setMemoryInfoEnabled([preferences memoryInfoEnabled]); 1554bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen settings->setHyperlinkAuditingEnabled([preferences hyperlinkAuditingEnabled]); 1555bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen settings->setUsePreHTML5ParserQuirks([self _needsPreHTML5ParserQuirks]); 15562bde8e466a4451c7319e3a072d118917957d6554Steve Block settings->setUseQuickLookResourceCachingQuirks([preferences useQuickLookResourceCachingQuirks]); 1557e14391e94c850b8bd03680c23b38978db68687a8John Reck settings->setCrossOriginCheckInGetMatchedCSSRulesDisabled([self _needsUnrestrictedGetMatchedCSSRules]); 15582bde8e466a4451c7319e3a072d118917957d6554Steve Block settings->setInteractiveFormValidationEnabled([self interactiveFormValidationEnabled]); 15592bde8e466a4451c7319e3a072d118917957d6554Steve Block settings->setValidationMessageTimerMagnification([self validationMessageTimerMagnification]); 1560db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block 1561db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block // Application Cache Preferences are stored on the global cache storage manager, not in Settings. 1562db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block [WebApplicationCache setDefaultOriginQuota:[preferences applicationCacheDefaultOriginQuota]]; 156368513a70bcd92384395513322f1b801e7bf9c729Steve Block 156468513a70bcd92384395513322f1b801e7bf9c729Steve Block BOOL zoomsTextOnly = [preferences zoomsTextOnly]; 156568513a70bcd92384395513322f1b801e7bf9c729Steve Block if (_private->zoomsTextOnly != zoomsTextOnly) 156668513a70bcd92384395513322f1b801e7bf9c729Steve Block [self _setZoomMultiplier:_private->zoomMultiplier isTextOnly:zoomsTextOnly]; 15678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 15688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 15698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatic inline IMP getMethod(id o, SEL s) 15708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 15718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return [o respondsToSelector:s] ? [o methodForSelector:s] : 0; 15728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 15738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 15748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)_cacheResourceLoadDelegateImplementations 15758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 15768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project WebResourceDelegateImplementationCache *cache = &_private->resourceLoadDelegateImplementations; 15778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project id delegate = _private->resourceProgressDelegate; 15788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 15798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!delegate) { 15808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bzero(cache, sizeof(WebResourceDelegateImplementationCache)); 15818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 15828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 15838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 15848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project cache->didCancelAuthenticationChallengeFunc = getMethod(delegate, @selector(webView:resource:didReceiveAuthenticationChallenge:fromDataSource:)); 15858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project cache->didFailLoadingWithErrorFromDataSourceFunc = getMethod(delegate, @selector(webView:resource:didFailLoadingWithError:fromDataSource:)); 15868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project cache->didFinishLoadingFromDataSourceFunc = getMethod(delegate, @selector(webView:resource:didFinishLoadingFromDataSource:)); 15878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project cache->didLoadResourceFromMemoryCacheFunc = getMethod(delegate, @selector(webView:didLoadResourceFromMemoryCache:response:length:fromDataSource:)); 15888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project cache->didReceiveAuthenticationChallengeFunc = getMethod(delegate, @selector(webView:resource:didReceiveAuthenticationChallenge:fromDataSource:)); 158921939df44de1705786c545cd1bf519d47250322dBen Murdoch#if USE(PROTECTION_SPACE_AUTH_CALLBACK) 159021939df44de1705786c545cd1bf519d47250322dBen Murdoch cache->canAuthenticateAgainstProtectionSpaceFunc = getMethod(delegate, @selector(webView:resource:canAuthenticateAgainstProtectionSpace:forDataSource:)); 159121939df44de1705786c545cd1bf519d47250322dBen Murdoch#endif 15928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project cache->didReceiveContentLengthFunc = getMethod(delegate, @selector(webView:resource:didReceiveContentLength:fromDataSource:)); 15938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project cache->didReceiveResponseFunc = getMethod(delegate, @selector(webView:resource:didReceiveResponse:fromDataSource:)); 15948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project cache->identifierForRequestFunc = getMethod(delegate, @selector(webView:identifierForInitialRequest:fromDataSource:)); 15958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project cache->plugInFailedWithErrorFunc = getMethod(delegate, @selector(webView:plugInFailedWithError:dataSource:)); 15968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project cache->willCacheResponseFunc = getMethod(delegate, @selector(webView:resource:willCacheResponse:fromDataSource:)); 15978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project cache->willSendRequestFunc = getMethod(delegate, @selector(webView:resource:willSendRequest:redirectResponse:fromDataSource:)); 1598635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project cache->shouldUseCredentialStorageFunc = getMethod(delegate, @selector(webView:resource:shouldUseCredentialStorageForDataSource:)); 159981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch cache->shouldPaintBrokenImageForURLFunc = getMethod(delegate, @selector(webView:shouldPaintBrokenImageForURL:)); 16008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 16018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 16028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)_cacheFrameLoadDelegateImplementations 16038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 16048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project WebFrameLoadDelegateImplementationCache *cache = &_private->frameLoadDelegateImplementations; 16058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project id delegate = _private->frameLoadDelegate; 16068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 16078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!delegate) { 16088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bzero(cache, sizeof(WebFrameLoadDelegateImplementationCache)); 16098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 16108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 16118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 16128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project cache->didCancelClientRedirectForFrameFunc = getMethod(delegate, @selector(webView:didCancelClientRedirectForFrame:)); 16138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project cache->didChangeLocationWithinPageForFrameFunc = getMethod(delegate, @selector(webView:didChangeLocationWithinPageForFrame:)); 1614643ca7872b450ea4efacab6188849e5aac2ba161Steve Block cache->didPushStateWithinPageForFrameFunc = getMethod(delegate, @selector(webView:didPushStateWithinPageForFrame:)); 1615643ca7872b450ea4efacab6188849e5aac2ba161Steve Block cache->didReplaceStateWithinPageForFrameFunc = getMethod(delegate, @selector(webView:didReplaceStateWithinPageForFrame:)); 1616643ca7872b450ea4efacab6188849e5aac2ba161Steve Block cache->didPopStateWithinPageForFrameFunc = getMethod(delegate, @selector(webView:didPopStateWithinPageForFrame:)); 16178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project cache->didClearWindowObjectForFrameFunc = getMethod(delegate, @selector(webView:didClearWindowObject:forFrame:)); 1618643ca7872b450ea4efacab6188849e5aac2ba161Steve Block cache->didClearWindowObjectForFrameInScriptWorldFunc = getMethod(delegate, @selector(webView:didClearWindowObjectForFrame:inScriptWorld:)); 16190bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch cache->didClearInspectorWindowObjectForFrameFunc = getMethod(delegate, @selector(webView:didClearInspectorWindowObject:forFrame:)); 16208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project cache->didCommitLoadForFrameFunc = getMethod(delegate, @selector(webView:didCommitLoadForFrame:)); 16218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project cache->didFailLoadWithErrorForFrameFunc = getMethod(delegate, @selector(webView:didFailLoadWithError:forFrame:)); 16228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project cache->didFailProvisionalLoadWithErrorForFrameFunc = getMethod(delegate, @selector(webView:didFailProvisionalLoadWithError:forFrame:)); 16238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project cache->didFinishDocumentLoadForFrameFunc = getMethod(delegate, @selector(webView:didFinishDocumentLoadForFrame:)); 16248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project cache->didFinishLoadForFrameFunc = getMethod(delegate, @selector(webView:didFinishLoadForFrame:)); 16258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project cache->didFirstLayoutInFrameFunc = getMethod(delegate, @selector(webView:didFirstLayoutInFrame:)); 1626635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project cache->didFirstVisuallyNonEmptyLayoutInFrameFunc = getMethod(delegate, @selector(webView:didFirstVisuallyNonEmptyLayoutInFrame:)); 16278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project cache->didHandleOnloadEventsForFrameFunc = getMethod(delegate, @selector(webView:didHandleOnloadEventsForFrame:)); 16288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project cache->didReceiveIconForFrameFunc = getMethod(delegate, @selector(webView:didReceiveIcon:forFrame:)); 16298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project cache->didReceiveServerRedirectForProvisionalLoadForFrameFunc = getMethod(delegate, @selector(webView:didReceiveServerRedirectForProvisionalLoadForFrame:)); 16308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project cache->didReceiveTitleForFrameFunc = getMethod(delegate, @selector(webView:didReceiveTitle:forFrame:)); 16318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project cache->didStartProvisionalLoadForFrameFunc = getMethod(delegate, @selector(webView:didStartProvisionalLoadForFrame:)); 16328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project cache->willCloseFrameFunc = getMethod(delegate, @selector(webView:willCloseFrame:)); 16338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project cache->willPerformClientRedirectToURLDelayFireDateForFrameFunc = getMethod(delegate, @selector(webView:willPerformClientRedirectToURL:delay:fireDate:forFrame:)); 16348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project cache->windowScriptObjectAvailableFunc = getMethod(delegate, @selector(webView:windowScriptObjectAvailable:)); 1635231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block cache->didDisplayInsecureContentFunc = getMethod(delegate, @selector(webViewDidDisplayInsecureContent:)); 1636231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block cache->didRunInsecureContentFunc = getMethod(delegate, @selector(webView:didRunInsecureContent:)); 16378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 16388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1639563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark- (void)_cacheScriptDebugDelegateImplementations 1640563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark{ 1641563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark WebScriptDebugDelegateImplementationCache *cache = &_private->scriptDebugDelegateImplementations; 1642563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark id delegate = _private->scriptDebugDelegate; 1643563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 1644563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (!delegate) { 1645563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark bzero(cache, sizeof(WebScriptDebugDelegateImplementationCache)); 1646563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return; 1647563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark } 1648563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 1649563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark cache->didParseSourceFunc = getMethod(delegate, @selector(webView:didParseSource:baseLineNumber:fromURL:sourceId:forWebFrame:)); 1650563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (cache->didParseSourceFunc) 1651563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark cache->didParseSourceExpectsBaseLineNumber = YES; 1652ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch else { 1653ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch cache->didParseSourceExpectsBaseLineNumber = NO; 1654563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark cache->didParseSourceFunc = getMethod(delegate, @selector(webView:didParseSource:fromURL:sourceId:forWebFrame:)); 1655ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch } 1656563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 1657563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark cache->failedToParseSourceFunc = getMethod(delegate, @selector(webView:failedToParseSource:baseLineNumber:fromURL:withError:forWebFrame:)); 1658563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark cache->didEnterCallFrameFunc = getMethod(delegate, @selector(webView:didEnterCallFrame:sourceId:line:forWebFrame:)); 1659563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark cache->willExecuteStatementFunc = getMethod(delegate, @selector(webView:willExecuteStatement:sourceId:line:forWebFrame:)); 1660563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark cache->willLeaveCallFrameFunc = getMethod(delegate, @selector(webView:willLeaveCallFrame:sourceId:line:forWebFrame:)); 1661ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch 1662ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch cache->exceptionWasRaisedFunc = getMethod(delegate, @selector(webView:exceptionWasRaised:hasHandler:sourceId:line:forWebFrame:)); 1663ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch if (cache->exceptionWasRaisedFunc) 1664ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch cache->exceptionWasRaisedExpectsHasHandlerFlag = YES; 1665ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch else { 1666ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch cache->exceptionWasRaisedExpectsHasHandlerFlag = NO; 1667ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch cache->exceptionWasRaisedFunc = getMethod(delegate, @selector(webView:exceptionWasRaised:sourceId:line:forWebFrame:)); 1668ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch } 1669563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 1670563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 1671231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block- (void)_cacheHistoryDelegateImplementations 1672231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block{ 1673231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block WebHistoryDelegateImplementationCache *cache = &_private->historyDelegateImplementations; 1674231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block id delegate = _private->historyDelegate; 1675231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 1676231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block if (!delegate) { 1677231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block bzero(cache, sizeof(WebHistoryDelegateImplementationCache)); 1678231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block return; 1679231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block } 1680231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 1681231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block cache->navigatedFunc = getMethod(delegate, @selector(webView:didNavigateWithNavigationData:inFrame:)); 1682231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block cache->clientRedirectFunc = getMethod(delegate, @selector(webView:didPerformClientRedirectFromURL:toURL:inFrame:)); 1683231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block cache->serverRedirectFunc = getMethod(delegate, @selector(webView:didPerformServerRedirectFromURL:toURL:inFrame:)); 1684231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block cache->setTitleFunc = getMethod(delegate, @selector(webView:updateHistoryTitle:forURL:)); 1685cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block cache->populateVisitedLinksFunc = getMethod(delegate, @selector(populateVisitedLinksForWebView:)); 1686231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block} 1687231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 16888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (id)_policyDelegateForwarder 16898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 16908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!_private->policyDelegateForwarder) 16918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project _private->policyDelegateForwarder = [[_WebSafeForwarder alloc] initWithTarget:_private->policyDelegate defaultTarget:[WebDefaultPolicyDelegate sharedPolicyDelegate] catchExceptions:_private->catchesDelegateExceptions]; 16928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return _private->policyDelegateForwarder; 16938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 16948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 16958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (id)_UIDelegateForwarder 16968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 16978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!_private->UIDelegateForwarder) 16988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project _private->UIDelegateForwarder = [[_WebSafeForwarder alloc] initWithTarget:_private->UIDelegate defaultTarget:[WebDefaultUIDelegate sharedUIDelegate] catchExceptions:_private->catchesDelegateExceptions]; 16998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return _private->UIDelegateForwarder; 17008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 17018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 17028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (id)_editingDelegateForwarder 17038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 17048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // This can be called during window deallocation by QTMovieView in the QuickTime Cocoa Plug-in. 17058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Not sure if that is a bug or not. 17068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!_private) 17078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return nil; 17088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 17098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!_private->editingDelegateForwarder) 17108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project _private->editingDelegateForwarder = [[_WebSafeForwarder alloc] initWithTarget:_private->editingDelegate defaultTarget:[WebDefaultEditingDelegate sharedEditingDelegate] catchExceptions:_private->catchesDelegateExceptions]; 17118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return _private->editingDelegateForwarder; 17128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 17138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 17148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)_closeWindow 17158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 17168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [[self _UIDelegateForwarder] webViewClose:self]; 17178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 17188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1719563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark+ (void)_unregisterViewClassAndRepresentationClassForMIMEType:(NSString *)MIMEType 17208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 17218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [[WebFrameView _viewTypesAllowImageTypeOmission:NO] removeObjectForKey:MIMEType]; 17228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [[WebDataSource _repTypesAllowImageTypeOmission:NO] removeObjectForKey:MIMEType]; 17238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 17248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // FIXME: We also need to maintain MIMEType registrations (which can be dynamically changed) 17258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // in the WebCore MIMEType registry. For now we're doing this in a safe, limited manner 17268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // to fix <rdar://problem/5372989> - a future revamping of the entire system is neccesary for future robustness 17278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project MIMETypeRegistry::getSupportedNonImageMIMETypes().remove(MIMEType); 17288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 17298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1730563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark+ (void)_registerViewClass:(Class)viewClass representationClass:(Class)representationClass forURLScheme:(NSString *)URLScheme 17318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 17328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSString *MIMEType = [self _generatedMIMETypeForURLScheme:URLScheme]; 17338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [self registerViewClass:viewClass representationClass:representationClass forMIMEType:MIMEType]; 17348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 17358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // FIXME: We also need to maintain MIMEType registrations (which can be dynamically changed) 17368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // in the WebCore MIMEType registry. For now we're doing this in a safe, limited manner 17378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // to fix <rdar://problem/5372989> - a future revamping of the entire system is neccesary for future robustness 17388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if ([viewClass class] == [WebHTMLView class]) 17398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project MIMETypeRegistry::getSupportedNonImageMIMETypes().add(MIMEType); 17408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 17418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // This is used to make _representationExistsForURLScheme faster. 17428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Without this set, we'd have to create the MIME type each time. 17438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (schemesWithRepresentationsSet == nil) { 17448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project schemesWithRepresentationsSet = [[NSMutableSet alloc] init]; 17458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 17468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [schemesWithRepresentationsSet addObject:[[[URLScheme lowercaseString] copy] autorelease]]; 17478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 17488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 17498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project+ (NSString *)_generatedMIMETypeForURLScheme:(NSString *)URLScheme 17508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 17518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return [@"x-apple-web-kit/" stringByAppendingString:[URLScheme lowercaseString]]; 17528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 17538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 17548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project+ (BOOL)_representationExistsForURLScheme:(NSString *)URLScheme 17558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 17568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return [schemesWithRepresentationsSet containsObject:[URLScheme lowercaseString]]; 17578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 17588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 17598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project+ (BOOL)_canHandleRequest:(NSURLRequest *)request forMainFrame:(BOOL)forMainFrame 17608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 17618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // FIXME: If <rdar://problem/5217309> gets fixed, this check can be removed. 17628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!request) 17638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return NO; 17648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 17658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if ([NSURLConnection canHandleRequest:request]) 17668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return YES; 17678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 17688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSString *scheme = [[request URL] scheme]; 17698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 17708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Representations for URL schemes work at the top level. 17718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (forMainFrame && [self _representationExistsForURLScheme:scheme]) 17728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return YES; 17738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 17748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return [scheme _webkit_isCaseInsensitiveEqualToString:@"applewebdata"]; 17758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 17768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 17778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project+ (BOOL)_canHandleRequest:(NSURLRequest *)request 17788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 17798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return [self _canHandleRequest:request forMainFrame:YES]; 17808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 17818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 17828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project+ (NSString *)_decodeData:(NSData *)data 17838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 17848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project HTMLNames::init(); // this method is used for importing bookmarks at startup, so HTMLNames are likely to be uninitialized yet 17858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project RefPtr<TextResourceDecoder> decoder = TextResourceDecoder::create("text/html"); // bookmark files are HTML 17868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project String result = decoder->decode(static_cast<const char*>([data bytes]), [data length]); 17878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project result += decoder->flush(); 17888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return result; 17898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 17908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 17918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)_pushPerformingProgrammaticFocus 17928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 17938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project _private->programmaticFocusCount++; 17948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 17958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 17968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)_popPerformingProgrammaticFocus 17978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 17988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project _private->programmaticFocusCount--; 17998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 18008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 18018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (BOOL)_isPerformingProgrammaticFocus 18028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 18038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return _private->programmaticFocusCount != 0; 18048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 18058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 18068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)_didChangeValueForKey: (NSString *)key 18078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 18088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project LOG (Bindings, "calling didChangeValueForKey: %@", key); 18098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [self didChangeValueForKey: key]; 18108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 18118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 18128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)_willChangeValueForKey: (NSString *)key 18138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 18148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project LOG (Bindings, "calling willChangeValueForKey: %@", key); 18158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [self willChangeValueForKey: key]; 18168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 18178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 18188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project+ (BOOL)automaticallyNotifiesObserversForKey:(NSString *)key { 18198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project static NSSet *manualNotifyKeys = nil; 18208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!manualNotifyKeys) 18218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project manualNotifyKeys = [[NSSet alloc] initWithObjects:_WebMainFrameURLKey, _WebIsLoadingKey, _WebEstimatedProgressKey, 1822563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark _WebCanGoBackKey, _WebCanGoForwardKey, _WebMainFrameTitleKey, _WebMainFrameIconKey, _WebMainFrameDocumentKey, 1823563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark nil]; 18248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if ([manualNotifyKeys containsObject:key]) 18258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return NO; 18268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return YES; 18278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 18288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 18298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (NSArray *)_declaredKeys { 18308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project static NSArray *declaredKeys = nil; 18318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!declaredKeys) 18328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project declaredKeys = [[NSArray alloc] initWithObjects:_WebMainFrameURLKey, _WebIsLoadingKey, _WebEstimatedProgressKey, 18338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project _WebCanGoBackKey, _WebCanGoForwardKey, _WebMainFrameTitleKey, _WebMainFrameIconKey, _WebMainFrameDocumentKey, nil]; 18348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return declaredKeys; 18358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 18368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 18378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)setObservationInfo:(void *)info 18388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 18398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project _private->observationInfo = info; 18408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 18418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 18428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void *)observationInfo 18438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 18448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return _private->observationInfo; 18458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 18468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 18478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)_willChangeBackForwardKeys 18488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 18498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [self _willChangeValueForKey: _WebCanGoBackKey]; 18508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [self _willChangeValueForKey: _WebCanGoForwardKey]; 18518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 18528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 18538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)_didChangeBackForwardKeys 18548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 18558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [self _didChangeValueForKey: _WebCanGoBackKey]; 18568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [self _didChangeValueForKey: _WebCanGoForwardKey]; 18578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 18588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 18598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)_didStartProvisionalLoadForFrame:(WebFrame *)frame 18608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 18618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [self _willChangeBackForwardKeys]; 18628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (frame == [self mainFrame]){ 18638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Force an observer update by sending a will/did. 18648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [self _willChangeValueForKey: _WebIsLoadingKey]; 18658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [self _didChangeValueForKey: _WebIsLoadingKey]; 18668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 18678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [self _willChangeValueForKey: _WebMainFrameURLKey]; 18688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 18698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 18708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [NSApp setWindowsNeedUpdate:YES]; 18718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 18728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 18738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)_didCommitLoadForFrame:(WebFrame *)frame 18748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 18758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (frame == [self mainFrame]) 18768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [self _didChangeValueForKey: _WebMainFrameURLKey]; 18778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [NSApp setWindowsNeedUpdate:YES]; 18788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 18798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 18808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)_didFinishLoadForFrame:(WebFrame *)frame 18818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 18828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [self _didChangeBackForwardKeys]; 18838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (frame == [self mainFrame]){ 18848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Force an observer update by sending a will/did. 18858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [self _willChangeValueForKey: _WebIsLoadingKey]; 18868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [self _didChangeValueForKey: _WebIsLoadingKey]; 18878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 18888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [NSApp setWindowsNeedUpdate:YES]; 18898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 18908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 18918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)_didFailLoadWithError:(NSError *)error forFrame:(WebFrame *)frame 18928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 18938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [self _didChangeBackForwardKeys]; 18948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (frame == [self mainFrame]){ 18958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Force an observer update by sending a will/did. 18968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [self _willChangeValueForKey: _WebIsLoadingKey]; 18978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [self _didChangeValueForKey: _WebIsLoadingKey]; 18988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 18998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [NSApp setWindowsNeedUpdate:YES]; 19008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 19018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 19028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)_didFailProvisionalLoadWithError:(NSError *)error forFrame:(WebFrame *)frame 19038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 19048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [self _didChangeBackForwardKeys]; 19058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (frame == [self mainFrame]){ 19068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Force an observer update by sending a will/did. 19078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [self _willChangeValueForKey: _WebIsLoadingKey]; 19088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [self _didChangeValueForKey: _WebIsLoadingKey]; 19098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 19108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [self _didChangeValueForKey: _WebMainFrameURLKey]; 19118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 19128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [NSApp setWindowsNeedUpdate:YES]; 19138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 19148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 19158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (NSCachedURLResponse *)_cachedResponseForURL:(NSURL *)URL 19168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 19178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:URL]; 19188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [request _web_setHTTPUserAgent:[self userAgentForURL:URL]]; 191981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch NSCachedURLResponse *cachedResponse; 192081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch#if USE(CFURLSTORAGESESSIONS) 192181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch if (CFURLStorageSessionRef storageSession = ResourceHandle::privateBrowsingStorageSession()) 192281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch cachedResponse = WKCachedResponseForRequest(storageSession, request); 192381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch else 192481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch#endif 192581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch cachedResponse = [[NSURLCache sharedURLCache] cachedResponseForRequest:request]; 19268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [request release]; 19278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return cachedResponse; 19288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 19298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 19308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)_writeImageForElement:(NSDictionary *)element withPasteboardTypes:(NSArray *)types toPasteboard:(NSPasteboard *)pasteboard 19318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 19328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSURL *linkURL = [element objectForKey:WebElementLinkURLKey]; 19338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project DOMElement *domElement = [element objectForKey:WebElementDOMNodeKey]; 19348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [pasteboard _web_writeImage:(NSImage *)(domElement ? nil : [element objectForKey:WebElementImageKey]) 19358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project element:domElement 19368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project URL:linkURL ? linkURL : (NSURL *)[element objectForKey:WebElementImageURLKey] 19378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project title:[element objectForKey:WebElementImageAltStringKey] 19388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project archive:[[element objectForKey:WebElementDOMNodeKey] webArchive] 19398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project types:types 19408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project source:nil]; 19418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 19428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 19438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)_writeLinkElement:(NSDictionary *)element withPasteboardTypes:(NSArray *)types toPasteboard:(NSPasteboard *)pasteboard 19448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 19458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [pasteboard _web_writeURL:[element objectForKey:WebElementLinkURLKey] 19468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project andTitle:[element objectForKey:WebElementLinkLabelKey] 19478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project types:types]; 19488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 19498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 19508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)_setInitiatedDrag:(BOOL)initiatedDrag 19518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 19528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!_private->page) 19538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 19548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project _private->page->dragController()->setDidInitiateDrag(initiatedDrag); 19558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 19568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 19578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if ENABLE(DASHBOARD_SUPPORT) 19588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 19598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define DASHBOARD_CONTROL_LABEL @"control" 19608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 19610bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch- (void)_addControlRect:(NSRect)bounds clip:(NSRect)clip fromView:(NSView *)view toDashboardRegions:(NSMutableDictionary *)regions 19620bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 19630bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch NSRect adjustedBounds = bounds; 19640bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch adjustedBounds.origin = [self convertPoint:bounds.origin fromView:view]; 19650bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch adjustedBounds.origin.y = [self bounds].size.height - adjustedBounds.origin.y; 19660bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch adjustedBounds.size = bounds.size; 19670bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 19680bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch NSRect adjustedClip; 19690bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch adjustedClip.origin = [self convertPoint:clip.origin fromView:view]; 19700bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch adjustedClip.origin.y = [self bounds].size.height - adjustedClip.origin.y; 19710bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch adjustedClip.size = clip.size; 19720bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 19730bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch WebDashboardRegion *region = [[WebDashboardRegion alloc] initWithRect:adjustedBounds 19740bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch clip:adjustedClip type:WebDashboardRegionTypeScrollerRectangle]; 19750bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch NSMutableArray *scrollerRegions = [regions objectForKey:DASHBOARD_CONTROL_LABEL]; 19760bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!scrollerRegions) { 19770bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch scrollerRegions = [[NSMutableArray alloc] init]; 19780bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch [regions setObject:scrollerRegions forKey:DASHBOARD_CONTROL_LABEL]; 19790bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch [scrollerRegions release]; 19800bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch } 19810bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch [scrollerRegions addObject:region]; 19820bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch [region release]; 19830bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 19840bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 19850bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch- (void)_addScrollerDashboardRegionsForFrameView:(FrameView*)frameView dashboardRegions:(NSMutableDictionary *)regions 19860bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 19870bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch NSView *documentView = [[kit(frameView->frame()) frameView] documentView]; 19880bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 19890bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch const HashSet<RefPtr<Widget> >* children = frameView->children(); 19900bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch HashSet<RefPtr<Widget> >::const_iterator end = children->end(); 19910bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch for (HashSet<RefPtr<Widget> >::const_iterator it = children->begin(); it != end; ++it) { 19920bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch Widget* widget = (*it).get(); 19930bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (widget->isFrameView()) { 19940bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch [self _addScrollerDashboardRegionsForFrameView:static_cast<FrameView*>(widget) dashboardRegions:regions]; 19950bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch continue; 19960bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch } 19970bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 19980bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!widget->isScrollbar()) 19990bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch continue; 20000bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 20010bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch // FIXME: This should really pass an appropriate clip, but our first try got it wrong, and 20020bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch // it's not common to need this to be correct in Dashboard widgets. 20030bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch NSRect bounds = widget->frameRect(); 20040bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch [self _addControlRect:bounds clip:bounds fromView:documentView toDashboardRegions:regions]; 20050bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch } 20060bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 20070bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 20088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)_addScrollerDashboardRegions:(NSMutableDictionary *)regions from:(NSArray *)views 20098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 20100bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch // Add scroller regions for NSScroller and WebCore scrollbars 20110bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch NSUInteger count = [views count]; 20120bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch for (NSUInteger i = 0; i < count; i++) { 20130bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch NSView *view = [views objectAtIndex:i]; 20148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 20150bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if ([view isKindOfClass:[WebHTMLView class]]) { 20160bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (Frame* coreFrame = core([(WebHTMLView*)view _frame])) { 20170bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (FrameView* coreView = coreFrame->view()) 20180bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch [self _addScrollerDashboardRegionsForFrameView:coreView dashboardRegions:regions]; 20198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 20200bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch } else if ([view isKindOfClass:[NSScroller class]]) { 20210bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch // AppKit places absent scrollers at -100,-100 20220bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if ([view frame].origin.y < 0) 20230bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch continue; 20240bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch [self _addControlRect:[view bounds] clip:[view visibleRect] fromView:view toDashboardRegions:regions]; 20258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 20260bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch [self _addScrollerDashboardRegions:regions from:[view subviews]]; 20278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 20288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 20298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 20308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)_addScrollerDashboardRegions:(NSMutableDictionary *)regions 20318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 20328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [self _addScrollerDashboardRegions:regions from:[self subviews]]; 20338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 20348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 20358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (NSDictionary *)_dashboardRegions 20368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 20378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Only return regions from main frame. 20380bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch Frame* mainFrame = [self _mainCoreFrame]; 20398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!mainFrame) 20408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return nil; 204168513a70bcd92384395513322f1b801e7bf9c729Steve Block 204268513a70bcd92384395513322f1b801e7bf9c729Steve Block const Vector<DashboardRegionValue>& regions = mainFrame->document()->dashboardRegions(); 204368513a70bcd92384395513322f1b801e7bf9c729Steve Block size_t size = regions.size(); 204468513a70bcd92384395513322f1b801e7bf9c729Steve Block 204568513a70bcd92384395513322f1b801e7bf9c729Steve Block NSMutableDictionary *webRegions = [NSMutableDictionary dictionaryWithCapacity:size]; 204668513a70bcd92384395513322f1b801e7bf9c729Steve Block for (size_t i = 0; i < size; i++) { 204768513a70bcd92384395513322f1b801e7bf9c729Steve Block const DashboardRegionValue& region = regions[i]; 204868513a70bcd92384395513322f1b801e7bf9c729Steve Block 204968513a70bcd92384395513322f1b801e7bf9c729Steve Block if (region.type == StyleDashboardRegion::None) 205068513a70bcd92384395513322f1b801e7bf9c729Steve Block continue; 205168513a70bcd92384395513322f1b801e7bf9c729Steve Block 205268513a70bcd92384395513322f1b801e7bf9c729Steve Block NSString *label = region.label; 205368513a70bcd92384395513322f1b801e7bf9c729Steve Block WebDashboardRegionType type = WebDashboardRegionTypeNone; 205468513a70bcd92384395513322f1b801e7bf9c729Steve Block if (region.type == StyleDashboardRegion::Circle) 205568513a70bcd92384395513322f1b801e7bf9c729Steve Block type = WebDashboardRegionTypeCircle; 205668513a70bcd92384395513322f1b801e7bf9c729Steve Block else if (region.type == StyleDashboardRegion::Rectangle) 205768513a70bcd92384395513322f1b801e7bf9c729Steve Block type = WebDashboardRegionTypeRectangle; 205868513a70bcd92384395513322f1b801e7bf9c729Steve Block NSMutableArray *regionValues = [webRegions objectForKey:label]; 205968513a70bcd92384395513322f1b801e7bf9c729Steve Block if (!regionValues) { 206068513a70bcd92384395513322f1b801e7bf9c729Steve Block regionValues = [[NSMutableArray alloc] initWithCapacity:1]; 206168513a70bcd92384395513322f1b801e7bf9c729Steve Block [webRegions setObject:regionValues forKey:label]; 206268513a70bcd92384395513322f1b801e7bf9c729Steve Block [regionValues release]; 206368513a70bcd92384395513322f1b801e7bf9c729Steve Block } 206468513a70bcd92384395513322f1b801e7bf9c729Steve Block 206568513a70bcd92384395513322f1b801e7bf9c729Steve Block WebDashboardRegion *webRegion = [[WebDashboardRegion alloc] initWithRect:region.bounds clip:region.clip type:type]; 206668513a70bcd92384395513322f1b801e7bf9c729Steve Block [regionValues addObject:webRegion]; 206768513a70bcd92384395513322f1b801e7bf9c729Steve Block [webRegion release]; 206868513a70bcd92384395513322f1b801e7bf9c729Steve Block } 206968513a70bcd92384395513322f1b801e7bf9c729Steve Block 207068513a70bcd92384395513322f1b801e7bf9c729Steve Block [self _addScrollerDashboardRegions:webRegions]; 207168513a70bcd92384395513322f1b801e7bf9c729Steve Block 207268513a70bcd92384395513322f1b801e7bf9c729Steve Block return webRegions; 20738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 20748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 20758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)_setDashboardBehavior:(WebDashboardBehavior)behavior to:(BOOL)flag 20768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 20778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // FIXME: Remove this blanket assignment once Dashboard and Dashcode implement 20788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // specific support for the backward compatibility mode flag. 20798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (behavior == WebDashboardBehaviorAllowWheelScrolling && flag == NO && _private->page) 20808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project _private->page->settings()->setUsesDashboardBackwardCompatibilityMode(true); 20818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 20828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project switch (behavior) { 20838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case WebDashboardBehaviorAlwaysSendMouseEventsToAllWindows: { 20848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project _private->dashboardBehaviorAlwaysSendMouseEventsToAllWindows = flag; 20858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project break; 20868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 20878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case WebDashboardBehaviorAlwaysSendActiveNullEventsToPlugIns: { 20888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project _private->dashboardBehaviorAlwaysSendActiveNullEventsToPlugIns = flag; 20898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project break; 20908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 20918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case WebDashboardBehaviorAlwaysAcceptsFirstMouse: { 20928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project _private->dashboardBehaviorAlwaysAcceptsFirstMouse = flag; 20938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project break; 20948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 20958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case WebDashboardBehaviorAllowWheelScrolling: { 20968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project _private->dashboardBehaviorAllowWheelScrolling = flag; 20978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project break; 20988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 20998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case WebDashboardBehaviorUseBackwardCompatibilityMode: { 21008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (_private->page) 21018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project _private->page->settings()->setUsesDashboardBackwardCompatibilityMode(flag); 21028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project break; 21038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 21048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 2105bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 2106bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen // Pre-HTML5 parser quirks should be enabled if Dashboard is in backward 2107bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen // compatibility mode. See <rdar://problem/8175982>. 2108bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (_private->page) 2109bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen _private->page->settings()->setUsePreHTML5ParserQuirks([self _needsPreHTML5ParserQuirks]); 21108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 21118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 21128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (BOOL)_dashboardBehavior:(WebDashboardBehavior)behavior 21138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 21148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project switch (behavior) { 21158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case WebDashboardBehaviorAlwaysSendMouseEventsToAllWindows: { 21168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return _private->dashboardBehaviorAlwaysSendMouseEventsToAllWindows; 21178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 21188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case WebDashboardBehaviorAlwaysSendActiveNullEventsToPlugIns: { 21198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return _private->dashboardBehaviorAlwaysSendActiveNullEventsToPlugIns; 21208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 21218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case WebDashboardBehaviorAlwaysAcceptsFirstMouse: { 21228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return _private->dashboardBehaviorAlwaysAcceptsFirstMouse; 21238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 21248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case WebDashboardBehaviorAllowWheelScrolling: { 21258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return _private->dashboardBehaviorAllowWheelScrolling; 21268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 21278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case WebDashboardBehaviorUseBackwardCompatibilityMode: { 21288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return _private->page && _private->page->settings()->usesDashboardBackwardCompatibilityMode(); 21298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 21308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 21318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return NO; 21328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 21338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 21348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif /* ENABLE(DASHBOARD_SUPPORT) */ 21358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 21368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project+ (void)_setShouldUseFontSmoothing:(BOOL)f 21378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 21380bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch Font::setShouldUseSmoothing(f); 21398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 21408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 21418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project+ (BOOL)_shouldUseFontSmoothing 21428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 21430bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return Font::shouldUseSmoothing(); 21448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 21458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 21468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project+ (void)_setUsesTestModeFocusRingColor:(BOOL)f 21478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 21488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project setUsesTestModeFocusRingColor(f); 21498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 21508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 21518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project+ (BOOL)_usesTestModeFocusRingColor 21528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 21538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return usesTestModeFocusRingColor(); 21548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 21558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 21568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)setAlwaysShowVerticalScroller:(BOOL)flag 21578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 21588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project WebDynamicScrollBarsView *scrollview = [[[self mainFrame] frameView] _scrollView]; 21598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (flag) { 21608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [scrollview setVerticalScrollingMode:ScrollbarAlwaysOn andLock:YES]; 21618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } else { 21628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [scrollview setVerticalScrollingModeLocked:NO]; 21638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [scrollview setVerticalScrollingMode:ScrollbarAuto andLock:NO]; 21648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 21658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 21668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 21678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (BOOL)alwaysShowVerticalScroller 21688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 21698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project WebDynamicScrollBarsView *scrollview = [[[self mainFrame] frameView] _scrollView]; 21708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return [scrollview verticalScrollingModeLocked] && [scrollview verticalScrollingMode] == ScrollbarAlwaysOn; 21718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 21728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 21738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)setAlwaysShowHorizontalScroller:(BOOL)flag 21748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 21758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project WebDynamicScrollBarsView *scrollview = [[[self mainFrame] frameView] _scrollView]; 21768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (flag) { 21778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [scrollview setHorizontalScrollingMode:ScrollbarAlwaysOn andLock:YES]; 21788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } else { 21798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [scrollview setHorizontalScrollingModeLocked:NO]; 21808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [scrollview setHorizontalScrollingMode:ScrollbarAuto andLock:NO]; 21818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 21828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 21838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 21848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)setProhibitsMainFrameScrolling:(BOOL)prohibits 21858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 21860bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (Frame* mainFrame = [self _mainCoreFrame]) 21878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project mainFrame->view()->setProhibitsScrolling(prohibits); 21888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 21898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 21908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (BOOL)alwaysShowHorizontalScroller 21918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 21928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project WebDynamicScrollBarsView *scrollview = [[[self mainFrame] frameView] _scrollView]; 21938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return [scrollview horizontalScrollingModeLocked] && [scrollview horizontalScrollingMode] == ScrollbarAlwaysOn; 21948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 21958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 21968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)_setInViewSourceMode:(BOOL)flag 21978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 21980bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (Frame* mainFrame = [self _mainCoreFrame]) 21998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project mainFrame->setInViewSourceMode(flag); 22008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 22018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 22028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (BOOL)_inViewSourceMode 22038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 22040bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch Frame* mainFrame = [self _mainCoreFrame]; 22058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return mainFrame && mainFrame->inViewSourceMode(); 22068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 22078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 22088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)_setUseFastImageScalingMode:(BOOL)flag 22098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 22108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (_private->page && _private->page->inLowQualityImageInterpolationMode() != flag) { 22118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project _private->page->setInLowQualityImageInterpolationMode(flag); 22128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [self setNeedsDisplay:YES]; 22138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 22148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 22158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 22168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (BOOL)_inFastImageScalingMode 22178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 22188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (_private->page) 22198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return _private->page->inLowQualityImageInterpolationMode(); 22208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return NO; 22218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 22228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 22238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (BOOL)_cookieEnabled 22248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 22258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (_private->page) 22268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return _private->page->cookieEnabled(); 22278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return YES; 22288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 22298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 22308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)_setCookieEnabled:(BOOL)enable 22318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 22328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (_private->page) 22338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project _private->page->setCookieEnabled(enable); 22348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 22358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 22368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)_setAdditionalWebPlugInPaths:(NSArray *)newPaths 22378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 22388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!_private->pluginDatabase) 22398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project _private->pluginDatabase = [[WebPluginDatabase alloc] init]; 22408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 22418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [_private->pluginDatabase setPlugInPaths:newPaths]; 22428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [_private->pluginDatabase refresh]; 22438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 22448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 22458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)_attachScriptDebuggerToAllFrames 22468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 22470bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch for (Frame* frame = [self _mainCoreFrame]; frame; frame = frame->tree()->traverseNext()) 22488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [kit(frame) _attachScriptDebugger]; 22498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 22508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 22518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)_detachScriptDebuggerFromAllFrames 22528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 22530bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch for (Frame* frame = [self _mainCoreFrame]; frame; frame = frame->tree()->traverseNext()) 22548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [kit(frame) _detachScriptDebugger]; 22558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 22568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 22578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)setBackgroundColor:(NSColor *)backgroundColor 22588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 22598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if ([_private->backgroundColor isEqual:backgroundColor]) 22608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 22618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 22628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project id old = _private->backgroundColor; 22638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project _private->backgroundColor = [backgroundColor retain]; 22648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [old release]; 22658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 22668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [[self mainFrame] _updateBackgroundAndUpdatesWhileOffscreen]; 22678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 22688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 22698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (NSColor *)backgroundColor 22708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 22718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return _private->backgroundColor; 22728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 22738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 22748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (BOOL)defersCallbacks 22758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 22768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!_private->page) 22778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return NO; 22788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return _private->page->defersLoading(); 22798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 22808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 22818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)setDefersCallbacks:(BOOL)defer 22828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 22838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!_private->page) 22848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 22858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return _private->page->setDefersLoading(defer); 22868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 22878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 22888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// For backwards compatibility with the WebBackForwardList API, we honor both 22898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// a per-WebView and a per-preferences setting for whether to use the page cache. 22908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 22918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (BOOL)usesPageCache 22928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 22938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return _private->usesPageCache && [[self preferences] usesPageCache]; 22948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 22958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 22968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)setUsesPageCache:(BOOL)usesPageCache 22978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 22988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project _private->usesPageCache = usesPageCache; 22998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 23002daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch // Update our own settings and post the public notification only 23012daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch [self _preferencesChanged:[self preferences]]; 23022daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch [[self preferences] _postPreferencesChangedAPINotification]; 23038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 23048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2305635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project- (WebHistoryItem *)_globalHistoryItem 2306635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project{ 230781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch if (!_private) 2308635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return nil; 230981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 231081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch return kit(_private->_globalHistoryItem.get()); 231181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch} 231281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 231381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch- (void)_setGlobalHistoryItem:(HistoryItem*)historyItem 231481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch{ 231581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch _private->_globalHistoryItem = historyItem; 2316635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project} 2317635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 23188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (WebTextIterator *)textIteratorForRect:(NSRect)rect 23198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 23208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project IntPoint rectStart(rect.origin.x, rect.origin.y); 23218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project IntPoint rectEnd(rect.origin.x + rect.size.width, rect.origin.y + rect.size.height); 23228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 23230bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch Frame* coreFrame = [self _mainCoreFrame]; 23248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!coreFrame) 23258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return nil; 23268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2327563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark VisibleSelection selectionInsideRect(coreFrame->visiblePositionForPoint(rectStart), coreFrame->visiblePositionForPoint(rectEnd)); 23288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 23290bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return [[[WebTextIterator alloc] initWithRange:kit(selectionInsideRect.toNormalizedRange().get())] autorelease]; 23308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 23318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 23328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)handleAuthenticationForResource:(id)identifier challenge:(NSURLAuthenticationChallenge *)challenge fromDataSource:(WebDataSource *)dataSource 23338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 23348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSWindow *window = [self hostWindow] ? [self hostWindow] : [self window]; 23358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [[WebPanelAuthenticationHandler sharedHandler] startAuthentication:challenge window:window]; 23368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 23378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 23388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)_clearUndoRedoOperations 23398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 23408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!_private->page) 23418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 23428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project _private->page->clearUndoRedoOperations(); 23438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 23448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 23458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)_setCatchesDelegateExceptions:(BOOL)f 23468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 23478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project _private->catchesDelegateExceptions = f; 23488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 23498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 23508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (BOOL)_catchesDelegateExceptions 23518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 23528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return _private->catchesDelegateExceptions; 23538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 23548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 23558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)_executeCoreCommandByName:(NSString *)name value:(NSString *)value 23568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 23570bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch Frame* coreFrame = [self _mainCoreFrame]; 23588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!coreFrame) 23598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 23608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project coreFrame->editor()->command(name).execute(value); 23618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 23628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 23638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)_setCustomHTMLTokenizerTimeDelay:(double)timeDelay 23648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 23658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!_private->page) 23668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 23678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return _private->page->setCustomHTMLTokenizerTimeDelay(timeDelay); 23688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 23698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 23708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)_setCustomHTMLTokenizerChunkSize:(int)chunkSize 23718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 23728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!_private->page) 23738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 23748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return _private->page->setCustomHTMLTokenizerChunkSize(chunkSize); 23758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 23768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 23778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)_clearMainFrameName 23788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 23798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project _private->page->mainFrame()->tree()->clearName(); 23808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 23818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2382635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project- (void)setSelectTrailingWhitespaceEnabled:(BOOL)flag 2383635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project{ 2384635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project _private->selectTrailingWhitespaceEnabled = flag; 2385635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project if (flag) 2386635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project [self setSmartInsertDeleteEnabled:false]; 2387635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project} 2388635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 2389635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project- (BOOL)isSelectTrailingWhitespaceEnabled 2390635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project{ 2391635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return _private->selectTrailingWhitespaceEnabled; 2392635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project} 2393635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 2394635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project- (void)setMemoryCacheDelegateCallsEnabled:(BOOL)enabled 2395635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project{ 2396635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project _private->page->setMemoryCacheClientCallsEnabled(enabled); 2397635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project} 2398635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 2399635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project- (BOOL)areMemoryCacheDelegateCallsEnabled 2400635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project{ 2401635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return _private->page->areMemoryCacheClientCallsEnabled(); 2402635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project} 2403635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 2404563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark- (void)_setJavaScriptURLsAreAllowed:(BOOL)areAllowed 2405563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark{ 2406563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark _private->page->setJavaScriptURLsAreAllowed(areAllowed); 2407563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 2408563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 2409563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark+ (NSCursor *)_pointingHandCursor 2410563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark{ 2411967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch return handCursor().platformCursor(); 2412563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 2413563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 2414643ca7872b450ea4efacab6188849e5aac2ba161Steve Block- (BOOL)_postsAcceleratedCompositingNotifications 2415643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{ 2416643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#if USE(ACCELERATED_COMPOSITING) 2417643ca7872b450ea4efacab6188849e5aac2ba161Steve Block return _private->postsAcceleratedCompositingNotifications; 2418643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#else 2419643ca7872b450ea4efacab6188849e5aac2ba161Steve Block return NO; 2420643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#endif 2421643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 2422643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} 2423643ca7872b450ea4efacab6188849e5aac2ba161Steve Block- (void)_setPostsAcceleratedCompositingNotifications:(BOOL)flag 2424643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{ 2425643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#if USE(ACCELERATED_COMPOSITING) 2426643ca7872b450ea4efacab6188849e5aac2ba161Steve Block _private->postsAcceleratedCompositingNotifications = flag; 2427643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#endif 2428643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} 2429643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 24300bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch- (BOOL)_isUsingAcceleratedCompositing 2431563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark{ 24320bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#if USE(ACCELERATED_COMPOSITING) 2433643ca7872b450ea4efacab6188849e5aac2ba161Steve Block if (_private->usesDocumentViews) { 2434692e5dbf12901edacf14812a6fae25462920af42Steve Block Frame* coreFrame = [self _mainCoreFrame]; 2435643ca7872b450ea4efacab6188849e5aac2ba161Steve Block for (Frame* frame = coreFrame; frame; frame = frame->tree()->traverseNext(coreFrame)) { 2436643ca7872b450ea4efacab6188849e5aac2ba161Steve Block NSView *documentView = [[kit(frame) frameView] documentView]; 2437643ca7872b450ea4efacab6188849e5aac2ba161Steve Block if ([documentView isKindOfClass:[WebHTMLView class]] && [(WebHTMLView *)documentView _isUsingAcceleratedCompositing]) 2438643ca7872b450ea4efacab6188849e5aac2ba161Steve Block return YES; 2439643ca7872b450ea4efacab6188849e5aac2ba161Steve Block } 2440643ca7872b450ea4efacab6188849e5aac2ba161Steve Block } 2441692e5dbf12901edacf14812a6fae25462920af42Steve Block#endif 24420bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return NO; 2443692e5dbf12901edacf14812a6fae25462920af42Steve Block} 2444692e5dbf12901edacf14812a6fae25462920af42Steve Block 24452bde8e466a4451c7319e3a072d118917957d6554Steve Block- (BOOL)interactiveFormValidationEnabled 24462bde8e466a4451c7319e3a072d118917957d6554Steve Block{ 24472bde8e466a4451c7319e3a072d118917957d6554Steve Block return _private->interactiveFormValidationEnabled; 24482bde8e466a4451c7319e3a072d118917957d6554Steve Block} 24492bde8e466a4451c7319e3a072d118917957d6554Steve Block 24502bde8e466a4451c7319e3a072d118917957d6554Steve Block- (void)setInteractiveFormValidationEnabled:(BOOL)enabled 24512bde8e466a4451c7319e3a072d118917957d6554Steve Block{ 24522bde8e466a4451c7319e3a072d118917957d6554Steve Block _private->interactiveFormValidationEnabled = enabled; 24532bde8e466a4451c7319e3a072d118917957d6554Steve Block} 24542bde8e466a4451c7319e3a072d118917957d6554Steve Block 24552bde8e466a4451c7319e3a072d118917957d6554Steve Block- (int)validationMessageTimerMagnification 24562bde8e466a4451c7319e3a072d118917957d6554Steve Block{ 24572bde8e466a4451c7319e3a072d118917957d6554Steve Block return _private->validationMessageTimerMagnification; 24582bde8e466a4451c7319e3a072d118917957d6554Steve Block} 24592bde8e466a4451c7319e3a072d118917957d6554Steve Block 24602bde8e466a4451c7319e3a072d118917957d6554Steve Block- (void)setValidationMessageTimerMagnification:(int)newValue 24612bde8e466a4451c7319e3a072d118917957d6554Steve Block{ 24622bde8e466a4451c7319e3a072d118917957d6554Steve Block _private->validationMessageTimerMagnification = newValue; 24632bde8e466a4451c7319e3a072d118917957d6554Steve Block} 24642bde8e466a4451c7319e3a072d118917957d6554Steve Block 2465692e5dbf12901edacf14812a6fae25462920af42Steve Block- (BOOL)_isSoftwareRenderable 2466692e5dbf12901edacf14812a6fae25462920af42Steve Block{ 2467692e5dbf12901edacf14812a6fae25462920af42Steve Block#if USE(ACCELERATED_COMPOSITING) 2468692e5dbf12901edacf14812a6fae25462920af42Steve Block if (_private->usesDocumentViews) { 2469692e5dbf12901edacf14812a6fae25462920af42Steve Block Frame* coreFrame = [self _mainCoreFrame]; 2470692e5dbf12901edacf14812a6fae25462920af42Steve Block for (Frame* frame = coreFrame; frame; frame = frame->tree()->traverseNext(coreFrame)) { 2471692e5dbf12901edacf14812a6fae25462920af42Steve Block if (FrameView* view = frame->view()) { 2472692e5dbf12901edacf14812a6fae25462920af42Steve Block if (!view->isSoftwareRenderable()) 2473692e5dbf12901edacf14812a6fae25462920af42Steve Block return NO; 2474692e5dbf12901edacf14812a6fae25462920af42Steve Block } 2475692e5dbf12901edacf14812a6fae25462920af42Steve Block } 2476692e5dbf12901edacf14812a6fae25462920af42Steve Block } 24770bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#endif 2478692e5dbf12901edacf14812a6fae25462920af42Steve Block return YES; 2479692e5dbf12901edacf14812a6fae25462920af42Steve Block} 2480692e5dbf12901edacf14812a6fae25462920af42Steve Block 2481692e5dbf12901edacf14812a6fae25462920af42Steve Block- (void)_setIncludesFlattenedCompositingLayersWhenDrawingToBitmap:(BOOL)flag 2482692e5dbf12901edacf14812a6fae25462920af42Steve Block{ 2483692e5dbf12901edacf14812a6fae25462920af42Steve Block _private->includesFlattenedCompositingLayersWhenDrawingToBitmap = flag; 2484692e5dbf12901edacf14812a6fae25462920af42Steve Block} 2485692e5dbf12901edacf14812a6fae25462920af42Steve Block 2486692e5dbf12901edacf14812a6fae25462920af42Steve Block- (BOOL)_includesFlattenedCompositingLayersWhenDrawingToBitmap 2487692e5dbf12901edacf14812a6fae25462920af42Steve Block{ 2488692e5dbf12901edacf14812a6fae25462920af42Steve Block return _private->includesFlattenedCompositingLayersWhenDrawingToBitmap; 2489563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 2490563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 2491e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block#if ENABLE(NETSCAPE_PLUGIN_API) 2492cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Blockstatic WebBaseNetscapePluginView *_pluginViewForNode(DOMNode *node) 2493cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block{ 2494cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block if (!node) 2495cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block return nil; 2496cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 2497cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block Node* coreNode = core(node); 2498cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block if (!coreNode) 2499cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block return nil; 2500cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 2501cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block RenderObject* renderer = coreNode->renderer(); 2502cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block if (!renderer || !renderer->isWidget()) 2503cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block return nil; 2504cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 2505cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block Widget* widget = toRenderWidget(renderer)->widget(); 2506cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block if (!widget || !widget->platformWidget()) 2507cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block return nil; 2508cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 2509cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block NSView *view = widget->platformWidget(); 2510cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block if (![view isKindOfClass:[WebBaseNetscapePluginView class]]) 2511cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block return nil; 2512cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 2513cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block return (WebBaseNetscapePluginView *)view; 2514cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block} 2515e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block#endif // ENABLE(NETSCAPE_PLUGIN_API) 2516cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 2517cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block+ (BOOL)_isNodeHaltedPlugin:(DOMNode *)node 2518cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block{ 2519e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block#if ENABLE(NETSCAPE_PLUGIN_API) 2520cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block return [_pluginViewForNode(node) isHalted]; 2521e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block#else 2522e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block return YES; 2523e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block#endif 2524cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block} 2525cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 2526cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block+ (BOOL)_hasPluginForNodeBeenHalted:(DOMNode *)node 2527cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block{ 2528e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block#if ENABLE(NETSCAPE_PLUGIN_API) 2529cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block return [_pluginViewForNode(node) hasBeenHalted]; 2530e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block#else 2531e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block return YES; 2532e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block#endif 2533cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block} 2534cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block+ (void)_restartHaltedPluginForNode:(DOMNode *)node 2535cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block{ 2536e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block#if ENABLE(NETSCAPE_PLUGIN_API) 2537cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block if (!node) 2538cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block return; 2539cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 2540cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block [_pluginViewForNode(node) resumeFromHalt]; 2541e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block#endif 2542cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block} 2543cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 25440bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch- (NSPasteboard *)_insertionPasteboard 2545563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark{ 25460bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return _private ? _private->insertionPasteboard : nil; 2547563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 2548563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 2549dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block+ (void)_addOriginAccessWhitelistEntryWithSourceOrigin:(NSString *)sourceOrigin destinationProtocol:(NSString *)destinationProtocol destinationHost:(NSString *)destinationHost allowDestinationSubdomains:(BOOL)allowDestinationSubdomains 2550231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block{ 2551dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block SecurityOrigin::addOriginAccessWhitelistEntry(*SecurityOrigin::createFromString(sourceOrigin), destinationProtocol, destinationHost, allowDestinationSubdomains); 2552231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block} 2553231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 2554dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block+ (void)_removeOriginAccessWhitelistEntryWithSourceOrigin:(NSString *)sourceOrigin destinationProtocol:(NSString *)destinationProtocol destinationHost:(NSString *)destinationHost allowDestinationSubdomains:(BOOL)allowDestinationSubdomains 2555231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block{ 2556dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block SecurityOrigin::removeOriginAccessWhitelistEntry(*SecurityOrigin::createFromString(sourceOrigin), destinationProtocol, destinationHost, allowDestinationSubdomains); 2557dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 2558dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 2559dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block+(void)_resetOriginAccessWhitelists 2560dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 2561dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block SecurityOrigin::resetOriginAccessWhitelists(); 2562231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block} 2563563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 25640bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch- (void)_updateActiveState 2565563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark{ 25660bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (_private && _private->page) 25670bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch _private->page->focusController()->setActive([[self window] isKeyWindow]); 2568563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 2569563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 2570231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blockstatic PassOwnPtr<Vector<String> > toStringVector(NSArray* patterns) 2571231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block{ 2572231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block // Convert the patterns into Vectors. 2573231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block NSUInteger count = [patterns count]; 2574231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block if (count == 0) 2575231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block return 0; 2576231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block Vector<String>* patternsVector = new Vector<String>; 2577231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block for (NSUInteger i = 0; i < count; ++i) { 2578231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block id entry = [patterns objectAtIndex:i]; 2579231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block if ([entry isKindOfClass:[NSString class]]) 2580231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block patternsVector->append(String((NSString*)entry)); 2581231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block } 2582231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block return patternsVector; 2583231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block} 2584231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 2585643ca7872b450ea4efacab6188849e5aac2ba161Steve Block+ (void)_addUserScriptToGroup:(NSString *)groupName world:(WebScriptWorld *)world source:(NSString *)source url:(NSURL *)url 2586e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke whitelist:(NSArray *)whitelist blacklist:(NSArray *)blacklist 2587e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke injectionTime:(WebUserScriptInjectionTime)injectionTime 2588e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke{ 2589e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke [WebView _addUserScriptToGroup:groupName world:world source:source url:url whitelist:whitelist blacklist:blacklist injectionTime:injectionTime injectedFrames:WebInjectInAllFrames]; 2590e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke} 2591e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke 2592e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke+ (void)_addUserScriptToGroup:(NSString *)groupName world:(WebScriptWorld *)world source:(NSString *)source url:(NSURL *)url 2593e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke whitelist:(NSArray *)whitelist blacklist:(NSArray *)blacklist 2594e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke injectionTime:(WebUserScriptInjectionTime)injectionTime 2595e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke injectedFrames:(WebUserContentInjectedFrames)injectedFrames 2596231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block{ 2597231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block String group(groupName); 2598643ca7872b450ea4efacab6188849e5aac2ba161Steve Block if (group.isEmpty()) 2599231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block return; 2600231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 2601231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block PageGroup* pageGroup = PageGroup::pageGroup(group); 2602231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block if (!pageGroup) 2603231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block return; 2604231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 2605643ca7872b450ea4efacab6188849e5aac2ba161Steve Block pageGroup->addUserScriptToWorld(core(world), source, url, toStringVector(whitelist), toStringVector(blacklist), 2606e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke injectionTime == WebInjectAtDocumentStart ? InjectAtDocumentStart : InjectAtDocumentEnd, 2607e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke injectedFrames == WebInjectInAllFrames ? InjectInAllFrames : InjectInTopFrameOnly); 2608e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke} 2609e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke 2610e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke+ (void)_addUserStyleSheetToGroup:(NSString *)groupName world:(WebScriptWorld *)world source:(NSString *)source url:(NSURL *)url 2611e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke whitelist:(NSArray *)whitelist blacklist:(NSArray *)blacklist 2612e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke{ 2613e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke [WebView _addUserStyleSheetToGroup:groupName world:world source:source url:url whitelist:whitelist blacklist:blacklist injectedFrames:WebInjectInAllFrames]; 2614231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block} 2615231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 2616643ca7872b450ea4efacab6188849e5aac2ba161Steve Block+ (void)_addUserStyleSheetToGroup:(NSString *)groupName world:(WebScriptWorld *)world source:(NSString *)source url:(NSURL *)url 2617231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block whitelist:(NSArray *)whitelist blacklist:(NSArray *)blacklist 2618e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke injectedFrames:(WebUserContentInjectedFrames)injectedFrames 2619231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block{ 2620231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block String group(groupName); 2621643ca7872b450ea4efacab6188849e5aac2ba161Steve Block if (group.isEmpty()) 2622231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block return; 2623231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 2624231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block PageGroup* pageGroup = PageGroup::pageGroup(group); 2625231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block if (!pageGroup) 2626231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block return; 2627231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 2628e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke pageGroup->addUserStyleSheetToWorld(core(world), source, url, toStringVector(whitelist), toStringVector(blacklist), injectedFrames == WebInjectInAllFrames ? InjectInAllFrames : InjectInTopFrameOnly); 2629cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block} 2630cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 2631643ca7872b450ea4efacab6188849e5aac2ba161Steve Block+ (void)_removeUserScriptFromGroup:(NSString *)groupName world:(WebScriptWorld *)world url:(NSURL *)url 2632cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block{ 2633cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block String group(groupName); 2634cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block if (group.isEmpty()) 2635cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block return; 2636cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 2637cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block PageGroup* pageGroup = PageGroup::pageGroup(group); 2638cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block if (!pageGroup) 2639cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block return; 2640cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 2641643ca7872b450ea4efacab6188849e5aac2ba161Steve Block pageGroup->removeUserScriptFromWorld(core(world), url); 2642231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block} 2643231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 2644643ca7872b450ea4efacab6188849e5aac2ba161Steve Block+ (void)_removeUserStyleSheetFromGroup:(NSString *)groupName world:(WebScriptWorld *)world url:(NSURL *)url 2645231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block{ 2646231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block String group(groupName); 2647231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block if (group.isEmpty()) 2648231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block return; 2649231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 2650231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block PageGroup* pageGroup = PageGroup::pageGroup(group); 2651231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block if (!pageGroup) 2652231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block return; 2653231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 2654643ca7872b450ea4efacab6188849e5aac2ba161Steve Block pageGroup->removeUserStyleSheetFromWorld(core(world), url); 2655231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block} 2656231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 2657643ca7872b450ea4efacab6188849e5aac2ba161Steve Block+ (void)_removeUserScriptsFromGroup:(NSString *)groupName world:(WebScriptWorld *)world 2658231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block{ 2659231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block String group(groupName); 2660231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block if (group.isEmpty()) 2661231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block return; 2662231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 2663231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block PageGroup* pageGroup = PageGroup::pageGroup(group); 2664231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block if (!pageGroup) 2665231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block return; 2666231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 2667643ca7872b450ea4efacab6188849e5aac2ba161Steve Block pageGroup->removeUserScriptsFromWorld(core(world)); 2668cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block} 2669cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 2670643ca7872b450ea4efacab6188849e5aac2ba161Steve Block+ (void)_removeUserStyleSheetsFromGroup:(NSString *)groupName world:(WebScriptWorld *)world 2671cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block{ 2672cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block String group(groupName); 2673cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block if (group.isEmpty()) 2674cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block return; 2675cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 2676cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block PageGroup* pageGroup = PageGroup::pageGroup(group); 2677cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block if (!pageGroup) 2678cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block return; 2679cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 2680643ca7872b450ea4efacab6188849e5aac2ba161Steve Block pageGroup->removeUserStyleSheetsFromWorld(core(world)); 2681231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block} 2682231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 2683231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block+ (void)_removeAllUserContentFromGroup:(NSString *)groupName 2684231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block{ 2685231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block String group(groupName); 2686231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block if (group.isEmpty()) 2687231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block return; 2688231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 2689231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block PageGroup* pageGroup = PageGroup::pageGroup(group); 2690231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block if (!pageGroup) 2691231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block return; 2692231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 2693231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block pageGroup->removeAllUserContent(); 2694231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block} 2695231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 2696231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block- (BOOL)cssAnimationsSuspended 2697231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block{ 2698231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block return _private->cssAnimationsSuspended; 2699231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block} 2700231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 2701231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block- (void)setCSSAnimationsSuspended:(BOOL)suspended 2702231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block{ 2703231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block if (suspended == _private->cssAnimationsSuspended) 2704231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block return; 2705231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 2706231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block _private->cssAnimationsSuspended = suspended; 2707231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 2708231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block Frame* frame = core([self mainFrame]); 2709231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block if (suspended) 271028040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu frame->animation()->suspendAnimations(); 2711231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block else 271228040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu frame->animation()->resumeAnimations(); 2713231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block} 2714231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 2715d0825bca7fe65beaee391d30da42e937db621564Steve Block+ (void)_setDomainRelaxationForbidden:(BOOL)forbidden forURLScheme:(NSString *)scheme 2716d0825bca7fe65beaee391d30da42e937db621564Steve Block{ 2717d0825bca7fe65beaee391d30da42e937db621564Steve Block SecurityOrigin::setDomainRelaxationForbiddenForURLScheme(forbidden, scheme); 2718d0825bca7fe65beaee391d30da42e937db621564Steve Block} 2719d0825bca7fe65beaee391d30da42e937db621564Steve Block 2720dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block+ (void)_registerURLSchemeAsSecure:(NSString *)scheme 2721dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 27220617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen SchemeRegistry::registerURLSchemeAsSecure(scheme); 2723dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 2724dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 27256b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner- (void)_scaleWebView:(float)scale atOrigin:(NSPoint)origin 2726e14391e94c850b8bd03680c23b38978db68687a8John Reck{ 2727e14391e94c850b8bd03680c23b38978db68687a8John Reck Frame* coreFrame = [self _mainCoreFrame]; 2728e14391e94c850b8bd03680c23b38978db68687a8John Reck if (!coreFrame) 2729e14391e94c850b8bd03680c23b38978db68687a8John Reck return; 2730e14391e94c850b8bd03680c23b38978db68687a8John Reck 27316b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner coreFrame->scalePage(scale, IntPoint(origin)); 2732e14391e94c850b8bd03680c23b38978db68687a8John Reck} 2733e14391e94c850b8bd03680c23b38978db68687a8John Reck 2734e14391e94c850b8bd03680c23b38978db68687a8John Reck- (float)_viewScaleFactor 2735e14391e94c850b8bd03680c23b38978db68687a8John Reck{ 2736e14391e94c850b8bd03680c23b38978db68687a8John Reck Frame* coreFrame = [self _mainCoreFrame]; 2737e14391e94c850b8bd03680c23b38978db68687a8John Reck if (!coreFrame) 2738e14391e94c850b8bd03680c23b38978db68687a8John Reck return 1; 2739e14391e94c850b8bd03680c23b38978db68687a8John Reck 2740e14391e94c850b8bd03680c23b38978db68687a8John Reck return coreFrame->pageScaleFactor(); 2741e14391e94c850b8bd03680c23b38978db68687a8John Reck} 2742e14391e94c850b8bd03680c23b38978db68687a8John Reck 274365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch- (void)_setUseFixedLayout:(BOOL)fixed 274465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 274565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch Frame* coreFrame = [self _mainCoreFrame]; 274665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (!coreFrame) 274765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return; 274865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 274965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch FrameView* view = coreFrame->view(); 275065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (!view) 275165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return; 275265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 275365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch view->setUseFixedLayout(fixed); 275465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (!fixed) 275565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch view->setFixedLayoutSize(IntSize()); 275665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 275765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 275865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch- (void)_setFixedLayoutSize:(NSSize)size 275965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 276065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch Frame* coreFrame = [self _mainCoreFrame]; 276165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (!coreFrame) 276265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return; 276365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 276465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch FrameView* view = coreFrame->view(); 276565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (!view) 276665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return; 276765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 276865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch view->setFixedLayoutSize(IntSize(size)); 276965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch view->forceLayout(); 277065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 277165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 277265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch- (BOOL)_useFixedLayout 277365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 277465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch Frame* coreFrame = [self _mainCoreFrame]; 277565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (!coreFrame) 277665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return NO; 277765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 277865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch FrameView* view = coreFrame->view(); 277965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (!view) 278065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return NO; 278165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 278265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return view->useFixedLayout(); 278365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 278465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 278565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch- (NSSize)_fixedLayoutSize 278665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 278765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch Frame* coreFrame = [self _mainCoreFrame]; 278865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (!coreFrame) 278965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return IntSize(); 279065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 279165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch FrameView* view = coreFrame->view(); 279265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (!view) 279365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return IntSize(); 279465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 279565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return view->fixedLayoutSize(); 279665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 279765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 2798f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch- (NSUInteger)markAllMatchesForText:(NSString *)string caseSensitive:(BOOL)caseFlag highlight:(BOOL)highlight limit:(NSUInteger)limit 2799f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch{ 2800f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch return [self countMatchesForText:string options:(caseFlag ? 0 : WebFindOptionsCaseInsensitive) highlight:highlight limit:limit markMatches:YES]; 2801f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch} 2802f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 2803f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch- (NSUInteger)countMatchesForText:(NSString *)string caseSensitive:(BOOL)caseFlag highlight:(BOOL)highlight limit:(NSUInteger)limit markMatches:(BOOL)markMatches 2804f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch{ 2805f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch return [self countMatchesForText:string options:(caseFlag ? 0 : WebFindOptionsCaseInsensitive) highlight:highlight limit:limit markMatches:markMatches]; 2806f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch} 2807f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 2808f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch- (BOOL)searchFor:(NSString *)string direction:(BOOL)forward caseSensitive:(BOOL)caseFlag wrap:(BOOL)wrapFlag startInSelection:(BOOL)startInSelection 2809f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch{ 2810f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch return [self findString:string options:((forward ? 0 : WebFindOptionsBackwards) | (caseFlag ? 0 : WebFindOptionsCaseInsensitive) | (wrapFlag ? WebFindOptionsWrapAround : 0) | (startInSelection ? WebFindOptionsStartInSelection : 0))]; 2811f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch} 2812f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 2813f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch+ (void)_setLoadResourcesSerially:(BOOL)serialize 2814f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch{ 2815f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch resourceLoadScheduler()->setSerialLoadingEnabled(serialize); 2816f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch} 2817f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 281881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch+ (double)_defaultMinimumTimerInterval 281981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch{ 282081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch return Settings::defaultMinDOMTimerInterval(); 282181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch} 282281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 282381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch- (void)_setMinimumTimerInterval:(double)intervalInSeconds 282481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch{ 282581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch if (_private->page) 282681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch _private->page->settings()->setMinDOMTimerInterval(intervalInSeconds); 282781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch} 282881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 28292daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch+ (BOOL)_HTTPPipeliningEnabled 28302daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch{ 28312daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch return ResourceRequest::httpPipeliningEnabled(); 28322daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch} 28332daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 28342daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch+ (void)_setHTTPPipeliningEnabled:(BOOL)enabled 28352daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch{ 28362daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch ResourceRequest::setHTTPPipeliningEnabled(enabled); 28372daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch} 28382daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 28398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project@end 28408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 28418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project@implementation _WebSafeForwarder 28428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 28438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// Used to send messages to delegates that implement informal protocols. 28448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 28458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (id)initWithTarget:(id)t defaultTarget:(id)dt catchExceptions:(BOOL)c 28468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 28478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project self = [super init]; 28488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!self) 28498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return nil; 28508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project target = t; // Non retained. 28518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project defaultTarget = dt; 28528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project catchExceptions = c; 28538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return self; 28548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 28558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 28568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)forwardInvocation:(NSInvocation *)invocation 28578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 28588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if ([target respondsToSelector:[invocation selector]]) { 28598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (catchExceptions) { 28608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project @try { 28618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [invocation invokeWithTarget:target]; 28628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } @catch(id exception) { 28638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ReportDiscardedDelegateException([invocation selector], exception); 28648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 28658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } else 28668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [invocation invokeWithTarget:target]; 28678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 28688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 28698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 28708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if ([defaultTarget respondsToSelector:[invocation selector]]) 28718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [invocation invokeWithTarget:defaultTarget]; 28728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 28738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Do nothing quietly if method not implemented. 28748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 28758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 28768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (NSMethodSignature *)methodSignatureForSelector:(SEL)aSelector 28778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 28788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return [defaultTarget methodSignatureForSelector:aSelector]; 28798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 28808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 28818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project@end 28828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 28838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project@implementation WebView 28848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 28858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project+ (void)initialize 28868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 28878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project static BOOL initialized = NO; 28888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (initialized) 28898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 28908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project initialized = YES; 28918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 28920bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch InitWebCoreSystemInterface(); 289321939df44de1705786c545cd1bf519d47250322dBen Murdoch JSC::initializeThreading(); 289421939df44de1705786c545cd1bf519d47250322dBen Murdoch WTF::initializeMainThreadToProcessMainThread(); 28950bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 28968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(_applicationWillTerminate) name:NSApplicationWillTerminateNotification object:NSApp]; 28972daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(_preferencesChangedNotification:) name:WebPreferencesChangedInternalNotification object:nil]; 28988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(_preferencesRemovedNotification:) name:WebPreferencesRemovedNotification object:nil]; 28990bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 29000bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch continuousSpellCheckingEnabled = [[NSUserDefaults standardUserDefaults] boolForKey:WebContinuousSpellCheckingEnabled]; 29010bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#ifndef BUILDING_ON_TIGER 29020bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch grammarCheckingEnabled = [[NSUserDefaults standardUserDefaults] boolForKey:WebGrammarCheckingEnabled]; 29030bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#endif 29040bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 29050bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#if !defined(BUILDING_ON_TIGER) && !defined(BUILDING_ON_LEOPARD) 29060bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch automaticQuoteSubstitutionEnabled = [[NSUserDefaults standardUserDefaults] boolForKey:WebAutomaticQuoteSubstitutionEnabled]; 29070bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch automaticLinkDetectionEnabled = [[NSUserDefaults standardUserDefaults] boolForKey:WebAutomaticLinkDetectionEnabled]; 29080bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch automaticDashSubstitutionEnabled = [[NSUserDefaults standardUserDefaults] boolForKey:WebAutomaticDashSubstitutionEnabled]; 29090bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch automaticTextReplacementEnabled = [[NSUserDefaults standardUserDefaults] boolForKey:WebAutomaticTextReplacementEnabled]; 29100bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch automaticSpellingCorrectionEnabled = [[NSUserDefaults standardUserDefaults] boolForKey:WebAutomaticSpellingCorrectionEnabled]; 29110bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#endif 291268513a70bcd92384395513322f1b801e7bf9c729Steve Block 291368513a70bcd92384395513322f1b801e7bf9c729Steve Block#if !defined(BUILDING_ON_TIGER) && !defined(BUILDING_ON_LEOPARD) && !defined(BUILDING_ON_SNOW_LEOPARD) 291468513a70bcd92384395513322f1b801e7bf9c729Steve Block if (![[NSUserDefaults standardUserDefaults] objectForKey:WebAutomaticTextReplacementEnabled]) 291568513a70bcd92384395513322f1b801e7bf9c729Steve Block automaticTextReplacementEnabled = [NSSpellChecker isAutomaticTextReplacementEnabled]; 291668513a70bcd92384395513322f1b801e7bf9c729Steve Block if (![[NSUserDefaults standardUserDefaults] objectForKey:WebAutomaticSpellingCorrectionEnabled]) 2917bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen automaticSpellingCorrectionEnabled = [NSSpellChecker isAutomaticSpellingCorrectionEnabled]; 291868513a70bcd92384395513322f1b801e7bf9c729Steve Block#endif 29198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 29208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 29218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project+ (void)_applicationWillTerminate 29228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 29238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project applicationIsTerminating = YES; 29240bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 29250bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (fastDocumentTeardownEnabled()) 29260bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch [self closeAllWebViews]; 29270bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 29288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!pluginDatabaseClientCount) 29298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [WebPluginDatabase closeSharedDatabase]; 29308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 29318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project PageGroup::closeLocalStorage(); 29328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 29338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2934643ca7872b450ea4efacab6188849e5aac2ba161Steve Block+ (BOOL)_canShowMIMEType:(NSString *)MIMEType allowingPlugins:(BOOL)allowPlugins 2935643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{ 2936643ca7872b450ea4efacab6188849e5aac2ba161Steve Block return [self _viewClass:nil andRepresentationClass:nil forMIMEType:MIMEType allowingPlugins:allowPlugins]; 2937643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} 2938643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 29398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project+ (BOOL)canShowMIMEType:(NSString *)MIMEType 29408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2941643ca7872b450ea4efacab6188849e5aac2ba161Steve Block return [self _canShowMIMEType:MIMEType allowingPlugins:YES]; 2942643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} 2943643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 2944643ca7872b450ea4efacab6188849e5aac2ba161Steve Block- (BOOL)_canShowMIMEType:(NSString *)MIMEType 2945643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{ 294621939df44de1705786c545cd1bf519d47250322dBen Murdoch return [[self class] _canShowMIMEType:MIMEType allowingPlugins:[_private->preferences arePlugInsEnabled]]; 29478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 29488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 29498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (WebBasePluginPackage *)_pluginForMIMEType:(NSString *)MIMEType 29508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2951643ca7872b450ea4efacab6188849e5aac2ba161Steve Block if (![_private->preferences arePlugInsEnabled]) 2952643ca7872b450ea4efacab6188849e5aac2ba161Steve Block return nil; 2953643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 29548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project WebBasePluginPackage *pluginPackage = [[WebPluginDatabase sharedDatabase] pluginForMIMEType:MIMEType]; 29558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (pluginPackage) 29568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return pluginPackage; 29578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 29588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (_private->pluginDatabase) 29598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return [_private->pluginDatabase pluginForMIMEType:MIMEType]; 29608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 29618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return nil; 29628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 29638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2964967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch#if ENABLE(PLUGIN_PROXY_FOR_VIDEO) 2965967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch- (WebBasePluginPackage *)_videoProxyPluginForMIMEType:(NSString *)MIMEType 2966967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch{ 2967967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch WebBasePluginPackage *pluginPackage = [[WebPluginDatabase sharedDatabase] pluginForMIMEType:MIMEType]; 2968967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch if (pluginPackage) 2969967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch return pluginPackage; 2970967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch 2971967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch if (_private->pluginDatabase) 2972967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch return [_private->pluginDatabase pluginForMIMEType:MIMEType]; 2973967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch 2974967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch return nil; 2975967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch} 2976967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch#endif 2977967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch 29788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (WebBasePluginPackage *)_pluginForExtension:(NSString *)extension 29798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2980643ca7872b450ea4efacab6188849e5aac2ba161Steve Block if (![_private->preferences arePlugInsEnabled]) 2981643ca7872b450ea4efacab6188849e5aac2ba161Steve Block return nil; 2982643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 29838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project WebBasePluginPackage *pluginPackage = [[WebPluginDatabase sharedDatabase] pluginForExtension:extension]; 29848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (pluginPackage) 29858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return pluginPackage; 29868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 29878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (_private->pluginDatabase) 29888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return [_private->pluginDatabase pluginForExtension:extension]; 29898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 29908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return nil; 29918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 29928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 29938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)addPluginInstanceView:(NSView *)view 29948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 29958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!_private->pluginDatabase) 29968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project _private->pluginDatabase = [[WebPluginDatabase alloc] init]; 29978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [_private->pluginDatabase addPluginInstanceView:view]; 29988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 29998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 30008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)removePluginInstanceView:(NSView *)view 30018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 30028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (_private->pluginDatabase) 30038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [_private->pluginDatabase removePluginInstanceView:view]; 30048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 30058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 30068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)removePluginInstanceViewsFor:(WebFrame*)webFrame 30078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 30088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (_private->pluginDatabase) 30098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [_private->pluginDatabase removePluginInstanceViewsFor:webFrame]; 30108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 30118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 30128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (BOOL)_isMIMETypeRegisteredAsPlugin:(NSString *)MIMEType 30138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 3014643ca7872b450ea4efacab6188849e5aac2ba161Steve Block if (![_private->preferences arePlugInsEnabled]) 3015643ca7872b450ea4efacab6188849e5aac2ba161Steve Block return NO; 3016643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 30178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if ([[WebPluginDatabase sharedDatabase] isMIMETypeRegistered:MIMEType]) 30188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return YES; 30198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 30208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (_private->pluginDatabase && [_private->pluginDatabase isMIMETypeRegistered:MIMEType]) 30218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return YES; 30228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 30238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return NO; 30248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 30258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 30268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project+ (BOOL)canShowMIMETypeAsHTML:(NSString *)MIMEType 30278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 30288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return [WebFrameView _canShowMIMETypeAsHTML:MIMEType]; 30298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 30308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 30318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project+ (NSArray *)MIMETypesShownAsHTML 30328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 30338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSMutableDictionary *viewTypes = [WebFrameView _viewTypesAllowImageTypeOmission:YES]; 30348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSEnumerator *enumerator = [viewTypes keyEnumerator]; 30358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project id key; 30368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSMutableArray *array = [[[NSMutableArray alloc] init] autorelease]; 30378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 30388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project while ((key = [enumerator nextObject])) { 30398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if ([viewTypes objectForKey:key] == [WebHTMLView class]) 30408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [array addObject:key]; 30418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 30428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 30438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return array; 30448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 30458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 30468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project+ (void)setMIMETypesShownAsHTML:(NSArray *)MIMETypes 30478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 30488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSDictionary *viewTypes = [[WebFrameView _viewTypesAllowImageTypeOmission:YES] copy]; 30498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSEnumerator *enumerator = [viewTypes keyEnumerator]; 30508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project id key; 30518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project while ((key = [enumerator nextObject])) { 30528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if ([viewTypes objectForKey:key] == [WebHTMLView class]) 30538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [WebView _unregisterViewClassAndRepresentationClassForMIMEType:key]; 30548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 30558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 30568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project int i, count = [MIMETypes count]; 30578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project for (i = 0; i < count; i++) { 30588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [WebView registerViewClass:[WebHTMLView class] 30598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project representationClass:[WebHTMLRepresentation class] 30608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project forMIMEType:[MIMETypes objectAtIndex:i]]; 30618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 30628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [viewTypes release]; 30638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 30648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 30658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project+ (NSURL *)URLFromPasteboard:(NSPasteboard *)pasteboard 30668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 30678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return [pasteboard _web_bestURL]; 30688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 30698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 30708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project+ (NSString *)URLTitleFromPasteboard:(NSPasteboard *)pasteboard 30718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 30728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return [pasteboard stringForType:WebURLNamePboardType]; 30738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 30748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 30758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project+ (void)registerURLSchemeAsLocal:(NSString *)protocol 30768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 30770617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen SchemeRegistry::registerURLSchemeAsLocal(protocol); 30788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 30798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3080635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project- (id)_initWithArguments:(NSDictionary *) arguments 3081635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project{ 3082635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project NSCoder *decoder = [arguments objectForKey:@"decoder"]; 3083635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project if (decoder) { 3084635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project self = [self initWithCoder:decoder]; 3085635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project } else { 3086635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project ASSERT([arguments objectForKey:@"frame"]); 3087635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project NSValue *frameValue = [arguments objectForKey:@"frame"]; 3088635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project NSRect frame = (frameValue ? [frameValue rectValue] : NSZeroRect); 3089635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project NSString *frameName = [arguments objectForKey:@"frameName"]; 3090635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project NSString *groupName = [arguments objectForKey:@"groupName"]; 3091635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project self = [self initWithFrame:frame frameName:frameName groupName:groupName]; 3092635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project } 3093635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 3094635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return self; 3095635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project} 3096635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 30970bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochstatic bool clientNeedsWebViewInitThreadWorkaround() 30980bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 30990bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (WebKitLinkedOnOrAfter(WEBKIT_FIRST_VERSION_WITHOUT_WEBVIEW_INIT_THREAD_WORKAROUND)) 31000bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return false; 31010bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 31020bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch NSString *bundleIdentifier = [[NSBundle mainBundle] bundleIdentifier]; 31030bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 31040bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch // Installer. 31050bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if ([bundleIdentifier _webkit_isCaseInsensitiveEqualToString:@"com.apple.installer"]) 31060bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return true; 31070bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 31080bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch // Automator. 31090bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if ([bundleIdentifier _webkit_isCaseInsensitiveEqualToString:@"com.apple.Automator"]) 31100bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return true; 31110bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 31120bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch // Automator Runner. 31130bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if ([bundleIdentifier _webkit_isCaseInsensitiveEqualToString:@"com.apple.AutomatorRunner"]) 31140bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return true; 31150bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 31160bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch // Automator workflows. 31170bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if ([bundleIdentifier _webkit_hasCaseInsensitivePrefix:@"com.apple.Automator."]) 31180bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return true; 31190bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 31200bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#if defined(BUILDING_ON_TIGER) || defined(BUILDING_ON_LEOPARD) 31210bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch // Mail. 31220bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if ([bundleIdentifier _webkit_isCaseInsensitiveEqualToString:@"com.apple.Mail"]) 31230bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return true; 31240bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#endif 31250bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 31260bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return false; 31270bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 31280bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 3129635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectstatic bool needsWebViewInitThreadWorkaround() 3130635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project{ 31310bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch static bool isOldClient = clientNeedsWebViewInitThreadWorkaround(); 3132563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return isOldClient && !pthread_main_np(); 3133635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project} 3134635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 31358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (id)initWithFrame:(NSRect)f 31368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 31378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return [self initWithFrame:f frameName:nil groupName:nil]; 31388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 31398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 31408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (id)initWithFrame:(NSRect)f frameName:(NSString *)frameName groupName:(NSString *)groupName 31418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 3142635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project if (needsWebViewInitThreadWorkaround()) 3143635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return [[self _webkit_invokeOnMainThread] initWithFrame:f frameName:frameName groupName:groupName]; 3144635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 3145563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark WebCoreThreadViolationCheckRoundTwo(); 31468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return [self _initWithFrame:f frameName:frameName groupName:groupName usesDocumentViews:YES]; 31478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 31488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 31498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (id)initWithCoder:(NSCoder *)decoder 31508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 3151635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project if (needsWebViewInitThreadWorkaround()) 3152635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return [[self _webkit_invokeOnMainThread] initWithCoder:decoder]; 3153635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 3154563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark WebCoreThreadViolationCheckRoundTwo(); 31558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project WebView *result = nil; 31568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 31578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project @try { 31588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSString *frameName; 31598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSString *groupName; 31608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project WebPreferences *preferences; 31618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project BOOL useBackForwardList = NO; 31628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project BOOL allowsUndo = YES; 31638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 31648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project result = [super initWithCoder:decoder]; 31658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project result->_private = [[WebViewPrivate alloc] init]; 31668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 31678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // We don't want any of the archived subviews. The subviews will always 31688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // be created in _commonInitializationFrameName:groupName:. 31698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [[result subviews] makeObjectsPerformSelector:@selector(removeFromSuperview)]; 31708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 31718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if ([decoder allowsKeyedCoding]) { 31728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project frameName = [decoder decodeObjectForKey:@"FrameName"]; 31738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project groupName = [decoder decodeObjectForKey:@"GroupName"]; 31748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project preferences = [decoder decodeObjectForKey:@"Preferences"]; 31758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project useBackForwardList = [decoder decodeBoolForKey:@"UseBackForwardList"]; 31768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if ([decoder containsValueForKey:@"AllowsUndo"]) 31778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project allowsUndo = [decoder decodeBoolForKey:@"AllowsUndo"]; 31788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } else { 31798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project int version; 31808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [decoder decodeValueOfObjCType:@encode(int) at:&version]; 31818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project frameName = [decoder decodeObject]; 31828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project groupName = [decoder decodeObject]; 31838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project preferences = [decoder decodeObject]; 31848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (version > 1) 31858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [decoder decodeValuesOfObjCTypes:"c", &useBackForwardList]; 31868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // The allowsUndo field is no longer written out in encodeWithCoder, but since there are 31878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // version 3 NIBs that have this field encoded, we still need to read it in. 31888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (version == 3) 31898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [decoder decodeValuesOfObjCTypes:"c", &allowsUndo]; 31908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 31918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 31928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (![frameName isKindOfClass:[NSString class]]) 31938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project frameName = nil; 31948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (![groupName isKindOfClass:[NSString class]]) 31958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project groupName = nil; 31968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (![preferences isKindOfClass:[WebPreferences class]]) 31978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project preferences = nil; 31988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 31998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project LOG(Encoding, "FrameName = %@, GroupName = %@, useBackForwardList = %d\n", frameName, groupName, (int)useBackForwardList); 32008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [result _commonInitializationWithFrameName:frameName groupName:groupName usesDocumentViews:YES]; 3201e14391e94c850b8bd03680c23b38978db68687a8John Reck static_cast<BackForwardListImpl*>([result page]->backForwardList())->setEnabled(useBackForwardList); 32028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project result->_private->allowsUndo = allowsUndo; 32038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (preferences) 32048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [result setPreferences:preferences]; 32058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } @catch (NSException *localException) { 32068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project result = nil; 32078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [self release]; 32088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 32098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 32108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return result; 32118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 32128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 32138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)encodeWithCoder:(NSCoder *)encoder 32148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 32158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Set asside the subviews before we archive. We don't want to archive any subviews. 32168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // The subviews will always be created in _commonInitializationFrameName:groupName:. 32178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project id originalSubviews = _subviews; 32188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project _subviews = nil; 32198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 32208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [super encodeWithCoder:encoder]; 32218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 32228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Restore the subviews we set aside. 32238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project _subviews = originalSubviews; 32248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3225e14391e94c850b8bd03680c23b38978db68687a8John Reck BOOL useBackForwardList = _private->page && static_cast<BackForwardListImpl*>(_private->page->backForwardList())->enabled(); 32268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if ([encoder allowsKeyedCoding]) { 32278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [encoder encodeObject:[[self mainFrame] name] forKey:@"FrameName"]; 32288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [encoder encodeObject:[self groupName] forKey:@"GroupName"]; 32298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [encoder encodeObject:[self preferences] forKey:@"Preferences"]; 32308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [encoder encodeBool:useBackForwardList forKey:@"UseBackForwardList"]; 32318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [encoder encodeBool:_private->allowsUndo forKey:@"AllowsUndo"]; 32328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } else { 32338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project int version = WebViewVersion; 32348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [encoder encodeValueOfObjCType:@encode(int) at:&version]; 32358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [encoder encodeObject:[[self mainFrame] name]]; 32368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [encoder encodeObject:[self groupName]]; 32378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [encoder encodeObject:[self preferences]]; 32388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [encoder encodeValuesOfObjCTypes:"c", &useBackForwardList]; 32398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // DO NOT encode any new fields here, doing so will break older WebKit releases. 32408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 32418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 32428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project LOG(Encoding, "FrameName = %@, GroupName = %@, useBackForwardList = %d\n", [[self mainFrame] name], [self groupName], (int)useBackForwardList); 32438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 32448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 32458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)dealloc 32468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 32478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (WebCoreObjCScheduleDeallocateOnMainThread([WebView class], self)) 32488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 32498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 32508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // call close to ensure we tear-down completely 32518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // this maintains our old behavior for existing applications 32528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [self close]; 32538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3254692e5dbf12901edacf14812a6fae25462920af42Steve Block if ([[self class] shouldIncludeInWebKitStatistics]) 3255692e5dbf12901edacf14812a6fae25462920af42Steve Block --WebViewCount; 3256692e5dbf12901edacf14812a6fae25462920af42Steve Block 32570bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if ([self _needsFrameLoadDelegateRetainQuirk]) 32580bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch [_private->frameLoadDelegate release]; 32590bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 32608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [_private release]; 32618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // [super dealloc] can end up dispatching against _private (3466082) 32628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project _private = nil; 32638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 32648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [super dealloc]; 32658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 32668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 32678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)finalize 32688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 32698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ASSERT(_private->closed); 32708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 32718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project --WebViewCount; 32728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 32738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [super finalize]; 32748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 32758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 32768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)close 32778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 32788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // _close existed first, and some clients might be calling or overriding it, so call through. 32798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [self _close]; 32808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 32818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 32828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)setShouldCloseWithWindow:(BOOL)close 32838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 32848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project _private->shouldCloseWithWindow = close; 32858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 32868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 32878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (BOOL)shouldCloseWithWindow 32888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 32898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return _private->shouldCloseWithWindow; 32908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 32918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 32920bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch- (void)addWindowObserversForWindow:(NSWindow *)window 32938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 32940bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (window) { 32958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(_windowDidBecomeKey:) 32968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project name:NSWindowDidBecomeKeyNotification object:nil]; 32978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(_windowDidResignKey:) 32988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project name:NSWindowDidResignKeyNotification object:nil]; 32998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(_windowWillOrderOnScreen:) 33008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project name:WKWindowWillOrderOnScreenNotification() object:window]; 33018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 33028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 33038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 33048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)removeWindowObservers 33058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 33068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSWindow *window = [self window]; 33070bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (window) { 33088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [[NSNotificationCenter defaultCenter] removeObserver:self 33098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project name:NSWindowDidBecomeKeyNotification object:nil]; 33108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [[NSNotificationCenter defaultCenter] removeObserver:self 33118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project name:NSWindowDidResignKeyNotification object:nil]; 33128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [[NSNotificationCenter defaultCenter] removeObserver:self 33138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project name:WKWindowWillOrderOnScreenNotification() object:window]; 33148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 33158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 33168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 33178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)viewWillMoveToWindow:(NSWindow *)window 33188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 33198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Don't do anything if the WebView isn't initialized. 33208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // This happens when decoding a WebView in a nib. 33218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // FIXME: What sets up the observer of NSWindowWillCloseNotification in this case? 33220bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!_private || _private->closed) 33238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 33248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 33258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if ([self window] && [self window] != [self hostWindow]) 33268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [[NSNotificationCenter defaultCenter] removeObserver:self name:NSWindowWillCloseNotification object:[self window]]; 33278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 33288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (window) { 33298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(_windowWillClose:) name:NSWindowWillCloseNotification object:window]; 33308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 33318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Ensure that we will receive the events that WebHTMLView (at least) needs. 33328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // The following are expensive enough that we don't want to call them over 33338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // and over, so do them when we move into a window. 33348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [window setAcceptsMouseMovedEvents:YES]; 33358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project WKSetNSWindowShouldPostEventNotifications(window, YES); 3336692e5dbf12901edacf14812a6fae25462920af42Steve Block } else { 3337692e5dbf12901edacf14812a6fae25462920af42Steve Block _private->page->setCanStartMedia(false); 3338563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark _private->page->willMoveOffscreen(); 3339692e5dbf12901edacf14812a6fae25462920af42Steve Block } 33400bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 33410bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (window != [self window]) { 33420bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch [self removeWindowObservers]; 33430bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch [self addWindowObserversForWindow:window]; 33440bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch } 33458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 33468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 33478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)viewDidMoveToWindow 33488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 33498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Don't do anything if we aren't initialized. This happens 33508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // when decoding a WebView. When WebViews are decoded their subviews 33518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // are created by initWithCoder: and so won't be normally 33528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // initialized. The stub views are discarded by WebView. 33538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!_private || _private->closed) 33548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 33558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3356692e5dbf12901edacf14812a6fae25462920af42Steve Block if ([self window]) { 3357692e5dbf12901edacf14812a6fae25462920af42Steve Block _private->page->setCanStartMedia(true); 33580bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch _private->page->didMoveOnscreen(); 3359692e5dbf12901edacf14812a6fae25462920af42Steve Block } 33608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 33610bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch [self _updateActiveState]; 33628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 33638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 33648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)_windowDidBecomeKey:(NSNotification *)notification 33658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 33668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSWindow *keyWindow = [notification object]; 33678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (keyWindow == [self window] || keyWindow == [[self window] attachedSheet]) 33680bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch [self _updateActiveState]; 33698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 33708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 33718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)_windowDidResignKey:(NSNotification *)notification 33728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 33738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSWindow *formerKeyWindow = [notification object]; 33748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (formerKeyWindow == [self window] || formerKeyWindow == [[self window] attachedSheet]) 33750bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch [self _updateActiveState]; 33768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 33778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 33788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)_windowWillOrderOnScreen:(NSNotification *)notification 33798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 33808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (![self shouldUpdateWhileOffscreen]) 33818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [self setNeedsDisplay:YES]; 33828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 33838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 33848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)_windowWillClose:(NSNotification *)notification 33858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 33868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if ([self shouldCloseWithWindow] && ([self window] == [self hostWindow] || ([self window] && ![self hostWindow]) || (![self window] && [self hostWindow]))) 33878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [self close]; 33888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 33898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 33908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)setPreferences:(WebPreferences *)prefs 33918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 33928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!prefs) 33938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project prefs = [WebPreferences standardPreferences]; 33948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 33958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (_private->preferences == prefs) 33968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 33978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 33988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [prefs willAddToWebView]; 33998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 34008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project WebPreferences *oldPrefs = _private->preferences; 34018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 34022daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch [[NSNotificationCenter defaultCenter] removeObserver:self name:WebPreferencesChangedInternalNotification object:[self preferences]]; 34038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [WebPreferences _removeReferenceForIdentifier:[oldPrefs identifier]]; 34048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 34058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project _private->preferences = [prefs retain]; 34068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 34078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // After registering for the notification, post it so the WebCore settings update. 34088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(_preferencesChangedNotification:) 34092daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch name:WebPreferencesChangedInternalNotification object:[self preferences]]; 34102daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch [self _preferencesChanged:[self preferences]]; 34112daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch [[self preferences] _postPreferencesChangedAPINotification]; 34128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 34138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [oldPrefs didRemoveFromWebView]; 34148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [oldPrefs release]; 34158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 34168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 34178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (WebPreferences *)preferences 34188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 34198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return _private->preferences; 34208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 34218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 34228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)setPreferencesIdentifier:(NSString *)anIdentifier 34238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 34248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!_private->closed && ![anIdentifier isEqual:[[self preferences] identifier]]) { 34258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project WebPreferences *prefs = [[WebPreferences alloc] initWithIdentifier:anIdentifier]; 34268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [self setPreferences:prefs]; 34278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [prefs release]; 34288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 34298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 34308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 34318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (NSString *)preferencesIdentifier 34328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 34338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return [[self preferences] identifier]; 34348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 34358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 34368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 34378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)setUIDelegate:delegate 34388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 34398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project _private->UIDelegate = delegate; 34408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [_private->UIDelegateForwarder release]; 34418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project _private->UIDelegateForwarder = nil; 34428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 34438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3444967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch- (id)UIDelegate 34458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 34468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return _private->UIDelegate; 34478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 34488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 34498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)setResourceLoadDelegate: delegate 34508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 34518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project _private->resourceProgressDelegate = delegate; 34528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [self _cacheResourceLoadDelegateImplementations]; 34538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 34548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3455967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch- (id)resourceLoadDelegate 34568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 34578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return _private->resourceProgressDelegate; 34588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 34598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 34608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)setDownloadDelegate: delegate 34618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 34628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project _private->downloadDelegate = delegate; 34638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 34648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 34658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3466967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch- (id)downloadDelegate 34678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 34688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return _private->downloadDelegate; 34698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 34708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 34718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)setPolicyDelegate:delegate 34728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 34738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project _private->policyDelegate = delegate; 34748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [_private->policyDelegateForwarder release]; 34758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project _private->policyDelegateForwarder = nil; 34768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 34778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3478967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch- (id)policyDelegate 34798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 34808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return _private->policyDelegate; 34818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 34828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 34838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)setFrameLoadDelegate:delegate 34848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 34850bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch // <rdar://problem/6950660> - Due to some subtle WebKit changes - presumably to delegate callback behavior - we've 34860bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch // unconvered a latent bug in at least one WebKit app where the delegate wasn't properly retained by the app and 34870bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch // was dealloc'ed before being cleared. 34880bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch // This is an effort to keep such apps working for now. 34890bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if ([self _needsFrameLoadDelegateRetainQuirk]) { 34900bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch [delegate retain]; 34910bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch [_private->frameLoadDelegate release]; 34920bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch } 34930bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 34948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project _private->frameLoadDelegate = delegate; 34958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [self _cacheFrameLoadDelegateImplementations]; 34968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 34970bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#if ENABLE(ICONDATABASE) 34988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // If this delegate wants callbacks for icons, fire up the icon database. 34998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (_private->frameLoadDelegateImplementations.didReceiveIconForFrameFunc) 35008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [WebIconDatabase sharedIconDatabase]; 35010bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#endif 35028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 35038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3504967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch- (id)frameLoadDelegate 35058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 35068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return _private->frameLoadDelegate; 35078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 35088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 35098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (WebFrame *)mainFrame 35108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 35118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // This can be called in initialization, before _private has been set up (3465613) 35120bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!_private || !_private->page) 35138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return nil; 35148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return kit(_private->page->mainFrame()); 35158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 35168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 35178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (WebFrame *)selectedFrame 35188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 35190bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (_private->usesDocumentViews) { 35200bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch // If the first responder is a view in our tree, we get the frame containing the first responder. 35210bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch // This is faster than searching the frame hierarchy, and will give us a result even in the case 35220bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch // where the focused frame doesn't actually contain a selection. 35230bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch WebFrame *focusedFrame = [self _focusedFrame]; 35240bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (focusedFrame) 35250bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return focusedFrame; 35260bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch } 35278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 35288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // If the first responder is outside of our view tree, we search for a frame containing a selection. 35298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // There should be at most only one of these. 35308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return [[self mainFrame] _findFrameWithSelection]; 35318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 35328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 35338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (WebBackForwardList *)backForwardList 35348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 35358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!_private->page) 35368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return nil; 3537e14391e94c850b8bd03680c23b38978db68687a8John Reck BackForwardListImpl* list = static_cast<BackForwardListImpl*>(_private->page->backForwardList()); 3538e14391e94c850b8bd03680c23b38978db68687a8John Reck if (!list->enabled()) 35398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return nil; 3540e14391e94c850b8bd03680c23b38978db68687a8John Reck return kit(list); 35418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 35428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 35430bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch- (void)setMaintainsBackForwardList:(BOOL)flag 35448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 35458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!_private->page) 35468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 3547e14391e94c850b8bd03680c23b38978db68687a8John Reck static_cast<BackForwardListImpl*>(_private->page->backForwardList())->setEnabled(flag); 35488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 35498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 35508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (BOOL)goBack 35518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 35528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!_private->page) 35538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return NO; 35548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 35558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return _private->page->goBack(); 35568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 35578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 35588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (BOOL)goForward 35598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 35608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!_private->page) 35618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return NO; 35628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 35638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return _private->page->goForward(); 35648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 35658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 35668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (BOOL)goToBackForwardItem:(WebHistoryItem *)item 35678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 35688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!_private->page) 35698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return NO; 35708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 35718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project _private->page->goToItem(core(item), FrameLoadTypeIndexedBackForward); 35728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return YES; 35738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 35748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 35758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)setTextSizeMultiplier:(float)m 35768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 35778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [self _setZoomMultiplier:m isTextOnly:![[NSUserDefaults standardUserDefaults] boolForKey:WebKitDebugFullPageZoomPreferenceKey]]; 35788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 35798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 35808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (float)textSizeMultiplier 35818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 3582635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return [self _realZoomMultiplierIsTextOnly] ? _private->zoomMultiplier : 1.0f; 35838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 35848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 35855af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke- (void)_setZoomMultiplier:(float)multiplier isTextOnly:(BOOL)isTextOnly 35868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 35878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // NOTE: This has no visible effect when viewing a PDF (see <rdar://problem/4737380>) 35885af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke _private->zoomMultiplier = multiplier; 358968513a70bcd92384395513322f1b801e7bf9c729Steve Block _private->zoomsTextOnly = isTextOnly; 35905af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke 359168513a70bcd92384395513322f1b801e7bf9c729Steve Block // FIXME: It might be nice to rework this code so that _private->zoomMultiplier doesn't exist 359268513a70bcd92384395513322f1b801e7bf9c729Steve Block // and instead the zoom factors stored in Frame are used. 35930bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch Frame* coreFrame = [self _mainCoreFrame]; 35945af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke if (coreFrame) { 359568513a70bcd92384395513322f1b801e7bf9c729Steve Block if (_private->zoomsTextOnly) 359668513a70bcd92384395513322f1b801e7bf9c729Steve Block coreFrame->setPageAndTextZoomFactors(1, multiplier); 359768513a70bcd92384395513322f1b801e7bf9c729Steve Block else 359868513a70bcd92384395513322f1b801e7bf9c729Steve Block coreFrame->setPageAndTextZoomFactors(multiplier, 1); 35995af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke } 36008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 36018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 36028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (float)_zoomMultiplier:(BOOL)isTextOnly 36038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 3604635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project if (isTextOnly != [self _realZoomMultiplierIsTextOnly]) 36058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return 1.0f; 36068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return _private->zoomMultiplier; 36078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 36088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 36098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (float)_realZoomMultiplier 36108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 36118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return _private->zoomMultiplier; 36128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 36138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 36148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (BOOL)_realZoomMultiplierIsTextOnly 36158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 3616635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project if (!_private->page) 3617635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return NO; 3618635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 361968513a70bcd92384395513322f1b801e7bf9c729Steve Block return _private->zoomsTextOnly; 36208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 36218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 36228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define MinimumZoomMultiplier 0.5f 36238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define MaximumZoomMultiplier 3.0f 36248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define ZoomMultiplierRatio 1.2f 36258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 36268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (BOOL)_canZoomOut:(BOOL)isTextOnly 36278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 36288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project id docView = [[[self mainFrame] frameView] documentView]; 36298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if ([docView conformsToProtocol:@protocol(_WebDocumentZooming)]) { 36308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project id <_WebDocumentZooming> zoomingDocView = (id <_WebDocumentZooming>)docView; 36318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return [zoomingDocView _canZoomOut]; 36328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 36338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return [self _zoomMultiplier:isTextOnly] / ZoomMultiplierRatio > MinimumZoomMultiplier; 36348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 36358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 36368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 36378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (BOOL)_canZoomIn:(BOOL)isTextOnly 36388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 36398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project id docView = [[[self mainFrame] frameView] documentView]; 36408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if ([docView conformsToProtocol:@protocol(_WebDocumentZooming)]) { 36418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project id <_WebDocumentZooming> zoomingDocView = (id <_WebDocumentZooming>)docView; 36428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return [zoomingDocView _canZoomIn]; 36438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 36448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return [self _zoomMultiplier:isTextOnly] * ZoomMultiplierRatio < MaximumZoomMultiplier; 36458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 36468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 36478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (IBAction)_zoomOut:(id)sender isTextOnly:(BOOL)isTextOnly 36488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 36498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project id docView = [[[self mainFrame] frameView] documentView]; 36508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if ([docView conformsToProtocol:@protocol(_WebDocumentZooming)]) { 36518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project id <_WebDocumentZooming> zoomingDocView = (id <_WebDocumentZooming>)docView; 36528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return [zoomingDocView _zoomOut:sender]; 36538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 36548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project float newScale = [self _zoomMultiplier:isTextOnly] / ZoomMultiplierRatio; 36558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (newScale > MinimumZoomMultiplier) 36568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [self _setZoomMultiplier:newScale isTextOnly:isTextOnly]; 36578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 36588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 36598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (IBAction)_zoomIn:(id)sender isTextOnly:(BOOL)isTextOnly 36608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 36618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project id docView = [[[self mainFrame] frameView] documentView]; 36628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if ([docView conformsToProtocol:@protocol(_WebDocumentZooming)]) { 36638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project id <_WebDocumentZooming> zoomingDocView = (id <_WebDocumentZooming>)docView; 36648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return [zoomingDocView _zoomIn:sender]; 36658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 36668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project float newScale = [self _zoomMultiplier:isTextOnly] * ZoomMultiplierRatio; 36678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (newScale < MaximumZoomMultiplier) 36688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [self _setZoomMultiplier:newScale isTextOnly:isTextOnly]; 36698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 36708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 36718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (BOOL)_canResetZoom:(BOOL)isTextOnly 36728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 36738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project id docView = [[[self mainFrame] frameView] documentView]; 36748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if ([docView conformsToProtocol:@protocol(_WebDocumentZooming)]) { 36758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project id <_WebDocumentZooming> zoomingDocView = (id <_WebDocumentZooming>)docView; 36768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return [zoomingDocView _canResetZoom]; 36778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 36788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return [self _zoomMultiplier:isTextOnly] != 1.0f; 36798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 36808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 36818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (IBAction)_resetZoom:(id)sender isTextOnly:(BOOL)isTextOnly 36828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 36838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project id docView = [[[self mainFrame] frameView] documentView]; 36848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if ([docView conformsToProtocol:@protocol(_WebDocumentZooming)]) { 36858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project id <_WebDocumentZooming> zoomingDocView = (id <_WebDocumentZooming>)docView; 36868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return [zoomingDocView _resetZoom:sender]; 36878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 36888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if ([self _zoomMultiplier:isTextOnly] != 1.0f) 36898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [self _setZoomMultiplier:1.0f isTextOnly:isTextOnly]; 36908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 36918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 36928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)setApplicationNameForUserAgent:(NSString *)applicationName 36938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 36948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSString *name = [applicationName copy]; 36958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [_private->applicationNameForUserAgent release]; 36968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project _private->applicationNameForUserAgent = name; 36978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!_private->userAgentOverridden) 36988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project _private->userAgent = String(); 36998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 37008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 37018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (NSString *)applicationNameForUserAgent 37028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 37038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return [[_private->applicationNameForUserAgent retain] autorelease]; 37048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 37058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 37068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)setCustomUserAgent:(NSString *)userAgentString 37078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 37088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project _private->userAgent = userAgentString; 37098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project _private->userAgentOverridden = userAgentString != nil; 37108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 37118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 37128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (NSString *)customUserAgent 37138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 37148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!_private->userAgentOverridden) 37158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return nil; 37168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return _private->userAgent; 37178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 37188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 37198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)setMediaStyle:(NSString *)mediaStyle 37208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 37218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (_private->mediaStyle != mediaStyle) { 37228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [_private->mediaStyle release]; 37238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project _private->mediaStyle = [mediaStyle copy]; 37248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 37258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 37268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 37278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (NSString *)mediaStyle 37288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 37298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return _private->mediaStyle; 37308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 37318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 37328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (BOOL)supportsTextEncoding 37338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 37348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project id documentView = [[[self mainFrame] frameView] documentView]; 37358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return [documentView conformsToProtocol:@protocol(WebDocumentText)] 37368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project && [documentView supportsTextEncoding]; 37378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 37388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 37398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)setCustomTextEncodingName:(NSString *)encoding 37408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 37418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSString *oldEncoding = [self customTextEncodingName]; 37428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (encoding == oldEncoding || [encoding isEqualToString:oldEncoding]) 37438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 37440bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (Frame* mainFrame = [self _mainCoreFrame]) 3745635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project mainFrame->loader()->reloadWithOverrideEncoding(encoding); 37468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 37478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 37488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (NSString *)_mainFrameOverrideEncoding 37498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 37508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project WebDataSource *dataSource = [[self mainFrame] provisionalDataSource]; 37518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (dataSource == nil) 37528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project dataSource = [[self mainFrame] _dataSource]; 37538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (dataSource == nil) 37548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return nil; 37558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return nsStringNilIfEmpty([dataSource _documentLoader]->overrideEncoding()); 37568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 37578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 37588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (NSString *)customTextEncodingName 37598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 37608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return [self _mainFrameOverrideEncoding]; 37618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 37628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 37638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (NSString *)stringByEvaluatingJavaScriptFromString:(NSString *)script 37648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 37658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Return statements are only valid in a function but some applications pass in scripts 37668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // prefixed with return (<rdar://problems/5103720&4616860>) since older WebKit versions 37678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // silently ignored the return. If the application is linked against an earlier version 37688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // of WebKit we will strip the return so the script wont fail. 37698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!WebKitLinkedOnOrAfter(WEBKIT_FIRST_VERSION_WITHOUT_JAVASCRIPT_RETURN_QUIRK)) { 37708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSRange returnStringRange = [script rangeOfString:@"return "]; 37718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (returnStringRange.length && !returnStringRange.location) 37728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project script = [script substringFromIndex:returnStringRange.location + returnStringRange.length]; 37738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 37748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 37758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSString *result = [[self mainFrame] _stringByEvaluatingJavaScriptFromString:script]; 37768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // The only way stringByEvaluatingJavaScriptFromString can return nil is if the frame was removed by the script 37778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Since there's no way to get rid of the main frame, result will never ever be nil here. 37788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ASSERT(result); 37798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 37808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return result; 37818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 37828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 37838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (WebScriptObject *)windowScriptObject 37848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 37850bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch Frame* coreFrame = [self _mainCoreFrame]; 37868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!coreFrame) 37878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return nil; 37888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return coreFrame->script()->windowScriptObject(); 37898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 37908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 37918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// Get the appropriate user-agent string for a particular URL. 37928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (NSString *)userAgentForURL:(NSURL *)url 37938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 3794643ca7872b450ea4efacab6188849e5aac2ba161Steve Block if (_private->useSiteSpecificSpoofing) { 3795643ca7872b450ea4efacab6188849e5aac2ba161Steve Block // No current site-specific spoofs. 3796643ca7872b450ea4efacab6188849e5aac2ba161Steve Block } 3797643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 3798643ca7872b450ea4efacab6188849e5aac2ba161Steve Block if (_private->userAgent.isNull()) 3799643ca7872b450ea4efacab6188849e5aac2ba161Steve Block _private->userAgent = [[self class] _standardUserAgentWithApplicationName:_private->applicationNameForUserAgent]; 3800643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 3801643ca7872b450ea4efacab6188849e5aac2ba161Steve Block return _private->userAgent; 38028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 38038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 38048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)setHostWindow:(NSWindow *)hostWindow 38058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 3806dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (_private->closed && hostWindow) 38078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 38088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (hostWindow == _private->hostWindow) 38098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 38108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 38110bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch Frame* coreFrame = [self _mainCoreFrame]; 38120bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (_private->usesDocumentViews) { 38130bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch for (Frame* frame = coreFrame; frame; frame = frame->tree()->traverseNext(coreFrame)) 38140bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch [[[kit(frame) frameView] documentView] viewWillMoveToHostWindow:hostWindow]; 38150bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch } 38168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (_private->hostWindow && [self window] != _private->hostWindow) 38178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [[NSNotificationCenter defaultCenter] removeObserver:self name:NSWindowWillCloseNotification object:_private->hostWindow]; 38188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (hostWindow) 38198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(_windowWillClose:) name:NSWindowWillCloseNotification object:hostWindow]; 38208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [_private->hostWindow release]; 38218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project _private->hostWindow = [hostWindow retain]; 38220bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (_private->usesDocumentViews) { 38230bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch for (Frame* frame = coreFrame; frame; frame = frame->tree()->traverseNext(coreFrame)) 38240bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch [[[kit(frame) frameView] documentView] viewDidMoveToHostWindow]; 38250bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch } 38268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 38278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 38288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (NSWindow *)hostWindow 38298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 3830563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark // -[WebView hostWindow] can sometimes be called from the WebView's [super dealloc] method 3831563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark // so we check here to make sure it's not null. 3832563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (!_private) 3833563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return nil; 3834563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 38358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return _private->hostWindow; 38368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 38378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 38388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (NSView <WebDocumentView> *)documentViewAtWindowPoint:(NSPoint)point 38398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 38408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return [[self _frameViewAtWindowPoint:point] documentView]; 38418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 38428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 38438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (NSDictionary *)_elementAtWindowPoint:(NSPoint)windowPoint 38448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 38458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project WebFrameView *frameView = [self _frameViewAtWindowPoint:windowPoint]; 38468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!frameView) 38478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return nil; 38488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSView <WebDocumentView> *documentView = [frameView documentView]; 38498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if ([documentView conformsToProtocol:@protocol(WebDocumentElement)]) { 38508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSPoint point = [documentView convertPoint:windowPoint fromView:nil]; 38518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return [(NSView <WebDocumentElement> *)documentView elementAtPoint:point]; 38528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 38538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return [NSDictionary dictionaryWithObject:[frameView webFrame] forKey:WebElementFrameKey]; 38548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 38558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 38568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (NSDictionary *)elementAtPoint:(NSPoint)point 38578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 38588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return [self _elementAtWindowPoint:[self convertPoint:point toView:nil]]; 38598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 38608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 38610bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch// The following 2 internal NSView methods are called on the drag destination to make scrolling while dragging work. 38628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// Scrolling while dragging will only work if the drag destination is in a scroll view. The WebView is the drag destination. 38638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// When dragging to a WebView, the document subview should scroll, but it doesn't because it is not the drag destination. 38648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// Forward these calls to the document subview to make its scroll view scroll. 38658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)_autoscrollForDraggingInfo:(id)draggingInfo timeDelta:(NSTimeInterval)repeatDelta 38668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 38678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSView <WebDocumentView> *documentView = [self documentViewAtWindowPoint:[draggingInfo draggingLocation]]; 38688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [documentView _autoscrollForDraggingInfo:draggingInfo timeDelta:repeatDelta]; 38698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 38708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 38718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (BOOL)_shouldAutoscrollForDraggingInfo:(id)draggingInfo 38728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 38738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSView <WebDocumentView> *documentView = [self documentViewAtWindowPoint:[draggingInfo draggingLocation]]; 38748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return [documentView _shouldAutoscrollForDraggingInfo:draggingInfo]; 38758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 38768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 387765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch- (DragApplicationFlags)applicationFlags:(id <NSDraggingInfo>)draggingInfo 387865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 387965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch uint32_t flags = 0; 388065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if ([NSApp modalWindow]) 388165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch flags = DragApplicationIsModal; 388265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if ([[self window] attachedSheet]) 388365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch flags |= DragApplicationHasAttachedSheet; 388465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if ([draggingInfo draggingSource] == self) 388565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch flags |= DragApplicationIsSource; 388665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if ([[NSApp currentEvent] modifierFlags] & NSAlternateKeyMask) 388765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch flags |= DragApplicationIsCopyKeyDown; 388865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return static_cast<DragApplicationFlags>(flags); 388965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 389065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 38918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (NSDragOperation)draggingEntered:(id <NSDraggingInfo>)draggingInfo 38928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 38938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project IntPoint client([draggingInfo draggingLocation]); 38948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project IntPoint global(globalPoint([draggingInfo draggingLocation], [self window])); 389565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch DragData dragData(draggingInfo, client, global, static_cast<DragOperation>([draggingInfo draggingSourceOperationMask]), [self applicationFlags:draggingInfo]); 38968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return core(self)->dragController()->dragEntered(&dragData); 38978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 38988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 38998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (NSDragOperation)draggingUpdated:(id <NSDraggingInfo>)draggingInfo 39008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 39018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Page* page = core(self); 39028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!page) 39038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return NSDragOperationNone; 39048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 39058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project IntPoint client([draggingInfo draggingLocation]); 39068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project IntPoint global(globalPoint([draggingInfo draggingLocation], [self window])); 390765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch DragData dragData(draggingInfo, client, global, static_cast<DragOperation>([draggingInfo draggingSourceOperationMask]), [self applicationFlags:draggingInfo]); 39088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return page->dragController()->dragUpdated(&dragData); 39098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 39108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 39118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)draggingExited:(id <NSDraggingInfo>)draggingInfo 39128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 39138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Page* page = core(self); 39148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!page) 39158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 39168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 39178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project IntPoint client([draggingInfo draggingLocation]); 39188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project IntPoint global(globalPoint([draggingInfo draggingLocation], [self window])); 391965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch DragData dragData(draggingInfo, client, global, static_cast<DragOperation>([draggingInfo draggingSourceOperationMask]), [self applicationFlags:draggingInfo]); 39208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project page->dragController()->dragExited(&dragData); 39218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 39228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 39238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (BOOL)prepareForDragOperation:(id <NSDraggingInfo>)draggingInfo 39248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 39258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return YES; 39268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 39278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 39288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (BOOL)performDragOperation:(id <NSDraggingInfo>)draggingInfo 39298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 39308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project IntPoint client([draggingInfo draggingLocation]); 39318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project IntPoint global(globalPoint([draggingInfo draggingLocation], [self window])); 393265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch DragData dragData(draggingInfo, client, global, static_cast<DragOperation>([draggingInfo draggingSourceOperationMask]), [self applicationFlags:draggingInfo]); 39338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return core(self)->dragController()->performDrag(&dragData); 39348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 39358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 39360bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch- (NSView *)_hitTest:(NSPoint *)point dragTypes:(NSSet *)types 39378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 39380bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch NSView *hitView = [super _hitTest:point dragTypes:types]; 39390bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!hitView && [[self superview] mouse:*point inRect:[self frame]]) 39408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return self; 39410bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return hitView; 39428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 39438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 39448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (BOOL)acceptsFirstResponder 39458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 39460bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (_private->usesDocumentViews) 39470bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return [[[self mainFrame] frameView] acceptsFirstResponder]; 39480bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 39490bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch // FIXME (Viewless): Need more code from WebHTMLView here. 39500bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return YES; 39518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 39528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 39538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (BOOL)becomeFirstResponder 39548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 39550bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (_private->usesDocumentViews) { 39560bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (_private->becomingFirstResponder) { 39570bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch // Fix for unrepro infinite recursion reported in Radar 4448181. If we hit this assert on 39580bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch // a debug build, we should figure out what causes the problem and do a better fix. 39590bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch ASSERT_NOT_REACHED(); 39600bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return NO; 39610bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch } 39620bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 39630bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch // This works together with setNextKeyView to splice the WebView into 39640bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch // the key loop similar to the way NSScrollView does this. Note that 39650bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch // WebFrameView has very similar code. 39660bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch NSWindow *window = [self window]; 39670bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch WebFrameView *mainFrameView = [[self mainFrame] frameView]; 39680bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 39690bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch NSResponder *previousFirstResponder = [[self window] _oldFirstResponderBeforeBecoming]; 39700bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch BOOL fromOutside = ![previousFirstResponder isKindOfClass:[NSView class]] || (![(NSView *)previousFirstResponder isDescendantOf:self] && previousFirstResponder != self); 39710bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 39720bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if ([window keyViewSelectionDirection] == NSSelectingPrevious) { 39730bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch NSView *previousValidKeyView = [self previousValidKeyView]; 39740bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (previousValidKeyView != self && previousValidKeyView != mainFrameView) { 39750bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch _private->becomingFirstResponder = YES; 39760bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch _private->becomingFirstResponderFromOutside = fromOutside; 39770bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch [window makeFirstResponder:previousValidKeyView]; 39780bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch _private->becomingFirstResponderFromOutside = NO; 39790bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch _private->becomingFirstResponder = NO; 39800bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return YES; 39810bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch } 39820bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return NO; 39830bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch } 39848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 39850bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if ([mainFrameView acceptsFirstResponder]) { 39868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project _private->becomingFirstResponder = YES; 39878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project _private->becomingFirstResponderFromOutside = fromOutside; 39880bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch [window makeFirstResponder:mainFrameView]; 39898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project _private->becomingFirstResponderFromOutside = NO; 39908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project _private->becomingFirstResponder = NO; 39918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return YES; 39920bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch } 39930bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 39940bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return NO; 39958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 39960bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 39970bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch // FIXME (Viewless): Need more code from WebHTMLView here. 39980bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return YES; 39998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 40008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 40018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (NSView *)_webcore_effectiveFirstResponder 40028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 40030bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (_private && _private->usesDocumentViews) { 40040bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (WebFrameView *frameView = [[self mainFrame] frameView]) 40050bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return [frameView _webcore_effectiveFirstResponder]; 40060bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch } 40070bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return [super _webcore_effectiveFirstResponder]; 40088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 40098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 40100bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch- (void)setNextKeyView:(NSView *)view 40118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 40120bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (_private && _private->usesDocumentViews) { 40130bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch // This works together with becomeFirstResponder to splice the WebView into 40140bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch // the key loop similar to the way NSScrollView does this. Note that 40150bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch // WebFrameView has similar code. 40160bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (WebFrameView *mainFrameView = [[self mainFrame] frameView]) { 40170bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch [mainFrameView setNextKeyView:view]; 40180bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return; 40190bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch } 40208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 40210bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 40220bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch [super setNextKeyView:view]; 40238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 40248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4025f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochstatic WebFrame *incrementFrame(WebFrame *frame, WebFindOptions options = 0) 40268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 40270bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch Frame* coreFrame = core(frame); 4028f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch return kit((options & WebFindOptionsBackwards) 4029f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch ? coreFrame->tree()->traversePreviousWithWrap(options & WebFindOptionsWrapAround) 4030f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch : coreFrame->tree()->traverseNextWithWrap(options & WebFindOptionsWrapAround)); 40318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 40328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 40338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (BOOL)searchFor:(NSString *)string direction:(BOOL)forward caseSensitive:(BOOL)caseFlag wrap:(BOOL)wrapFlag 40348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 40358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return [self searchFor:string direction:forward caseSensitive:caseFlag wrap:wrapFlag startInSelection:NO]; 40368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 40378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 40388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project+ (void)registerViewClass:(Class)viewClass representationClass:(Class)representationClass forMIMEType:(NSString *)MIMEType 40398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 40408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [[WebFrameView _viewTypesAllowImageTypeOmission:YES] setObject:viewClass forKey:MIMEType]; 40418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [[WebDataSource _repTypesAllowImageTypeOmission:YES] setObject:representationClass forKey:MIMEType]; 40428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 40438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // FIXME: We also need to maintain MIMEType registrations (which can be dynamically changed) 40448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // in the WebCore MIMEType registry. For now we're doing this in a safe, limited manner 40458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // to fix <rdar://problem/5372989> - a future revamping of the entire system is neccesary for future robustness 40468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if ([viewClass class] == [WebHTMLView class]) 40478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project MIMETypeRegistry::getSupportedNonImageMIMETypes().add(MIMEType); 40488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 40498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 40508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)setGroupName:(NSString *)groupName 40518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 40528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!_private->page) 40538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 40548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project _private->page->setGroupName(groupName); 40558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 40568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 40578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (NSString *)groupName 40588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 40598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!_private->page) 40608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return nil; 40618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return _private->page->groupName(); 40628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 40638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 40648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (double)estimatedProgress 40658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 40668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!_private->page) 40678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return 0.0; 40688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return _private->page->progress()->estimatedProgress(); 40698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 40708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 40718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (NSArray *)pasteboardTypesForSelection 40728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 40738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSView <WebDocumentView> *documentView = [[[self _selectedOrMainFrame] frameView] documentView]; 40748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if ([documentView conformsToProtocol:@protocol(WebDocumentSelection)]) { 40758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return [(NSView <WebDocumentSelection> *)documentView pasteboardTypesForSelection]; 40768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 40778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return [NSArray array]; 40788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 40798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 40808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)writeSelectionWithPasteboardTypes:(NSArray *)types toPasteboard:(NSPasteboard *)pasteboard 40818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 40828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project WebFrame *frame = [self _selectedOrMainFrame]; 40838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (frame && [frame _hasSelection]) { 40848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSView <WebDocumentView> *documentView = [[frame frameView] documentView]; 40858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if ([documentView conformsToProtocol:@protocol(WebDocumentSelection)]) 40868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [(NSView <WebDocumentSelection> *)documentView writeSelectionWithPasteboardTypes:types toPasteboard:pasteboard]; 40878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 40888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 40898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 40908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (NSArray *)pasteboardTypesForElement:(NSDictionary *)element 40918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 40928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if ([element objectForKey:WebElementImageURLKey] != nil) { 40938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return [NSPasteboard _web_writableTypesForImageIncludingArchive:([element objectForKey:WebElementDOMNodeKey] != nil)]; 40948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } else if ([element objectForKey:WebElementLinkURLKey] != nil) { 40958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return [NSPasteboard _web_writableTypesForURL]; 40968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } else if ([[element objectForKey:WebElementIsSelectedKey] boolValue]) { 40978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return [self pasteboardTypesForSelection]; 40988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 40998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return [NSArray array]; 41008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 41018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 41028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)writeElement:(NSDictionary *)element withPasteboardTypes:(NSArray *)types toPasteboard:(NSPasteboard *)pasteboard 41038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 41048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if ([element objectForKey:WebElementImageURLKey] != nil) { 41058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [self _writeImageForElement:element withPasteboardTypes:types toPasteboard:pasteboard]; 41068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } else if ([element objectForKey:WebElementLinkURLKey] != nil) { 41078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [self _writeLinkElement:element withPasteboardTypes:types toPasteboard:pasteboard]; 41088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } else if ([[element objectForKey:WebElementIsSelectedKey] boolValue]) { 41098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [self writeSelectionWithPasteboardTypes:types toPasteboard:pasteboard]; 41108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 41118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 41128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 41138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)moveDragCaretToPoint:(NSPoint)point 41148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 41158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (Page* page = core(self)) 41168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project page->dragController()->placeDragCaret(IntPoint([self convertPoint:point toView:nil])); 41178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 41188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 41198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)removeDragCaret 41208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 41218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (Page* page = core(self)) 41228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project page->dragController()->dragEnded(); 41238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 41248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 41258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)setMainFrameURL:(NSString *)URLString 41268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 41278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [[self mainFrame] loadRequest: [NSURLRequest requestWithURL: [NSURL _web_URLWithDataAsString: URLString]]]; 41288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 41298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 41308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (NSString *)mainFrameURL 41318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 41328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project WebDataSource *ds; 41338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ds = [[self mainFrame] provisionalDataSource]; 41348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!ds) 41358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ds = [[self mainFrame] _dataSource]; 41368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return [[[ds request] URL] _web_originalDataAsString]; 41378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 41388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 41398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (BOOL)isLoading 41408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 41418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project LOG (Bindings, "isLoading = %d", (int)[self _isLoading]); 41428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return [self _isLoading]; 41438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 41448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 41458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (NSString *)mainFrameTitle 41468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 41478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSString *mainFrameTitle = [[[self mainFrame] _dataSource] pageTitle]; 41488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return (mainFrameTitle != nil) ? mainFrameTitle : (NSString *)@""; 41498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 41508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 41518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (NSImage *)mainFrameIcon 41528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 41538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return [[WebIconDatabase sharedIconDatabase] iconForURL:[[[[self mainFrame] _dataSource] _URL] _web_originalDataAsString] withSize:WebIconSmallSize]; 41548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 41558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 41568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (DOMDocument *)mainFrameDocument 41578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 41588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // only return the actual value if the state we're in gives NSTreeController 41598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // enough time to release its observers on the old model 41608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (_private->mainFrameDocumentReady) 41618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return [[self mainFrame] DOMDocument]; 41628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return nil; 41638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 41648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 41658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)setDrawsBackground:(BOOL)drawsBackground 41668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 41678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (_private->drawsBackground == drawsBackground) 41688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 41698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project _private->drawsBackground = drawsBackground; 41708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [[self mainFrame] _updateBackgroundAndUpdatesWhileOffscreen]; 41718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 41728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 41738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (BOOL)drawsBackground 41748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 4175635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project // This method can be called beneath -[NSView dealloc] after we have cleared _private, 4176635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project // indirectly via -[WebFrameView viewDidMoveToWindow]. 4177635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return !_private || _private->drawsBackground; 41788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 41798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 41808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)setShouldUpdateWhileOffscreen:(BOOL)updateWhileOffscreen 41818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 41828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (_private->shouldUpdateWhileOffscreen == updateWhileOffscreen) 41838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 41848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project _private->shouldUpdateWhileOffscreen = updateWhileOffscreen; 41858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [[self mainFrame] _updateBackgroundAndUpdatesWhileOffscreen]; 41868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 41878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 41888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (BOOL)shouldUpdateWhileOffscreen 41898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 41908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return _private->shouldUpdateWhileOffscreen; 41918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 41928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 41938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)setCurrentNodeHighlight:(WebNodeHighlight *)nodeHighlight 41948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 41958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project id old = _private->currentNodeHighlight; 41968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project _private->currentNodeHighlight = [nodeHighlight retain]; 41978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [old release]; 41988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 41998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 42008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (WebNodeHighlight *)currentNodeHighlight 42018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 42028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return _private->currentNodeHighlight; 42038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 42048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 42050bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch- (NSView *)previousValidKeyView 42060bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 42070bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch NSView *result = [super previousValidKeyView]; 42080bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 42090bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch // Work around AppKit bug 6905484. If the result is a view that's inside this one, it's 42100bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch // possible it is the wrong answer, because the fact that it's a descendant causes the 42110bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch // code that implements key view redirection to fail; this means we won't redirect to 42120bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch // the toolbar, for example, when we hit the edge of a window. Since the bug is specific 42130bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch // to cases where the receiver of previousValidKeyView is an ancestor of the last valid 42140bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch // key view in the loop, we can sidestep it by walking along previous key views until 42150bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch // we find one that is not a superview, then using that to call previousValidKeyView. 42160bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 42170bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (![result isDescendantOf:self]) 42180bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return result; 42190bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 42200bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch // Use a visited set so we don't loop indefinitely when walking crazy key loops. 42210bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch // AppKit uses such sets internally and we want our loop to be as robust as its loops. 42220bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch RetainPtr<CFMutableSetRef> visitedViews = CFSetCreateMutable(0, 0, 0); 42230bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch CFSetAddValue(visitedViews.get(), result); 42240bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 42250bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch NSView *previousView = self; 42260bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch do { 42270bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch CFSetAddValue(visitedViews.get(), previousView); 42280bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch previousView = [previousView previousKeyView]; 42290bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!previousView || CFSetGetValue(visitedViews.get(), previousView)) 42300bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return result; 42310bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch } while ([result isDescendantOf:previousView]); 42320bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return [previousView previousValidKeyView]; 42330bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 42340bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 42358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project@end 42368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 42378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project@implementation WebView (WebIBActions) 42388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 42398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (IBAction)takeStringURLFrom: sender 42408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 42418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSString *URLString = [sender stringValue]; 42428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 42438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [[self mainFrame] loadRequest: [NSURLRequest requestWithURL: [NSURL _web_URLWithDataAsString: URLString]]]; 42448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 42458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 42468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (BOOL)canGoBack 42478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 4248f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick if (!_private->page || _private->page->defersLoading()) 42498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return NO; 42508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 42518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return !!_private->page->backForwardList()->backItem(); 42528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 42538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 42548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (BOOL)canGoForward 42558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 4256f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick if (!_private->page || _private->page->defersLoading()) 42578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return NO; 42588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 42598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return !!_private->page->backForwardList()->forwardItem(); 42608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 42618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 42628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (IBAction)goBack:(id)sender 42638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 42648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [self goBack]; 42658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 42668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 42678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (IBAction)goForward:(id)sender 42688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 42698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [self goForward]; 42708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 42718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 42728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (IBAction)stopLoading:(id)sender 42738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 42748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [[self mainFrame] stopLoading]; 42758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 42768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 42778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (IBAction)reload:(id)sender 42788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 42798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [[self mainFrame] reload]; 42808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 42818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4282635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project- (IBAction)reloadFromOrigin:(id)sender 4283635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project{ 4284635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project [[self mainFrame] reloadFromOrigin]; 4285635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project} 4286635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 42878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// FIXME: This code should move into WebCore so that it is not duplicated in each WebKit. 42888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// (This includes canMakeTextSmaller/Larger, makeTextSmaller/Larger, and canMakeTextStandardSize/makeTextStandardSize) 42898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (BOOL)canMakeTextSmaller 42908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 42918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return [self _canZoomOut:![[NSUserDefaults standardUserDefaults] boolForKey:WebKitDebugFullPageZoomPreferenceKey]]; 42928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 42938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 42948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (IBAction)makeTextSmaller:(id)sender 42958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 42968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return [self _zoomOut:sender isTextOnly:![[NSUserDefaults standardUserDefaults] boolForKey:WebKitDebugFullPageZoomPreferenceKey]]; 42978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 42988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 42998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (BOOL)canMakeTextLarger 43008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 43018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return [self _canZoomIn:![[NSUserDefaults standardUserDefaults] boolForKey:WebKitDebugFullPageZoomPreferenceKey]]; 43028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 43038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 43048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (IBAction)makeTextLarger:(id)sender 43058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 43068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return [self _zoomIn:sender isTextOnly:![[NSUserDefaults standardUserDefaults] boolForKey:WebKitDebugFullPageZoomPreferenceKey]]; 43078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 43088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 43098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (BOOL)canMakeTextStandardSize 43108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 43118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return [self _canResetZoom:![[NSUserDefaults standardUserDefaults] boolForKey:WebKitDebugFullPageZoomPreferenceKey]]; 43128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 43138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 43148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (IBAction)makeTextStandardSize:(id)sender 43158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 43168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return [self _resetZoom:sender isTextOnly:![[NSUserDefaults standardUserDefaults] boolForKey:WebKitDebugFullPageZoomPreferenceKey]]; 43178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 43188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 43198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (IBAction)toggleSmartInsertDelete:(id)sender 43208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 43218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [self setSmartInsertDeleteEnabled:![self smartInsertDeleteEnabled]]; 43228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 43238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 43248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (IBAction)toggleContinuousSpellChecking:(id)sender 43258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 43268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [self setContinuousSpellCheckingEnabled:![self isContinuousSpellCheckingEnabled]]; 43278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 43288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 43298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (BOOL)_responderValidateUserInterfaceItem:(id <NSValidatedUserInterfaceItem>)item 43308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 43318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project id responder = [self _responderForResponderOperations]; 43328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (responder != self && [responder respondsToSelector:[item action]]) { 43338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if ([responder respondsToSelector:@selector(validateUserInterfaceItemWithoutDelegate:)]) 43348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return [responder validateUserInterfaceItemWithoutDelegate:item]; 43358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if ([responder respondsToSelector:@selector(validateUserInterfaceItem:)]) 43368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return [responder validateUserInterfaceItem:item]; 43378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return YES; 43388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 43398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return NO; 43408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 43418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 43428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define VALIDATE(name) \ 43438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project else if (action == @selector(name:)) { return [self _responderValidateUserInterfaceItem:item]; } 43448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 43458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (BOOL)validateUserInterfaceItemWithoutDelegate:(id <NSValidatedUserInterfaceItem>)item 43468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 43478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project SEL action = [item action]; 43488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 43498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (action == @selector(goBack:)) { 43508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return [self canGoBack]; 43518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } else if (action == @selector(goForward:)) { 43528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return [self canGoForward]; 43538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } else if (action == @selector(makeTextLarger:)) { 43548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return [self canMakeTextLarger]; 43558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } else if (action == @selector(makeTextSmaller:)) { 43568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return [self canMakeTextSmaller]; 43578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } else if (action == @selector(makeTextStandardSize:)) { 43588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return [self canMakeTextStandardSize]; 43598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } else if (action == @selector(reload:)) { 43608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return [[self mainFrame] _dataSource] != nil; 43618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } else if (action == @selector(stopLoading:)) { 43628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return [self _isLoading]; 43638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } else if (action == @selector(toggleContinuousSpellChecking:)) { 43648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project BOOL checkMark = NO; 43658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project BOOL retVal = NO; 43668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if ([self _continuousCheckingAllowed]) { 43678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project checkMark = [self isContinuousSpellCheckingEnabled]; 43688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project retVal = YES; 43698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 43708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if ([(NSObject *)item isKindOfClass:[NSMenuItem class]]) { 43718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSMenuItem *menuItem = (NSMenuItem *)item; 43728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [menuItem setState:checkMark ? NSOnState : NSOffState]; 43738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 43748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return retVal; 43750bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch } else if (action == @selector(toggleSmartInsertDelete:)) { 43760bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch BOOL checkMark = [self smartInsertDeleteEnabled]; 43770bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if ([(NSObject *)item isKindOfClass:[NSMenuItem class]]) { 43780bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch NSMenuItem *menuItem = (NSMenuItem *)item; 43790bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch [menuItem setState:checkMark ? NSOnState : NSOffState]; 43800bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch } 43810bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return YES; 43828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#ifndef BUILDING_ON_TIGER 43838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } else if (action == @selector(toggleGrammarChecking:)) { 43848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project BOOL checkMark = [self isGrammarCheckingEnabled]; 43858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if ([(NSObject *)item isKindOfClass:[NSMenuItem class]]) { 43868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSMenuItem *menuItem = (NSMenuItem *)item; 43878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [menuItem setState:checkMark ? NSOnState : NSOffState]; 43888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 43898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return YES; 43908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 43910bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#if !defined(BUILDING_ON_TIGER) && !defined(BUILDING_ON_LEOPARD) 43920bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch } else if (action == @selector(toggleAutomaticQuoteSubstitution:)) { 43930bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch BOOL checkMark = [self isAutomaticQuoteSubstitutionEnabled]; 43940bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if ([(NSObject *)item isKindOfClass:[NSMenuItem class]]) { 43950bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch NSMenuItem *menuItem = (NSMenuItem *)item; 43960bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch [menuItem setState:checkMark ? NSOnState : NSOffState]; 43970bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch } 43980bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return YES; 43990bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch } else if (action == @selector(toggleAutomaticLinkDetection:)) { 44000bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch BOOL checkMark = [self isAutomaticLinkDetectionEnabled]; 44010bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if ([(NSObject *)item isKindOfClass:[NSMenuItem class]]) { 44020bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch NSMenuItem *menuItem = (NSMenuItem *)item; 44030bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch [menuItem setState:checkMark ? NSOnState : NSOffState]; 44040bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch } 44050bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return YES; 44060bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch } else if (action == @selector(toggleAutomaticDashSubstitution:)) { 44070bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch BOOL checkMark = [self isAutomaticDashSubstitutionEnabled]; 44080bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if ([(NSObject *)item isKindOfClass:[NSMenuItem class]]) { 44090bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch NSMenuItem *menuItem = (NSMenuItem *)item; 44100bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch [menuItem setState:checkMark ? NSOnState : NSOffState]; 44110bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch } 44120bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return YES; 44130bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch } else if (action == @selector(toggleAutomaticTextReplacement:)) { 44140bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch BOOL checkMark = [self isAutomaticTextReplacementEnabled]; 44150bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if ([(NSObject *)item isKindOfClass:[NSMenuItem class]]) { 44160bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch NSMenuItem *menuItem = (NSMenuItem *)item; 44170bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch [menuItem setState:checkMark ? NSOnState : NSOffState]; 44180bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch } 44190bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return YES; 44200bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch } else if (action == @selector(toggleAutomaticSpellingCorrection:)) { 44210bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch BOOL checkMark = [self isAutomaticSpellingCorrectionEnabled]; 44220bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if ([(NSObject *)item isKindOfClass:[NSMenuItem class]]) { 44230bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch NSMenuItem *menuItem = (NSMenuItem *)item; 44240bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch [menuItem setState:checkMark ? NSOnState : NSOffState]; 44250bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch } 44260bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return YES; 44270bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#endif 44288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 44298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project FOR_EACH_RESPONDER_SELECTOR(VALIDATE) 44308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 44318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return YES; 44328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 44338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 44348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (BOOL)validateUserInterfaceItem:(id <NSValidatedUserInterfaceItem>)item 44358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 44368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project BOOL result = [self validateUserInterfaceItemWithoutDelegate:item]; 44378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return CallUIDelegateReturningBoolean(result, self, @selector(webView:validateUserInterfaceItem:defaultValidation:), item, result); 44388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 44398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 44408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project@end 44418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 44428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project@implementation WebView (WebPendingPublic) 44438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 44448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)scheduleInRunLoop:(NSRunLoop *)runLoop forMode:(NSString *)mode 44458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 44468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (runLoop && mode) 44478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project core(self)->addSchedulePair(SchedulePair::create(runLoop, (CFStringRef)mode)); 44488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 44498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 44508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)unscheduleFromRunLoop:(NSRunLoop *)runLoop forMode:(NSString *)mode 44518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 44528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (runLoop && mode) 44538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project core(self)->removeSchedulePair(SchedulePair::create(runLoop, (CFStringRef)mode)); 44548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 44558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4456f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochstatic BOOL findString(NSView <WebDocumentSearching> *searchView, NSString *string, WebFindOptions options) 4457f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch{ 4458f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch if ([searchView conformsToProtocol:@protocol(WebDocumentOptionsSearching)]) 4459cad810f21b803229eb11403f9209855525a25d57Steve Block return [(NSView <WebDocumentOptionsSearching> *)searchView _findString:string options:options]; 4460f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch if ([searchView conformsToProtocol:@protocol(WebDocumentIncrementalSearching)]) 4461f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch return [(NSView <WebDocumentIncrementalSearching> *)searchView searchFor:string direction:!(options & WebFindOptionsBackwards) caseSensitive:!(options & WebFindOptionsCaseInsensitive) wrap:!!(options & WebFindOptionsWrapAround) startInSelection:!!(options & WebFindOptionsStartInSelection)]; 4462f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch return [searchView searchFor:string direction:!(options & WebFindOptionsBackwards) caseSensitive:!(options & WebFindOptionsCaseInsensitive) wrap:!!(options & WebFindOptionsWrapAround)]; 4463f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch} 4464f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 4465f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch- (BOOL)findString:(NSString *)string options:(WebFindOptions)options 44668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 44678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (_private->closed) 44688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return NO; 44698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 44708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Get the frame holding the selection, or start with the main frame 44718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project WebFrame *startFrame = [self _selectedOrMainFrame]; 44728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 44738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Search the first frame, then all the other frames, in order 44748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSView <WebDocumentSearching> *startSearchView = nil; 44758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project WebFrame *frame = startFrame; 44768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project do { 4477f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch WebFrame *nextFrame = incrementFrame(frame, options); 44788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 44798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project BOOL onlyOneFrame = (frame == nextFrame); 44808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ASSERT(!onlyOneFrame || frame == startFrame); 44818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 44828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project id <WebDocumentView> view = [[frame frameView] documentView]; 44838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if ([view conformsToProtocol:@protocol(WebDocumentSearching)]) { 44848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSView <WebDocumentSearching> *searchView = (NSView <WebDocumentSearching> *)view; 44858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 44868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (frame == startFrame) 44878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project startSearchView = searchView; 44888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 44898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // In some cases we have to search some content twice; see comment later in this method. 4490f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch // We can avoid ever doing this in the common one-frame case by passing the wrap option through 44918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // here, and then bailing out before we get to the code that would search again in the 44928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // same content. 4493f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch WebFindOptions optionsForThisPass = onlyOneFrame ? options : (options & ~WebFindOptionsWrapAround); 4494f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 4495f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch if (findString(searchView, string, optionsForThisPass)) { 44968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (frame != startFrame) 44978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [startFrame _clearSelection]; 44988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [[self window] makeFirstResponder:searchView]; 44998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return YES; 45008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 45018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 45028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (onlyOneFrame) 45038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return NO; 45048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 45058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project frame = nextFrame; 45068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } while (frame && frame != startFrame); 45078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4508f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch // If there are multiple frames and WebFindOptionsWrapAround is set and we've visited each one without finding a result, we still need to search in the 45098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // first-searched frame up to the selection. However, the API doesn't provide a way to search only up to a particular point. The only 4510f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch // way to make sure the entire frame is searched is to pass WebFindOptionsWrapAround. When there are no matches, this will search 45118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // some content that we already searched on the first pass. In the worst case, we could search the entire contents of this frame twice. 45128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // To fix this, we'd need to add a mechanism to specify a range in which to search. 4513f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch if ((options & WebFindOptionsWrapAround) && startSearchView) { 4514f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch if (findString(startSearchView, string, options)) { 45158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [[self window] makeFirstResponder:startSearchView]; 45168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return YES; 45178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 45188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 45198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return NO; 45208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 45218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 45228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)setHoverFeedbackSuspended:(BOOL)newValue 45238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 45248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (_private->hoverFeedbackSuspended == newValue) 45258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 45268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 45278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project _private->hoverFeedbackSuspended = newValue; 45280bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 45290bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (_private->usesDocumentViews) { 45300bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch id <WebDocumentView> documentView = [[[self mainFrame] frameView] documentView]; 45310bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch // FIXME: in a perfect world we'd do this in a general way that worked with any document view, 45320bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch // such as by calling a protocol method or using respondsToSelector or sending a notification. 45330bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch // But until there is any need for these more general solutions, we'll just hardwire it to work 45340bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch // with WebHTMLView. 45350bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch // Note that _hoverFeedbackSuspendedChanged needs to be called only on the main WebHTMLView, not 45360bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch // on each subframe separately. 45370bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if ([documentView isKindOfClass:[WebHTMLView class]]) 45380bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch [(WebHTMLView *)documentView _hoverFeedbackSuspendedChanged]; 45390bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return; 45400bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch } 45410bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 45420bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch [self _updateMouseoverWithFakeEvent]; 45438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 45448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 45458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (BOOL)isHoverFeedbackSuspended 45468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 45478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return _private->hoverFeedbackSuspended; 45488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 45498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 45508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)setMainFrameDocumentReady:(BOOL)mainFrameDocumentReady 45518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 45528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // by setting this to NO, calls to mainFrameDocument are forced to return nil 45538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // setting this to YES lets it return the actual DOMDocument value 45548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // we use this to tell NSTreeController to reset its observers and clear its state 45558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (_private->mainFrameDocumentReady == mainFrameDocumentReady) 45568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 45578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [self _willChangeValueForKey:_WebMainFrameDocumentKey]; 45588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project _private->mainFrameDocumentReady = mainFrameDocumentReady; 45598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [self _didChangeValueForKey:_WebMainFrameDocumentKey]; 45608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // this will cause observers to call mainFrameDocument where this flag will be checked 45618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 45628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 45638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// This method name is used by Mail on Tiger (but not post-Tiger), so we shouldn't delete it 45648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// until the day comes when we're no longer supporting Mail on Tiger. 45658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (WebFrame *)_frameForCurrentSelection 45668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 45678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return [self _selectedOrMainFrame]; 45688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 45698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 45708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)setTabKeyCyclesThroughElements:(BOOL)cyclesElements 45718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 45728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project _private->tabKeyCyclesThroughElementsChanged = YES; 45738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (_private->page) 45748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project _private->page->setTabKeyCyclesThroughElements(cyclesElements); 45758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 45768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 45778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (BOOL)tabKeyCyclesThroughElements 45788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 45798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return _private->page && _private->page->tabKeyCyclesThroughElements(); 45808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 45818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 45828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)setScriptDebugDelegate:(id)delegate 45838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 45848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project _private->scriptDebugDelegate = delegate; 4585563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark [self _cacheScriptDebugDelegateImplementations]; 4586563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 45878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (delegate) 45888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [self _attachScriptDebuggerToAllFrames]; 45898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project else 45908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [self _detachScriptDebuggerFromAllFrames]; 45918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 45928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 45938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (id)scriptDebugDelegate 45948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 45958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return _private->scriptDebugDelegate; 45968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 4597231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 4598231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block- (void)setHistoryDelegate:(id)delegate 4599231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block{ 4600231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block _private->historyDelegate = delegate; 4601231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block [self _cacheHistoryDelegateImplementations]; 4602231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block} 4603231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 4604231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block- (id)historyDelegate 4605231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block{ 4606231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block return _private->historyDelegate; 4607231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block} 46088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 46098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (BOOL)shouldClose 46108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 46110bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch Frame* coreFrame = [self _mainCoreFrame]; 46128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!coreFrame) 46138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return YES; 461406ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen return coreFrame->loader()->shouldClose(); 46158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 46168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 46170bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochstatic NSAppleEventDescriptor* aeDescFromJSValue(ExecState* exec, JSValue jsValue) 46188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 46198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSAppleEventDescriptor* aeDesc = 0; 4620635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project if (jsValue.isBoolean()) 4621635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return [NSAppleEventDescriptor descriptorWithBoolean:jsValue.getBoolean()]; 4622635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project if (jsValue.isString()) 4623dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return [NSAppleEventDescriptor descriptorWithString:ustringToString(jsValue.getString(exec))]; 4624635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project if (jsValue.isNumber()) { 4625635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project double value = jsValue.uncheckedGetNumber(); 46268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project int intValue = value; 46278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (value == intValue) 46288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return [NSAppleEventDescriptor descriptorWithDescriptorType:typeSInt32 bytes:&intValue length:sizeof(intValue)]; 46298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return [NSAppleEventDescriptor descriptorWithDescriptorType:typeIEEE64BitFloatingPoint bytes:&value length:sizeof(value)]; 46308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 4631635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project if (jsValue.isObject()) { 4632635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project JSObject* object = jsValue.getObject(); 463381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch if (object->inherits(&DateInstance::s_info)) { 46348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project DateInstance* date = static_cast<DateInstance*>(object); 4635cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block double ms = date->internalNumber(); 4636cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block if (!isnan(ms)) { 46378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project CFAbsoluteTime utcSeconds = ms / 1000 - kCFAbsoluteTimeIntervalSince1970; 46388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project LongDateTime ldt; 46398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (noErr == UCConvertCFAbsoluteTimeToLongDateTime(utcSeconds, &ldt)) 46408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return [NSAppleEventDescriptor descriptorWithDescriptorType:typeLongDateTime bytes:&ldt length:sizeof(ldt)]; 46418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 46428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 464381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch else if (object->inherits(&JSArray::s_info)) { 4644635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project DEFINE_STATIC_LOCAL(HashSet<JSObject*>, visitedElems, ()); 46458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!visitedElems.contains(object)) { 46468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project visitedElems.add(object); 46478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 46488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project JSArray* array = static_cast<JSArray*>(object); 46498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project aeDesc = [NSAppleEventDescriptor listDescriptor]; 46508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project unsigned numItems = array->length(); 46518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project for (unsigned i = 0; i < numItems; ++i) 46528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [aeDesc insertDescriptor:aeDescFromJSValue(exec, array->get(exec, i)) atIndex:0]; 46538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 46548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project visitedElems.remove(object); 46558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return aeDesc; 46568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 46578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 46580bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch JSValue primitive = object->toPrimitive(exec); 46598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (exec->hadException()) { 46608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project exec->clearException(); 46618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return [NSAppleEventDescriptor nullDescriptor]; 46628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 46638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return aeDescFromJSValue(exec, primitive); 46648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 4665635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project if (jsValue.isUndefined()) 46668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return [NSAppleEventDescriptor descriptorWithTypeCode:cMissingValue]; 4667635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project ASSERT(jsValue.isNull()); 46688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return [NSAppleEventDescriptor nullDescriptor]; 46698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 46708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 46718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (NSAppleEventDescriptor *)aeDescByEvaluatingJavaScriptFromString:(NSString *)script 46728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 46730bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch Frame* coreFrame = [self _mainCoreFrame]; 46748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!coreFrame) 46758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return nil; 46768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!coreFrame->document()) 46778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return nil; 4678cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block JSValue result = coreFrame->script()->executeScript(script, true).jsValue(); 46798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!result) // FIXME: pass errors 46808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return 0; 46810bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch JSLock lock(SilenceAssertionsOnly); 4682cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block return aeDescFromJSValue(coreFrame->script()->globalObject(mainThreadNormalWorld())->globalExec(), result); 46838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 46848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 46858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (BOOL)canMarkAllTextMatches 46868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 468768513a70bcd92384395513322f1b801e7bf9c729Steve Block if (_private->closed) 468868513a70bcd92384395513322f1b801e7bf9c729Steve Block return NO; 468968513a70bcd92384395513322f1b801e7bf9c729Steve Block 46908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project WebFrame *frame = [self mainFrame]; 46918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project do { 46928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project id <WebDocumentView> view = [[frame frameView] documentView]; 46938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (view && ![view conformsToProtocol:@protocol(WebMultipleTextMatches)]) 46948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return NO; 46958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4696f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch frame = incrementFrame(frame); 46978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } while (frame); 46988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 46998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return YES; 47008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 47018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4702f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch- (NSUInteger)countMatchesForText:(NSString *)string options:(WebFindOptions)options highlight:(BOOL)highlight limit:(NSUInteger)limit markMatches:(BOOL)markMatches 4703d06194330da2bb8da887d2e1adeacb3a5c1504b2Steve Block{ 4704f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch return [self countMatchesForText:string inDOMRange:nil options:options highlight:highlight limit:limit markMatches:markMatches]; 4705d06194330da2bb8da887d2e1adeacb3a5c1504b2Steve Block} 4706d06194330da2bb8da887d2e1adeacb3a5c1504b2Steve Block 4707f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch- (NSUInteger)countMatchesForText:(NSString *)string inDOMRange:(DOMRange *)range options:(WebFindOptions)options highlight:(BOOL)highlight limit:(NSUInteger)limit markMatches:(BOOL)markMatches 47085ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen{ 47095abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick if (_private->closed) 47105abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick return 0; 47115abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick 47128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project WebFrame *frame = [self mainFrame]; 47138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project unsigned matchCount = 0; 47148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project do { 47158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project id <WebDocumentView> view = [[frame frameView] documentView]; 47168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if ([view conformsToProtocol:@protocol(WebMultipleTextMatches)]) { 47175ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen if (markMatches) 47185ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen [(NSView <WebMultipleTextMatches>*)view setMarkedTextMatchesAreHighlighted:highlight]; 47198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 47208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ASSERT(limit == 0 || matchCount < limit); 4721f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch matchCount += [(NSView <WebMultipleTextMatches>*)view countMatchesForText:string inDOMRange:range options:options limit:(limit == 0 ? 0 : limit - matchCount) markMatches:markMatches]; 47228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 47238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Stop looking if we've reached the limit. A limit of 0 means no limit. 47248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (limit > 0 && matchCount >= limit) 47258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project break; 47268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 47278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4728f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch frame = incrementFrame(frame); 47298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } while (frame); 47308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 47318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return matchCount; 47328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 47338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 47348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)unmarkAllTextMatches 47358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 47365abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick if (_private->closed) 47375abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick return; 47385abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick 47398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project WebFrame *frame = [self mainFrame]; 47408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project do { 47418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project id <WebDocumentView> view = [[frame frameView] documentView]; 47428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if ([view conformsToProtocol:@protocol(WebMultipleTextMatches)]) 47438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [(NSView <WebMultipleTextMatches>*)view unmarkAllTextMatches]; 47448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4745f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch frame = incrementFrame(frame); 47468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } while (frame); 47478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 47488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 47498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (NSArray *)rectsForTextMatches 47508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 47515abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick if (_private->closed) 47525abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick return [NSArray array]; 47535abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick 47548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSMutableArray *result = [NSMutableArray array]; 47558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project WebFrame *frame = [self mainFrame]; 47568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project do { 47578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project id <WebDocumentView> view = [[frame frameView] documentView]; 47588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if ([view conformsToProtocol:@protocol(WebMultipleTextMatches)]) { 47598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSView <WebMultipleTextMatches> *documentView = (NSView <WebMultipleTextMatches> *)view; 47608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSRect documentViewVisibleRect = [documentView visibleRect]; 47618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSArray *originalRects = [documentView rectsForTextMatches]; 47628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project unsigned rectCount = [originalRects count]; 47638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project unsigned rectIndex; 47648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; 47658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project for (rectIndex = 0; rectIndex < rectCount; ++rectIndex) { 47668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSRect r = [[originalRects objectAtIndex:rectIndex] rectValue]; 47678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Clip rect to document view's visible rect so rect is confined to subframe 47688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project r = NSIntersectionRect(r, documentViewVisibleRect); 47698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (NSIsEmptyRect(r)) 47708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project continue; 47718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 47728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Convert rect to our coordinate system 47738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project r = [documentView convertRect:r toView:self]; 47748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [result addObject:[NSValue valueWithRect:r]]; 47758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (rectIndex % 10 == 0) { 47768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [pool drain]; 47778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project pool = [[NSAutoreleasePool alloc] init]; 47788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 47798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 47808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [pool drain]; 47818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 47828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4783f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch frame = incrementFrame(frame); 47848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } while (frame); 47858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 47868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return result; 47878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 47888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 47898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)scrollDOMRangeToVisible:(DOMRange *)range 47908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 47918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [[[[range startContainer] ownerDocument] webFrame] _scrollDOMRangeToVisible:range]; 47928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 47938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 47948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (BOOL)allowsUndo 47958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 47968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return _private->allowsUndo; 47978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 47988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 47998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)setAllowsUndo:(BOOL)flag 48008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 48018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project _private->allowsUndo = flag; 48028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 48038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 48048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)setPageSizeMultiplier:(float)m 48058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 48068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [self _setZoomMultiplier:m isTextOnly:NO]; 48078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 48088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 48098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (float)pageSizeMultiplier 48108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 4811635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return ![self _realZoomMultiplierIsTextOnly] ? _private->zoomMultiplier : 1.0f; 48128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 48138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 48148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (BOOL)canZoomPageIn 48158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 48168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return [self _canZoomIn:NO]; 48178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 48188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 48198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (IBAction)zoomPageIn:(id)sender 48208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 48218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return [self _zoomIn:sender isTextOnly:NO]; 48228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 48238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 48248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (BOOL)canZoomPageOut 48258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 48268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return [self _canZoomOut:NO]; 48278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 48288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 48298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (IBAction)zoomPageOut:(id)sender 48308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 48318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return [self _zoomOut:sender isTextOnly:NO]; 48328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 48338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 48348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (BOOL)canResetPageZoom 48358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 48368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return [self _canResetZoom:NO]; 48378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 48388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 48398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (IBAction)resetPageZoom:(id)sender 48408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 48418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return [self _resetZoom:sender isTextOnly:NO]; 48428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 48438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4844635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project- (void)setMediaVolume:(float)volume 4845635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project{ 4846635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project if (_private->page) 4847635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project _private->page->setMediaVolume(volume); 4848635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project} 4849635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 4850635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project- (float)mediaVolume 4851635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project{ 4852635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project if (!_private->page) 4853635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return 0; 4854635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 4855635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return _private->page->mediaVolume(); 4856635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project} 4857635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 4858cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block- (void)addVisitedLinks:(NSArray *)visitedLinks 4859cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block{ 4860cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block PageGroup& group = core(self)->group(); 4861cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 4862cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block NSEnumerator *enumerator = [visitedLinks objectEnumerator]; 4863cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block while (NSString *url = [enumerator nextObject]) { 4864cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block size_t length = [url length]; 4865cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block const UChar* characters = CFStringGetCharactersPtr(reinterpret_cast<CFStringRef>(url)); 4866cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block if (characters) 4867cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block group.addVisitedLink(characters, length); 4868cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block else { 4869cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block Vector<UChar, 512> buffer(length); 4870cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block [url getCharacters:buffer.data()]; 4871cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block group.addVisitedLink(buffer.data(), length); 4872cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block } 4873cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block } 4874cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block} 4875cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 48768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project@end 48778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 48788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project@implementation WebView (WebViewPrintingPrivate) 48798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 48808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (float)_headerHeight 48818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 48828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return CallUIDelegateReturningFloat(self, @selector(webViewHeaderHeight:)); 48838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 48848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 48858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (float)_footerHeight 48868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 48878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return CallUIDelegateReturningFloat(self, @selector(webViewFooterHeight:)); 48888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 48898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 48908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)_drawHeaderInRect:(NSRect)rect 48918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 48928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#ifdef DEBUG_HEADER_AND_FOOTER 48938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSGraphicsContext *currentContext = [NSGraphicsContext currentContext]; 48948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [currentContext saveGraphicsState]; 48958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [[NSColor yellowColor] set]; 48968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSRectFill(rect); 48978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [currentContext restoreGraphicsState]; 48988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 48998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 49008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project SEL selector = @selector(webView:drawHeaderInRect:); 49018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (![_private->UIDelegate respondsToSelector:selector]) 49028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 49038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 49048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSGraphicsContext *currentContext = [NSGraphicsContext currentContext]; 49058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [currentContext saveGraphicsState]; 49068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 49078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSRectClip(rect); 49088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project CallUIDelegate(self, selector, rect); 49098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 49108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [currentContext restoreGraphicsState]; 49118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 49128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 49138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)_drawFooterInRect:(NSRect)rect 49148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 49158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#ifdef DEBUG_HEADER_AND_FOOTER 49168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSGraphicsContext *currentContext = [NSGraphicsContext currentContext]; 49178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [currentContext saveGraphicsState]; 49188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [[NSColor cyanColor] set]; 49198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSRectFill(rect); 49208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [currentContext restoreGraphicsState]; 49218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 49228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 49238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project SEL selector = @selector(webView:drawFooterInRect:); 49248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (![_private->UIDelegate respondsToSelector:selector]) 49258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 49268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 49278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSGraphicsContext *currentContext = [NSGraphicsContext currentContext]; 49288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [currentContext saveGraphicsState]; 49298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 49308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSRectClip(rect); 49318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project CallUIDelegate(self, selector, rect); 49328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 49338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [currentContext restoreGraphicsState]; 49348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 49358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 49368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)_adjustPrintingMarginsForHeaderAndFooter 49378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 49388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSPrintOperation *op = [NSPrintOperation currentOperation]; 49398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSPrintInfo *info = [op printInfo]; 49408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSMutableDictionary *infoDictionary = [info dictionary]; 49418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 49428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // We need to modify the top and bottom margins in the NSPrintInfo to account for the space needed by the 49438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // header and footer. Because this method can be called more than once on the same NSPrintInfo (see 5038087), 49448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // we stash away the unmodified top and bottom margins the first time this method is called, and we read from 49458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // those stashed-away values on subsequent calls. 49468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project float originalTopMargin; 49478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project float originalBottomMargin; 49488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSNumber *originalTopMarginNumber = [infoDictionary objectForKey:WebKitOriginalTopPrintingMarginKey]; 49498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!originalTopMarginNumber) { 49508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ASSERT(![infoDictionary objectForKey:WebKitOriginalBottomPrintingMarginKey]); 49518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project originalTopMargin = [info topMargin]; 49528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project originalBottomMargin = [info bottomMargin]; 49538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [infoDictionary setObject:[NSNumber numberWithFloat:originalTopMargin] forKey:WebKitOriginalTopPrintingMarginKey]; 49548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [infoDictionary setObject:[NSNumber numberWithFloat:originalBottomMargin] forKey:WebKitOriginalBottomPrintingMarginKey]; 49558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } else { 49568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ASSERT([originalTopMarginNumber isKindOfClass:[NSNumber class]]); 49578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ASSERT([[infoDictionary objectForKey:WebKitOriginalBottomPrintingMarginKey] isKindOfClass:[NSNumber class]]); 49588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project originalTopMargin = [originalTopMarginNumber floatValue]; 49598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project originalBottomMargin = [[infoDictionary objectForKey:WebKitOriginalBottomPrintingMarginKey] floatValue]; 49608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 49618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 49628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project float scale = [op _web_pageSetupScaleFactor]; 49638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [info setTopMargin:originalTopMargin + [self _headerHeight] * scale]; 49648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [info setBottomMargin:originalBottomMargin + [self _footerHeight] * scale]; 49658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 49668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 49678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)_drawHeaderAndFooter 49688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 49698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // The header and footer rect height scales with the page, but the width is always 49708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // all the way across the printed page (inset by printing margins). 49718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSPrintOperation *op = [NSPrintOperation currentOperation]; 49728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project float scale = [op _web_pageSetupScaleFactor]; 49738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSPrintInfo *printInfo = [op printInfo]; 49748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSSize paperSize = [printInfo paperSize]; 49758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project float headerFooterLeft = [printInfo leftMargin]/scale; 49768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project float headerFooterWidth = (paperSize.width - ([printInfo leftMargin] + [printInfo rightMargin]))/scale; 49778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSRect footerRect = NSMakeRect(headerFooterLeft, [printInfo bottomMargin]/scale - [self _footerHeight] , 49788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project headerFooterWidth, [self _footerHeight]); 49798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSRect headerRect = NSMakeRect(headerFooterLeft, (paperSize.height - [printInfo topMargin])/scale, 49808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project headerFooterWidth, [self _headerHeight]); 49818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 49828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [self _drawHeaderInRect:headerRect]; 49838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [self _drawFooterInRect:footerRect]; 49848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 49858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project@end 49868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 49878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project@implementation WebView (WebDebugBinding) 49888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 49898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)addObserver:(NSObject *)anObserver forKeyPath:(NSString *)keyPath options:(NSKeyValueObservingOptions)options context:(void *)context 49908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 49918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project LOG (Bindings, "addObserver:%p forKeyPath:%@ options:%x context:%p", anObserver, keyPath, options, context); 49928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [super addObserver:anObserver forKeyPath:keyPath options:options context:context]; 49938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 49948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 49958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)removeObserver:(NSObject *)anObserver forKeyPath:(NSString *)keyPath 49968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 49978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project LOG (Bindings, "removeObserver:%p forKeyPath:%@", anObserver, keyPath); 49988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [super removeObserver:anObserver forKeyPath:keyPath]; 49998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 50008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 50018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project@end 50028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 50038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project//========================================================================================== 50048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// Editing 50058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 50068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project@implementation WebView (WebViewCSS) 50078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 50088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (DOMCSSStyleDeclaration *)computedStyleForElement:(DOMElement *)element pseudoElement:(NSString *)pseudoElement 50098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 50108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // FIXME: is this the best level for this conversion? 50118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (pseudoElement == nil) 50128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project pseudoElement = @""; 50138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 50148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return [[element ownerDocument] getComputedStyle:element pseudoElement:pseudoElement]; 50158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 50168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 50178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project@end 50188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 50198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project@implementation WebView (WebViewEditing) 50208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 50218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (DOMRange *)editableDOMRangeForPoint:(NSPoint)point 50228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 50238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Page* page = core(self); 50248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!page) 50258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return nil; 50268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return kit(page->mainFrame()->editor()->rangeForPoint(IntPoint([self convertPoint:point toView:nil])).get()); 50278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 50288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5029563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark- (BOOL)_shouldChangeSelectedDOMRange:(DOMRange *)currentRange toDOMRange:(DOMRange *)proposedRange affinity:(NSSelectionAffinity)selectionAffinity stillSelecting:(BOOL)flag 50308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 50318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // FIXME: This quirk is needed due to <rdar://problem/4985321> - We can phase it out once Aperture can adopt the new behavior on their end 50328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!WebKitLinkedOnOrAfter(WEBKIT_FIRST_VERSION_WITHOUT_APERTURE_QUIRK) && [[[NSBundle mainBundle] bundleIdentifier] isEqualToString:@"com.apple.Aperture"]) 50338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return YES; 50348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return [[self _editingDelegateForwarder] webView:self shouldChangeSelectedDOMRange:currentRange toDOMRange:proposedRange affinity:selectionAffinity stillSelecting:flag]; 50358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 50368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 50378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (BOOL)maintainsInactiveSelection 50388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 50398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return NO; 50408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 50418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 50428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)setSelectedDOMRange:(DOMRange *)range affinity:(NSSelectionAffinity)selectionAffinity 50438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 50448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Frame* coreFrame = core([self _selectedOrMainFrame]); 50458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!coreFrame) 50468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 50478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 50488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (range == nil) 50498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project coreFrame->selection()->clear(); 50508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project else { 50518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Derive the frame to use from the range passed in. 50528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Using _selectedOrMainFrame could give us a different document than 50538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // the one the range uses. 50548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project coreFrame = core([range startContainer])->document()->frame(); 50558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!coreFrame) 50568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 50578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 50580bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch coreFrame->selection()->setSelectedRange(core(range), core(selectionAffinity), true); 50598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 50608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 50618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 50628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (DOMRange *)selectedDOMRange 50638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 50648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Frame* coreFrame = core([self _selectedOrMainFrame]); 50658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!coreFrame) 50668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return nil; 5067563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return kit(coreFrame->selection()->toNormalizedRange().get()); 50688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 50698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 50708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (NSSelectionAffinity)selectionAffinity 50718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 50728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Frame* coreFrame = core([self _selectedOrMainFrame]); 50738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!coreFrame) 50748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return NSSelectionAffinityDownstream; 50758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return kit(coreFrame->selection()->affinity()); 50768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 50778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 50788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)setEditable:(BOOL)flag 50798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 50802bde8e466a4451c7319e3a072d118917957d6554Steve Block if ([self isEditable] != flag && _private->page) { 50812bde8e466a4451c7319e3a072d118917957d6554Steve Block _private->page->setEditable(flag); 50822bde8e466a4451c7319e3a072d118917957d6554Steve Block if (!_private->tabKeyCyclesThroughElementsChanged) 50838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project _private->page->setTabKeyCyclesThroughElements(!flag); 50840bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch Frame* mainFrame = [self _mainCoreFrame]; 50858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (mainFrame) { 50868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (flag) { 50875abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick mainFrame->editor()->applyEditingStyleToBodyElement(); 50888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // If the WebView is made editable and the selection is empty, set it to something. 50898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (![self selectedDOMRange]) 509068513a70bcd92384395513322f1b801e7bf9c729Steve Block mainFrame->selection()->setSelectionFromNone(); 50915af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke } 50928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 50938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 50948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 50958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 50968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (BOOL)isEditable 50978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 50982bde8e466a4451c7319e3a072d118917957d6554Steve Block return _private->page && _private->page->isEditable(); 50998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 51008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 51018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)setTypingStyle:(DOMCSSStyleDeclaration *)style 51028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 51038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // We don't know enough at thls level to pass in a relevant WebUndoAction; we'd have to 51048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // change the API to allow this. 51058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [[self _selectedOrMainFrame] _setTypingStyle:style withUndoAction:EditActionUnspecified]; 51068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 51078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 51088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (DOMCSSStyleDeclaration *)typingStyle 51098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 51108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return [[self _selectedOrMainFrame] _typingStyle]; 51118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 51128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 51138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)setSmartInsertDeleteEnabled:(BOOL)flag 51148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 51150bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (_private->smartInsertDeleteEnabled != flag) { 51160bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch _private->smartInsertDeleteEnabled = flag; 51170bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch [[NSUserDefaults standardUserDefaults] setBool:_private->smartInsertDeleteEnabled forKey:WebSmartInsertDeleteEnabled]; 51180bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch } 5119635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project if (flag) 5120635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project [self setSelectTrailingWhitespaceEnabled:false]; 51218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 51228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 51238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (BOOL)smartInsertDeleteEnabled 51248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 51258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return _private->smartInsertDeleteEnabled; 51268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 51278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 51288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)setContinuousSpellCheckingEnabled:(BOOL)flag 51298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 51308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (continuousSpellCheckingEnabled != flag) { 51318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project continuousSpellCheckingEnabled = flag; 51328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [[NSUserDefaults standardUserDefaults] setBool:continuousSpellCheckingEnabled forKey:WebContinuousSpellCheckingEnabled]; 51338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 51348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 51358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if ([self isContinuousSpellCheckingEnabled]) { 51368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [[self class] _preflightSpellChecker]; 51378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } else { 51388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [[self mainFrame] _unmarkAllMisspellings]; 51398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 51408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 51418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 51428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (BOOL)isContinuousSpellCheckingEnabled 51438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 51448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return (continuousSpellCheckingEnabled && [self _continuousCheckingAllowed]); 51458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 51468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 51478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (NSInteger)spellCheckerDocumentTag 51488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 51498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!_private->hasSpellCheckerDocumentTag) { 51508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project _private->spellCheckerDocumentTag = [NSSpellChecker uniqueSpellDocumentTag]; 51518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project _private->hasSpellCheckerDocumentTag = YES; 51528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 51538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return _private->spellCheckerDocumentTag; 51548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 51558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 51568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (NSUndoManager *)undoManager 51578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 51588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!_private->allowsUndo) 51598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return nil; 51608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 51618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSUndoManager *undoManager = [[self _editingDelegateForwarder] undoManagerForWebView:self]; 51628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (undoManager) 51638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return undoManager; 51648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 51658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return [super undoManager]; 51668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 51678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 51688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)registerForEditingDelegateNotification:(NSString *)name selector:(SEL)selector 51698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 51708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSNotificationCenter *defaultCenter = [NSNotificationCenter defaultCenter]; 51718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if ([_private->editingDelegate respondsToSelector:selector]) 51728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [defaultCenter addObserver:_private->editingDelegate selector:selector name:name object:self]; 51738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 51748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 51758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)setEditingDelegate:(id)delegate 51768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 51778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (_private->editingDelegate == delegate) 51788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 51798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 51808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSNotificationCenter *defaultCenter = [NSNotificationCenter defaultCenter]; 51818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 51828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // remove notifications from current delegate 51838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [defaultCenter removeObserver:_private->editingDelegate name:WebViewDidBeginEditingNotification object:self]; 51848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [defaultCenter removeObserver:_private->editingDelegate name:WebViewDidChangeNotification object:self]; 51858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [defaultCenter removeObserver:_private->editingDelegate name:WebViewDidEndEditingNotification object:self]; 51868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [defaultCenter removeObserver:_private->editingDelegate name:WebViewDidChangeTypingStyleNotification object:self]; 51878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [defaultCenter removeObserver:_private->editingDelegate name:WebViewDidChangeSelectionNotification object:self]; 51888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 51898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project _private->editingDelegate = delegate; 51908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [_private->editingDelegateForwarder release]; 51918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project _private->editingDelegateForwarder = nil; 51928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 51938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // add notifications for new delegate 51948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [self registerForEditingDelegateNotification:WebViewDidBeginEditingNotification selector:@selector(webViewDidBeginEditing:)]; 51958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [self registerForEditingDelegateNotification:WebViewDidChangeNotification selector:@selector(webViewDidChange:)]; 51968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [self registerForEditingDelegateNotification:WebViewDidEndEditingNotification selector:@selector(webViewDidEndEditing:)]; 51978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [self registerForEditingDelegateNotification:WebViewDidChangeTypingStyleNotification selector:@selector(webViewDidChangeTypingStyle:)]; 51988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [self registerForEditingDelegateNotification:WebViewDidChangeSelectionNotification selector:@selector(webViewDidChangeSelection:)]; 51998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 52008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 52018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (id)editingDelegate 52028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 52038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return _private->editingDelegate; 52048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 52058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 52068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (DOMCSSStyleDeclaration *)styleDeclarationWithText:(NSString *)text 52078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 52088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // FIXME: Should this really be attached to the document with the current selection? 52098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project DOMCSSStyleDeclaration *decl = [[[self _selectedOrMainFrame] DOMDocument] createCSSStyleDeclaration]; 52108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [decl setCssText:text]; 52118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return decl; 52128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 52138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 52148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project@end 52158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 52168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project@implementation WebView (WebViewGrammarChecking) 52178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 52188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// FIXME: This method should be merged into WebViewEditing when we're not in API freeze 52198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (BOOL)isGrammarCheckingEnabled 52208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 52218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#ifdef BUILDING_ON_TIGER 52228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return NO; 52238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#else 52248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return grammarCheckingEnabled; 52258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 52268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 52278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 52288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#ifndef BUILDING_ON_TIGER 52298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// FIXME: This method should be merged into WebViewEditing when we're not in API freeze 52308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)setGrammarCheckingEnabled:(BOOL)flag 52318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 52328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (grammarCheckingEnabled == flag) 52338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 52348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 52358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project grammarCheckingEnabled = flag; 52368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [[NSUserDefaults standardUserDefaults] setBool:grammarCheckingEnabled forKey:WebGrammarCheckingEnabled]; 52378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 52380bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#ifndef BUILDING_ON_LEOPARD 52390bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch [[NSSpellChecker sharedSpellChecker] updatePanels]; 52400bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#else 52418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSSpellChecker *spellChecker = [NSSpellChecker sharedSpellChecker]; 52428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if ([spellChecker respondsToSelector:@selector(_updateGrammar)]) 52438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [spellChecker performSelector:@selector(_updateGrammar)]; 52440bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#endif 52458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 52468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // We call _preflightSpellChecker when turning continuous spell checking on, but we don't need to do that here 52478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // because grammar checking only occurs on code paths that already preflight spell checking appropriately. 52488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 52498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (![self isGrammarCheckingEnabled]) 52508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [[self mainFrame] _unmarkAllBadGrammar]; 52518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 52528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 52538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// FIXME: This method should be merged into WebIBActions when we're not in API freeze 52548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)toggleGrammarChecking:(id)sender 52558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 52568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [self setGrammarCheckingEnabled:![self isGrammarCheckingEnabled]]; 52578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 52588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 52598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 52608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project@end 52618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 52620bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch@implementation WebView (WebViewTextChecking) 52630bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 52640bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch- (BOOL)isAutomaticQuoteSubstitutionEnabled 52650bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 52660bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#if defined(BUILDING_ON_TIGER) || defined(BUILDING_ON_LEOPARD) 52670bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return NO; 52680bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#else 52690bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return automaticQuoteSubstitutionEnabled; 52700bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#endif 52710bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 52720bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 52730bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch- (BOOL)isAutomaticLinkDetectionEnabled 52740bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 52750bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#if defined(BUILDING_ON_TIGER) || defined(BUILDING_ON_LEOPARD) 52760bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return NO; 52770bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#else 52780bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return automaticLinkDetectionEnabled; 52790bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#endif 52800bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 52810bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 52820bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch- (BOOL)isAutomaticDashSubstitutionEnabled 52830bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 52840bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#if defined(BUILDING_ON_TIGER) || defined(BUILDING_ON_LEOPARD) 52850bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return NO; 52860bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#else 52870bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return automaticDashSubstitutionEnabled; 52880bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#endif 52890bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 52900bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 52910bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch- (BOOL)isAutomaticTextReplacementEnabled 52920bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 52930bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#if defined(BUILDING_ON_TIGER) || defined(BUILDING_ON_LEOPARD) 52940bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return NO; 52950bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#else 52960bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return automaticTextReplacementEnabled; 52970bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#endif 52980bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 52990bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 53000bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch- (BOOL)isAutomaticSpellingCorrectionEnabled 53010bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 53020bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#if defined(BUILDING_ON_TIGER) || defined(BUILDING_ON_LEOPARD) 53030bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return NO; 53040bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#else 53050bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return automaticSpellingCorrectionEnabled; 53060bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#endif 53070bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 53080bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 53090bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#if !defined(BUILDING_ON_TIGER) && !defined(BUILDING_ON_LEOPARD) 53100bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 53110bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch- (void)setAutomaticQuoteSubstitutionEnabled:(BOOL)flag 53120bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 53130bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (automaticQuoteSubstitutionEnabled == flag) 53140bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return; 53150bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch automaticQuoteSubstitutionEnabled = flag; 53160bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch [[NSUserDefaults standardUserDefaults] setBool:automaticQuoteSubstitutionEnabled forKey:WebAutomaticQuoteSubstitutionEnabled]; 53170bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch [[NSSpellChecker sharedSpellChecker] updatePanels]; 53180bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 53190bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 53200bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch- (void)toggleAutomaticQuoteSubstitution:(id)sender 53210bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 53220bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch [self setAutomaticQuoteSubstitutionEnabled:![self isAutomaticQuoteSubstitutionEnabled]]; 53230bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 53240bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 53250bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch- (void)setAutomaticLinkDetectionEnabled:(BOOL)flag 53260bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 53270bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (automaticLinkDetectionEnabled == flag) 53280bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return; 53290bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch automaticLinkDetectionEnabled = flag; 53300bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch [[NSUserDefaults standardUserDefaults] setBool:automaticLinkDetectionEnabled forKey:WebAutomaticLinkDetectionEnabled]; 53310bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch [[NSSpellChecker sharedSpellChecker] updatePanels]; 53320bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 53330bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 53340bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch- (void)toggleAutomaticLinkDetection:(id)sender 53350bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 53360bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch [self setAutomaticLinkDetectionEnabled:![self isAutomaticLinkDetectionEnabled]]; 53370bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 53380bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 53390bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch- (void)setAutomaticDashSubstitutionEnabled:(BOOL)flag 53400bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 53410bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (automaticDashSubstitutionEnabled == flag) 53420bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return; 53430bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch automaticDashSubstitutionEnabled = flag; 53440bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch [[NSUserDefaults standardUserDefaults] setBool:automaticDashSubstitutionEnabled forKey:WebAutomaticDashSubstitutionEnabled]; 53450bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch [[NSSpellChecker sharedSpellChecker] updatePanels]; 53460bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 53470bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 53480bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch- (void)toggleAutomaticDashSubstitution:(id)sender 53490bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 53500bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch [self setAutomaticDashSubstitutionEnabled:![self isAutomaticDashSubstitutionEnabled]]; 53510bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 53520bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 53530bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch- (void)setAutomaticTextReplacementEnabled:(BOOL)flag 53540bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 53550bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (automaticTextReplacementEnabled == flag) 53560bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return; 53570bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch automaticTextReplacementEnabled = flag; 53580bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch [[NSUserDefaults standardUserDefaults] setBool:automaticTextReplacementEnabled forKey:WebAutomaticTextReplacementEnabled]; 53590bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch [[NSSpellChecker sharedSpellChecker] updatePanels]; 53600bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 53610bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 53620bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch- (void)toggleAutomaticTextReplacement:(id)sender 53630bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 53640bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch [self setAutomaticTextReplacementEnabled:![self isAutomaticTextReplacementEnabled]]; 53650bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 53660bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 53670bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch- (void)setAutomaticSpellingCorrectionEnabled:(BOOL)flag 53680bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 53690bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (automaticSpellingCorrectionEnabled == flag) 53700bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return; 53710bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch automaticSpellingCorrectionEnabled = flag; 53720bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch [[NSUserDefaults standardUserDefaults] setBool:automaticSpellingCorrectionEnabled forKey:WebAutomaticSpellingCorrectionEnabled]; 53730bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch [[NSSpellChecker sharedSpellChecker] updatePanels]; 53740bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 53750bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 53760bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch- (void)toggleAutomaticSpellingCorrection:(id)sender 53770bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 53780bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch [self setAutomaticSpellingCorrectionEnabled:![self isAutomaticSpellingCorrectionEnabled]]; 53790bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 53800bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 53810bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#endif 53820bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 53832bde8e466a4451c7319e3a072d118917957d6554Steve Block#if !defined(BUILDING_ON_TIGER) && !defined(BUILDING_ON_LEOPARD) && !defined(BUILDING_ON_SNOW_LEOPARD) 53842bde8e466a4451c7319e3a072d118917957d6554Steve Block- (void)handleCorrectionPanelResult:(NSString*)result 53852bde8e466a4451c7319e3a072d118917957d6554Steve Block{ 53862bde8e466a4451c7319e3a072d118917957d6554Steve Block WebFrame *webFrame = [self _selectedOrMainFrame]; 53872bde8e466a4451c7319e3a072d118917957d6554Steve Block Frame* coreFrame = core(webFrame); 53882bde8e466a4451c7319e3a072d118917957d6554Steve Block if (coreFrame) 53892bde8e466a4451c7319e3a072d118917957d6554Steve Block coreFrame->editor()->handleCorrectionPanelResult(result); 53902bde8e466a4451c7319e3a072d118917957d6554Steve Block} 53912bde8e466a4451c7319e3a072d118917957d6554Steve Block#endif 53922bde8e466a4451c7319e3a072d118917957d6554Steve Block 53930bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch@end 53940bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 53958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project@implementation WebView (WebViewUndoableEditing) 53968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 53978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)replaceSelectionWithNode:(DOMNode *)node 53988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 53998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [[self _selectedOrMainFrame] _replaceSelectionWithNode:node selectReplacement:YES smartReplace:NO matchStyle:NO]; 54008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 54018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 54028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)replaceSelectionWithText:(NSString *)text 54038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 54048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [[self _selectedOrMainFrame] _replaceSelectionWithText:text selectReplacement:YES smartReplace:NO]; 54058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 54068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 54078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)replaceSelectionWithMarkupString:(NSString *)markupString 54088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 54098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [[self _selectedOrMainFrame] _replaceSelectionWithMarkupString:markupString baseURLString:nil selectReplacement:YES smartReplace:NO]; 54108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 54118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 54128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)replaceSelectionWithArchive:(WebArchive *)archive 54138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 54148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [[[self _selectedOrMainFrame] _dataSource] _replaceSelectionWithArchive:archive selectReplacement:YES]; 54158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 54168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 54178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)deleteSelection 54188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 54198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project WebFrame *webFrame = [self _selectedOrMainFrame]; 54208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Frame* coreFrame = core(webFrame); 54218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (coreFrame) 54228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project coreFrame->editor()->deleteSelectionWithSmartDelete([(WebHTMLView *)[[webFrame frameView] documentView] _canSmartCopyOrDelete]); 54238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 54248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 54258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)applyStyle:(DOMCSSStyleDeclaration *)style 54268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 54278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // We don't know enough at thls level to pass in a relevant WebUndoAction; we'd have to 54288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // change the API to allow this. 54298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project WebFrame *webFrame = [self _selectedOrMainFrame]; 54308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Frame* coreFrame = core(webFrame); 54318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (coreFrame) 54328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project coreFrame->editor()->applyStyle(core(style)); 54338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 54348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 54358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project@end 54368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 54378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project@implementation WebView (WebViewEditingActions) 54388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 54398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)_performResponderOperation:(SEL)selector with:(id)parameter 54408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 54418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project static BOOL reentered = NO; 54428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (reentered) { 54438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [[self nextResponder] tryToPerform:selector with:parameter]; 54448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 54458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 54468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 54478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // There are two possibilities here. 54488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // 54498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // One is that WebView has been called in its role as part of the responder chain. 54508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // In that case, it's fine to call the first responder and end up calling down the 54518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // responder chain again. Later we will return here with reentered = YES and continue 54528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // past the WebView. 54538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // 54548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // The other is that we are being called directly, in which case we want to pass the 54558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // selector down to the view inside us that can handle it, and continue down the 54568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // responder chain as usual. 54578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 54588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Pass this selector down to the first responder. 54598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSResponder *responder = [self _responderForResponderOperations]; 54608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project reentered = YES; 54618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [responder tryToPerform:selector with:parameter]; 54628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project reentered = NO; 54638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 54648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 54658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define FORWARD(name) \ 54668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project - (void)name:(id)sender { [self _performResponderOperation:_cmd with:sender]; } 54678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 54688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectFOR_EACH_RESPONDER_SELECTOR(FORWARD) 54698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 54708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)insertText:(NSString *)text 54718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 54728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [self _performResponderOperation:_cmd with:text]; 54738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 54748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 54758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project@end 54768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 54778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project@implementation WebView (WebViewEditingInMail) 54788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5479563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark- (void)_insertNewlineInQuotedContent 54808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 54818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [[self _selectedOrMainFrame] _insertParagraphSeparatorInQuotedContent]; 54828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 54838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 54848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)_replaceSelectionWithNode:(DOMNode *)node matchStyle:(BOOL)matchStyle 54858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 54868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [[self _selectedOrMainFrame] _replaceSelectionWithNode:node selectReplacement:YES smartReplace:NO matchStyle:matchStyle]; 54878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 54888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 54890bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch- (BOOL)_selectionIsCaret 54900bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 54910bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch Frame* coreFrame = core([self _selectedOrMainFrame]); 54920bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!coreFrame) 54930bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return NO; 54940bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return coreFrame->selection()->isCaret(); 54950bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 54960bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 54970bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch- (BOOL)_selectionIsAll 54980bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 54990bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch Frame* coreFrame = core([self _selectedOrMainFrame]); 55000bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!coreFrame) 55010bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return NO; 55022bde8e466a4451c7319e3a072d118917957d6554Steve Block return coreFrame->selection()->isAll(CanCrossEditingBoundary); 55030bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 55040bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 55058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project@end 55068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 55078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatic WebFrameView *containingFrameView(NSView *view) 55088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 55098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project while (view && ![view isKindOfClass:[WebFrameView class]]) 55108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project view = [view superview]; 55118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return (WebFrameView *)view; 55128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 55138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 55148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project@implementation WebView (WebFileInternal) 55158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5516e14391e94c850b8bd03680c23b38978db68687a8John Reckstatic inline uint64_t roundUpToPowerOf2(uint64_t num) 5517e14391e94c850b8bd03680c23b38978db68687a8John Reck{ 5518e14391e94c850b8bd03680c23b38978db68687a8John Reck return powf(2.0, ceilf(log2f(num))); 5519e14391e94c850b8bd03680c23b38978db68687a8John Reck} 5520e14391e94c850b8bd03680c23b38978db68687a8John Reck 55218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project+ (void)_setCacheModel:(WebCacheModel)cacheModel 55228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 55238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (s_didSetCacheModel && cacheModel == s_cacheModel) 55248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 55258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 55260bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch NSString *nsurlCacheDirectory = (NSString *)WebCFAutorelease(WKCopyFoundationCacheDirectory()); 55278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!nsurlCacheDirectory) 55288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project nsurlCacheDirectory = NSHomeDirectory(); 55298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5530e14391e94c850b8bd03680c23b38978db68687a8John Reck static uint64_t memSize = roundUpToPowerOf2(WebMemorySize() / 1024 / 1024); 55318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project unsigned long long diskFreeSize = WebVolumeFreeSize(nsurlCacheDirectory) / 1024 / 1000; 55328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSURLCache *nsurlCache = [NSURLCache sharedURLCache]; 55338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 55348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project unsigned cacheTotalCapacity = 0; 55358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project unsigned cacheMinDeadCapacity = 0; 55368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project unsigned cacheMaxDeadCapacity = 0; 55378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project double deadDecodedDataDeletionInterval = 0; 55388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 55398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project unsigned pageCacheCapacity = 0; 55408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 55418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSUInteger nsurlCacheMemoryCapacity = 0; 55428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSUInteger nsurlCacheDiskCapacity = 0; 55438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 55448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project switch (cacheModel) { 55458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case WebCacheModelDocumentViewer: { 55468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Page cache capacity (in pages) 55478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project pageCacheCapacity = 0; 55488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 55498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Object cache capacities (in bytes) 5550e14391e94c850b8bd03680c23b38978db68687a8John Reck if (memSize >= 4096) 5551e14391e94c850b8bd03680c23b38978db68687a8John Reck cacheTotalCapacity = 128 * 1024 * 1024; 5552e14391e94c850b8bd03680c23b38978db68687a8John Reck else if (memSize >= 2048) 5553635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project cacheTotalCapacity = 96 * 1024 * 1024; 5554635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project else if (memSize >= 1024) 55558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project cacheTotalCapacity = 32 * 1024 * 1024; 5556635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project else if (memSize >= 512) 5557635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project cacheTotalCapacity = 16 * 1024 * 1024; 55588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 55598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project cacheMinDeadCapacity = 0; 55608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project cacheMaxDeadCapacity = 0; 55618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 55628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Foundation memory cache capacity (in bytes) 55638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project nsurlCacheMemoryCapacity = 0; 55648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 55658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Foundation disk cache capacity (in bytes) 55668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project nsurlCacheDiskCapacity = [nsurlCache diskCapacity]; 55678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 55688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project break; 55698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 55708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case WebCacheModelDocumentBrowser: { 55718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Page cache capacity (in pages) 55728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (memSize >= 1024) 55738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project pageCacheCapacity = 3; 55748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project else if (memSize >= 512) 55758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project pageCacheCapacity = 2; 55768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project else if (memSize >= 256) 55778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project pageCacheCapacity = 1; 55788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project else 55798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project pageCacheCapacity = 0; 55808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 55818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Object cache capacities (in bytes) 5582e14391e94c850b8bd03680c23b38978db68687a8John Reck if (memSize >= 4096) 5583e14391e94c850b8bd03680c23b38978db68687a8John Reck cacheTotalCapacity = 128 * 1024 * 1024; 5584e14391e94c850b8bd03680c23b38978db68687a8John Reck else if (memSize >= 2048) 5585635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project cacheTotalCapacity = 96 * 1024 * 1024; 5586635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project else if (memSize >= 1024) 55878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project cacheTotalCapacity = 32 * 1024 * 1024; 5588635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project else if (memSize >= 512) 5589635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project cacheTotalCapacity = 16 * 1024 * 1024; 55908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 55918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project cacheMinDeadCapacity = cacheTotalCapacity / 8; 55928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project cacheMaxDeadCapacity = cacheTotalCapacity / 4; 55938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 55948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Foundation memory cache capacity (in bytes) 55958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (memSize >= 2048) 55968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project nsurlCacheMemoryCapacity = 4 * 1024 * 1024; 55978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project else if (memSize >= 1024) 55988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project nsurlCacheMemoryCapacity = 2 * 1024 * 1024; 55998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project else if (memSize >= 512) 56008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project nsurlCacheMemoryCapacity = 1 * 1024 * 1024; 56018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project else 56028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project nsurlCacheMemoryCapacity = 512 * 1024; 56038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 56048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Foundation disk cache capacity (in bytes) 56058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (diskFreeSize >= 16384) 56068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project nsurlCacheDiskCapacity = 50 * 1024 * 1024; 56078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project else if (diskFreeSize >= 8192) 56088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project nsurlCacheDiskCapacity = 40 * 1024 * 1024; 56098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project else if (diskFreeSize >= 4096) 56108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project nsurlCacheDiskCapacity = 30 * 1024 * 1024; 56118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project else 56128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project nsurlCacheDiskCapacity = 20 * 1024 * 1024; 56138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 56148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project break; 56158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 56168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case WebCacheModelPrimaryWebBrowser: { 56178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Page cache capacity (in pages) 56188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // (Research indicates that value / page drops substantially after 3 pages.) 56198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (memSize >= 2048) 56208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project pageCacheCapacity = 5; 56218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project else if (memSize >= 1024) 56228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project pageCacheCapacity = 4; 56238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project else if (memSize >= 512) 56248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project pageCacheCapacity = 3; 56258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project else if (memSize >= 256) 56268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project pageCacheCapacity = 2; 56278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project else 56288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project pageCacheCapacity = 1; 56298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 56308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Object cache capacities (in bytes) 56318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // (Testing indicates that value / MB depends heavily on content and 56328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // browsing pattern. Even growth above 128MB can have substantial 56338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // value / MB for some content / browsing patterns.) 5634e14391e94c850b8bd03680c23b38978db68687a8John Reck if (memSize >= 4096) 5635e14391e94c850b8bd03680c23b38978db68687a8John Reck cacheTotalCapacity = 192 * 1024 * 1024; 5636e14391e94c850b8bd03680c23b38978db68687a8John Reck else if (memSize >= 2048) 5637635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project cacheTotalCapacity = 128 * 1024 * 1024; 56388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project else if (memSize >= 1024) 56398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project cacheTotalCapacity = 64 * 1024 * 1024; 5640635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project else if (memSize >= 512) 5641635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project cacheTotalCapacity = 32 * 1024 * 1024; 56428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 56438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project cacheMinDeadCapacity = cacheTotalCapacity / 4; 56448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project cacheMaxDeadCapacity = cacheTotalCapacity / 2; 56458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 56468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // This code is here to avoid a PLT regression. We can remove it if we 56478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // can prove that the overall system gain would justify the regression. 56488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project cacheMaxDeadCapacity = max(24u, cacheMaxDeadCapacity); 56498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 56508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project deadDecodedDataDeletionInterval = 60; 56518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 56528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Foundation memory cache capacity (in bytes) 56538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // (These values are small because WebCore does most caching itself.) 56548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (memSize >= 1024) 56558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project nsurlCacheMemoryCapacity = 4 * 1024 * 1024; 56568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project else if (memSize >= 512) 56578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project nsurlCacheMemoryCapacity = 2 * 1024 * 1024; 56588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project else if (memSize >= 256) 56598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project nsurlCacheMemoryCapacity = 1 * 1024 * 1024; 56608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project else 56618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project nsurlCacheMemoryCapacity = 512 * 1024; 56628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 56638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Foundation disk cache capacity (in bytes) 56648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (diskFreeSize >= 16384) 56658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project nsurlCacheDiskCapacity = 175 * 1024 * 1024; 56668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project else if (diskFreeSize >= 8192) 56678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project nsurlCacheDiskCapacity = 150 * 1024 * 1024; 56688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project else if (diskFreeSize >= 4096) 56698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project nsurlCacheDiskCapacity = 125 * 1024 * 1024; 56708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project else if (diskFreeSize >= 2048) 56718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project nsurlCacheDiskCapacity = 100 * 1024 * 1024; 56728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project else if (diskFreeSize >= 1024) 56738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project nsurlCacheDiskCapacity = 75 * 1024 * 1024; 56748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project else 56758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project nsurlCacheDiskCapacity = 50 * 1024 * 1024; 56768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 56778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project break; 56788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 56798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project default: 56808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ASSERT_NOT_REACHED(); 56818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project }; 56828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 56838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#ifdef BUILDING_ON_TIGER 56848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Don't use a big Foundation disk cache on Tiger because, according to the 56858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // PLT, the Foundation disk cache on Tiger is slower than the network. 56868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project nsurlCacheDiskCapacity = [nsurlCache diskCapacity]; 56878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 56888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 56898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Don't shrink a big disk cache, since that would cause churn. 56908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project nsurlCacheDiskCapacity = max(nsurlCacheDiskCapacity, [nsurlCache diskCapacity]); 56918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 569265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch memoryCache()->setCapacities(cacheMinDeadCapacity, cacheMaxDeadCapacity, cacheTotalCapacity); 569365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch memoryCache()->setDeadDecodedDataDeletionInterval(deadDecodedDataDeletionInterval); 56948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project pageCache()->setCapacity(pageCacheCapacity); 56958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [nsurlCache setMemoryCapacity:nsurlCacheMemoryCapacity]; 56968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [nsurlCache setDiskCapacity:nsurlCacheDiskCapacity]; 56978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 56988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project s_cacheModel = cacheModel; 56998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project s_didSetCacheModel = YES; 57008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 57018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 57028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project+ (WebCacheModel)_cacheModel 57038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 57048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return s_cacheModel; 57058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 57068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 57078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project+ (WebCacheModel)_didSetCacheModel 57088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 57098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return s_didSetCacheModel; 57108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 57118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 57128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project+ (WebCacheModel)_maxCacheModelInAnyInstance 57138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 57148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project WebCacheModel cacheModel = WebCacheModelDocumentViewer; 57158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSEnumerator *enumerator = [(NSMutableSet *)allWebViewsSet objectEnumerator]; 57168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project while (WebPreferences *preferences = [[enumerator nextObject] preferences]) 57178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project cacheModel = max(cacheModel, [preferences cacheModel]); 57188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return cacheModel; 57198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 57208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 57218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project+ (void)_preferencesChangedNotification:(NSNotification *)notification 57228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 57238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project WebPreferences *preferences = (WebPreferences *)[notification object]; 57248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ASSERT([preferences isKindOfClass:[WebPreferences class]]); 57258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 57268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project WebCacheModel cacheModel = [preferences cacheModel]; 57278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (![self _didSetCacheModel] || cacheModel > [self _cacheModel]) 57288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [self _setCacheModel:cacheModel]; 57298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project else if (cacheModel < [self _cacheModel]) 57308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [self _setCacheModel:max([[WebPreferences standardPreferences] cacheModel], [self _maxCacheModelInAnyInstance])]; 57318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 57328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 57338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project+ (void)_preferencesRemovedNotification:(NSNotification *)notification 57348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 57358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project WebPreferences *preferences = (WebPreferences *)[notification object]; 57368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ASSERT([preferences isKindOfClass:[WebPreferences class]]); 57378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 57388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if ([preferences cacheModel] == [self _cacheModel]) 57398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [self _setCacheModel:max([[WebPreferences standardPreferences] cacheModel], [self _maxCacheModelInAnyInstance])]; 57408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 57418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 57428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (WebFrame *)_focusedFrame 57438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 57448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSResponder *resp = [[self window] firstResponder]; 57458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (resp && [resp isKindOfClass:[NSView class]] && [(NSView *)resp isDescendantOf:[[self mainFrame] frameView]]) { 57468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project WebFrameView *frameView = containingFrameView((NSView *)resp); 57478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ASSERT(frameView != nil); 57488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return [frameView webFrame]; 57498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 57508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 57518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return nil; 57528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 57538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 57548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (BOOL)_isLoading 57558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 57568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project WebFrame *mainFrame = [self mainFrame]; 57578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return [[mainFrame _dataSource] isLoading] 57588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project || [[mainFrame provisionalDataSource] isLoading]; 57598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 57608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 57618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (WebFrameView *)_frameViewAtWindowPoint:(NSPoint)point 57628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 57638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (_private->closed) 57648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return nil; 57650bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch ASSERT(_private->usesDocumentViews); 57668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSView *view = [self hitTest:[[self superview] convertPoint:point fromView:nil]]; 57678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (![view isDescendantOf:[[self mainFrame] frameView]]) 57688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return nil; 57698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project WebFrameView *frameView = containingFrameView(view); 57708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ASSERT(frameView); 57718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return frameView; 57728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 57738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 57748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project+ (void)_preflightSpellCheckerNow:(id)sender 57758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 57768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [[NSSpellChecker sharedSpellChecker] _preflightChosenSpellServer]; 57778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 57788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 57798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project+ (void)_preflightSpellChecker 57808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 57818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // As AppKit does, we wish to delay tickling the shared spellchecker into existence on application launch. 57828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if ([NSSpellChecker sharedSpellCheckerExists]) { 57838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [self _preflightSpellCheckerNow:self]; 57848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } else { 57858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [self performSelector:@selector(_preflightSpellCheckerNow:) withObject:self afterDelay:2.0]; 57868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 57878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 57888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 57898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (BOOL)_continuousCheckingAllowed 57908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 57918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project static BOOL allowContinuousSpellChecking = YES; 57928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project static BOOL readAllowContinuousSpellCheckingDefault = NO; 57938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!readAllowContinuousSpellCheckingDefault) { 57948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if ([[NSUserDefaults standardUserDefaults] objectForKey:@"NSAllowContinuousSpellChecking"]) { 57958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project allowContinuousSpellChecking = [[NSUserDefaults standardUserDefaults] boolForKey:@"NSAllowContinuousSpellChecking"]; 57968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 57978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project readAllowContinuousSpellCheckingDefault = YES; 57988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 57998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return allowContinuousSpellChecking; 58008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 58018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 58028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (NSResponder *)_responderForResponderOperations 58038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 58048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSResponder *responder = [[self window] firstResponder]; 58058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project WebFrameView *mainFrameView = [[self mainFrame] frameView]; 58068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 58078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // If the current responder is outside of the webview, use our main frameView or its 58088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // document view. We also do this for subviews of self that are siblings of the main 58098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // frameView since clients might insert non-webview-related views there (see 4552713). 58108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (responder != self && ![mainFrameView _web_firstResponderIsSelfOrDescendantView]) { 58118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project responder = [mainFrameView documentView]; 58128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!responder) 58138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project responder = mainFrameView; 58148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 58158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return responder; 58168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 58178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 58188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)_openFrameInNewWindowFromMenu:(NSMenuItem *)sender 58198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 58208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ASSERT_ARG(sender, [sender isKindOfClass:[NSMenuItem class]]); 58218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 58228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSDictionary *element = [sender representedObject]; 58238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ASSERT([element isKindOfClass:[NSDictionary class]]); 58248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 582506ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen WebDataSource *dataSource = [(WebFrame *)[element objectForKey:WebElementFrameKey] dataSource]; 58268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSURLRequest *request = [[dataSource request] copy]; 58278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ASSERT(request); 58288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 58298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [self _openNewWindowWithRequest:request]; 58308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [request release]; 58318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 58328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 58338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)_searchWithGoogleFromMenu:(id)sender 58348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 58358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project id documentView = [[[self selectedFrame] frameView] documentView]; 58368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (![documentView conformsToProtocol:@protocol(WebDocumentText)]) { 58378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 58388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 58398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 58408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSString *selectedString = [(id <WebDocumentText>)documentView selectedString]; 58418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if ([selectedString length] == 0) { 58428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 58438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 58448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 58458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSPasteboard *pasteboard = [NSPasteboard pasteboardWithUniqueName]; 58468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [pasteboard declareTypes:[NSArray arrayWithObject:NSStringPboardType] owner:nil]; 58478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSMutableString *s = [selectedString mutableCopy]; 58488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project const unichar nonBreakingSpaceCharacter = 0xA0; 58498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSString *nonBreakingSpaceString = [NSString stringWithCharacters:&nonBreakingSpaceCharacter length:1]; 58508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [s replaceOccurrencesOfString:nonBreakingSpaceString withString:@" " options:0 range:NSMakeRange(0, [s length])]; 58518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [pasteboard setString:s forType:NSStringPboardType]; 58528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [s release]; 58538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 58548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // FIXME: seems fragile to use the service by name, but this is what AppKit does 58558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSPerformService(@"Search With Google", pasteboard); 58568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 58578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 58588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)_searchWithSpotlightFromMenu:(id)sender 58598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 58608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project id documentView = [[[self selectedFrame] frameView] documentView]; 58618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (![documentView conformsToProtocol:@protocol(WebDocumentText)]) 58628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 5863231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 58648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSString *selectedString = [(id <WebDocumentText>)documentView selectedString]; 5865231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block if (![selectedString length]) 58668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 58678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5868231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#if !defined(BUILDING_ON_TIGER) && !defined(BUILDING_ON_LEOPARD) 5869231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block [[NSWorkspace sharedWorkspace] showSearchResultsForQueryString:selectedString]; 5870231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#else 58718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project (void)HISearchWindowShow((CFStringRef)selectedString, kNilOptions); 5872231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#endif 58738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 58740bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 58750bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#if USE(ACCELERATED_COMPOSITING) 58760bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch- (void)_clearLayerSyncLoopObserver 58770bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 58780bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!_private->layerSyncRunLoopObserver) 58790bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return; 58800bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 58810bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch CFRunLoopObserverInvalidate(_private->layerSyncRunLoopObserver); 58820bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch CFRelease(_private->layerSyncRunLoopObserver); 58830bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch _private->layerSyncRunLoopObserver = 0; 58840bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 58850bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#endif 5886ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block 5887a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch#if ENABLE(GLIB_SUPPORT) 5888ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block- (void)_clearGlibLoopObserver 5889ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block{ 5890ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block if (!_private->glibRunLoopObserver) 5891ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block return; 5892ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block 5893ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block CFRunLoopObserverInvalidate(_private->glibRunLoopObserver); 5894ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block CFRelease(_private->glibRunLoopObserver); 5895ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block _private->glibRunLoopObserver = 0; 5896ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block} 5897ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block#endif 58988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project@end 58998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 59008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project@implementation WebView (WebViewInternal) 59018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5902692e5dbf12901edacf14812a6fae25462920af42Steve Block+ (BOOL)shouldIncludeInWebKitStatistics 5903692e5dbf12901edacf14812a6fae25462920af42Steve Block{ 5904692e5dbf12901edacf14812a6fae25462920af42Steve Block return NO; 5905692e5dbf12901edacf14812a6fae25462920af42Steve Block} 5906692e5dbf12901edacf14812a6fae25462920af42Steve Block 59078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (BOOL)_becomingFirstResponderFromOutside 59088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 59098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return _private->becomingFirstResponderFromOutside; 59108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 59118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 59120bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#if ENABLE(ICONDATABASE) 59138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)_receivedIconChangedNotification:(NSNotification *)notification 59148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 59158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Get the URL for this notification 59168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSDictionary *userInfo = [notification userInfo]; 59178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ASSERT([userInfo isKindOfClass:[NSDictionary class]]); 59188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSString *urlString = [userInfo objectForKey:WebIconNotificationUserInfoURLKey]; 59198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ASSERT([urlString isKindOfClass:[NSString class]]); 59208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 59218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // If that URL matches the current main frame, dispatch the delegate call, which will also unregister 59228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // us for this notification 59238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if ([[self mainFrameURL] isEqualTo:urlString]) 59248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [self _dispatchDidReceiveIconFromWebFrame:[self mainFrame]]; 59258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 59268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 59278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)_registerForIconNotification:(BOOL)listen 59288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 59298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (listen) 59308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(_receivedIconChangedNotification:) name:WebIconDatabaseDidAddIconNotification object:nil]; 59318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project else 59328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [[NSNotificationCenter defaultCenter] removeObserver:self name:WebIconDatabaseDidAddIconNotification object:nil]; 59338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 59348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 59358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)_dispatchDidReceiveIconFromWebFrame:(WebFrame *)webFrame 59368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 59378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // FIXME: This willChangeValueForKey call is too late, because the icon has already changed by now. 59388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [self _willChangeValueForKey:_WebMainFrameIconKey]; 59398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 59408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Since we definitely have an icon and are about to send out the delegate call for that, this WebView doesn't need to listen for the general 59418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // notification any longer 59428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [self _registerForIconNotification:NO]; 59438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 59448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project WebFrameLoadDelegateImplementationCache* cache = &_private->frameLoadDelegateImplementations; 59458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (cache->didReceiveIconForFrameFunc) { 59462bde8e466a4451c7319e3a072d118917957d6554Steve Block Image* image = iconDatabase().synchronousIconForPageURL(core(webFrame)->document()->url().string(), IntSize(16, 16)); 59478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (NSImage *icon = webGetNSImage(image, NSMakeSize(16, 16))) 59488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project CallFrameLoadDelegate(cache->didReceiveIconForFrameFunc, self, @selector(webView:didReceiveIcon:forFrame:), icon, webFrame); 59498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 59508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 59518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [self _didChangeValueForKey:_WebMainFrameIconKey]; 59528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 59530bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#endif // ENABLE(ICONDATABASE) 59548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 59558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)_addObject:(id)object forIdentifier:(unsigned long)identifier 59568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 59578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ASSERT(!_private->identifierMap.contains(identifier)); 59588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 59598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // If the identifier map is initially empty it means we're starting a load 59608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // of something. The semantic is that the web view should be around as long 59618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // as something is loading. Because of that we retain the web view. 59628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (_private->identifierMap.isEmpty()) 59638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project CFRetain(self); 59648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 59658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project _private->identifierMap.set(identifier, object); 59668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 59678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 59688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (id)_objectForIdentifier:(unsigned long)identifier 59698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 59708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return _private->identifierMap.get(identifier).get(); 59718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 59728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 59738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)_removeObjectForIdentifier:(unsigned long)identifier 59748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 59758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ASSERT(_private->identifierMap.contains(identifier)); 59768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project _private->identifierMap.remove(identifier); 59778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 59788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // If the identifier map is now empty it means we're no longer loading anything 59798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // and we should release the web view. 59808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (_private->identifierMap.isEmpty()) 59818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project CFRelease(self); 59828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 59838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 59848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)_retrieveKeyboardUIModeFromPreferences:(NSNotification *)notification 59858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 59868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project CFPreferencesAppSynchronize(UniversalAccessDomain); 59878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 59888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Boolean keyExistsAndHasValidFormat; 59898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project int mode = CFPreferencesGetAppIntegerValue(AppleKeyboardUIMode, UniversalAccessDomain, &keyExistsAndHasValidFormat); 59908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 59918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // The keyboard access mode is reported by two bits: 59928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Bit 0 is set if feature is on 59938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Bit 1 is set if full keyboard access works for any control, not just text boxes and lists 59948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project _private->_keyboardUIMode = (mode & 0x2) ? KeyboardAccessFull : KeyboardAccessDefault; 59958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 59968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // check for tabbing to links 59978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if ([_private->preferences tabsToLinks]) 59988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project _private->_keyboardUIMode = (KeyboardUIMode)(_private->_keyboardUIMode | KeyboardAccessTabsToLinks); 59998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 60008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 60018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (KeyboardUIMode)_keyboardUIMode 60028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 60038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!_private->_keyboardUIModeAccessed) { 60048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project _private->_keyboardUIModeAccessed = YES; 60058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 60068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [self _retrieveKeyboardUIModeFromPreferences:nil]; 60078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 60088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [[NSDistributedNotificationCenter defaultCenter] 60098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project addObserver:self selector:@selector(_retrieveKeyboardUIModeFromPreferences:) 60108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project name:KeyboardUIModeDidChangeNotification object:nil]; 60118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 60128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [[NSNotificationCenter defaultCenter] 60138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project addObserver:self selector:@selector(_retrieveKeyboardUIModeFromPreferences:) 60142daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch name:WebPreferencesChangedInternalNotification object:nil]; 60158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 60168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return _private->_keyboardUIMode; 60178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 60188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 60190bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch- (void)_setInsertionPasteboard:(NSPasteboard *)pasteboard 60208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 60210bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch _private->insertionPasteboard = pasteboard; 60228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 60238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 60240bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch- (void)_selectionChanged 60258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 60260bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (_private->usesDocumentViews) { 60270bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch id documentView = [[[self _selectedOrMainFrame] frameView] documentView]; 60280bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if ([documentView isKindOfClass:[WebHTMLView class]]) 60290bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch [documentView _selectionChanged]; 60300bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return; 60318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 60328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 60330bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch // FIXME (Viewless): We'll need code here. 60348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 60358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 60360bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch- (Frame*)_mainCoreFrame 60378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 60380bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return (_private && _private->page) ? _private->page->mainFrame() : 0; 60398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 60408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6041cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block- (WebFrame *)_selectedOrMainFrame 6042cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block{ 6043cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block WebFrame *result = [self selectedFrame]; 6044cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block if (result == nil) 6045cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block result = [self mainFrame]; 6046cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block return result; 6047cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block} 6048cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 60490bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#if USE(ACCELERATED_COMPOSITING) 60508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 60510bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch- (BOOL)_needsOneShotDrawingSynchronization 60528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 60530bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return _private->needsOneShotDrawingSynchronization; 60548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 60558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 60560bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch- (void)_setNeedsOneShotDrawingSynchronization:(BOOL)needsSynchronization 60578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 60580bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch _private->needsOneShotDrawingSynchronization = needsSynchronization; 60598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 60608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 60610bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch- (BOOL)_syncCompositingChanges 60628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 60630bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch Frame* frame = [self _mainCoreFrame]; 60640bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (frame && frame->view()) 6065ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch return frame->view()->syncCompositingStateIncludingSubframes(); 60668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 60670bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return YES; 6068635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project} 6069635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 60700bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch/* 60710bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch The order of events with compositing updates is this: 60720bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 60730bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch Start of runloop End of runloop 60740bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch | | 60750bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch --|-------------------------------------------------------|-- 60760bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch ^ ^ ^ 60770bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch | | | 60780bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch NSWindow update, | CA commit 60790bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch NSView drawing | 60800bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch flush | 60810bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch layerSyncRunLoopObserverCallBack 60820bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 60830bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch To avoid flashing, we have to ensure that compositing changes (rendered via 60840bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch the CoreAnimation rendering display link) appear on screen at the same time 60850bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch as content painted into the window via the normal WebCore rendering path. 60860bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 60870bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch CoreAnimation will commit any layer changes at the end of the runloop via 60880bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch its "CA commit" observer. Those changes can then appear onscreen at any time 60890bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch when the display link fires, which can result in unsynchronized rendering. 60900bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 60910bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch To fix this, the GraphicsLayerCA code in WebCore does not change the CA 60920bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch layer tree during style changes and layout; it stores up all changes and 60930bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch commits them via syncCompositingState(). There are then two situations in 60940bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch which we can call syncCompositingState(): 60950bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 60960bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 1. When painting. FrameView::paintContents() makes a call to syncCompositingState(). 60970bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 60980bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 2. When style changes/layout have made changes to the layer tree which do not 60990bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch result in painting. In this case we need a run loop observer to do a 61000bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch syncCompositingState() at an appropriate time. The observer will keep firing 61010bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch until the time is right (essentially when there are no more pending layouts). 61020bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 61030bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch*/ 6104563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 61050bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochstatic void layerSyncRunLoopObserverCallBack(CFRunLoopObserverRef, CFRunLoopActivity, void* info) 6106563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark{ 610721939df44de1705786c545cd1bf519d47250322dBen Murdoch WebView *webView = reinterpret_cast<WebView*>(info); 610821939df44de1705786c545cd1bf519d47250322dBen Murdoch NSWindow *window = [webView window]; 610921939df44de1705786c545cd1bf519d47250322dBen Murdoch 611021939df44de1705786c545cd1bf519d47250322dBen Murdoch // An NSWindow may not display in the next runloop cycle after dirtying due to delayed window display logic, 611121939df44de1705786c545cd1bf519d47250322dBen Murdoch // in which case this observer can fire first. So if the window is due for a display, don't commit 611221939df44de1705786c545cd1bf519d47250322dBen Murdoch // layer changes, otherwise they'll show on screen before the view drawing. 611306ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen bool viewsNeedDisplay; 611406ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen#ifndef __LP64__ 611506ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen if (window && [window _wrapsCarbonWindow]) 611606ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen viewsNeedDisplay = HIViewGetNeedsDisplay(HIViewGetRoot(static_cast<WindowRef>([window windowRef]))); 611706ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen else 611806ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen#endif 611906ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen viewsNeedDisplay = [window viewsNeedDisplay]; 612006ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen 612106ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen if (viewsNeedDisplay) 612221939df44de1705786c545cd1bf519d47250322dBen Murdoch return; 612321939df44de1705786c545cd1bf519d47250322dBen Murdoch 612421939df44de1705786c545cd1bf519d47250322dBen Murdoch if ([webView _syncCompositingChanges]) { 61250bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch [webView _clearLayerSyncLoopObserver]; 612621939df44de1705786c545cd1bf519d47250322dBen Murdoch // AppKit may have disabled screen updates, thinking an upcoming window flush will re-enable them. 612721939df44de1705786c545cd1bf519d47250322dBen Murdoch // In case setNeedsDisplayInRect() has prevented the window from needing to be flushed, re-enable screen 612821939df44de1705786c545cd1bf519d47250322dBen Murdoch // updates here. 612921939df44de1705786c545cd1bf519d47250322dBen Murdoch if (![window isFlushWindowDisabled]) 613021939df44de1705786c545cd1bf519d47250322dBen Murdoch [window _enableScreenUpdatesIfNeeded]; 613121939df44de1705786c545cd1bf519d47250322dBen Murdoch } else { 613221939df44de1705786c545cd1bf519d47250322dBen Murdoch // Since the WebView does not need display, -viewWillDraw will not be called. Perform pending layout now, 613321939df44de1705786c545cd1bf519d47250322dBen Murdoch // so that the layers draw with up-to-date layout. 613421939df44de1705786c545cd1bf519d47250322dBen Murdoch [webView _viewWillDrawInternal]; 613521939df44de1705786c545cd1bf519d47250322dBen Murdoch } 6136563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 6137563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 61380bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch- (void)_scheduleCompositingLayerSync 6139563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark{ 6140bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen CFRunLoopRef currentRunLoop = CFRunLoopGetCurrent(); 6141bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 6142bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen // Make sure we wake up the loop or the observer could be delayed until some other source fires. 6143bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen CFRunLoopWakeUp(currentRunLoop); 6144bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 61450bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (_private->layerSyncRunLoopObserver) 61460bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return; 6147563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 61480bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch // Run after AppKit does its window update. If we do any painting, we'll commit 61490bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch // layer changes from FrameView::paintContents(), otherwise we'll commit via 61500bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch // _syncCompositingChanges when this observer fires. 61510bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch const CFIndex runLoopOrder = NSDisplayWindowRunLoopOrdering + 1; 6152563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 61530bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch // The WebView always outlives the observer, so no need to retain/release. 61540bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch CFRunLoopObserverContext context = { 0, self, 0, 0, 0 }; 61558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 61560bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch _private->layerSyncRunLoopObserver = CFRunLoopObserverCreate(NULL, 61570bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch kCFRunLoopBeforeWaiting | kCFRunLoopExit, true /* repeats */, 61580bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch runLoopOrder, layerSyncRunLoopObserverCallBack, &context); 61598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6160bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen CFRunLoopAddObserver(currentRunLoop, _private->layerSyncRunLoopObserver, kCFRunLoopCommonModes); 61618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 61628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 61630bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#endif 61648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6165231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#if ENABLE(VIDEO) 6166231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 6167231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block- (void)_enterFullscreenForNode:(WebCore::Node*)node 6168231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block{ 6169231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block ASSERT(node->hasTagName(WebCore::HTMLNames::videoTag)); 6170231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block HTMLMediaElement* videoElement = static_cast<HTMLMediaElement*>(node); 6171231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 6172231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block if (_private->fullscreenController) { 6173231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block if ([_private->fullscreenController mediaElement] == videoElement) { 6174231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block // The backend may just warn us that the underlaying plaftormMovie() 6175231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block // has changed. Just force an update. 6176231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block [_private->fullscreenController setMediaElement:videoElement]; 6177231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block return; // No more to do. 6178231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block } 6179231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 6180231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block // First exit Fullscreen for the old mediaElement. 6181231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block [_private->fullscreenController mediaElement]->exitFullscreen(); 6182231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block // This previous call has to trigger _exitFullscreen, 6183231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block // which has to clear _private->fullscreenController. 6184231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block ASSERT(!_private->fullscreenController); 6185231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block } 6186231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block if (!_private->fullscreenController) { 6187231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block _private->fullscreenController = [[WebVideoFullscreenController alloc] init]; 6188231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block [_private->fullscreenController setMediaElement:videoElement]; 6189231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block [_private->fullscreenController enterFullscreen:[[self window] screen]]; 6190231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block } 6191231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block else 6192231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block [_private->fullscreenController setMediaElement:videoElement]; 6193231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block} 6194231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 6195231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block- (void)_exitFullscreen 6196231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block{ 6197cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block if (!_private->fullscreenController) 6198cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block return; 6199231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block [_private->fullscreenController exitFullscreen]; 6200231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block [_private->fullscreenController release]; 6201231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block _private->fullscreenController = nil; 6202231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block} 6203231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 6204231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#endif 6205231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 6206cad810f21b803229eb11403f9209855525a25d57Steve Block#if ENABLE(FULLSCREEN_API) 62072bde8e466a4451c7319e3a072d118917957d6554Steve Block- (BOOL)_supportsFullScreenForElement:(const WebCore::Element*)element withKeyboard:(BOOL)withKeyboard 6208cad810f21b803229eb11403f9209855525a25d57Steve Block{ 62092bde8e466a4451c7319e3a072d118917957d6554Steve Block if (withKeyboard) 62102bde8e466a4451c7319e3a072d118917957d6554Steve Block return NO; 62112bde8e466a4451c7319e3a072d118917957d6554Steve Block 6212cad810f21b803229eb11403f9209855525a25d57Steve Block if (![[WebPreferences standardPreferences] fullScreenEnabled]) 6213cad810f21b803229eb11403f9209855525a25d57Steve Block return NO; 6214cad810f21b803229eb11403f9209855525a25d57Steve Block 6215cad810f21b803229eb11403f9209855525a25d57Steve Block // FIXME: If the element is in an IFrame, we should ensure it has 6216cad810f21b803229eb11403f9209855525a25d57Steve Block // an AllowsFullScreen=YES attribute before allowing fullscreen access. 6217cad810f21b803229eb11403f9209855525a25d57Steve Block return YES; 6218cad810f21b803229eb11403f9209855525a25d57Steve Block} 6219cad810f21b803229eb11403f9209855525a25d57Steve Block 6220cad810f21b803229eb11403f9209855525a25d57Steve Block- (void)_enterFullScreenForElement:(WebCore::Element*)element 6221cad810f21b803229eb11403f9209855525a25d57Steve Block{ 6222cad810f21b803229eb11403f9209855525a25d57Steve Block if (!_private->newFullscreenController) 6223cad810f21b803229eb11403f9209855525a25d57Steve Block _private->newFullscreenController = [[WebFullScreenController alloc] init]; 6224cad810f21b803229eb11403f9209855525a25d57Steve Block 6225cad810f21b803229eb11403f9209855525a25d57Steve Block [_private->newFullscreenController setElement:element]; 6226cad810f21b803229eb11403f9209855525a25d57Steve Block [_private->newFullscreenController setWebView:self]; 6227cad810f21b803229eb11403f9209855525a25d57Steve Block [_private->newFullscreenController enterFullscreen:[[self window] screen]]; 6228cad810f21b803229eb11403f9209855525a25d57Steve Block} 6229cad810f21b803229eb11403f9209855525a25d57Steve Block 6230cad810f21b803229eb11403f9209855525a25d57Steve Block- (void)_exitFullScreenForElement:(WebCore::Element*)element 6231cad810f21b803229eb11403f9209855525a25d57Steve Block{ 6232cad810f21b803229eb11403f9209855525a25d57Steve Block if (!_private->newFullscreenController) 6233cad810f21b803229eb11403f9209855525a25d57Steve Block return; 6234cad810f21b803229eb11403f9209855525a25d57Steve Block [_private->newFullscreenController exitFullscreen]; 6235cad810f21b803229eb11403f9209855525a25d57Steve Block} 6236cad810f21b803229eb11403f9209855525a25d57Steve Block 6237cad810f21b803229eb11403f9209855525a25d57Steve Block- (void)_fullScreenRendererChanged:(WebCore::RenderBox*)renderer 6238cad810f21b803229eb11403f9209855525a25d57Steve Block{ 6239cad810f21b803229eb11403f9209855525a25d57Steve Block if (!_private->newFullscreenController) 6240cad810f21b803229eb11403f9209855525a25d57Steve Block _private->newFullscreenController = [[WebFullScreenController alloc] init]; 6241cad810f21b803229eb11403f9209855525a25d57Steve Block [_private->newFullscreenController setRenderer:renderer]; 6242cad810f21b803229eb11403f9209855525a25d57Steve Block} 6243cad810f21b803229eb11403f9209855525a25d57Steve Block#endif 6244cad810f21b803229eb11403f9209855525a25d57Steve Block 6245a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch#if ENABLE(GLIB_SUPPORT) 6246ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block 6247ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Blockstatic void glibContextIterationCallback(CFRunLoopObserverRef, CFRunLoopActivity, void*) 6248ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block{ 6249ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block g_main_context_iteration(0, FALSE); 6250ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block} 6251ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block 6252ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block- (void)_scheduleGlibContextIterations 6253ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block{ 6254ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block if (_private->glibRunLoopObserver) 6255ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block return; 6256ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block 6257ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block NSRunLoop* myRunLoop = [NSRunLoop currentRunLoop]; 6258ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block 6259ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block // Create a run loop observer and attach it to the run loop. 6260ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block CFRunLoopObserverContext context = {0, self, 0, 0, 0}; 6261ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block _private->glibRunLoopObserver = CFRunLoopObserverCreate(kCFAllocatorDefault, kCFRunLoopBeforeWaiting, YES, 0, &glibContextIterationCallback, &context); 6262ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block 6263ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block if (_private->glibRunLoopObserver) { 6264ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block CFRunLoopRef cfLoop = [myRunLoop getCFRunLoop]; 6265ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block CFRunLoopAddObserver(cfLoop, _private->glibRunLoopObserver, kCFRunLoopDefaultMode); 6266ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block } 6267ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block 6268ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block} 6269ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block#endif 6270ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block 6271ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block 62728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project@end 6273635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 62745abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick@implementation WebView (WebViewDeviceOrientation) 62755abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick 62765abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick- (void)_setDeviceOrientationProvider:(id<WebDeviceOrientationProvider>)deviceOrientationProvider 62775abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick{ 62785abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick if (_private) 62795abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick _private->m_deviceOrientationProvider = deviceOrientationProvider; 62805abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick} 62815abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick 62825abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick- (id<WebDeviceOrientationProvider>)_deviceOrientationProvider 62835abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick{ 62845abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick if (_private) 62855abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick return _private->m_deviceOrientationProvider; 62865abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick return nil; 62875abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick} 62885abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick 62895abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick@end 62905abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick 6291d0825bca7fe65beaee391d30da42e937db621564Steve Block@implementation WebView (WebViewGeolocation) 6292d0825bca7fe65beaee391d30da42e937db621564Steve Block 6293d0825bca7fe65beaee391d30da42e937db621564Steve Block- (void)_setGeolocationProvider:(id<WebGeolocationProvider>)geolocationProvider 6294d0825bca7fe65beaee391d30da42e937db621564Steve Block{ 6295d0825bca7fe65beaee391d30da42e937db621564Steve Block if (_private) 6296d0825bca7fe65beaee391d30da42e937db621564Steve Block _private->_geolocationProvider = geolocationProvider; 6297d0825bca7fe65beaee391d30da42e937db621564Steve Block} 6298d0825bca7fe65beaee391d30da42e937db621564Steve Block 6299d0825bca7fe65beaee391d30da42e937db621564Steve Block- (id<WebGeolocationProvider>)_geolocationProvider 6300d0825bca7fe65beaee391d30da42e937db621564Steve Block{ 6301d0825bca7fe65beaee391d30da42e937db621564Steve Block if (_private) 6302d0825bca7fe65beaee391d30da42e937db621564Steve Block return _private->_geolocationProvider; 6303d0825bca7fe65beaee391d30da42e937db621564Steve Block return nil; 6304d0825bca7fe65beaee391d30da42e937db621564Steve Block} 6305d0825bca7fe65beaee391d30da42e937db621564Steve Block 630606ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen- (void)_geolocationDidChangePosition:(WebGeolocationPosition *)position 6307d0825bca7fe65beaee391d30da42e937db621564Steve Block{ 6308d0825bca7fe65beaee391d30da42e937db621564Steve Block#if ENABLE(CLIENT_BASED_GEOLOCATION) 6309d0825bca7fe65beaee391d30da42e937db621564Steve Block if (_private && _private->page) 6310d0825bca7fe65beaee391d30da42e937db621564Steve Block _private->page->geolocationController()->positionChanged(core(position)); 6311d0825bca7fe65beaee391d30da42e937db621564Steve Block#endif 6312d0825bca7fe65beaee391d30da42e937db621564Steve Block} 6313d0825bca7fe65beaee391d30da42e937db621564Steve Block 6314d0825bca7fe65beaee391d30da42e937db621564Steve Block- (void)_geolocationDidFailWithError:(NSError *)error 6315d0825bca7fe65beaee391d30da42e937db621564Steve Block{ 6316d0825bca7fe65beaee391d30da42e937db621564Steve Block#if ENABLE(CLIENT_BASED_GEOLOCATION) 6317d0825bca7fe65beaee391d30da42e937db621564Steve Block if (_private && _private->page) { 6318d0825bca7fe65beaee391d30da42e937db621564Steve Block RefPtr<GeolocationError> geolocatioError = GeolocationError::create(GeolocationError::PositionUnavailable, [error localizedDescription]); 6319d0825bca7fe65beaee391d30da42e937db621564Steve Block _private->page->geolocationController()->errorOccurred(geolocatioError.get()); 6320d0825bca7fe65beaee391d30da42e937db621564Steve Block } 6321d0825bca7fe65beaee391d30da42e937db621564Steve Block#endif 6322d0825bca7fe65beaee391d30da42e937db621564Steve Block} 6323d0825bca7fe65beaee391d30da42e937db621564Steve Block 6324d0825bca7fe65beaee391d30da42e937db621564Steve Block@end 6325d0825bca7fe65beaee391d30da42e937db621564Steve Block 6326dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block@implementation WebView (WebViewPrivateStyleInfo) 6327dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 6328dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block- (JSValueRef)_computedStyleIncludingVisitedInfo:(JSContextRef)context forElement:(JSValueRef)value 6329dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 6330dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block JSLock lock(SilenceAssertionsOnly); 6331dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block ExecState* exec = toJS(context); 6332dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (!value) 6333dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return JSValueMakeUndefined(context); 6334dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block JSValue jsValue = toJS(exec, value); 6335dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (!jsValue.inherits(&JSElement::s_info)) 6336dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return JSValueMakeUndefined(context); 6337dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block JSElement* jsElement = static_cast<JSElement*>(asObject(jsValue)); 6338dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block Element* element = jsElement->impl(); 6339dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block RefPtr<CSSComputedStyleDeclaration> style = computedStyle(element, true); 6340dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return toRef(exec, toJS(exec, jsElement->globalObject(), style.get())); 6341dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 6342dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 6343dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block@end 6344dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 6345bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen@implementation WebView (WebViewPrivateNodesFromRect) 6346bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 6347bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen- (JSValueRef)_nodesFromRect:(JSContextRef)context forDocument:(JSValueRef)value x:(int)x y:(int)y top:(unsigned)top right:(unsigned)right bottom:(unsigned)bottom left:(unsigned)left ignoreClipping:(BOOL)ignoreClipping 6348bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen{ 6349bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen JSLock lock(SilenceAssertionsOnly); 6350bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen ExecState* exec = toJS(context); 6351bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (!value) 6352bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen return JSValueMakeUndefined(context); 6353bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen JSValue jsValue = toJS(exec, value); 6354bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (!jsValue.inherits(&JSDocument::s_info)) 6355bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen return JSValueMakeUndefined(context); 6356bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen JSDocument* jsDocument = static_cast<JSDocument*>(asObject(jsValue)); 6357bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen Document* document = jsDocument->impl(); 6358bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen RefPtr<NodeList> nodes = document->nodesFromRect(x, y, top, right, bottom, left, ignoreClipping); 6359bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen return toRef(exec, toJS(exec, jsDocument->globalObject(), nodes.get())); 6360bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen} 6361bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 6362bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen@end 6363bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 6364635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#ifdef BUILDING_ON_LEOPARD 6365635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 6366635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectstatic IMP originalRecursivelyRemoveMailAttributesImp; 6367635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 6368635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectstatic id objectElementDataAttribute(DOMHTMLObjectElement *self, SEL) 6369635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project{ 6370635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return [self getAttribute:@"data"]; 6371635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project} 6372635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 6373635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectstatic void recursivelyRemoveMailAttributes(DOMNode *self, SEL selector, BOOL a, BOOL b, BOOL c) 6374635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project{ 6375635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project // While inside this Mail function, change the behavior of -[DOMHTMLObjectElement data] back to what it used to be 6376635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project // before we fixed a bug in it (see http://trac.webkit.org/changeset/30044 for that change). 6377635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 6378635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project // It's a little bit strange to patch a method defined by WebKit, but it helps keep this workaround self-contained. 6379635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 6380635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project Method methodToPatch = class_getInstanceMethod(objc_getRequiredClass("DOMHTMLObjectElement"), @selector(data)); 6381635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project IMP originalDataImp = method_setImplementation(methodToPatch, reinterpret_cast<IMP>(objectElementDataAttribute)); 6382635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project originalRecursivelyRemoveMailAttributesImp(self, selector, a, b, c); 6383635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project method_setImplementation(methodToPatch, originalDataImp); 6384635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project} 6385635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 6386635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#endif 6387635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 6388635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectstatic void patchMailRemoveAttributesMethod() 6389635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project{ 6390635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#ifdef BUILDING_ON_LEOPARD 6391635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project if (!WKAppVersionCheckLessThan(@"com.apple.mail", -1, 4.0)) 6392635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return; 6393635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project Method methodToPatch = class_getInstanceMethod(objc_getRequiredClass("DOMNode"), @selector(recursivelyRemoveMailAttributes:convertObjectsToImages:convertEditableElements:)); 6394635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project if (!methodToPatch) 6395635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return; 6396635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project originalRecursivelyRemoveMailAttributesImp = method_setImplementation(methodToPatch, reinterpret_cast<IMP>(recursivelyRemoveMailAttributes)); 6397635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#endif 6398635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project} 6399