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