d15cfab42209eeece76844ac2986b47fb67e1e59
[WebKit-https.git] / WebCore / page / mac / WebCoreFrameBridge.h
1 /*
2  * Copyright (C) 2004, 2005, 2006 Apple Computer, 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  * 1. Redistributions of source code must retain the above copyright
8  *    notice, this list of conditions and the following disclaimer.
9  * 2. Redistributions in binary form must reproduce the above copyright
10  *    notice, this list of conditions and the following disclaimer in the
11  *    documentation and/or other materials provided with the distribution.
12  *
13  * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
14  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
17  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
20  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
24  */
25
26 #import <Cocoa/Cocoa.h>
27 #import <JavaScriptCore/npruntime.h>
28 #import <JavaVM/jni.h>
29 #import <WebCore/WebCoreKeyboardUIMode.h>
30 #import <WebCore/EditAction.h>
31 #import <WebCore/SelectionController.h>
32 #import <WebCore/TextAffinity.h>
33 #import <WebCore/TextGranularity.h>
34
35 namespace WebCore {
36     class FrameMac;
37     class HTMLFrameOwnerElement;
38     class Page;
39     class String;
40 }
41
42 @class DOMCSSStyleDeclaration;
43 @class DOMDocument;
44 @class DOMDocumentFragment;
45 @class DOMElement;
46 @class DOMHTMLInputElement;
47 @class DOMHTMLTextAreaElement;
48 @class DOMNode;
49 @class DOMRange;
50 @class NSMenu;
51
52 @protocol WebCoreRenderTreeCopier;
53
54 extern NSString *WebCorePageCacheStateKey;
55
56 enum WebCoreDeviceType {
57     WebCoreDeviceScreen,
58     WebCoreDevicePrinter
59 };
60
61 enum WebScrollDirection {
62     WebScrollUp,
63     WebScrollDown,
64     WebScrollLeft,
65     WebScrollRight
66 };
67
68 enum WebScrollGranularity {
69     WebScrollLine,
70     WebScrollPage,
71     WebScrollDocument,
72     WebScrollWheel
73 };
74
75 typedef enum ObjectElementType {
76     ObjectElementNone,
77     ObjectElementImage,
78     ObjectElementFrame,
79     ObjectElementPlugin
80 };
81
82 @protocol WebCoreOpenPanelResultListener <NSObject>
83 - (void)chooseFilename:(NSString *)fileName;
84 - (void)cancel;
85 @end
86
87 // WebCoreFrameBridge objects are used by WebCore to abstract away operations that need
88 // to be implemented by library clients, for example WebKit. The objects are also
89 // used in the opposite direction, for simple access to WebCore functions without dealing
90 // directly with the KHTML C++ classes.
91
92 // A WebCoreFrameBridge creates and holds a reference to a Frame.
93
94 // The WebCoreFrameBridge interface contains methods for use by the non-WebCore side of the bridge.
95
96 @interface WebCoreFrameBridge : NSObject
97 {
98 @public
99     WebCore::FrameMac* m_frame;
100     BOOL _shouldCreateRenderers;
101     BOOL _closed;
102 }
103
104 - (WebCore::FrameMac*)_frame; // underscore to prevent conflict with -[NSView frame]
105
106 + (WebCoreFrameBridge *)bridgeForDOMDocument:(DOMDocument *)document;
107
108 - (id)init;
109 - (void)close;
110
111 - (void)addData:(NSData *)data;
112
113 - (void)saveDocumentState;
114 - (void)restoreDocumentState;
115
116 - (void)clearFrame;
117
118 - (NSURL *)baseURL;
119
120 - (void)installInFrame:(NSView *)view;
121
122 - (BOOL)scrollOverflowInDirection:(WebScrollDirection)direction granularity:(WebScrollGranularity)granularity;
123
124 - (void)createFrameViewWithNSView:(NSView *)view marginWidth:(int)mw marginHeight:(int)mh;
125
126 - (void)reapplyStylesForDeviceType:(WebCoreDeviceType)deviceType;
127 - (void)forceLayoutAdjustingViewSize:(BOOL)adjustSizeFlag;
128 - (void)forceLayoutWithMinimumPageWidth:(float)minPageWidth maximumPageWidth:(float)maxPageWidth adjustingViewSize:(BOOL)adjustSizeFlag;
129 - (void)sendResizeEvent;
130 - (void)sendScrollEvent;
131 - (BOOL)needsLayout;
132 - (void)setNeedsLayout;
133 - (void)drawRect:(NSRect)rect;
134 - (void)adjustPageHeightNew:(float *)newBottom top:(float)oldTop bottom:(float)oldBottom limit:(float)bottomLimit;
135 - (NSArray*)computePageRectsWithPrintWidthScaleFactor:(float)printWidthScaleFactor printHeight:(float)printHeight;
136
137 - (NSView *)nextKeyView;
138 - (NSView *)previousKeyView;
139
140 - (NSView *)nextKeyViewInsideWebFrameViews;
141 - (NSView *)previousKeyViewInsideWebFrameViews;
142
143 - (NSObject *)copyRenderTree:(id <WebCoreRenderTreeCopier>)copier;
144 - (NSString *)renderTreeAsExternalRepresentation;
145
146 - (NSURL *)URLWithAttributeString:(NSString *)string;
147
148 - (DOMElement *)elementWithName:(NSString *)name inForm:(DOMElement *)form;
149 - (DOMElement *)elementForView:(NSView *)view;
150 - (BOOL)elementDoesAutoComplete:(DOMElement *)element;
151 - (BOOL)elementIsPassword:(DOMElement *)element;
152 - (DOMElement *)formForElement:(DOMElement *)element;
153 - (DOMElement *)currentForm;
154 - (NSArray *)controlsInForm:(DOMElement *)form;
155 - (NSString *)searchForLabels:(NSArray *)labels beforeElement:(DOMElement *)element;
156 - (NSString *)matchLabels:(NSArray *)labels againstElement:(DOMElement *)element;
157
158 - (BOOL)searchFor:(NSString *)string direction:(BOOL)forward caseSensitive:(BOOL)caseFlag wrap:(BOOL)wrapFlag;
159 - (unsigned)markAllMatchesForText:(NSString *)string caseSensitive:(BOOL)caseFlag limit:(unsigned)limit;
160 - (BOOL)markedTextMatchesAreHighlighted;
161 - (void)setMarkedTextMatchesAreHighlighted:(BOOL)doHighlight;
162 - (void)unmarkAllTextMatches;
163 - (NSArray *)rectsForTextMatches;
164
165 - (void)setTextSizeMultiplier:(float)multiplier;
166
167 - (NSString *)stringByEvaluatingJavaScriptFromString:(NSString *)string;
168 - (NSString *)stringByEvaluatingJavaScriptFromString:(NSString *)string forceUserGesture:(BOOL)forceUserGesture;
169 - (NSAppleEventDescriptor *)aeDescByEvaluatingJavaScriptFromString:(NSString *)string;
170
171 - (NSString *)selectedString;
172
173 - (NSString *)stringForRange:(DOMRange *)range;
174
175 - (NSString *)markupStringFromNode:(DOMNode *)node nodes:(NSArray **)nodes;
176 - (NSString *)markupStringFromRange:(DOMRange *)range nodes:(NSArray **)nodes;
177
178 - (NSRect)caretRectAtNode:(DOMNode *)node offset:(int)offset affinity:(NSSelectionAffinity)affinity;
179 - (NSRect)firstRectForDOMRange:(DOMRange *)range;
180 - (void)scrollDOMRangeToVisible:(DOMRange *)range;
181
182 // Emacs-style-editing "mark"
183 - (void)setMarkDOMRange:(DOMRange *)range;
184 - (DOMRange *)markDOMRange;
185
186 // international text input "marked text"
187 - (void)setMarkedTextDOMRange:(DOMRange *)range customAttributes:(NSArray *)attributes ranges:(NSArray *)ranges;
188 - (DOMRange *)markedTextDOMRange;
189 - (void)replaceMarkedTextWithText:(NSString *)text;
190
191 - (NSFont *)fontForSelection:(BOOL *)hasMultipleFonts;
192 - (NSWritingDirection)baseWritingDirectionForSelectionStart;
193
194 - (NSString *)stringWithData:(NSData *)data; // using the encoding of the frame's main resource
195 + (NSString *)stringWithData:(NSData *)data textEncodingName:(NSString *)textEncodingName; // nil for textEncodingName means Latin-1
196
197 - (void)setShouldCreateRenderers:(BOOL)f;
198 - (BOOL)shouldCreateRenderers;
199
200 - (void)setBaseBackgroundColor:(NSColor *)backgroundColor;
201 - (void)setDrawsBackground:(BOOL)drawsBackround;
202
203 - (NSColor *)selectionColor;
204
205 - (id)accessibilityTree;
206
207 - (DOMRange *)rangeOfCharactersAroundCaret;
208 - (DOMRange *)rangeByAlteringCurrentSelection:(WebCore::SelectionController::EAlteration)alteration direction:(WebCore::SelectionController::EDirection)direction granularity:(WebCore::TextGranularity)granularity;
209 - (void)alterCurrentSelection:(WebCore::SelectionController::EAlteration)alteration verticalDistance:(float)distance;
210 - (WebCore::TextGranularity)selectionGranularity;
211 - (DOMRange *)smartDeleteRangeForProposedRange:(DOMRange *)proposedCharRange;
212 - (void)smartInsertForString:(NSString *)pasteString replacingRange:(DOMRange *)charRangeToReplace beforeString:(NSString **)beforeString afterString:(NSString **)afterString;
213 - (void)selectNSRange:(NSRange)range;
214 - (NSRange)selectedNSRange;
215 - (NSRange)markedTextNSRange;
216 - (DOMRange *)convertNSRangeToDOMRange:(NSRange)range;
217 - (NSRange)convertDOMRangeToNSRange:(DOMRange *)range;
218
219 - (DOMDocumentFragment *)documentFragmentWithMarkupString:(NSString *)markupString baseURLString:(NSString *)baseURLString;
220 - (DOMDocumentFragment *)documentFragmentWithText:(NSString *)text inContext:(DOMRange *)context;
221 - (DOMDocumentFragment *)documentFragmentWithNodesAsParagraphs:(NSArray *)nodes;
222
223 - (void)replaceSelectionWithFragment:(DOMDocumentFragment *)fragment selectReplacement:(BOOL)selectReplacement smartReplace:(BOOL)smartReplace matchStyle:(BOOL)matchStyle;
224 - (void)replaceSelectionWithNode:(DOMNode *)node selectReplacement:(BOOL)selectReplacement smartReplace:(BOOL)smartReplace matchStyle:(BOOL)matchStyle;
225 - (void)replaceSelectionWithMarkupString:(NSString *)markupString baseURLString:(NSString *)baseURLString selectReplacement:(BOOL)selectReplacement smartReplace:(BOOL)smartReplace;
226 - (void)replaceSelectionWithText:(NSString *)text selectReplacement:(BOOL)selectReplacement smartReplace:(BOOL)smartReplace;
227
228 - (bool)canIncreaseSelectionListLevel;
229 - (bool)canDecreaseSelectionListLevel;
230 - (DOMNode *)increaseSelectionListLevel;
231 - (DOMNode *)increaseSelectionListLevelOrdered;
232 - (DOMNode *)increaseSelectionListLevelUnordered;
233 - (void)decreaseSelectionListLevel;
234
235 - (void)insertLineBreak;
236 - (void)insertParagraphSeparator;
237 - (void)insertParagraphSeparatorInQuotedContent;
238 - (void)insertText:(NSString *)text selectInsertedText:(BOOL)selectInsertedText;
239
240 - (void)setSelectionToDragCaret;
241 - (void)moveSelectionToDragCaret:(DOMDocumentFragment *)selectionFragment smartMove:(BOOL)smartMove;
242 - (void)moveDragCaretToPoint:(NSPoint)point;
243 - (DOMRange *)dragCaretDOMRange;
244 - (BOOL)isDragCaretRichlyEditable;
245 - (DOMRange *)editableDOMRangeForPoint:(NSPoint)point;
246 - (DOMRange *)characterRangeAtPoint:(NSPoint)point;
247
248 - (void)deleteKeyPressedWithSmartDelete:(BOOL)smartDelete granularity:(WebCore::TextGranularity)granularity;
249 - (void)forwardDeleteKeyPressedWithSmartDelete:(BOOL)smartDelete granularity:(WebCore::TextGranularity)granularity;
250
251 - (DOMCSSStyleDeclaration *)typingStyle;
252 - (void)setTypingStyle:(DOMCSSStyleDeclaration *)style withUndoAction:(WebCore::EditAction)undoAction;
253 - (NSCellStateValue)selectionHasStyle:(DOMCSSStyleDeclaration *)style;
254
255 - (NSDragOperation)dragOperationForDraggingInfo:(id <NSDraggingInfo>)info;
256 - (void)dragExitedWithDraggingInfo:(id <NSDraggingInfo>)info;
257 - (BOOL)concludeDragForDraggingInfo:(id <NSDraggingInfo>)info;
258 - (void)dragSourceMovedTo:(NSPoint)windowLoc;
259 - (void)dragSourceEndedAt:(NSPoint)windowLoc operation:(NSDragOperation)operation;
260
261 - (BOOL)isCharacterSmartReplaceExempt:(unichar)c isPreviousCharacter:(BOOL)isPreviousCharacter;
262
263 - (BOOL)getData:(NSData **)data andResponse:(NSURLResponse **)response forURL:(NSURL *)URL;
264 - (void)getAllResourceDatas:(NSArray **)datas andResponses:(NSArray **)responses;
265
266 - (BOOL)canProvideDocumentSource;
267 - (BOOL)canSaveAsWebArchive;
268
269 - (void)receivedData:(NSData *)data textEncodingName:(NSString *)textEncodingName;
270
271 @end
272
273 // The WebCoreFrameBridge protocol contains methods for use by the WebCore side of the bridge.
274
275 @protocol WebCoreFrameBridge
276
277 - (NSView *)documentView;
278
279 - (void)setStatusText:(NSString *)status;
280
281 - (WebCoreFrameBridge *)createChildFrameNamed:(NSString *)frameName withURL:(NSURL *)URL referrer:(const WebCore::String&)referrer
282     ownerElement:(WebCore::HTMLFrameOwnerElement *)ownerElement allowsScrolling:(BOOL)allowsScrolling marginWidth:(int)width marginHeight:(int)height;
283
284 - (NSWindow *)window;
285
286 - (NSResponder *)firstResponder;
287 - (void)makeFirstResponder:(NSResponder *)responder;
288 - (void)willMakeFirstResponderForNodeFocus;
289
290 - (BOOL)textViewWasFirstResponderAtMouseDownTime:(NSTextView *)textView;
291
292 - (void)closeWindowSoon;
293
294 - (void)runJavaScriptAlertPanelWithMessage:(NSString *)message;
295 - (BOOL)runJavaScriptConfirmPanelWithMessage:(NSString *)message;
296 - (BOOL)runJavaScriptTextInputPanelWithPrompt:(NSString *)prompt defaultText:(NSString *)defaultText returningText:(NSString **)result;
297 - (BOOL)shouldInterruptJavaScript;
298 - (BOOL)canRunBeforeUnloadConfirmPanel;
299 - (BOOL)runBeforeUnloadConfirmPanelWithMessage:(NSString *)message;
300 - (void)runOpenPanelForFileButtonWithResultListener:(id <WebCoreOpenPanelResultListener>)resultListener;
301
302 - (void)formControlIsBecomingFirstResponder:(NSView *)formControl;
303 - (void)formControlIsResigningFirstResponder:(NSView *)formControl;
304
305 - (NSView *)nextKeyViewOutsideWebFrameViews;
306 - (NSView *)previousKeyViewOutsideWebFrameViews;
307
308 - (void)saveDocumentState:(NSArray *)documentState;
309 - (NSArray *)documentState;
310
311 - (void)setNeedsReapplyStyles;
312
313 - (NSView *)viewForPluginWithURL:(NSURL *)URL
314                   attributeNames:(NSArray *)attributeNames
315                  attributeValues:(NSArray *)attributeValues
316                         MIMEType:(NSString *)MIMEType
317                       DOMElement:(DOMElement *)element
318                     loadManually:(BOOL)loadManually;
319 - (NSView *)viewForJavaAppletWithFrame:(NSRect)frame
320                         attributeNames:(NSArray *)attributeNames
321                        attributeValues:(NSArray *)attributeValues
322                                baseURL:(NSURL *)baseURL
323                             DOMElement:(DOMElement *)element;
324 - (void)redirectDataToPlugin:(NSView *)pluginView;
325
326 - (int)getObjectCacheSize;
327
328 - (ObjectElementType)determineObjectFromMIMEType:(NSString*)MIMEType URL:(NSURL*)URL;
329
330 - (NSString *)MIMETypeForPath:(NSString *)path;
331
332 - (void)allowDHTMLDrag:(BOOL *)flagDHTML UADrag:(BOOL *)flagUA;
333 - (BOOL)startDraggingImage:(NSImage *)dragImage at:(NSPoint)dragLoc operation:(NSDragOperation)op event:(NSEvent *)event sourceIsDHTML:(BOOL)flag DHTMLWroteData:(BOOL)dhtmlWroteData;
334 - (BOOL)mayStartDragAtEventLocation:(NSPoint)location;
335
336 - (int)historyLength;
337 - (void)goBackOrForward:(int)distance;
338 - (BOOL)canGoBackOrForward:(int)distance;
339 - (NSURL *)historyURL:(int)distance;
340
341 - (void)textFieldDidBeginEditing:(DOMHTMLInputElement *)element;
342 - (void)textFieldDidEndEditing:(DOMHTMLInputElement *)element;
343 - (void)textDidChangeInTextField:(DOMHTMLInputElement *)element;
344 - (void)textDidChangeInTextArea:(DOMHTMLTextAreaElement *)element;
345
346 - (BOOL)textField:(DOMHTMLInputElement *)element doCommandBySelector:(SEL)commandSelector;
347 - (BOOL)textField:(DOMHTMLInputElement *)element shouldHandleEvent:(NSEvent *)event;
348
349 - (void)setHasBorder:(BOOL)hasBorder;
350
351 - (void)print;
352
353 - (jobject)getAppletInView:(NSView *)view;
354
355 // Deprecated, use getAppletInView: instead.
356 - (jobject)pollForAppletInView:(NSView *)view;
357
358 - (void)issueCutCommand;
359 - (void)issueCopyCommand;
360 - (void)issuePasteCommand;
361 - (void)issuePasteAndMatchStyleCommand;
362 - (void)issueTransposeCommand;
363 - (void)respondToChangedSelection;
364 - (void)setIsSelected:(BOOL)isSelected forView:(NSView *)view;
365 - (BOOL)isEditable;
366 - (BOOL)shouldChangeSelectedDOMRange:(DOMRange *)currentRange toDOMRange:(DOMRange *)proposedRange affinity:(WebCore::EAffinity)selectionAffinity stillSelecting:(BOOL)flag;
367 - (BOOL)shouldDeleteSelectedDOMRange:(DOMRange *)currentRange;
368
369 - (NSString *)overrideMediaType;
370
371 - (void)windowObjectCleared;
372
373 - (void)dashboardRegionsChanged:(NSMutableDictionary *)regions;
374 - (void)willPopupMenu:(NSMenu *)menu;
375
376 - (NSRect)customHighlightRect:(NSString*)type forLine:(NSRect)lineRect;
377 - (void)paintCustomHighlight:(NSString*)type forBox:(NSRect)boxRect onLine:(NSRect)lineRect behindText:(BOOL)text entireLine:(BOOL)line;
378
379 - (WebCore::KeyboardUIMode)keyboardUIMode;
380
381 - (NSString*)imageTitleForFilename:(NSString*)filename size:(NSSize)size;
382
383 @end
384
385 // This interface definition allows those who hold a WebCoreFrameBridge * to call all the methods
386 // in the WebCoreFrameBridge protocol without requiring the base implementation to supply the methods.
387 // This idiom is appropriate because WebCoreFrameBridge is an abstract class.
388
389 @interface WebCoreFrameBridge (SubclassResponsibility) <WebCoreFrameBridge>
390 @end
391
392 // Protocols that make up part of the interfaces above.
393
394 @protocol WebCoreRenderTreeCopier <NSObject>
395 - (NSObject *)nodeWithName:(NSString *)name position:(NSPoint)p rect:(NSRect)rect view:(NSView *)view children:(NSArray *)children;
396 @end