Reviewed by Adam.
[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)getData:(NSData **)data andResponse:(NSURLResponse **)response forURL:(NSString *)URL;
237 - (void)getAllResourceDatas:(NSArray **)datas andResponses:(NSArray **)responses;
238
239 - (BOOL)canProvideDocumentSource;
240 - (BOOL)canSaveAsWebArchive;
241
242 - (void)receivedData:(NSData *)data textEncodingName:(NSString *)textEncodingName;
243
244 @end
245
246 // The WebCoreFrameBridge protocol contains methods for use by the WebCore side of the bridge.
247
248 @protocol WebCoreFrameBridge
249
250 - (NSView *)documentView;
251
252 - (WebCore::Frame*)createChildFrameNamed:(NSString *)frameName withURL:(NSURL *)URL referrer:(const WebCore::String&)referrer
253     ownerElement:(WebCore::HTMLFrameOwnerElement *)ownerElement allowsScrolling:(BOOL)allowsScrolling marginWidth:(int)width marginHeight:(int)height;
254
255 - (NSWindow *)window;
256
257 - (NSResponder *)firstResponder;
258 - (void)makeFirstResponder:(NSResponder *)responder;
259 - (void)willMakeFirstResponderForNodeFocus;
260
261 - (BOOL)textViewWasFirstResponderAtMouseDownTime:(NSTextView *)textView;
262
263 - (void)runOpenPanelForFileButtonWithResultListener:(id <WebCoreOpenPanelResultListener>)resultListener;
264
265 - (void)setNeedsReapplyStyles;
266
267 - (NSView *)viewForPluginWithURL:(NSURL *)URL
268                   attributeNames:(NSArray *)attributeNames
269                  attributeValues:(NSArray *)attributeValues
270                         MIMEType:(NSString *)MIMEType
271                       DOMElement:(DOMElement *)element
272                     loadManually:(BOOL)loadManually;
273 - (NSView *)viewForJavaAppletWithFrame:(NSRect)frame
274                         attributeNames:(NSArray *)attributeNames
275                        attributeValues:(NSArray *)attributeValues
276                                baseURL:(NSURL *)baseURL
277                             DOMElement:(DOMElement *)element;
278 - (void)redirectDataToPlugin:(NSView *)pluginView;
279
280 - (ObjectElementType)determineObjectFromMIMEType:(NSString*)MIMEType URL:(NSURL*)URL;
281
282 - (void)print;
283
284 - (jobject)getAppletInView:(NSView *)view;
285
286 // Deprecated, use getAppletInView: instead.
287 - (jobject)pollForAppletInView:(NSView *)view;
288
289 - (void)issuePasteCommand;
290 - (void)issueTransposeCommand;
291 - (void)setIsSelected:(BOOL)isSelected forView:(NSView *)view;
292
293 - (NSString *)overrideMediaType;
294
295 - (void)windowObjectCleared;
296
297 - (void)dashboardRegionsChanged:(NSMutableDictionary *)regions;
298 - (void)willPopupMenu:(NSMenu *)menu;
299
300 - (NSRect)customHighlightRect:(NSString*)type forLine:(NSRect)lineRect representedNode:(WebCore::Node *)node;
301 - (void)paintCustomHighlight:(NSString*)type forBox:(NSRect)boxRect onLine:(NSRect)lineRect behindText:(BOOL)text entireLine:(BOOL)line representedNode:(WebCore::Node *)node;
302
303 - (WebCore::KeyboardUIMode)keyboardUIMode;
304
305 - (NSString*)imageTitleForFilename:(NSString*)filename size:(NSSize)size;
306
307 @end
308
309 // This interface definition allows those who hold a WebCoreFrameBridge * to call all the methods
310 // in the WebCoreFrameBridge protocol without requiring the base implementation to supply the methods.
311 // This idiom is appropriate because WebCoreFrameBridge is an abstract class.
312
313 @interface WebCoreFrameBridge (SubclassResponsibility) <WebCoreFrameBridge>
314 @end
315
316 // Protocols that make up part of the interfaces above.
317
318 @protocol WebCoreRenderTreeCopier <NSObject>
319 - (NSObject *)nodeWithName:(NSString *)name position:(NSPoint)p rect:(NSRect)rect view:(NSView *)view children:(NSArray *)children;
320 @end