1/*
2 * Copyright (C) 2006, 2007, 2008, 2009 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 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 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#ifndef DO_NO_IMPORTS
27import "oaidl.idl";
28import "ocidl.idl";
29import "IWebUndoTarget.idl";
30import "IWebURLRequest.idl";
31import "IWebFrame.idl";
32#endif
33
34interface IWebFrame;
35interface IWebView;
36interface IWebURLRequest;
37interface IWebUndoTarget;
38
39/*!
40    @enum WebMenuItemTag
41    @discussion Each menu item in the default menu items array passed in
42    contextMenuItemsForElement:defaultMenuItems: has its tag set to one of the WebMenuItemTags.
43    When iterating through the default menu items array, use the tag to differentiate between them.
44*/
45typedef enum WebMenuItemTag {
46    WebMenuItemTagOpenLinkInNewWindow=1,
47    WebMenuItemTagDownloadLinkToDisk,
48    WebMenuItemTagCopyLinkToClipboard,
49    WebMenuItemTagOpenImageInNewWindow,
50    WebMenuItemTagDownloadImageToDisk,
51    WebMenuItemTagCopyImageToClipboard,
52    WebMenuItemTagOpenFrameInNewWindow,
53    WebMenuItemTagCopy,
54    WebMenuItemTagGoBack,
55    WebMenuItemTagGoForward,
56    WebMenuItemTagStop,
57    WebMenuItemTagReload,
58    WebMenuItemTagCut,
59    WebMenuItemTagPaste,
60    WebMenuItemTagSpellingGuess,
61    WebMenuItemTagNoGuessesFound,
62    WebMenuItemTagIgnoreSpelling,
63    WebMenuItemTagLearnSpelling,
64    WebMenuItemTagOther,
65    WebMenuItemTagSearchInSpotlight,
66    WebMenuItemTagSearchWeb,
67    WebMenuItemTagLookUpInDictionary,
68    WebMenuItemTagOpenWithDefaultApplication,
69    WebMenuItemPDFActualSize,
70    WebMenuItemPDFZoomIn,
71    WebMenuItemPDFZoomOut,
72    WebMenuItemPDFAutoSize,
73    WebMenuItemPDFSinglePage,
74    WebMenuItemPDFFacingPages,
75    WebMenuItemPDFContinuous,
76    WebMenuItemPDFNextPage,
77    WebMenuItemPDFPreviousPage,
78    // FIXME: Review these names before release!
79    WebMenuItemTagOpenLink = 2000,
80    WebMenuItemTagIgnoreGrammar,
81    WebtMenuItemTagSpellingMenu,
82    WebMenuItemTagShowSpellingPanel,
83    WebMenuItemTagCheckSpelling,
84    WebMenuItemTagCheckSpellingWhileTyping,
85    WebMenuItemTagCheckGrammarWithSpelling,
86    WebMenuItemTagFontMenu,
87    WebMenuItemTagShowFonts,
88    WebMenuItemTagBold,
89    WebMenuItemTagItalic,
90    WebMenuItemTagUnderline,
91    WebMenuItemTagOutline,
92    WebMenuItemTagStyles,
93    WebMenuItemTagShowColors,
94    WebMenuItemTagSpeechMenu,
95    WebMenuItemTagStartSpeaking,
96    WebMenuItemTagStopSpeaking,
97    WebMenuItemTagWritingDirectionMenu,
98    WebMenuItemTagDefaultDirection,
99    WebMenuItemTagLeftToRight,
100    WebMenuItemTagRightToLeft,
101    WebMenuItemTagPDFSinglePageScrolling,
102    WebMenuItemTagPDFFacingPagesScrolling,
103    WebMenuItemTagInspectElement,
104    WebMenuItemBaseApplicationTag=10000
105} WebMenuItemTag;
106
107/*!
108    @enum WebDragDestinationAction
109    @abstract Actions that the destination of a drag can perform.
110    @constant WebDragDestinationActionNone No action
111    @constant WebDragDestinationActionDHTML Allows DHTML (such as JavaScript) to handle the drag
112    @constant WebDragDestinationActionEdit Allows editable documents to be edited from the drag
113    @constant WebDragDestinationActionLoad Allows a location change from the drag
114    @constant WebDragDestinationActionAny Allows any of the above to occur
115*/
116typedef enum WebDragDestinationAction {
117    WebDragDestinationActionNone    = 0,
118    WebDragDestinationActionDHTML   = 1,
119    WebDragDestinationActionEdit    = 2,
120    WebDragDestinationActionLoad    = 4,
121    WebDragDestinationActionAny     = (unsigned long)-1
122} WebDragDestinationAction;
123
124/*!
125    @enum WebDragSourceAction
126    @abstract Actions that the source of a drag can perform.
127    @constant WebDragSourceActionNone No action
128    @constant WebDragSourceActionDHTML Allows DHTML (such as JavaScript) to start a drag
129    @constant WebDragSourceActionImage Allows an image drag to occur
130    @constant WebDragSourceActionLink Allows a link drag to occur
131    @constant WebDragSourceActionSelection Allows a selection drag to occur
132    @constant WebDragSourceActionAny Allows any of the above to occur
133*/
134typedef enum WebDragSourceAction {
135    WebDragSourceActionNone         = 0,
136    WebDragSourceActionDHTML        = 1,
137    WebDragSourceActionImage        = 2,
138    WebDragSourceActionLink         = 4,
139    WebDragSourceActionSelection    = 8,
140    WebDragSourceActionAny          = (unsigned long)-1
141} WebDragSourceAction;
142
143
144/*!
145    @protocol WebOpenPanelResultListener
146    @discussion This protocol is used to call back with the results of
147    the file open panel requested by runOpenPanelForFileButtonWithResultListener:
148    @protocol WebOpenPanelResultListener <NSObject>
149*/
150[
151    object,
152    oleautomation,
153    uuid(634198C7-9DFC-4aba-9E8C-90AEEA7A4144),
154    pointer_default(unique)
155]
156interface IWebOpenPanelResultListener : IUnknown
157{
158    /*!
159        @method chooseFilename:
160        @abstract Call this method to return a filename from the file open panel.
161        @param fileName
162        - (void)chooseFilename:(NSString *)fileName;
163    */
164    HRESULT chooseFilename([out, retval] BSTR* fileName);
165
166    /*!
167        @method cancel
168        @abstract Call this method to indicate that the file open panel was cancelled.
169        - (void)cancel;
170    */
171    HRESULT cancel();
172}
173
174/*!
175    @category WebUIDelegate
176    @discussion A class that implements WebUIDelegate provides
177    window-related methods that may be used by Javascript, plugins and
178    other aspects of web pages. These methods are used to open new
179    windows and control aspects of existing windows.
180    @interface NSObject (WebUIDelegate)
181*/
182[
183    object,
184    oleautomation,
185    uuid(042B7EE3-A5A4-4a8f-8C33-775CD9E89C7C),
186    pointer_default(unique)
187]
188interface IWebUIDelegate : IUnknown
189{
190    /*!
191        @method webView:createWebViewWithRequest:
192        @abstract Create a new window and begin to load the specified request.
193        @discussion The newly created window is hidden, and the window operations delegate on the
194        new WebViews will get a webViewShow: call.
195        @param sender The WebView sending the delegate method.
196        @param request The request to load.
197        @result The WebView for the new window.
198        - (WebView *)webView:(WebView *)sender createWebViewWithRequest:(NSURLRequest *)request;
199    */
200    HRESULT createWebViewWithRequest([in] IWebView* sender, [in] IWebURLRequest* request, [out, retval] IWebView** newWebView);
201
202    /*!
203        @method webViewShow:
204        @param sender The WebView sending the delegate method.
205        @abstract Show the window that contains the top level view of the WebView,
206        ordering it frontmost.
207        @discussion This will only be called just after createWindowWithRequest:
208        is used to create a new window.
209        - (void)webViewShow:(WebView *)sender;
210    */
211    HRESULT webViewShow([in] IWebView* sender);
212
213    /*!
214        @method webViewClose:
215        @abstract Close the current window.
216        @param sender The WebView sending the delegate method.
217        @discussion Clients showing multiple views in one window may
218        choose to close only the one corresponding to this
219        WebView. Other clients may choose to ignore this method
220        entirely.
221        - (void)webViewClose:(WebView *)sender;
222    */
223    HRESULT webViewClose([in] IWebView* sender);
224
225    /*!
226        @method webViewFocus:
227        @abstract Focus the current window (i.e. makeKeyAndOrderFront:).
228        @param The WebView sending the delegate method.
229        @discussion Clients showing multiple views in one window may want to
230        also do something to focus the one corresponding to this WebView.
231        - (void)webViewFocus:(WebView *)sender;
232    */
233    HRESULT webViewFocus([in] IWebView* sender);
234
235    /*!
236        @method webViewUnfocus:
237        @abstract Unfocus the current window.
238        @param sender The WebView sending the delegate method.
239        @discussion Clients showing multiple views in one window may want to
240        also do something to unfocus the one corresponding to this WebView.
241        - (void)webViewUnfocus:(WebView *)sender;
242    */
243    HRESULT webViewUnfocus([in] IWebView* sender);
244
245    /*!
246        @method webViewFirstResponder:
247        @abstract Get the first responder for this window.
248        @param sender The WebView sending the delegate method.
249        @discussion This method should return the focused control in the
250        WebView's view, if any. If the view is out of the window
251        hierarchy, this might return something than calling firstResponder
252        on the real NSWindow would. It's OK to return either nil or the
253        real first responder if some control not in the window has focus.
254        - (NSResponder *)webViewFirstResponder:(WebView *)sender;
255    */
256    HRESULT webViewFirstResponder([in] IWebView* sender, [out, retval] HWND* responderHWnd);
257
258    /*!
259        @method webView:makeFirstResponder:
260        @abstract Set the first responder for this window.
261        @param sender The WebView sending the delegate method.
262        @param responder The responder to make first (will always be a view)
263        @discussion responder will always be a view that is in the view
264        subhierarchy of the top-level web view for this WebView. If the
265        WebView's top level view is currently out of the view
266        hierarchy, it may be desirable to save the first responder
267        elsewhere, or possibly ignore this call.
268        - (void)webView:(WebView *)sender makeFirstResponder:(NSResponder *)responder;
269    */
270    HRESULT makeFirstResponder([in] IWebView* sender, [in] HWND responderHWnd);
271
272    /*!
273        @method webView:setStatusText:
274        @abstract Set the window's status display, if any, to the specified string.
275        @param sender The WebView sending the delegate method.
276        @param text The status text to set
277        - (void)webView:(WebView *)sender setStatusText:(NSString *)text;
278    */
279    HRESULT setStatusText([in] IWebView* sender, [in] BSTR text);
280
281    /*!
282        @method webViewStatusText:
283        @abstract Get the currently displayed status text.
284        @param sender The WebView sending the delegate method.
285        @result The status text
286        - (NSString *)webViewStatusText:(WebView *)sender;
287    */
288    HRESULT webViewStatusText([in] IWebView* sender, [out, retval] BSTR* text);
289
290    /*!
291        @method webViewAreToolbarsVisible:
292        @abstract Determine whether the window's toolbars are currently visible
293        @param sender The WebView sending the delegate method.
294        @discussion This method should return YES if the window has any
295        toolbars that are currently on, besides the status bar. If the app
296        has more than one toolbar per window, for example a regular
297        command toolbar and a favorites bar, it should return YES from
298        this method if at least one is on.
299        @result YES if at least one toolbar is visible, otherwise NO.
300        - (BOOL)webViewAreToolbarsVisible:(WebView *)sender;
301    */
302    HRESULT webViewAreToolbarsVisible([in] IWebView* sender, [out, retval] BOOL* visible);
303
304    /*!
305        @method webView:setToolbarsVisible:
306        @param sender The WebView sending the delegate method.
307        @abstract Set whether the window's toolbars are currently visible.
308        @param visible New value for toolbar visibility
309        @discussion Setting this to YES should turn on all toolbars
310        (except for a possible status bar). Setting it to NO should turn
311        off all toolbars (with the same exception).
312        - (void)webView:(WebView *)sender setToolbarsVisible:(BOOL)visible;
313    */
314    HRESULT setToolbarsVisible([in] IWebView* sender, [in] BOOL visible);
315
316    /*!
317        @method webViewIsStatusBarVisible:
318        @abstract Determine whether the status bar is visible.
319        @param sender The WebView sending the delegate method.
320        @result YES if the status bar is visible, otherwise NO.
321        - (BOOL)webViewIsStatusBarVisible:(WebView *)sender;
322    */
323    HRESULT webViewIsStatusBarVisible([in] IWebView* sender, [out, retval] BOOL* visible);
324
325    /*!
326        @method webView:setStatusBarVisible:
327        @abstract Set whether the status bar is currently visible.
328        @param visible The new visibility value
329        @discussion Setting this to YES should show the status bar,
330        setting it to NO should hide it.
331        - (void)webView:(WebView *)sender setStatusBarVisible:(BOOL)visible;
332    */
333    HRESULT setStatusBarVisible([in] IWebView* sender, [in] BOOL visible);
334
335    /*!
336        @method webViewIsResizable:
337        @abstract Determine whether the window is resizable or not.
338        @param sender The WebView sending the delegate method.
339        @result YES if resizable, NO if not.
340        @discussion If there are multiple views in the same window, they
341        have have their own separate resize controls and this may need to
342        be handled specially.
343        - (BOOL)webViewIsResizable:(WebView *)sender;
344    */
345    HRESULT webViewIsResizable([in] IWebView* sender, [out, retval] BOOL* resizable);
346
347    /*!
348        @method webView:setResizable:
349        @abstract Set the window to resizable or not
350        @param sender The WebView sending the delegate method.
351        @param resizable YES if the window should be made resizable, NO if not.
352        @discussion If there are multiple views in the same window, they
353        have have their own separate resize controls and this may need to
354        be handled specially.
355        - (void)webView:(WebView *)sender setResizable:(BOOL)resizable;
356    */
357    HRESULT setResizable([in] IWebView* sender, [in] BOOL resizable);
358
359    /*!
360        @method webView:setFrame:
361        @abstract Set the window's frame rect
362        @param sender The WebView sending the delegate method.
363        @param frame The new window frame size
364        @discussion Even though a caller could set the frame directly using the NSWindow,
365        this method is provided so implementors of this protocol can do special
366        things on programmatic move/resize, like avoiding autosaving of the size.
367        - (void)webView:(WebView *)sender setFrame:(NSRect)frame;
368    */
369    HRESULT setFrame([in] IWebView* sender, [in] RECT* frame);
370
371    /*!
372        @method webViewFrame:
373        @param sender The WebView sending the delegate method.
374        @abstract REturn the window's frame rect
375        @discussion
376        - (NSRect)webViewFrame:(WebView *)sender;
377    */
378    HRESULT webViewFrame([in] IWebView* sender, [out, retval] RECT* frame);
379
380    /*!
381        @method webView:setContentRect:
382        @abstract Set the window's content rect
383        @param sender The WebView sending the delegate method.
384        @param frame The new window content rect
385        @discussion Even though a caller could set the content rect
386        directly using the NSWindow, this method is provided so
387        implementors of this protocol can do special things on
388        programmatic move/resize, like avoiding autosaving of the size.
389        - (void)webView:(WebView *)sender setContentRect:(NSRect)contentRect;
390    */
391    HRESULT setContentRect([in] IWebView* sender, [in] RECT* contentRect);
392
393    /*!
394        @method webViewContentRect:
395        @abstract Return the window's content rect
396        @discussion
397        - (NSRect)webViewContentRect:(WebView *)sender;
398    */
399    HRESULT webViewContentRect([in] IWebView* sender, [out, retval] RECT* contentRect);
400
401    /*!
402        @method webView:runJavaScriptAlertPanelWithMessage:
403        @abstract Display a JavaScript alert panel
404        @param sender The WebView sending the delegate method.
405        @param message The message to display
406        @discussion Clients should visually indicate that this panel comes
407        from JavaScript. The panel should have a single OK button.
408        - (void)webView:(WebView *)sender runJavaScriptAlertPanelWithMessage:(NSString *)message;
409    */
410    HRESULT runJavaScriptAlertPanelWithMessage([in] IWebView* sender, [in] BSTR message);
411
412    /*!
413        @method webView:runJavaScriptConfirmPanelWithMessage:
414        @abstract Display a JavaScript confirm panel
415        @param sender The WebView sending the delegate method.
416        @param message The message to display
417        @result YES if the user hit OK, no if the user chose Cancel.
418        @discussion Clients should visually indicate that this panel comes
419        from JavaScript. The panel should have two buttons, e.g. "OK" and
420        "Cancel".
421        - (BOOL)webView:(WebView *)sender runJavaScriptConfirmPanelWithMessage:(NSString *)message;
422    */
423    HRESULT runJavaScriptConfirmPanelWithMessage([in] IWebView* sender, [in] BSTR message, [out, retval] BOOL* result);
424
425    /*!
426        @method webView:runJavaScriptTextInputPanelWithPrompt:defaultText:
427        @abstract Display a JavaScript text input panel
428        @param sender The WebView sending the delegate method.
429        @param message The message to display
430        @param defaultText The initial text for the text entry area.
431        @result The typed text if the user hit OK, otherwise nil.
432        @discussion Clients should visually indicate that this panel comes
433        from JavaScript. The panel should have two buttons, e.g. "OK" and
434        "Cancel", and an area to type text.
435        - (NSString *)webView:(WebView *)sender runJavaScriptTextInputPanelWithPrompt:(NSString *)prompt defaultText:(NSString *)defaultText;
436    */
437    HRESULT runJavaScriptTextInputPanelWithPrompt([in] IWebView* sender, [in] BSTR message, [in] BSTR defaultText, [out, retval] BSTR* result);
438
439    /*!
440        @method webView:runJavaScriptConfirmPanelWithMessage:initiatedByFrame:
441        @abstract Display a confirm panel by an "before unload" event handler.
442        @param sender The WebView sending the delegate method.
443        @param message The message to display.
444        @param frame The WebFrame whose JavaScript initiated this call.
445        @result YES if the user hit OK, NO if the user chose Cancel.
446        @discussion Clients should include a message in addition to the one
447        supplied by the web page that indicates. The panel should have
448        two buttons, e.g. "OK" and "Cancel".
449        - (BOOL)webView:(WebView *)sender runBeforeUnloadConfirmPanelWithMessage:(NSString *)message initiatedByFrame:(WebFrame *)frame;
450    */
451    HRESULT runBeforeUnloadConfirmPanelWithMessage([in] IWebView* sender, [in] BSTR message, [in] IWebFrame* initiatedByFrame, [out, retval] BOOL* result);
452
453    /*!
454        @method webView:runOpenPanelForFileButtonWithResultListener:
455        @abstract Display a file open panel for a file input control.
456        @param sender The WebView sending the delegate method.
457        @param resultListener The object to call back with the results.
458        @discussion This method is passed a callback object instead of giving a return
459        value so that it can be handled with a sheet.
460        - (void)webView:(WebView *)sender runOpenPanelForFileButtonWithResultListener:(id<WebOpenPanelResultListener>)resultListener;
461    */
462    HRESULT runOpenPanelForFileButtonWithResultListener([in] IWebView* sender, [in] IWebOpenPanelResultListener* resultListener);
463
464    /*!
465        @method webView:mouseDidMoveOverElement:modifierFlags:
466        @abstract Update the window's feedback for mousing over links to reflect a new item the mouse is over
467        or new modifier flags.
468        @param sender The WebView sending the delegate method.
469        @param elementInformation Dictionary that describes the element that the mouse is over, or nil.
470        @param modifierFlags The modifier flags as in NSEvent.
471        - (void)webView:(WebView *)sender mouseDidMoveOverElement:(NSDictionary *)elementInformation modifierFlags:(WebNSUInt)modifierFlags;
472    */
473    HRESULT mouseDidMoveOverElement([in] IWebView* sender, [in] IPropertyBag* elementInformation, [in] UINT modifierFlags);
474
475    /*!
476        @method webView:contextMenuItemsForElement:defaultMenuItems:
477        @abstract Returns the menu items to display in an element's contextual menu.
478        @param sender The WebView sending the delegate method.
479        @param element A dictionary representation of the clicked element.
480        @param defaultMenuItems An array of default NSMenuItems to include in all contextual menus.
481        @result An array of NSMenuItems to include in the contextual menu.
482        - (NSArray *)webView:(WebView *)sender contextMenuItemsForElement:(NSDictionary *)element defaultMenuItems:(NSArray *)defaultMenuItems;
483    */
484    HRESULT contextMenuItemsForElement([in] IWebView* sender, [in] IPropertyBag* element, [in] HMENU defaultItemsHMenu, [out, retval] HMENU* resultHMenu);
485
486    /*!
487        @method webView:validateUserInterfaceItem:defaultValidation:
488        @abstract Controls UI validation
489        @param webView The WebView sending the delegate method
490        @param item The user interface item being validated
491        @pararm defaultValidation Whether or not the WebView thinks the item is valid
492        @discussion This method allows the UI delegate to control WebView's validation of user interface items.
493        See WebView.h to see the methods to that WebView can currently validate. See NSUserInterfaceValidations and
494        NSValidatedUserInterfaceItem for information about UI validation.
495        - (BOOL)webView:(WebView *)webView validateUserInterfaceItem:(id <NSValidatedUserInterfaceItem>)item defaultValidation:(BOOL)defaultValidation;
496    */
497    HRESULT validateUserInterfaceItem([in] IWebView* webView, [in] UINT itemCommandID, [in] BOOL defaultValidation, [out, retval] BOOL* isValid);
498
499    /*!
500        @method webView:shouldPerformAction:fromSender:
501        @abstract Controls actions
502        @param webView The WebView sending the delegate method
503        @param action The action being sent
504        @param sender The sender of the action
505        @discussion This method allows the UI delegate to control WebView's behavior when an action is being sent.
506        For example, if the action is copy:, the delegate can return YES to allow WebView to perform its default
507        copy behavior or return NO and perform copy: in some other way. See WebView.h to see the actions that
508        WebView can perform.
509        - (BOOL)webView:(WebView *)webView shouldPerformAction:(SEL)action fromSender:(id)sender;
510    */
511    HRESULT shouldPerformAction([in] IWebView* webView, [in] UINT itemCommandID, [in] UINT sender);
512
513    /*!
514        @method webView:dragDestinationActionMaskForDraggingInfo:
515        @abstract Controls behavior when dragging to a WebView
516        @param webView The WebView sending the delegate method
517        @param draggingInfo The dragging info of the drag
518        @discussion This method is called periodically as something is dragged over a WebView. The UI delegate can return a mask
519        indicating which drag destination actions can occur, WebDragDestinationActionAny to allow any kind of action or
520        WebDragDestinationActionNone to not accept the drag.
521        - (unsigned)webView:(WebView *)webView dragDestinationActionMaskForDraggingInfo:(id <NSDraggingInfo>)draggingInfo;
522    */
523    HRESULT dragDestinationActionMaskForDraggingInfo([in] IWebView* webView, [in] IDataObject* draggingInfo, [out, retval] WebDragDestinationAction* action);
524
525    /*!
526        @method webView:willPerformDragDestinationAction:forDraggingInfo:
527        @abstract Informs that WebView will perform a drag destination action
528        @param webView The WebView sending the delegate method
529        @param action The drag destination action
530        @param draggingInfo The dragging info of the drag
531        @discussion This method is called after the last call to webView:dragDestinationActionMaskForDraggingInfo: after something is dropped on a WebView.
532        This method informs the UI delegate of the drag destination action that WebView will perform.
533        - (void)webView:(WebView *)webView willPerformDragDestinationAction:(WebDragDestinationAction)action forDraggingInfo:(id <NSDraggingInfo>)draggingInfo;
534    */
535    HRESULT willPerformDragDestinationAction([in] IWebView* webView, [in] WebDragDestinationAction action, [in] IDataObject* draggingInfo);
536
537    /*!
538        @method webView:dragSourceActionMaskForPoint:
539        @abstract Controls behavior when dragging from a WebView
540        @param webView The WebView sending the delegate method
541        @param point The point where the drag started in the coordinates of the WebView
542        @discussion This method is called after the user has begun a drag from a WebView. The UI delegate can return a mask indicating
543        which drag source actions can occur, WebDragSourceActionAny to allow any kind of action or WebDragSourceActionNone to not begin a drag.
544        - (unsigned)webView:(WebView *)webView dragSourceActionMaskForPoint:(NSPoint)point;
545    */
546    HRESULT dragSourceActionMaskForPoint([in] IWebView* webView, [in] LPPOINT point, [out, retval] WebDragSourceAction* action);
547
548    /*!
549        @method webView:willPerformDragSourceAction:fromPoint:withPasteboard:
550        @abstract Informs that a drag a has begun from a WebView
551        @param webView The WebView sending the delegate method
552        @param action The drag source action
553        @param point The point where the drag started in the coordinates of the WebView
554        @param pasteboard The drag pasteboard
555        @discussion This method is called after webView:dragSourceActionMaskForPoint: is called after the user has begun a drag from a WebView.
556        This method informs the UI delegate of the drag source action that will be performed and gives the delegate an opportunity to modify
557        the contents of the dragging pasteboard.
558        - (void)webView:(WebView *)webView willPerformDragSourceAction:(WebDragSourceAction)action fromPoint:(NSPoint)point withPasteboard:(NSPasteboard *)pasteboard;
559    */
560    HRESULT willPerformDragSourceAction([in] IWebView* webView, [in] WebDragSourceAction action, [in] LPPOINT point, [in] IDataObject* pasteboard, [out, retval] IDataObject** newPasteboard);
561
562    /*!
563        @method webView:contextMenuItemSelected:ForElement:
564        @abstract Perform the action associated with the selected item.
565        @param sender The WebView sending the delegate method.
566        @param item The menu item that was selected.
567        @param element A dictionary representation of the clicked element.
568    */
569    [local] HRESULT contextMenuItemSelected([in] IWebView* sender, [in] void* item, [in] IPropertyBag* element);
570
571    /*
572        @method hasCustomMenuImplementation:
573        @abstract Returns whether the application uses the following functions to create a custom menu impementation.
574    */
575    HRESULT hasCustomMenuImplementation([out, retval] BOOL* hasCustomMenus);
576
577    /*
578        @method webView:trackCutsomPopupMenu
579        @abstract Adds custom draw data to the menu items and calls a custom trackPopupMenu.
580        @param sender The WebView sending the delegate method.
581        @param menu The menu that we want to pop up.
582        @param point The point associated with the context menu event in the coordinates of the WebView
583    */
584    HRESULT trackCustomPopupMenu([in] IWebView* sender, [in] HMENU hMenu, [in] LPPOINT point);
585
586    /*
587        @method webView:measureCustomMenuItem
588        @abstract This is called when the WM_MEASUREITEM command is received to measure the custom menu items
589        @param sender The WebView sending the delegate method.
590        @param measureItem The LPMEASUREITEMSTRUCT associated with the item.
591    */
592    [local] HRESULT measureCustomMenuItem([in] IWebView* sender, [in] void* measureItem);
593
594    /*
595        @method webView:drawCustomMenuItem
596        @abstract This is called when the WM_DRAWITEM command is received to draw the custom menu item
597        @param sender The WebView sending the delegate method.
598        @param drawItem The LPDRAWITEMSTRUCT associated with the item.
599    */
600    [local] HRESULT drawCustomMenuItem([in] IWebView* sender, [in] void* drawItem);
601
602    /*
603        @method webView:addCustomMenuDrawingData
604        @abstract Add custom data to the menu that the delegate can use when asked to draw.
605        @param sender The WebView sending the delegate method.
606        @param menu The cutsom menu to clean up.
607        @discussion This method is called for submenus as well.
608    */
609    HRESULT addCustomMenuDrawingData([in] IWebView* sender, [in] HMENU hMenu);
610
611    /*
612        @method webView:cleanUpCustomMenuDrawingData
613        @abstract Clean up any custom data added to the menu items
614        @param sender The WebView sending the delegate method.
615        @param menu The cutsom menu to clean up.
616    */
617    HRESULT cleanUpCustomMenuDrawingData([in] IWebView* sender, [in] HMENU hMenu);
618
619    /*!
620        @method webView:canTakeFocus:
621        @abstract Informs whether focus can be transferred out of the WebView in the specified direction
622        @param sender The WebView sending the delegate method.
623        @param forward Whether focus is moving forward or backward.
624    */
625    HRESULT canTakeFocus([in] IWebView* sender, [in] BOOL forward, [out] BOOL* result);
626
627    /*!
628        @method webView:takeFocus:
629        @abstract Instructs the delegate to take focus out of the WebView
630        @param sender The WebView sending the delegate method.
631        @param forward Whether focus is moving forward or backward.
632    */
633    HRESULT takeFocus([in] IWebView* sender, [in] BOOL forward);
634
635    /// Undo related UI delegate methods --------------------------------------------------------------------------------
636
637    /*!
638        @method registerUndoWithTarget:
639        @abstract Registers an undo operation of a IWebUndoTarget on the undo/redo stack.
640        @param target The target that will be called back when the action is undone
641        @param actionName The name of the action - this will be passed back to the target when we need to undo the operation
642        @param actionArg An object that target used to save undo information
643    */
644    HRESULT registerUndoWithTarget([in] IWebUndoTarget* target, [in] BSTR actionName, [in] IUnknown* actionArg);
645
646    /*!
647        @method removeAllActionsWithTarget:
648        @abstract remove all the undo operations that are registered for the passed in target on the undo/redo stack.
649        @param target
650    */
651    HRESULT removeAllActionsWithTarget([in] IWebUndoTarget* target);
652
653    /*!
654        @method setActionTitle:
655        @abstract Sets the name of the action for the current group of undo operations
656        @param actionName Name of the action
657    */
658    HRESULT setActionTitle([in] BSTR actionTitle);
659
660    /*!
661        @method undo:
662        @abstract Undo the last group of operations
663    */
664    HRESULT undo();
665
666    /*!
667        @method redo:
668        @abstract Redo the last group of operations
669    */
670    HRESULT redo();
671
672    /*!
673        @method canUndo:
674        @abstract Returns whether there's anything on the undo stack to be undone
675    */
676    HRESULT canUndo([out, retval] BOOL* result);
677
678    /*!
679        @method canRedo:
680        @abstract Returns whether there's anything on the redo stack to be redone
681    */
682    HRESULT canRedo([out, retval] BOOL* result);
683
684/*!
685    @method webView:printFrame:
686    @abstract Informs that a WebFrame needs to be printed
687    @param webView The WebView sending the delegate method
688    @param frame The WebFrame needing to be printed
689    @discussion This method is called when a script or user requests the page to be printed.
690    In this method the delegate can prepare the WebFrame to be printed.
691*/
692    HRESULT printFrame([in] IWebView* webView, [in] IWebFrame* frame);
693
694/*!
695    @method webView:ftpDirectoryTemplatePath
696    @abstract Returns the path to the FTP directory listing template document
697    @param webView The WebView sending the delegate method
698    @param path The path to the template document
699    @discussion This method is called when an FTP directory listing is viewed in a webView.
700    In practice, all WebViews show the same template document data that was loaded for the very
701    first WebView that displayed a directory listing, so this will only be called once.
702*/
703    HRESULT ftpDirectoryTemplatePath([in] IWebView* webView, [out, retval] BSTR* path);
704
705/*!
706    @method webViewHeaderHeight:
707    @param webView The WebView sending the delegate method
708    @abstract Reserve a height for the printed page header.
709    @result The height to reserve for the printed page header, return 0.0 to not reserve any space for a header.
710    @discussion The height returned will be used to calculate the rect passed to webView:drawHeaderInRect:.
711
712    - (float)webViewHeaderHeight:(WebView *)sender;
713*/
714    HRESULT webViewHeaderHeight([in] IWebView* webView, [out, retval] float* result);
715
716/*!
717    @method webViewFooterHeight:
718    @param webView The WebView sending the delegate method
719    @abstract Reserve a height for the printed page footer.
720    @result The height to reserve for the printed page footer, return 0.0 to not reserve any space for a footer.
721    @discussion The height returned will be used to calculate the rect passed to webView:drawFooterInRect:.
722
723    - (float)webViewFooterHeight:(WebView *)sender;
724*/
725    HRESULT webViewFooterHeight([in] IWebView* webView, [out, retval] float* result);
726
727/*!
728    @method webView:drawHeaderInRect:
729    @param webView The WebView sending the delegate method
730    @param rect The NSRect reserved for the header of the page
731    @abstract The delegate should draw a header for the sender in the supplied rect.
732
733    - (void)webView:(WebView *)sender drawHeaderInRect:(NSRect)rect;
734*/
735    HRESULT drawHeaderInRect([in] IWebView* webView, [in] RECT* rect, [in] ULONG_PTR drawingContext);
736
737/*!
738    @method webView:drawFooterInRect:
739    @param webView The WebView sending the delegate method
740    @param rect The NSRect reserved for the footer of the page
741    @abstract The delegate should draw a footer for the sender in the supplied rect.
742
743    - (void)webView:(WebView *)sender drawFooterInRect:(NSRect)rect;
744*/
745    HRESULT drawFooterInRect([in] IWebView* webView, [in] RECT* rect, [in] ULONG_PTR drawingContext, [in] UINT pageIndex, [in] UINT pageCount);
746
747    HRESULT webViewPrintingMarginRect([in] IWebView* webView, [out, retval] RECT* rect);
748
749    HRESULT canRunModal([in] IWebView* webView, [out, retval] BOOL* canRunBoolean);
750    HRESULT createModalDialog([in] IWebView* sender, [in] IWebURLRequest* request, [out, retval] IWebView** newWebView);
751    HRESULT runModal([in] IWebView* webView);
752    HRESULT isMenuBarVisible([in] IWebView* webView, [out, retval] BOOL* visible);
753    HRESULT setMenuBarVisible([in] IWebView* webView, [in] BOOL visible);
754    HRESULT runDatabaseSizeLimitPrompt([in] IWebView* webView, [in] BSTR displayName, [in] IWebFrame* initiatedByFrame, [out, retval] BOOL* allowed);
755    HRESULT paintCustomScrollbar([in] IWebView* webView, [in] HDC hDC, [in] RECT rect, [in] WebScrollBarControlSize size, [in] WebScrollbarControlState state,
756                                 [in] WebScrollbarControlPart pressedPart, [in] BOOL vertical, [in] float value, [in] float proportion, [in] WebScrollbarControlPartMask parts);
757    HRESULT paintCustomScrollCorner([in] IWebView* webView, [in] HDC hDC, [in] RECT rect);
758}
759