4ab44a5e17e4a64d5f7364ad47277554f6cafbd0
[WebKit-https.git] / WebCore / kwq / WebCoreBridge.h
1 /*
2  * Copyright (C) 2004 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 <Foundation/Foundation.h>
27
28 #import <WebCore/WebCoreKeyboardAccess.h>
29
30 #import <JavaVM/jni.h>
31
32 #ifdef __cplusplus
33
34 class KWQKHTMLPart;
35 class KHTMLView;
36 class RenderArena;
37
38 namespace khtml {
39     class RenderPart;
40     class RenderObject;
41 }
42
43 typedef khtml::RenderPart KHTMLRenderPart;
44
45 #else
46
47 @class KWQKHTMLPart;
48 @class KHTMLView;
49 @class KHTMLRenderPart;
50 @class RenderArena;
51
52 #endif
53
54 @class DOMCSSStyleDeclaration;
55 @class DOMDocument;
56 @class DOMElement;
57 @class DOMHTMLElement;
58 @class DOMNode;
59 @class DOMRange;
60 @class WebCoreSettings;
61
62 @protocol WebCoreDOMTreeCopier;
63 @protocol WebCoreRenderTreeCopier;
64 @protocol WebCoreResourceHandle;
65 @protocol WebCoreResourceLoader;
66 @protocol WebCoreFileButton;
67 @protocol WebCoreFileButtonDelegate;
68
69 extern NSString *WebCoreElementDOMNodeKey;
70 extern NSString *WebCoreElementFrameKey;
71 extern NSString *WebCoreElementImageAltStringKey;
72 extern NSString *WebCoreElementImageKey;
73 extern NSString *WebCoreElementImageRectKey;
74 extern NSString *WebCoreElementImageURLKey;
75 extern NSString *WebCoreElementIsSelectedKey;
76 extern NSString *WebCoreElementLinkURLKey;
77 extern NSString *WebCoreElementLinkTargetFrameKey;
78 extern NSString *WebCoreElementLinkLabelKey;
79 extern NSString *WebCoreElementLinkTitleKey;
80 extern NSString *WebCoreElementTitleKey;
81
82 extern NSString *WebCorePageCacheStateKey;
83
84 typedef enum {
85     WebCoreDeviceScreen,
86     WebCoreDevicePrinter
87 } WebCoreDeviceType;
88
89 typedef enum { 
90     WebSelectByMoving, 
91     WebSelectByExtending 
92 } WebSelectionAlteration;
93
94 typedef enum { 
95     WebSelectForward, 
96     WebSelectBackward, 
97     WebSelectRight, 
98     WebSelectLeft, 
99     WebSelectUp, 
100     WebSelectDown,
101 } WebSelectionDirection;
102
103 typedef enum { 
104     WebSelectByCharacter, 
105     WebSelectByWord, 
106     WebSelectByLine 
107 } WebSelectionGranularity;
108
109
110 // WebCoreBridge objects are used by WebCore to abstract away operations that need
111 // to be implemented by library clients, for example WebKit. The objects are also
112 // used in the opposite direction, for simple access to WebCore functions without dealing
113 // directly with the KHTML C++ classes.
114
115 // A WebCoreBridge creates and holds a reference to a KHTMLPart.
116
117 // The WebCoreBridge interface contains methods for use by the non-WebCore side of the bridge.
118
119 @interface WebCoreBridge : NSObject
120 {
121     KWQKHTMLPart *_part;
122     KHTMLRenderPart *_renderPart;
123     RenderArena *_renderPartArena;
124     BOOL _drawSelectionOnly;
125     BOOL _shouldCreateRenderers;
126 }
127
128 + (WebCoreBridge *)bridgeForDOMDocument:(DOMDocument *)document;
129
130 - (void)initializeSettings:(WebCoreSettings *)settings;
131
132 - (void)setRenderPart:(KHTMLRenderPart *)renderPart;
133 - (KHTMLRenderPart *)renderPart;
134
135 - (void)setName:(NSString *)name;
136 - (NSString *)name;
137
138 - (KWQKHTMLPart *)part;
139
140 - (void)setParent:(WebCoreBridge *)parent;
141
142 - (void)provisionalLoadStarted;
143
144 - (void)openURL:(NSURL *)URL reload:(BOOL)reload
145     contentType:(NSString *)contentType refresh:(NSString *)refresh lastModified:(NSDate *)lastModified
146     pageCache:(NSDictionary *)pageCache;
147 - (void)setEncoding:(NSString *)encoding userChosen:(BOOL)userChosen;
148 - (void)addData:(NSData *)data;
149 - (void)closeURL;
150
151 - (void)didNotOpenURL:(NSURL *)URL;
152
153 - (void)saveDocumentState;
154 - (void)restoreDocumentState;
155
156 - (BOOL)canCachePage;
157 - (BOOL)saveDocumentToPageCache;
158
159 - (void)end;
160
161 - (NSURL *)URL;
162 - (NSString *)referrer;
163
164 - (void)installInFrame:(NSView *)view;
165 - (void)removeFromFrame;
166
167 - (void)scrollToAnchor:(NSString *)anchor;
168 - (void)scrollToAnchorWithURL:(NSURL *)URL;
169
170 - (void)createKHTMLViewWithNSView:(NSView *)view marginWidth:(int)mw marginHeight:(int)mh;
171
172 - (BOOL)isFrameSet;
173
174 - (void)reapplyStylesForDeviceType:(WebCoreDeviceType)deviceType;
175 - (void)forceLayoutAdjustingViewSize:(BOOL)adjustSizeFlag;
176 - (void)forceLayoutWithMinimumPageWidth:(float)minPageWidth maximumPageWidth:(float)maxPageWidth adjustingViewSize:(BOOL)adjustSizeFlag;
177 - (void)sendResizeEvent;
178 - (void)sendScrollEvent;
179 - (BOOL)needsLayout;
180 - (void)setNeedsLayout;
181 - (void)drawRect:(NSRect)rect;
182 - (void)adjustPageHeightNew:(float *)newBottom top:(float)oldTop bottom:(float)oldBottom limit:(float)bottomLimit;
183 - (NSArray*)computePageRectsWithPrintWidthScaleFactor:(float)printWidthScaleFactor printHeight:(float)printHeight;
184
185 - (void)setUsesInactiveTextBackgroundColor:(BOOL)uses;
186 - (BOOL)usesInactiveTextBackgroundColor;
187
188 - (void)setShowsFirstResponder:(BOOL)flag;
189
190 - (void)mouseDown:(NSEvent *)event;
191 - (void)mouseUp:(NSEvent *)event;
192 - (void)mouseMoved:(NSEvent *)event;
193 - (void)mouseDragged:(NSEvent *)event;
194
195 - (BOOL)sendContextMenuEvent:(NSEvent *)event; // return YES if event is eaten by WebCore
196
197 - (NSView *)nextKeyView;
198 - (NSView *)previousKeyView;
199
200 - (NSView *)nextKeyViewInsideWebFrameViews;
201 - (NSView *)previousKeyViewInsideWebFrameViews;
202
203 - (NSObject *)copyDOMTree:(id <WebCoreDOMTreeCopier>)copier;
204 - (NSObject *)copyRenderTree:(id <WebCoreRenderTreeCopier>)copier;
205 - (NSString *)renderTreeAsExternalRepresentation;
206
207 - (NSDictionary *)elementAtPoint:(NSPoint)point;
208 - (NSURL *)URLWithRelativeString:(NSString *)string;
209
210 - (DOMElement *)elementWithName:(NSString *)name inForm:(DOMElement *)form;
211 - (DOMElement *)elementForView:(NSView *)view;
212 - (BOOL)elementDoesAutoComplete:(DOMElement *)element;
213 - (BOOL)elementIsPassword:(DOMElement *)element;
214 - (DOMElement *)formForElement:(DOMElement *)element;
215 - (DOMElement *)currentForm;
216 - (NSArray *)controlsInForm:(DOMElement *)form;
217 - (NSString *)searchForLabels:(NSArray *)labels beforeElement:(DOMElement *)element;
218 - (NSString *)matchLabels:(NSArray *)labels againstElement:(DOMElement *)element;
219
220 - (BOOL)searchFor:(NSString *)string direction:(BOOL)forward caseSensitive:(BOOL)caseFlag wrap:(BOOL)wrapFlag;
221 - (void)jumpToSelection;
222
223 - (void)setTextSizeMultiplier:(float)multiplier;
224
225 - (CFStringEncoding)textEncoding;
226
227 - (NSString *)stringByEvaluatingJavaScriptFromString:(NSString *)string;
228
229 - (DOMDocument *)DOMDocument;
230 - (DOMHTMLElement *)frameElement;
231
232 - (void)setSelectionFrom:(DOMNode *)start startOffset:(int)startOffset to:(DOMNode *)end endOffset:(int) endOffset;
233
234 - (BOOL)isSelectionEditable;
235 - (BOOL)moveCaretToPoint:(NSPoint)point;
236
237 - (BOOL)haveSelection;
238
239 - (NSAttributedString *)selectedAttributedString;
240 - (NSString *)selectedString;
241
242 - (NSString *)markupStringFromNode:(DOMNode *)node nodes:(NSArray **)nodes;
243 - (NSString *)markupStringFromRange:(DOMRange *)range nodes:(NSArray **)nodes;
244
245 - (void)selectAll;
246 - (void)deselectAll;
247 - (void)deselectText;
248
249 - (NSRect)selectionRect;
250 - (NSRect)visibleSelectionRect;
251 - (NSImage *)selectionImage;
252
253 - (DOMNode *)selectionStart;
254 - (int)selectionStartOffset;
255 - (DOMNode *)selectionEnd;
256 - (int)selectionEndOffset;
257 - (void)setSelectedDOMRange:(DOMRange *)range affinity:(NSSelectionAffinity)selectionAffinity;
258 - (DOMRange *)selectedDOMRange;
259 - (NSSelectionAffinity)selectionAffinity;
260
261 - (NSAttributedString *)attributedStringFrom:(DOMNode *)startNode startOffset:(int)startOffset to:(DOMNode *)endNode endOffset:(int)endOffset;
262 - (NSFont *)renderedFontForNode:(DOMNode *)node;
263
264 + (NSString *)stringWithData:(NSData *)data textEncoding:(CFStringEncoding)textEncoding;
265 + (NSString *)stringWithData:(NSData *)data textEncodingName:(NSString *)textEncodingName;
266
267 - (BOOL)interceptKeyEvent:(NSEvent *)event toView:(NSView *)view;
268
269 - (void)setShouldCreateRenderers:(BOOL)f;
270 - (BOOL)shouldCreateRenderers;
271
272 - (int)numPendingOrLoadingRequests;
273
274 - (void)setDrawsBackground:(BOOL)drawsBackround;
275
276 - (NSColor *)bodyBackgroundColor;
277 - (NSColor *)selectionColor;
278
279 - (void)adjustViewSize;
280
281 + (void)updateAllViews;
282
283 - (id)accessibilityTree;
284
285 - (void)undoEditing:(id)arg;
286 - (void)redoEditing:(id)arg;
287 - (DOMRange *)rangeByAlteringCurrentSelection:(WebSelectionAlteration)alteration direction:(WebSelectionDirection)direction granularity:(WebSelectionGranularity)granularity;
288 - (void)alterCurrentSelection:(WebSelectionAlteration)alteration direction:(WebSelectionDirection)direction granularity:(WebSelectionGranularity)granularity;
289 - (void)replaceSelectionWithText:(NSString *)text;
290 - (void)replaceSelectionWithNode:(DOMNode *)node;
291 - (void)replaceSelectionWithMarkupString:(NSString *)markupString baseURLString:(NSString *)baseURLString;
292 - (void)replaceSelectionWithNewline;
293 - (void)deleteSelection;
294 - (void)deleteKeyPressed;
295 - (void)applyStyle:(DOMCSSStyleDeclaration *)style;
296 - (void)ensureCaretVisible;
297
298 - (void)bindObject:(id)object withName:(NSString *)name;
299
300 @end
301
302 // The WebCoreBridge protocol contains methods for use by the WebCore side of the bridge.
303
304 @protocol WebCoreBridge
305
306 - (NSArray *)childFrames; // WebCoreBridge objects
307 - (WebCoreBridge *)mainFrame;
308 - (WebCoreBridge *)findFrameNamed:(NSString *)name;
309 /* Creates a name for an frame unnamed in the HTML.  It should produce repeatable results for loads of the same frameset. */
310 - (NSString *)generateFrameName;
311 - (void)frameDetached;
312 - (NSView *)documentView;
313
314 - (void)loadURL:(NSURL *)URL referrer:(NSString *)referrer reload:(BOOL)reload onLoadEvent:(BOOL)onLoad target:(NSString *)target triggeringEvent:(NSEvent *)event form:(DOMElement *)form formValues:(NSDictionary *)values;
315 - (void)postWithURL:(NSURL *)URL referrer:(NSString *)referrer target:(NSString *)target data:(NSData *)data contentType:(NSString *)contentType triggeringEvent:(NSEvent *)event form:(DOMElement *)form formValues:(NSDictionary *)values;
316
317 - (WebCoreBridge *)createWindowWithURL:(NSURL *)URL frameName:(NSString *)name;
318 - (void)showWindow;
319
320 - (NSString *)userAgentForURL:(NSURL *)URL;
321
322 - (void)setTitle:(NSString *)title;
323 - (void)setStatusText:(NSString *)status;
324
325 - (void)setIconURL:(NSURL *)URL;
326 - (void)setIconURL:(NSURL *)URL withType:(NSString *)string;
327
328 - (WebCoreBridge *)createChildFrameNamed:(NSString *)frameName withURL:(NSURL *)URL
329     renderPart:(KHTMLRenderPart *)renderPart
330     allowsScrolling:(BOOL)allowsScrolling marginWidth:(int)width marginHeight:(int)height;
331
332 - (BOOL)areToolbarsVisible;
333 - (void)setToolbarsVisible:(BOOL)visible;
334 - (BOOL)isStatusBarVisible;
335 - (void)setStatusBarVisible:(BOOL)visible;
336 - (BOOL)areScrollbarsVisible;
337 - (void)setScrollbarsVisible:(BOOL)visible;
338 - (NSWindow *)window;
339 - (void)setWindowFrame:(NSRect)frame;
340 - (NSRect)windowFrame;
341 - (void)setWindowContentRect:(NSRect)frame;
342 - (NSRect)windowContentRect;
343
344 - (void)setWindowIsResizable:(BOOL)resizable;
345 - (BOOL)windowIsResizable;
346
347 - (NSResponder *)firstResponder;
348 - (void)makeFirstResponder:(NSResponder *)view;
349
350 - (void)closeWindowSoon;
351
352 - (void)runJavaScriptAlertPanelWithMessage:(NSString *)message;
353 - (BOOL)runJavaScriptConfirmPanelWithMessage:(NSString *)message;
354 - (BOOL)runJavaScriptTextInputPanelWithPrompt:(NSString *)prompt defaultText:(NSString *)defaultText returningText:(NSString **)result;
355
356 - (id <WebCoreResourceHandle>)startLoadingResource:(id <WebCoreResourceLoader>)loader withURL:(NSURL *)URL customHeaders:(NSDictionary *)customHeaders;
357 - (id <WebCoreResourceHandle>)startLoadingResource:(id <WebCoreResourceLoader>)loader withURL:(NSURL *)URL customHeaders:(NSDictionary *)customHeaders postData:(NSData *)data;
358 - (void)objectLoadedFromCacheWithURL:(NSURL *)URL response:(id)response size:(unsigned)bytes;
359
360 - (NSData *)syncLoadResourceWithURL:(NSURL *)URL customHeaders:(NSDictionary *)requestHeaders postData:(NSData *)postData finalURL:(NSURL **)finalNSURL responseHeaders:(NSDictionary **)responseHeaderDict statusCode:(int *)statusCode;
361
362 - (BOOL)isReloading;
363 - (time_t)expiresTimeForResponse:(NSURLResponse *)response;
364
365 - (void)reportClientRedirectToURL:(NSURL *)URL delay:(NSTimeInterval)seconds fireDate:(NSDate *)date lockHistory:(BOOL)lockHistory isJavaScriptFormAction:(BOOL)isJavaScriptFormAction;
366 - (void)reportClientRedirectCancelled:(BOOL)cancelWithLoadInProgress;
367
368 - (void)focusWindow;
369 - (void)unfocusWindow;
370
371 - (NSView *)nextKeyViewOutsideWebFrameViews;
372 - (NSView *)previousKeyViewOutsideWebFrameViews;
373
374 - (BOOL)defersLoading;
375 - (void)setDefersLoading:(BOOL)loading;
376 - (void)saveDocumentState:(NSArray *)documentState;
377 - (NSArray *)documentState;
378
379 - (void)setNeedsReapplyStyles;
380
381 // OK to be an NSString rather than an NSURL.
382 // This URL is only used for coloring visited links.
383 - (NSString *)requestedURLString;
384 - (NSString *)incomingReferrer;
385
386 - (NSView *)viewForPluginWithURL:(NSURL *)URL
387                       attributes:(NSArray *)attributesArray
388                          baseURL:(NSURL *)baseURL
389                         MIMEType:(NSString *)MIMEType;
390 - (NSView *)viewForJavaAppletWithFrame:(NSRect)frame
391                             attributes:(NSDictionary *)attributes
392                                baseURL:(NSURL *)baseURL;
393
394 - (BOOL)saveDocumentToPageCache:(id)documentInfo;
395
396 - (int)getObjectCacheSize;
397
398 - (BOOL)frameRequiredForMIMEType:(NSString*)MIMEType URL:(NSURL *)URL;
399
400 - (void)loadEmptyDocumentSynchronously;
401
402 - (NSString *)MIMETypeForPath:(NSString *)path;
403
404 - (void)handleMouseDragged:(NSEvent *)event;
405 - (void)handleAutoscrollForMouseDragged:(NSEvent *)event;
406 - (BOOL)mayStartDragWithMouseDragged:(NSEvent *)event;
407
408 - (int)historyLength;
409 - (void)goBackOrForward:(int)distance;
410
411 - (void)controlTextDidBeginEditing:(NSNotification *)obj;
412 - (void)controlTextDidEndEditing:(NSNotification *)obj;
413 - (void)controlTextDidChange:(NSNotification *)obj;
414
415 - (BOOL)control:(NSControl *)control textShouldBeginEditing:(NSText *)fieldEditor;
416 - (BOOL)control:(NSControl *)control textShouldEndEditing:(NSText *)fieldEditor;
417 - (BOOL)control:(NSControl *)control didFailToFormatString:(NSString *)string errorDescription:(NSString *)error;
418 - (void)control:(NSControl *)control didFailToValidatePartialString:(NSString *)string errorDescription:(NSString *)error;
419 - (BOOL)control:(NSControl *)control isValidObject:(id)obj;
420 - (BOOL)control:(NSControl *)control textView:(NSTextView *)textView doCommandBySelector:(SEL)commandSelector;
421
422 - (NSView <WebCoreFileButton> *)fileButtonWithDelegate:(id <WebCoreFileButtonDelegate>)delegate;
423
424 - (void)setHasBorder:(BOOL)hasBorder;
425
426 - (WebCoreKeyboardUIMode)keyboardUIMode;
427
428 - (void)didSetName:(NSString *)name;
429
430 - (NSFileWrapper *)fileWrapperForURL:(NSURL *)URL;
431
432 - (void)print;
433
434 - (jobject)pollForAppletInView:(NSView *)view;
435
436 - (void)registerCommandForUndo:(id)arg;
437 - (void)registerCommandForRedo:(id)arg;
438 - (void)clearUndoRedoOperations;
439 - (void)issueUndoCommand;
440 - (void)issueRedoCommand;
441 - (void)issueCutCommand;
442 - (void)issueCopyCommand;
443 - (void)issuePasteCommand;
444 - (void)postDidChangeSelectionNotification;
445 - (void)postDidChangeNotification;
446
447 - (void)editingKeyDown:(NSEvent *)event;
448
449 - (void)setIsSelected:(BOOL)isSelected forView:(NSView *)view;
450
451 - (NSString *)overrideMediaType;
452
453 @end
454
455 // This interface definition allows those who hold a WebCoreBridge * to call all the methods
456 // in the WebCoreBridge protocol without requiring the base implementation to supply the methods.
457 // This idiom is appropriate because WebCoreBridge is an abstract class.
458
459 @interface WebCoreBridge (SubclassResponsibility) <WebCoreBridge>
460 @end
461
462 @protocol WebCoreDOMTreeCopier <NSObject>
463 - (NSObject *)nodeWithName:(NSString *)name value:(NSString *)value source:(NSString *)source children:(NSArray *)children;
464 @end
465
466 @protocol WebCoreRenderTreeCopier <NSObject>
467 - (NSObject *)nodeWithName:(NSString *)name position:(NSPoint)p rect:(NSRect)rect view:(NSView *)view children:(NSArray *)children;
468 @end
469
470 @protocol WebCoreFileButton <NSObject>
471 - (void)setFilename:(NSString *)filename;
472 - (void)performClick;
473 - (NSString *)filename;
474 - (float)baseline;
475 - (void)setVisualFrame:(NSRect)rect;
476 - (NSRect)visualFrame;
477 - (NSSize)bestVisualFrameSizeForCharacterCount:(int)count;
478 @end
479
480 @protocol WebCoreFileButtonDelegate <NSObject>
481 - (void)filenameChanged:(NSString *)filename;
482 - (void)focusChanged:(BOOL)nowHasFocus;
483 - (void)clicked;
484 @end