2f0f754865c90ebcb68243e83f38ce2f4a4a20d8
[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 Frame;
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 enum WebCoreDeviceType {
55     WebCoreDeviceScreen,
56     WebCoreDevicePrinter
57 };
58
59 enum WebScrollDirection {
60     WebScrollUp,
61     WebScrollDown,
62     WebScrollLeft,
63     WebScrollRight
64 };
65
66 enum WebScrollGranularity {
67     WebScrollLine,
68     WebScrollPage,
69     WebScrollDocument,
70     WebScrollWheel
71 };
72
73 typedef enum ObjectElementType {
74     ObjectElementNone,
75     ObjectElementImage,
76     ObjectElementFrame,
77     ObjectElementPlugin
78 };
79
80 @protocol WebCoreOpenPanelResultListener <NSObject>
81 - (void)chooseFilename:(NSString *)fileName;
82 - (void)cancel;
83 @end
84
85 // WebCoreFrameBridge objects are used by WebCore to abstract away operations that need
86 // to be implemented by library clients, for example WebKit. The objects are also
87 // used in the opposite direction, for simple access to WebCore functions without dealing
88 // directly with the KHTML C++ classes.
89
90 // A WebCoreFrameBridge creates and holds a reference to a Frame.
91
92 // The WebCoreFrameBridge interface contains methods for use by the non-WebCore side of the bridge.
93
94 @interface WebCoreFrameBridge : NSObject
95 {
96 @public
97     WebCore::Frame* m_frame;
98     BOOL _shouldCreateRenderers;
99     BOOL _closed;
100 }
101
102 - (WebCore::Frame*)_frame; // underscore to prevent conflict with -[NSView frame]
103
104 + (WebCoreFrameBridge *)bridgeForDOMDocument:(DOMDocument *)document;
105
106 - (id)init;
107 - (void)close;
108
109 - (void)addData:(NSData *)data;
110
111 - (void)clearFrame;
112
113 - (NSURL *)baseURL;
114
115 - (void)installInFrame:(NSView *)view;
116
117 - (BOOL)scrollOverflowInDirection:(WebScrollDirection)direction granularity:(WebScrollGranularity)granularity;
118
119 - (void)createFrameViewWithNSView:(NSView *)view marginWidth:(int)mw marginHeight:(int)mh;
120
121 - (void)reapplyStylesForDeviceType:(WebCoreDeviceType)deviceType;
122 - (void)forceLayoutAdjustingViewSize:(BOOL)adjustSizeFlag;
123 - (void)forceLayoutWithMinimumPageWidth:(float)minPageWidth maximumPageWidth:(float)maxPageWidth adjustingViewSize:(BOOL)adjustSizeFlag;
124 - (void)sendResizeEvent;
125 - (void)sendScrollEvent;
126 - (BOOL)needsLayout;
127 - (void)setNeedsLayout;
128 - (void)drawRect:(NSRect)rect;
129 - (void)adjustPageHeightNew:(float *)newBottom top:(float)oldTop bottom:(float)oldBottom limit:(float)bottomLimit;
130 - (NSArray*)computePageRectsWithPrintWidthScaleFactor:(float)printWidthScaleFactor printHeight:(float)printHeight;
131
132 - (NSObject *)copyRenderTree:(id <WebCoreRenderTreeCopier>)copier;
133 - (NSString *)renderTreeAsExternalRepresentation;
134
135 - (NSURL *)URLWithAttributeString:(NSString *)string;
136
137 - (DOMElement *)elementWithName:(NSString *)name inForm:(DOMElement *)form;
138 - (BOOL)elementDoesAutoComplete:(DOMElement *)element;
139 - (BOOL)elementIsPassword:(DOMElement *)element;
140 - (DOMElement *)formForElement:(DOMElement *)element;
141 - (DOMElement *)currentForm;
142 - (NSArray *)controlsInForm:(DOMElement *)form;
143 - (NSString *)searchForLabels:(NSArray *)labels beforeElement:(DOMElement *)element;
144 - (NSString *)matchLabels:(NSArray *)labels againstElement:(DOMElement *)element;
145
146 - (BOOL)searchFor:(NSString *)string direction:(BOOL)forward caseSensitive:(BOOL)caseFlag wrap:(BOOL)wrapFlag startInSelection:(BOOL)startInSelection;
147 - (unsigned)markAllMatchesForText:(NSString *)string caseSensitive:(BOOL)caseFlag limit:(unsigned)limit;
148 - (BOOL)markedTextMatchesAreHighlighted;
149 - (void)setMarkedTextMatchesAreHighlighted:(BOOL)doHighlight;
150 - (void)unmarkAllTextMatches;
151 - (NSArray *)rectsForTextMatches;
152
153 - (void)setTextSizeMultiplier:(float)multiplier;
154
155 - (NSString *)stringByEvaluatingJavaScriptFromString:(NSString *)string;
156 - (NSString *)stringByEvaluatingJavaScriptFromString:(NSString *)string forceUserGesture:(BOOL)forceUserGesture;
157 - (NSAppleEventDescriptor *)aeDescByEvaluatingJavaScriptFromString:(NSString *)string;
158
159 - (NSString *)selectedString;
160
161 - (NSString *)stringForRange:(DOMRange *)range;
162
163 - (NSString *)markupStringFromNode:(DOMNode *)node nodes:(NSArray **)nodes;
164 - (NSString *)markupStringFromRange:(DOMRange *)range nodes:(NSArray **)nodes;
165
166 - (NSRect)caretRectAtNode:(DOMNode *)node offset:(int)offset affinity:(NSSelectionAffinity)affinity;
167 - (NSRect)firstRectForDOMRange:(DOMRange *)range;
168 - (void)scrollDOMRangeToVisible:(DOMRange *)range;
169
170 // Emacs-style-editing "mark"
171 - (void)setMarkDOMRange:(DOMRange *)range;
172 - (DOMRange *)markDOMRange;
173
174 // international text input "marked text"
175 - (void)setMarkedTextDOMRange:(DOMRange *)range customAttributes:(NSArray *)attributes ranges:(NSArray *)ranges;
176 - (DOMRange *)markedTextDOMRange;
177 - (void)replaceMarkedTextWithText:(NSString *)text;
178
179 - (NSFont *)fontForSelection:(BOOL *)hasMultipleFonts;
180 - (NSWritingDirection)baseWritingDirectionForSelectionStart;
181
182 - (NSString *)stringWithData:(NSData *)data; // using the encoding of the frame's main resource
183 + (NSString *)stringWithData:(NSData *)data textEncodingName:(NSString *)textEncodingName; // nil for textEncodingName means Latin-1
184
185 - (void)setShouldCreateRenderers:(BOOL)f;
186 - (BOOL)shouldCreateRenderers;
187
188 - (void)setBaseBackgroundColor:(NSColor *)backgroundColor;
189 - (void)setDrawsBackground:(BOOL)drawsBackround;
190
191 - (NSColor *)selectionColor;
192
193 - (id)accessibilityTree;
194
195 - (DOMRange *)rangeOfCharactersAroundCaret;
196 - (DOMRange *)rangeByAlteringCurrentSelection:(WebCore::SelectionController::EAlteration)alteration direction:(WebCore::SelectionController::EDirection)direction granularity:(WebCore::TextGranularity)granularity;
197 - (void)alterCurrentSelection:(WebCore::SelectionController::EAlteration)alteration verticalDistance:(float)distance;
198 - (WebCore::TextGranularity)selectionGranularity;
199 - (DOMRange *)smartDeleteRangeForProposedRange:(DOMRange *)proposedCharRange;
200 - (void)smartInsertForString:(NSString *)pasteString replacingRange:(DOMRange *)charRangeToReplace beforeString:(NSString **)beforeString afterString:(NSString **)afterString;
201 - (void)selectNSRange:(NSRange)range;
202 - (NSRange)selectedNSRange;
203 - (NSRange)markedTextNSRange;
204 - (DOMRange *)convertNSRangeToDOMRange:(NSRange)range;
205 - (NSRange)convertDOMRangeToNSRange:(DOMRange *)range;
206
207 - (DOMDocumentFragment *)documentFragmentWithMarkupString:(NSString *)markupString baseURLString:(NSString *)baseURLString;
208 - (DOMDocumentFragment *)documentFragmentWithText:(NSString *)text inContext:(DOMRange *)context;
209 - (DOMDocumentFragment *)documentFragmentWithNodesAsParagraphs:(NSArray *)nodes;
210
211 - (void)replaceSelectionWithFragment:(DOMDocumentFragment *)fragment selectReplacement:(BOOL)selectReplacement smartReplace:(BOOL)smartReplace matchStyle:(BOOL)matchStyle;
212 - (void)replaceSelectionWithNode:(DOMNode *)node selectReplacement:(BOOL)selectReplacement smartReplace:(BOOL)smartReplace matchStyle:(BOOL)matchStyle;
213 - (void)replaceSelectionWithMarkupString:(NSString *)markupString baseURLString:(NSString *)baseURLString selectReplacement:(BOOL)selectReplacement smartReplace:(BOOL)smartReplace;
214 - (void)replaceSelectionWithText:(NSString *)text selectReplacement:(BOOL)selectReplacement smartReplace:(BOOL)smartReplace;
215
216 - (void)insertParagraphSeparatorInQuotedContent;
217
218 - (void)setSelectionToDragCaret;
219 - (void)moveSelectionToDragCaret:(DOMDocumentFragment *)selectionFragment smartMove:(BOOL)smartMove;
220 - (void)moveDragCaretToPoint:(NSPoint)point;
221 - (DOMRange *)dragCaretDOMRange;
222 - (BOOL)isDragCaretRichlyEditable;
223 - (DOMRange *)editableDOMRangeForPoint:(NSPoint)point;
224 - (DOMRange *)characterRangeAtPoint:(NSPoint)point;
225
226 - (void)deleteKeyPressedWithSmartDelete:(BOOL)smartDelete granularity:(WebCore::TextGranularity)granularity;
227 - (void)forwardDeleteKeyPressedWithSmartDelete:(BOOL)smartDelete granularity:(WebCore::TextGranularity)granularity;
228
229 - (DOMCSSStyleDeclaration *)typingStyle;
230 - (void)setTypingStyle:(DOMCSSStyleDeclaration *)style withUndoAction:(WebCore::EditAction)undoAction;
231 - (NSCellStateValue)selectionHasStyle:(DOMCSSStyleDeclaration *)style;
232
233 - (void)dragSourceMovedTo:(NSPoint)windowLoc;
234 - (void)dragSourceEndedAt:(NSPoint)windowLoc operation:(NSDragOperation)operation;
235
236 - (BOOL)isCharacterSmartReplaceExempt:(unichar)c isPreviousCharacter:(BOOL)isPreviousCharacter;
237
238 - (BOOL)getData:(NSData **)data andResponse:(NSURLResponse **)response forURL:(NSString *)URL;
239 - (void)getAllResourceDatas:(NSArray **)datas andResponses:(NSArray **)responses;
240
241 - (BOOL)canProvideDocumentSource;
242 - (BOOL)canSaveAsWebArchive;
243
244 - (void)receivedData:(NSData *)data textEncodingName:(NSString *)textEncodingName;
245
246 @end
247
248 // The WebCoreFrameBridge protocol contains methods for use by the WebCore side of the bridge.
249
250 @protocol WebCoreFrameBridge
251
252 - (NSView *)documentView;
253
254 - (WebCore::Frame*)createChildFrameNamed:(NSString *)frameName withURL:(NSURL *)URL referrer:(const WebCore::String&)referrer
255     ownerElement:(WebCore::HTMLFrameOwnerElement *)ownerElement allowsScrolling:(BOOL)allowsScrolling marginWidth:(int)width marginHeight:(int)height;
256
257 - (NSWindow *)window;
258
259 - (NSResponder *)firstResponder;
260 - (void)makeFirstResponder:(NSResponder *)responder;
261 - (void)willMakeFirstResponderForNodeFocus;
262
263 - (BOOL)textViewWasFirstResponderAtMouseDownTime:(NSTextView *)textView;
264
265 - (void)runOpenPanelForFileButtonWithResultListener:(id <WebCoreOpenPanelResultListener>)resultListener;
266
267 - (void)setNeedsReapplyStyles;
268
269 - (NSView *)viewForPluginWithURL:(NSURL *)URL
270                   attributeNames:(NSArray *)attributeNames
271                  attributeValues:(NSArray *)attributeValues
272                         MIMEType:(NSString *)MIMEType
273                       DOMElement:(DOMElement *)element
274                     loadManually:(BOOL)loadManually;
275 - (NSView *)viewForJavaAppletWithFrame:(NSRect)frame
276                         attributeNames:(NSArray *)attributeNames
277                        attributeValues:(NSArray *)attributeValues
278                                baseURL:(NSURL *)baseURL
279                             DOMElement:(DOMElement *)element;
280 - (void)redirectDataToPlugin:(NSView *)pluginView;
281
282 - (ObjectElementType)determineObjectFromMIMEType:(NSString*)MIMEType URL:(NSURL*)URL;
283
284 - (void)print;
285
286 - (jobject)getAppletInView:(NSView *)view;
287
288 // Deprecated, use getAppletInView: instead.
289 - (jobject)pollForAppletInView:(NSView *)view;
290
291 - (void)issuePasteCommand;
292 - (void)issueTransposeCommand;
293 - (void)setIsSelected:(BOOL)isSelected forView:(NSView *)view;
294
295 - (NSString *)overrideMediaType;
296
297 - (void)windowObjectCleared;
298
299 - (void)dashboardRegionsChanged:(NSMutableDictionary *)regions;
300 - (void)willPopupMenu:(NSMenu *)menu;
301
302 - (NSRect)customHighlightRect:(NSString*)type forLine:(NSRect)lineRect representedNode:(WebCore::Node *)node;
303 - (void)paintCustomHighlight:(NSString*)type forBox:(NSRect)boxRect onLine:(NSRect)lineRect behindText:(BOOL)text entireLine:(BOOL)line representedNode:(WebCore::Node *)node;
304
305 - (WebCore::KeyboardUIMode)keyboardUIMode;
306
307 - (NSString*)imageTitleForFilename:(NSString*)filename size:(NSSize)size;
308
309 @end
310
311 // This interface definition allows those who hold a WebCoreFrameBridge * to call all the methods
312 // in the WebCoreFrameBridge protocol without requiring the base implementation to supply the methods.
313 // This idiom is appropriate because WebCoreFrameBridge is an abstract class.
314
315 @interface WebCoreFrameBridge (SubclassResponsibility) <WebCoreFrameBridge>
316 @end
317
318 // Protocols that make up part of the interfaces above.
319
320 @protocol WebCoreRenderTreeCopier <NSObject>
321 - (NSObject *)nodeWithName:(NSString *)name position:(NSPoint)p rect:(NSRect)rect view:(NSView *)view children:(NSArray *)children;
322 @end