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