Rename Source/WebKit to Source/WebKitLegacy.
[WebKit-https.git] / Source / WebKitLegacy / mac / WebView / WebFramePrivate.h
1 /*
2  * Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  *
8  * 1.  Redistributions of source code must retain the above copyright
9  *     notice, this list of conditions and the following disclaimer. 
10  * 2.  Redistributions in binary form must reproduce the above copyright
11  *     notice, this list of conditions and the following disclaimer in the
12  *     documentation and/or other materials provided with the distribution. 
13  * 3.  Neither the name of Apple Inc. ("Apple") nor the names of
14  *     its contributors may be used to endorse or promote products derived
15  *     from this software without specific prior written permission. 
16  *
17  * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
18  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
19  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
20  * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
21  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
22  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
23  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
24  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27  */
28
29 // This header contains the WebFrame SPI.
30
31 #import <WebKitLegacy/WebFrame.h>
32 #import <JavaScriptCore/JSBase.h>
33
34 #if !TARGET_OS_IPHONE
35 #if !defined(ENABLE_NETSCAPE_PLUGIN_API)
36 #define ENABLE_NETSCAPE_PLUGIN_API 1
37 #endif
38 #endif
39
40 #if TARGET_OS_IPHONE
41 #include <CoreText/CoreText.h>
42 #include <WebKitLegacy/WAKAppKitStubs.h>
43 #endif
44
45 @class DOMDocumentFragment;
46 @class DOMNode;
47 @class DOMRange;
48 @class WebScriptObject;
49 @class WebScriptWorld;
50
51 #if TARGET_OS_IPHONE
52 @class DOMElement;
53 @class DOMRange;
54 @class WebEvent;
55 #endif
56
57 // Keys for accessing the values in the page cache dictionary.
58 extern NSString *WebPageCacheEntryDateKey;
59 extern NSString *WebPageCacheDataSourceKey;
60 extern NSString *WebPageCacheDocumentViewKey;
61
62 extern NSString *WebFrameMainDocumentError;
63 extern NSString *WebFrameHasPlugins;
64 extern NSString *WebFrameHasUnloadListener;
65 extern NSString *WebFrameUsesDatabases;
66 extern NSString *WebFrameUsesGeolocation;
67 extern NSString *WebFrameUsesApplicationCache;
68 extern NSString *WebFrameCanSuspendActiveDOMObjects;
69
70 typedef enum {
71     WebFrameLoadTypeStandard,
72     WebFrameLoadTypeBack,
73     WebFrameLoadTypeForward,
74     WebFrameLoadTypeIndexedBackForward, // a multi-item hop in the backforward list
75     WebFrameLoadTypeReload,
76     WebFrameLoadTypeReloadAllowingStaleData,
77     WebFrameLoadTypeSame,               // user loads same URL again (but not reload button)
78     WebFrameLoadTypeInternal,           // maps to WebCore::FrameLoadTypeRedirectWithLockedBackForwardList
79     WebFrameLoadTypeReplace,
80     WebFrameLoadTypeReloadFromOrigin,
81 } WebFrameLoadType;
82
83 @interface WebFrame (WebPrivate)
84
85 - (BOOL)_isDescendantOfFrame:(WebFrame *)frame;
86 - (void)_setShouldCreateRenderers:(BOOL)shouldCreateRenderers;
87 #if !TARGET_OS_IPHONE
88 - (NSColor *)_bodyBackgroundColor;
89 #else
90 - (CGColorRef)_bodyBackgroundColor;
91 #endif
92 - (BOOL)_isFrameSet;
93 - (BOOL)_firstLayoutDone;
94 - (BOOL)_isVisuallyNonEmpty;
95 - (WebFrameLoadType)_loadType;
96 #if TARGET_OS_IPHONE
97 - (BOOL)needsLayout; // Needed for Mail <rdar://problem/6228038>
98 - (void)_setLoadsSynchronously:(BOOL)flag;
99 - (BOOL)_loadsSynchronously;
100 - (unsigned)formElementsCharacterCount;
101 - (void)setTimeoutsPaused:(BOOL)flag;
102
103 /*!
104     @method setPluginsPaused
105     @abstract Stop/start all plugins based on the flag passed if we have a WebHTMLView
106     @param flag YES to stop plugins on the html view, NO to start them
107  */
108 - (void)setPluginsPaused:(BOOL)flag;
109 - (void)prepareForPause;
110 - (void)resumeFromPause;
111 - (void)updateLayout;
112 - (void)selectNSRange:(NSRange)range;
113 - (void)selectWithoutClosingTypingNSRange:(NSRange)range;
114 - (NSRange)selectedNSRange;
115 - (void)forceLayoutAdjustingViewSize:(BOOL)adjust;
116 - (void)_handleKeyEvent:(WebEvent *)event;
117 - (void)_selectAll;
118 - (void)_setSelectionFromNone;
119 - (void)_saveViewState;
120 - (void)_restoreViewState;
121
122 - (void)deviceOrientationChanged;
123
124 - (void)setNeedsLayout;
125 - (CGSize)renderedSizeOfNode:(DOMNode *)node constrainedToWidth:(float)width;
126 - (DOMNode *)deepestNodeAtViewportLocation:(CGPoint)aViewportLocation;
127 - (DOMNode *)scrollableNodeAtViewportLocation:(CGPoint)aViewportLocation;
128 - (DOMNode *)approximateNodeAtViewportLocation:(CGPoint *)aViewportLocation;
129 - (CGRect)renderRectForPoint:(CGPoint)point isReplaced:(BOOL *)isReplaced fontSize:(float *)fontSize;
130
131 - (void)_setProhibitsScrolling:(BOOL)flag;
132
133 - (void)revealSelectionAtExtent:(BOOL)revealExtent;
134 - (void)resetSelection;
135 - (BOOL)hasEditableSelection;
136
137 - (int)preferredHeight;
138 // Returns the line height of the inner node of a text control.
139 // For other nodes, the value is the same as lineHeight.
140 - (int)innerLineHeight:(DOMNode *)node;
141 - (void)setIsActive:(BOOL)flag;
142 - (void)setSelectionChangeCallbacksDisabled:(BOOL)flag;
143 - (NSRect)caretRect;
144 - (NSRect)rectForScrollToVisible; // return caretRect if selection is caret, selectionRect otherwise
145 - (void)setCaretColor:(CGColorRef)color;
146 - (NSView *)documentView;
147 - (int)layoutCount;
148 - (BOOL)isTelephoneNumberParsingAllowed;
149 - (BOOL)isTelephoneNumberParsingEnabled;
150
151 - (DOMRange *)selectedDOMRange;
152 - (void)setSelectedDOMRange:(DOMRange *)range affinity:(NSSelectionAffinity)affinity closeTyping:(BOOL)closeTyping;
153 - (NSSelectionAffinity)selectionAffinity;
154 - (void)expandSelectionToElementContainingCaretSelection;
155 - (DOMRange *)elementRangeContainingCaretSelection;
156 - (void)expandSelectionToWordContainingCaretSelection;
157 - (void)expandSelectionToStartOfWordContainingCaretSelection;
158 - (unichar)characterInRelationToCaretSelection:(int)amount;
159 - (unichar)characterBeforeCaretSelection;
160 - (unichar)characterAfterCaretSelection;
161 - (DOMRange *)wordRangeContainingCaretSelection;
162 - (NSString *)wordInRange:(DOMRange *)range;
163 - (int)wordOffsetInRange:(DOMRange *)range;
164 - (BOOL)spaceFollowsWordInRange:(DOMRange *)range;
165 - (NSArray *)wordsInCurrentParagraph;
166 - (BOOL)selectionAtDocumentStart;
167 - (BOOL)selectionAtSentenceStart;
168 - (BOOL)selectionAtWordStart;
169 - (DOMRange *)rangeByMovingCurrentSelection:(int)amount;
170 - (DOMRange *)rangeByExtendingCurrentSelection:(int)amount;
171 - (void)selectNSRange:(NSRange)range onElement:(DOMElement *)element;
172 - (DOMRange *)markedTextDOMRange;
173 - (void)setMarkedText:(NSString *)text selectedRange:(NSRange)newSelRange;
174 - (void)setMarkedText:(NSString *)text forCandidates:(BOOL)forCandidates;
175 - (void)confirmMarkedText:(NSString *)text;
176 - (void)setText:(NSString *)text asChildOfElement:(DOMElement *)element;
177 - (void)setDictationPhrases:(NSArray *)dictationPhrases metadata:(id)metadata asChildOfElement:(DOMElement *)element;
178 - (NSArray *)interpretationsForCurrentRoot;
179 - (void)getDictationResultRanges:(NSArray **)ranges andMetadatas:(NSArray **)metadatas;
180 - (id)dictationResultMetadataForRange:(DOMRange *)range;
181 - (void)recursiveSetUpdateAppearanceEnabled:(BOOL)enabled;
182
183 // WebCoreFrameBridge methods used by iOS applications and frameworks
184 + (NSString *)stringWithData:(NSData *)data textEncodingName:(NSString *)textEncodingName;
185
186 - (NSRect)caretRectAtNode:(DOMNode *)node offset:(int)offset affinity:(NSSelectionAffinity)affinity;
187 - (DOMRange *)characterRangeAtPoint:(NSPoint)point;
188 - (NSRange)convertDOMRangeToNSRange:(DOMRange *)range;
189 - (DOMRange *)convertNSRangeToDOMRange:(NSRange)nsrange;
190 - (NSRect)firstRectForDOMRange:(DOMRange *)range;
191 - (CTFontRef)fontForSelection:(BOOL *)hasMultipleFonts;
192 - (void)sendScrollEvent;
193 - (void)_userScrolled;
194 - (NSString *)stringByEvaluatingJavaScriptFromString:(NSString *)string forceUserGesture:(BOOL)forceUserGesture;
195 - (NSString *)stringForRange:(DOMRange *)range;
196 - (void)_replaceSelectionWithText:(NSString *)text selectReplacement:(BOOL)selectReplacement smartReplace:(BOOL)smartReplace matchStyle:(BOOL)matchStyle;
197 #endif // TARGET_OS_IPHONE
198
199 // These methods take and return NSRanges based on the root editable element as the positional base.
200 // This fits with AppKit's idea of an input context. These methods are slow compared to their DOMRange equivalents.
201 // You should use WebView's selectedDOMRange and setSelectedDOMRange whenever possible.
202 - (NSRange)_selectedNSRange;
203 - (void)_selectNSRange:(NSRange)range;
204
205 #if TARGET_OS_IPHONE
206 // FIXME: selection
207 - (NSArray *)_rectsForRange:(DOMRange *)domRange;
208 - (DOMRange *)_selectionRangeForPoint:(CGPoint)point;
209 - (DOMRange *)_selectionRangeForFirstPoint:(CGPoint)first secondPoint:(CGPoint)second;
210 #endif
211
212 - (BOOL)_isDisplayingStandaloneImage;
213
214 - (unsigned)_pendingFrameUnloadEventCount;
215
216 #if !TARGET_OS_IPHONE
217 #if ENABLE_NETSCAPE_PLUGIN_API
218 - (void)_recursive_resumeNullEventsForAllNetscapePlugins;
219 - (void)_recursive_pauseNullEventsForAllNetscapePlugins;
220 #endif
221 #endif
222
223 - (NSString *)_stringByEvaluatingJavaScriptFromString:(NSString *)string withGlobalObject:(JSObjectRef)globalObject inScriptWorld:(WebScriptWorld *)world;
224 - (JSGlobalContextRef)_globalContextForScriptWorld:(WebScriptWorld *)world;
225
226 #if JSC_OBJC_API_ENABLED
227 - (JSContext *)_javaScriptContextForScriptWorld:(WebScriptWorld *)world;
228 #endif
229
230 - (void)resetTextAutosizingBeforeLayout;
231 - (void)_setVisibleSize:(CGSize)size;
232 - (void)_setTextAutosizingWidth:(CGFloat)width;
233
234 #if TARGET_OS_IPHONE
235 - (void)_replaceSelectionWithWebArchive:(WebArchive *)webArchive selectReplacement:(BOOL)selectReplacement smartReplace:(BOOL)smartReplace;
236 #endif
237
238 - (void)_replaceSelectionWithFragment:(DOMDocumentFragment *)fragment selectReplacement:(BOOL)selectReplacement smartReplace:(BOOL)smartReplace matchStyle:(BOOL)matchStyle;
239 - (void)_replaceSelectionWithText:(NSString *)text selectReplacement:(BOOL)selectReplacement smartReplace:(BOOL)smartReplace;
240 - (void)_replaceSelectionWithMarkupString:(NSString *)markupString baseURLString:(NSString *)baseURLString selectReplacement:(BOOL)selectReplacement smartReplace:(BOOL)smartReplace;
241
242 #if !TARGET_OS_IPHONE
243 - (void)_smartInsertForString:(NSString *)pasteString replacingRange:(DOMRange *)rangeToReplace beforeString:(NSString **)beforeString afterString:(NSString **)afterString;
244 #endif
245
246 - (NSMutableDictionary *)_cacheabilityDictionary;
247
248 - (BOOL)_allowsFollowingLink:(NSURL *)URL;
249
250 #if !TARGET_OS_IPHONE
251 // Sets whether the scrollbars, if any, should be shown inside the document's border 
252 // (thus overlapping some content) or outside the webView's border (default behavior). 
253 // Changing this flag changes the size of the contentView and maintains the size of the frameView.
254 - (void)setAllowsScrollersToOverlapContent:(BOOL)flag;
255
256 // Sets if the scrollbar is always hidden, regardless of other scrollbar visibility settings. 
257 // This does not affect the scrollability of the document.
258 - (void)setAlwaysHideHorizontalScroller:(BOOL)flag;
259 - (void)setAlwaysHideVerticalScroller:(BOOL)flag;
260 #endif
261
262 // Sets the name presented to accessibility clients for the web area object.
263 - (void)setAccessibleName:(NSString *)name;
264
265 // Enhanced accessibility.
266 - (BOOL)enhancedAccessibilityEnabled;
267 - (void)setEnhancedAccessibility:(BOOL)enable;
268
269 - (NSString*)_layerTreeAsText;
270
271 // The top of the accessibility tree.
272 - (id)accessibilityRoot;
273
274 // Clears frame opener. This is executed between layout tests runs
275 - (void)_clearOpener;
276
277 // Printing.
278 - (NSArray *)_computePageRectsWithPrintScaleFactor:(float)printWidthScaleFactor pageSize:(NSSize)pageSize;
279
280 // Drag and drop support.
281 @property (nonatomic, readonly) BOOL hasRichlyEditableDragCaret;
282
283 #if TARGET_OS_IPHONE
284 - (DOMDocumentFragment *)_documentFragmentForText:(NSString *)text;
285 // These have the side effect of adding subresources to our WebDataSource where appropriate.
286 - (DOMDocumentFragment *)_documentFragmentForWebArchive:(WebArchive *)webArchive;
287 - (DOMDocumentFragment *)_documentFragmentForImageData:(NSData *)data withRelativeURLPart:(NSString *)relativeURLPart andMIMEType:(NSString *)mimeType;
288
289 - (BOOL)focusedNodeHasContent;
290
291 - (void)_dispatchDidReceiveTitle:(NSString *)title;
292 - (void)removeUnchangeableStyles;
293 - (BOOL)hasRichlyEditableSelection;
294 #endif
295
296 - (JSValueRef)jsWrapperForNode:(DOMNode *)node inScriptWorld:(WebScriptWorld *)world;
297
298 - (NSDictionary *)elementAtPoint:(NSPoint)point;
299
300 - (NSURL *)_unreachableURL;
301 @end