WebCore:
[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)clearFrame;
107
108 - (NSURL *)baseURL;
109
110 - (void)installInFrame:(NSView *)view;
111
112 - (BOOL)scrollOverflowInDirection:(WebScrollDirection)direction granularity:(WebScrollGranularity)granularity;
113
114 - (void)createFrameViewWithNSView:(NSView *)view marginWidth:(int)mw marginHeight:(int)mh;
115
116 - (void)reapplyStylesForDeviceType:(WebCoreDeviceType)deviceType;
117 - (void)forceLayoutAdjustingViewSize:(BOOL)adjustSizeFlag;
118 - (void)forceLayoutWithMinimumPageWidth:(float)minPageWidth maximumPageWidth:(float)maxPageWidth adjustingViewSize:(BOOL)adjustSizeFlag;
119 - (void)sendScrollEvent;
120 - (BOOL)needsLayout;
121 - (void)drawRect:(NSRect)rect;
122 - (void)adjustPageHeightNew:(float *)newBottom top:(float)oldTop bottom:(float)oldBottom limit:(float)bottomLimit;
123 - (NSArray*)computePageRectsWithPrintWidthScaleFactor:(float)printWidthScaleFactor printHeight:(float)printHeight;
124
125 - (NSObject *)copyRenderTree:(id <WebCoreRenderTreeCopier>)copier;
126 - (NSString *)renderTreeAsExternalRepresentation;
127
128 - (NSURL *)URLWithAttributeString:(NSString *)string;
129
130 - (DOMElement *)elementWithName:(NSString *)name inForm:(DOMElement *)form;
131 - (BOOL)elementDoesAutoComplete:(DOMElement *)element;
132 - (BOOL)elementIsPassword:(DOMElement *)element;
133 - (DOMElement *)formForElement:(DOMElement *)element;
134 - (DOMElement *)currentForm;
135 - (NSArray *)controlsInForm:(DOMElement *)form;
136 - (NSString *)searchForLabels:(NSArray *)labels beforeElement:(DOMElement *)element;
137 - (NSString *)matchLabels:(NSArray *)labels againstElement:(DOMElement *)element;
138
139 - (BOOL)searchFor:(NSString *)string direction:(BOOL)forward caseSensitive:(BOOL)caseFlag wrap:(BOOL)wrapFlag startInSelection:(BOOL)startInSelection;
140 - (unsigned)markAllMatchesForText:(NSString *)string caseSensitive:(BOOL)caseFlag limit:(unsigned)limit;
141 - (BOOL)markedTextMatchesAreHighlighted;
142 - (void)setMarkedTextMatchesAreHighlighted:(BOOL)doHighlight;
143 - (void)unmarkAllTextMatches;
144 - (NSArray *)rectsForTextMatches;
145
146 - (void)setTextSizeMultiplier:(float)multiplier;
147
148 - (NSString *)stringByEvaluatingJavaScriptFromString:(NSString *)string;
149 - (NSString *)stringByEvaluatingJavaScriptFromString:(NSString *)string forceUserGesture:(BOOL)forceUserGesture;
150 - (NSAppleEventDescriptor *)aeDescByEvaluatingJavaScriptFromString:(NSString *)string;
151
152 - (NSString *)selectedString;
153
154 - (NSString *)stringForRange:(DOMRange *)range;
155
156 - (NSString *)markupStringFromNode:(DOMNode *)node nodes:(NSArray **)nodes;
157 - (NSString *)markupStringFromRange:(DOMRange *)range nodes:(NSArray **)nodes;
158
159 - (NSRect)caretRectAtNode:(DOMNode *)node offset:(int)offset affinity:(NSSelectionAffinity)affinity;
160 - (NSRect)firstRectForDOMRange:(DOMRange *)range;
161 - (void)scrollDOMRangeToVisible:(DOMRange *)range;
162
163 - (NSFont *)fontForSelection:(BOOL *)hasMultipleFonts;
164 - (NSWritingDirection)baseWritingDirectionForSelectionStart;
165
166 - (NSString *)stringWithData:(NSData *)data; // using the encoding of the frame's main resource
167 + (NSString *)stringWithData:(NSData *)data textEncodingName:(NSString *)textEncodingName; // nil for textEncodingName means Latin-1
168
169 - (void)setShouldCreateRenderers:(BOOL)shouldCreateRenderers;
170
171 - (void)setBaseBackgroundColor:(NSColor *)backgroundColor;
172 - (void)setDrawsBackground:(BOOL)drawsBackround;
173
174 - (NSColor *)selectionColor;
175
176 - (id)accessibilityTree;
177
178 - (DOMRange *)rangeByAlteringCurrentSelection:(WebCore::SelectionController::EAlteration)alteration direction:(WebCore::SelectionController::EDirection)direction granularity:(WebCore::TextGranularity)granularity;
179 - (WebCore::TextGranularity)selectionGranularity;
180 - (void)selectNSRange:(NSRange)range;
181 - (NSRange)selectedNSRange;
182 - (NSRange)markedTextNSRange;
183 - (DOMRange *)convertNSRangeToDOMRange:(NSRange)range;
184 - (NSRange)convertDOMRangeToNSRange:(DOMRange *)range;
185
186 - (DOMDocumentFragment *)documentFragmentWithMarkupString:(NSString *)markupString baseURLString:(NSString *)baseURLString;
187 - (DOMDocumentFragment *)documentFragmentWithText:(NSString *)text inContext:(DOMRange *)context;
188 - (DOMDocumentFragment *)documentFragmentWithNodesAsParagraphs:(NSArray *)nodes;
189
190 - (void)replaceSelectionWithFragment:(DOMDocumentFragment *)fragment selectReplacement:(BOOL)selectReplacement smartReplace:(BOOL)smartReplace matchStyle:(BOOL)matchStyle;
191 - (void)replaceSelectionWithNode:(DOMNode *)node selectReplacement:(BOOL)selectReplacement smartReplace:(BOOL)smartReplace matchStyle:(BOOL)matchStyle;
192 - (void)replaceSelectionWithMarkupString:(NSString *)markupString baseURLString:(NSString *)baseURLString selectReplacement:(BOOL)selectReplacement smartReplace:(BOOL)smartReplace;
193 - (void)replaceSelectionWithText:(NSString *)text selectReplacement:(BOOL)selectReplacement smartReplace:(BOOL)smartReplace;
194
195 - (void)insertParagraphSeparatorInQuotedContent;
196
197 - (DOMRange *)characterRangeAtPoint:(NSPoint)point;
198
199 - (DOMCSSStyleDeclaration *)typingStyle;
200 - (void)setTypingStyle:(DOMCSSStyleDeclaration *)style withUndoAction:(WebCore::EditAction)undoAction;
201
202 - (void)dragSourceMovedTo:(NSPoint)windowLoc;
203 - (void)dragSourceEndedAt:(NSPoint)windowLoc operation:(NSDragOperation)operation;
204
205 - (BOOL)getData:(NSData **)data andResponse:(NSURLResponse **)response forURL:(NSString *)URL;
206 - (void)getAllResourceDatas:(NSArray **)datas andResponses:(NSArray **)responses;
207
208 - (BOOL)canProvideDocumentSource;
209 - (BOOL)canSaveAsWebArchive;
210
211 - (void)receivedData:(NSData *)data textEncodingName:(NSString *)textEncodingName;
212
213 @end
214
215 // The WebCoreFrameBridge protocol contains methods for use by the WebCore side of the bridge.
216
217 @protocol WebCoreFrameBridge
218
219 - (NSWindow *)window;
220
221 - (NSResponder *)firstResponder;
222 - (void)makeFirstResponder:(NSResponder *)responder;
223
224 - (void)runOpenPanelForFileButtonWithResultListener:(id <WebCoreOpenPanelResultListener>)resultListener;
225
226 - (jobject)getAppletInView:(NSView *)view;
227
228 // Deprecated, use getAppletInView: instead.
229 - (jobject)pollForAppletInView:(NSView *)view;
230
231 - (void)issuePasteCommand;
232
233 - (void)setIsSelected:(BOOL)isSelected forView:(NSView *)view;
234
235 - (void)dashboardRegionsChanged:(NSMutableDictionary *)regions;
236 - (void)willPopupMenu:(NSMenu *)menu;
237
238 - (NSRect)customHighlightRect:(NSString*)type forLine:(NSRect)lineRect representedNode:(WebCore::Node *)node;
239 - (void)paintCustomHighlight:(NSString*)type forBox:(NSRect)boxRect onLine:(NSRect)lineRect behindText:(BOOL)text entireLine:(BOOL)line representedNode:(WebCore::Node *)node;
240
241 - (WebCore::KeyboardUIMode)keyboardUIMode;
242
243 - (NSString*)imageTitleForFilename:(NSString*)filename size:(NSSize)size;
244
245 @end
246
247 // This interface definition allows those who hold a WebCoreFrameBridge * to call all the methods
248 // in the WebCoreFrameBridge protocol without requiring the base implementation to supply the methods.
249 // This idiom is appropriate because WebCoreFrameBridge is an abstract class.
250
251 @interface WebCoreFrameBridge (SubclassResponsibility) <WebCoreFrameBridge>
252 @end
253
254 // Protocols that make up part of the interfaces above.
255
256 @protocol WebCoreRenderTreeCopier <NSObject>
257 - (NSObject *)nodeWithName:(NSString *)name position:(NSPoint)p rect:(NSRect)rect view:(NSView *)view children:(NSArray *)children;
258 @end