webengine/osswebengine/WebKit/win/Interfaces/IWebUIDelegate.idl
changeset 0 dd21522fd290
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/webengine/osswebengine/WebKit/win/Interfaces/IWebUIDelegate.idl	Mon Mar 30 12:54:55 2009 +0300
@@ -0,0 +1,783 @@
+/*
+ * Copyright (C) 2006, 2007 Apple Inc.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
+ */
+
+cpp_quote("/*")
+cpp_quote(" * Copyright (C) 2006, 2007 Apple Inc.  All rights reserved.")
+cpp_quote(" *")
+cpp_quote(" * Redistribution and use in source and binary forms, with or without")
+cpp_quote(" * modification, are permitted provided that the following conditions")
+cpp_quote(" * are met:")
+cpp_quote(" * 1. Redistributions of source code must retain the above copyright")
+cpp_quote(" *    notice, this list of conditions and the following disclaimer.")
+cpp_quote(" * 2. Redistributions in binary form must reproduce the above copyright")
+cpp_quote(" *    notice, this list of conditions and the following disclaimer in the")
+cpp_quote(" *    documentation and/or other materials provided with the distribution.")
+cpp_quote(" *")
+cpp_quote(" * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY")
+cpp_quote(" * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE")
+cpp_quote(" * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR")
+cpp_quote(" * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR")
+cpp_quote(" * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,")
+cpp_quote(" * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,")
+cpp_quote(" * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR")
+cpp_quote(" * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY")
+cpp_quote(" * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT")
+cpp_quote(" * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE")
+cpp_quote(" * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ")
+cpp_quote(" */")
+
+import "oaidl.idl";
+import "ocidl.idl";
+import "IWebUndoTarget.idl";
+import "IWebURLRequest.idl";
+import "IWebFrame.idl";
+
+interface IWebFrame;
+interface IWebView;
+interface IWebURLRequest;
+
+/*!
+    @enum WebMenuItemTag
+    @discussion Each menu item in the default menu items array passed in
+    contextMenuItemsForElement:defaultMenuItems: has its tag set to one of the WebMenuItemTags.
+    When iterating through the default menu items array, use the tag to differentiate between them.
+*/
+typedef enum WebMenuItemTag {
+    WebMenuItemTagOpenLinkInNewWindow=1,
+    WebMenuItemTagDownloadLinkToDisk,
+    WebMenuItemTagCopyLinkToClipboard,
+    WebMenuItemTagOpenImageInNewWindow,
+    WebMenuItemTagDownloadImageToDisk,
+    WebMenuItemTagCopyImageToClipboard,
+    WebMenuItemTagOpenFrameInNewWindow,
+    WebMenuItemTagCopy,
+    WebMenuItemTagGoBack,
+    WebMenuItemTagGoForward,
+    WebMenuItemTagStop,
+    WebMenuItemTagReload,
+    WebMenuItemTagCut,
+    WebMenuItemTagPaste,
+    WebMenuItemTagSpellingGuess,
+    WebMenuItemTagNoGuessesFound,
+    WebMenuItemTagIgnoreSpelling,
+    WebMenuItemTagLearnSpelling,
+    WebMenuItemTagOther,
+    WebMenuItemTagSearchInSpotlight,
+    WebMenuItemTagSearchWeb,
+    WebMenuItemTagLookUpInDictionary,
+    WebMenuItemTagOpenWithDefaultApplication,
+    WebMenuItemPDFActualSize,
+    WebMenuItemPDFZoomIn,
+    WebMenuItemPDFZoomOut,
+    WebMenuItemPDFAutoSize,
+    WebMenuItemPDFSinglePage,
+    WebMenuItemPDFFacingPages,
+    WebMenuItemPDFContinuous,
+    WebMenuItemPDFNextPage,
+    WebMenuItemPDFPreviousPage,
+    // FIXME: Review these names before release!
+    WebMenuItemTagOpenLink = 2000,
+    WebMenuItemTagIgnoreGrammar,
+    WebtMenuItemTagSpellingMenu,
+    WebMenuItemTagShowSpellingPanel,
+    WebMenuItemTagCheckSpelling,
+    WebMenuItemTagCheckSpellingWhileTyping,
+    WebMenuItemTagCheckGrammarWithSpelling,
+    WebMenuItemTagFontMenu,
+    WebMenuItemTagShowFonts,
+    WebMenuItemTagBold,
+    WebMenuItemTagItalic,
+    WebMenuItemTagUnderline,
+    WebMenuItemTagOutline,
+    WebMenuItemTagStyles,
+    WebMenuItemTagShowColors,
+    WebMenuItemTagSpeechMenu,
+    WebMenuItemTagStartSpeaking,
+    WebMenuItemTagStopSpeaking,
+    WebMenuItemTagWritingDirectionMenu,
+    WebMenuItemTagDefaultDirection,
+    WebMenuItemTagLeftToRight,
+    WebMenuItemTagRightToLeft,
+    WebMenuItemTagPDFSinglePageScrolling,
+    WebMenuItemTagPDFFacingPagesScrolling,
+    WebMenuItemTagInspectElement,
+    WebMenuItemBaseApplicationTag=10000
+} WebMenuItemTag;
+
+/*!
+    @enum WebDragDestinationAction
+    @abstract Actions that the destination of a drag can perform.
+    @constant WebDragDestinationActionNone No action
+    @constant WebDragDestinationActionDHTML Allows DHTML (such as JavaScript) to handle the drag
+    @constant WebDragDestinationActionEdit Allows editable documents to be edited from the drag
+    @constant WebDragDestinationActionLoad Allows a location change from the drag
+    @constant WebDragDestinationActionAny Allows any of the above to occur
+*/
+typedef enum WebDragDestinationAction {
+    WebDragDestinationActionNone    = 0,
+    WebDragDestinationActionDHTML   = 1,
+    WebDragDestinationActionEdit    = 2,
+    WebDragDestinationActionLoad    = 4,
+    WebDragDestinationActionAny     = (unsigned long)-1
+} WebDragDestinationAction;
+
+/*!
+    @enum WebDragSourceAction
+    @abstract Actions that the source of a drag can perform.
+    @constant WebDragSourceActionNone No action
+    @constant WebDragSourceActionDHTML Allows DHTML (such as JavaScript) to start a drag
+    @constant WebDragSourceActionImage Allows an image drag to occur
+    @constant WebDragSourceActionLink Allows a link drag to occur
+    @constant WebDragSourceActionSelection Allows a selection drag to occur
+    @constant WebDragSourceActionAny Allows any of the above to occur
+*/
+typedef enum WebDragSourceAction {
+    WebDragSourceActionNone         = 0,
+    WebDragSourceActionDHTML        = 1,
+    WebDragSourceActionImage        = 2,
+    WebDragSourceActionLink         = 4,
+    WebDragSourceActionSelection    = 8,
+    WebDragSourceActionAny          = (unsigned long)-1
+} WebDragSourceAction;
+
+
+/*!
+    @protocol WebOpenPanelResultListener
+    @discussion This protocol is used to call back with the results of
+    the file open panel requested by runOpenPanelForFileButtonWithResultListener:
+    @protocol WebOpenPanelResultListener <NSObject>
+*/
+[
+    object,
+    oleautomation,
+    uuid(634198C7-9DFC-4aba-9E8C-90AEEA7A4144),
+    pointer_default(unique)
+]
+interface IWebOpenPanelResultListener : IUnknown
+{
+    /*!
+        @method chooseFilename:
+        @abstract Call this method to return a filename from the file open panel.
+        @param fileName
+        - (void)chooseFilename:(NSString *)fileName;
+    */
+    HRESULT chooseFilename([out, retval] BSTR* fileName);
+
+    /*!
+        @method cancel
+        @abstract Call this method to indicate that the file open panel was cancelled.
+        - (void)cancel;
+    */
+    HRESULT cancel();
+}
+
+/*!
+    @category WebUIDelegate
+    @discussion A class that implements WebUIDelegate provides
+    window-related methods that may be used by Javascript, plugins and
+    other aspects of web pages. These methods are used to open new
+    windows and control aspects of existing windows.
+    @interface NSObject (WebUIDelegate)
+*/
+[
+    object,
+    oleautomation,
+    uuid(2452A889-A74A-4fbc-9617-326A0A953630),
+    pointer_default(unique)
+]
+interface IWebUIDelegate : IUnknown
+{
+    /*!
+        @method webView:createWebViewWithRequest:
+        @abstract Create a new window and begin to load the specified request.
+        @discussion The newly created window is hidden, and the window operations delegate on the
+        new WebViews will get a webViewShow: call.
+        @param sender The WebView sending the delegate method.
+        @param request The request to load.
+        @result The WebView for the new window.
+        - (WebView *)webView:(WebView *)sender createWebViewWithRequest:(NSURLRequest *)request;
+    */
+    HRESULT createWebViewWithRequest([in] IWebView* sender, [in] IWebURLRequest* request, [out, retval] IWebView** newWebView);
+
+    /*!
+        @method webViewShow:
+        @param sender The WebView sending the delegate method.
+        @abstract Show the window that contains the top level view of the WebView,
+        ordering it frontmost.
+        @discussion This will only be called just after createWindowWithRequest:
+        is used to create a new window.
+        - (void)webViewShow:(WebView *)sender;
+    */
+    HRESULT webViewShow([in] IWebView* sender);
+
+    /*!
+        @method webViewClose:
+        @abstract Close the current window. 
+        @param sender The WebView sending the delegate method.
+        @discussion Clients showing multiple views in one window may
+        choose to close only the one corresponding to this
+        WebView. Other clients may choose to ignore this method
+        entirely.
+        - (void)webViewClose:(WebView *)sender;
+    */
+    HRESULT webViewClose([in] IWebView* sender);
+
+    /*!
+        @method webViewFocus:
+        @abstract Focus the current window (i.e. makeKeyAndOrderFront:).
+        @param The WebView sending the delegate method.
+        @discussion Clients showing multiple views in one window may want to
+        also do something to focus the one corresponding to this WebView.
+        - (void)webViewFocus:(WebView *)sender;
+    */
+    HRESULT webViewFocus([in] IWebView* sender);
+
+    /*!
+        @method webViewUnfocus:
+        @abstract Unfocus the current window.
+        @param sender The WebView sending the delegate method.
+        @discussion Clients showing multiple views in one window may want to
+        also do something to unfocus the one corresponding to this WebView.
+        - (void)webViewUnfocus:(WebView *)sender;
+    */
+    HRESULT webViewUnfocus([in] IWebView* sender);
+
+    /*!
+        @method webViewFirstResponder:
+        @abstract Get the first responder for this window.
+        @param sender The WebView sending the delegate method.
+        @discussion This method should return the focused control in the
+        WebView's view, if any. If the view is out of the window
+        hierarchy, this might return something than calling firstResponder
+        on the real NSWindow would. It's OK to return either nil or the
+        real first responder if some control not in the window has focus.
+        - (NSResponder *)webViewFirstResponder:(WebView *)sender;
+    */
+    HRESULT webViewFirstResponder([in] IWebView* sender, [out, retval] OLE_HANDLE* responderHWnd);
+
+    /*!
+        @method webView:makeFirstResponder:
+        @abstract Set the first responder for this window.
+        @param sender The WebView sending the delegate method.
+        @param responder The responder to make first (will always be a view)
+        @discussion responder will always be a view that is in the view
+        subhierarchy of the top-level web view for this WebView. If the
+        WebView's top level view is currently out of the view
+        hierarchy, it may be desirable to save the first responder
+        elsewhere, or possibly ignore this call.
+        - (void)webView:(WebView *)sender makeFirstResponder:(NSResponder *)responder;
+    */
+    HRESULT makeFirstResponder([in] IWebView* sender, [in] OLE_HANDLE responderHWnd);
+
+    /*!
+        @method webView:setStatusText:
+        @abstract Set the window's status display, if any, to the specified string.
+        @param sender The WebView sending the delegate method.
+        @param text The status text to set
+        - (void)webView:(WebView *)sender setStatusText:(NSString *)text;
+    */
+    HRESULT setStatusText([in] IWebView* sender, [in] BSTR text);
+
+    /*!
+        @method webViewStatusText:
+        @abstract Get the currently displayed status text.
+        @param sender The WebView sending the delegate method.
+        @result The status text
+        - (NSString *)webViewStatusText:(WebView *)sender;
+    */
+    HRESULT webViewStatusText([in] IWebView* sender, [out, retval] BSTR* text);
+
+    /*!
+        @method webViewAreToolbarsVisible:
+        @abstract Determine whether the window's toolbars are currently visible
+        @param sender The WebView sending the delegate method.
+        @discussion This method should return YES if the window has any
+        toolbars that are currently on, besides the status bar. If the app
+        has more than one toolbar per window, for example a regular
+        command toolbar and a favorites bar, it should return YES from
+        this method if at least one is on.
+        @result YES if at least one toolbar is visible, otherwise NO.
+        - (BOOL)webViewAreToolbarsVisible:(WebView *)sender;
+    */
+    HRESULT webViewAreToolbarsVisible([in] IWebView* sender, [out, retval] BOOL* visible);
+
+    /*!
+        @method webView:setToolbarsVisible:
+        @param sender The WebView sending the delegate method.
+        @abstract Set whether the window's toolbars are currently visible.
+        @param visible New value for toolbar visibility
+        @discussion Setting this to YES should turn on all toolbars
+        (except for a possible status bar). Setting it to NO should turn
+        off all toolbars (with the same exception).
+        - (void)webView:(WebView *)sender setToolbarsVisible:(BOOL)visible;
+    */
+    HRESULT setToolbarsVisible([in] IWebView* sender, [in] BOOL visible);
+
+    /*!
+        @method webViewIsStatusBarVisible:
+        @abstract Determine whether the status bar is visible.
+        @param sender The WebView sending the delegate method.
+        @result YES if the status bar is visible, otherwise NO.
+        - (BOOL)webViewIsStatusBarVisible:(WebView *)sender;
+    */
+    HRESULT webViewIsStatusBarVisible([in] IWebView* sender, [out, retval] BOOL* visible);
+
+    /*!
+        @method webView:setStatusBarVisible:
+        @abstract Set whether the status bar is currently visible.
+        @param visible The new visibility value
+        @discussion Setting this to YES should show the status bar,
+        setting it to NO should hide it.
+        - (void)webView:(WebView *)sender setStatusBarVisible:(BOOL)visible;
+    */
+    HRESULT setStatusBarVisible([in] IWebView* sender, [in] BOOL visible);
+
+    /*!
+        @method webViewIsResizable:
+        @abstract Determine whether the window is resizable or not.
+        @param sender The WebView sending the delegate method.
+        @result YES if resizable, NO if not.
+        @discussion If there are multiple views in the same window, they
+        have have their own separate resize controls and this may need to
+        be handled specially.
+        - (BOOL)webViewIsResizable:(WebView *)sender;
+    */
+    HRESULT webViewIsResizable([in] IWebView* sender, [out, retval] BOOL* resizable);
+
+    /*!
+        @method webView:setResizable:
+        @abstract Set the window to resizable or not
+        @param sender The WebView sending the delegate method.
+        @param resizable YES if the window should be made resizable, NO if not.
+        @discussion If there are multiple views in the same window, they
+        have have their own separate resize controls and this may need to
+        be handled specially.
+        - (void)webView:(WebView *)sender setResizable:(BOOL)resizable;
+    */
+    HRESULT setResizable([in] IWebView* sender, [in] BOOL resizable);
+
+    /*!
+        @method webView:setFrame:
+        @abstract Set the window's frame rect
+        @param sender The WebView sending the delegate method.
+        @param frame The new window frame size
+        @discussion Even though a caller could set the frame directly using the NSWindow,
+        this method is provided so implementors of this protocol can do special
+        things on programmatic move/resize, like avoiding autosaving of the size.
+        - (void)webView:(WebView *)sender setFrame:(NSRect)frame;
+    */
+    HRESULT setFrame([in] IWebView* sender, [in] RECT* frame);
+
+    /*!
+        @method webViewFrame:
+        @param sender The WebView sending the delegate method.
+        @abstract REturn the window's frame rect
+        @discussion 
+        - (NSRect)webViewFrame:(WebView *)sender;
+    */
+    HRESULT webViewFrame([in] IWebView* sender, [out, retval] RECT* frame);
+
+    /*!
+        @method webView:setContentRect:
+        @abstract Set the window's content rect
+        @param sender The WebView sending the delegate method.
+        @param frame The new window content rect
+        @discussion Even though a caller could set the content rect
+        directly using the NSWindow, this method is provided so
+        implementors of this protocol can do special things on
+        programmatic move/resize, like avoiding autosaving of the size.
+        - (void)webView:(WebView *)sender setContentRect:(NSRect)contentRect;
+    */
+    HRESULT setContentRect([in] IWebView* sender, [in] RECT* contentRect);
+
+    /*!
+        @method webViewContentRect:
+        @abstract Return the window's content rect
+        @discussion 
+        - (NSRect)webViewContentRect:(WebView *)sender;
+    */
+    HRESULT webViewContentRect([in] IWebView* sender, [out, retval] RECT* contentRect);
+
+    /*!
+        @method webView:runJavaScriptAlertPanelWithMessage:
+        @abstract Display a JavaScript alert panel
+        @param sender The WebView sending the delegate method.
+        @param message The message to display
+        @discussion Clients should visually indicate that this panel comes
+        from JavaScript. The panel should have a single OK button.
+        - (void)webView:(WebView *)sender runJavaScriptAlertPanelWithMessage:(NSString *)message;
+    */
+    HRESULT runJavaScriptAlertPanelWithMessage([in] IWebView* sender, [in] BSTR message);
+
+    /*!
+        @method webView:runJavaScriptConfirmPanelWithMessage:
+        @abstract Display a JavaScript confirm panel
+        @param sender The WebView sending the delegate method.
+        @param message The message to display
+        @result YES if the user hit OK, no if the user chose Cancel.
+        @discussion Clients should visually indicate that this panel comes
+        from JavaScript. The panel should have two buttons, e.g. "OK" and
+        "Cancel".
+        - (BOOL)webView:(WebView *)sender runJavaScriptConfirmPanelWithMessage:(NSString *)message;
+    */
+    HRESULT runJavaScriptConfirmPanelWithMessage([in] IWebView* sender, [in] BSTR message, [out, retval] BOOL* result);
+
+    /*!
+        @method webView:runJavaScriptTextInputPanelWithPrompt:defaultText:
+        @abstract Display a JavaScript text input panel
+        @param sender The WebView sending the delegate method.
+        @param message The message to display
+        @param defaultText The initial text for the text entry area.
+        @result The typed text if the user hit OK, otherwise nil.
+        @discussion Clients should visually indicate that this panel comes
+        from JavaScript. The panel should have two buttons, e.g. "OK" and
+        "Cancel", and an area to type text.
+        - (NSString *)webView:(WebView *)sender runJavaScriptTextInputPanelWithPrompt:(NSString *)prompt defaultText:(NSString *)defaultText;
+    */
+    HRESULT runJavaScriptTextInputPanelWithPrompt([in] IWebView* sender, [in] BSTR message, [in] BSTR defaultText, [out, retval] BSTR* result);
+
+    /*!
+        @method webView:runJavaScriptConfirmPanelWithMessage:initiatedByFrame:
+        @abstract Display a confirm panel by an "before unload" event handler.
+        @param sender The WebView sending the delegate method.
+        @param message The message to display.
+        @param frame The WebFrame whose JavaScript initiated this call.
+        @result YES if the user hit OK, NO if the user chose Cancel.
+        @discussion Clients should include a message in addition to the one
+        supplied by the web page that indicates. The panel should have 
+        two buttons, e.g. "OK" and "Cancel".
+        - (BOOL)webView:(WebView *)sender runBeforeUnloadConfirmPanelWithMessage:(NSString *)message initiatedByFrame:(WebFrame *)frame;
+    */
+    HRESULT runBeforeUnloadConfirmPanelWithMessage([in] IWebView* sender, [in] BSTR message, [in] IWebFrame* initiatedByFrame, [out, retval] BOOL* result);
+
+    /*!
+        @method webView:runOpenPanelForFileButtonWithResultListener:
+        @abstract Display a file open panel for a file input control.
+        @param sender The WebView sending the delegate method.
+        @param resultListener The object to call back with the results.
+        @discussion This method is passed a callback object instead of giving a return
+        value so that it can be handled with a sheet.
+        - (void)webView:(WebView *)sender runOpenPanelForFileButtonWithResultListener:(id<WebOpenPanelResultListener>)resultListener;
+    */
+    HRESULT runOpenPanelForFileButtonWithResultListener([in] IWebView* sender, [in] IWebOpenPanelResultListener* resultListener);
+
+    /*!
+        @method webView:mouseDidMoveOverElement:modifierFlags:
+        @abstract Update the window's feedback for mousing over links to reflect a new item the mouse is over
+        or new modifier flags.
+        @param sender The WebView sending the delegate method.
+        @param elementInformation Dictionary that describes the element that the mouse is over, or nil.
+        @param modifierFlags The modifier flags as in NSEvent.
+        - (void)webView:(WebView *)sender mouseDidMoveOverElement:(NSDictionary *)elementInformation modifierFlags:(WebNSUInt)modifierFlags;
+    */
+    HRESULT mouseDidMoveOverElement([in] IWebView* sender, [in] IPropertyBag* elementInformation, [in] UINT modifierFlags);
+
+    /*!
+        @method webView:contextMenuItemsForElement:defaultMenuItems:
+        @abstract Returns the menu items to display in an element's contextual menu.
+        @param sender The WebView sending the delegate method.
+        @param element A dictionary representation of the clicked element.
+        @param defaultMenuItems An array of default NSMenuItems to include in all contextual menus.
+        @result An array of NSMenuItems to include in the contextual menu.
+        - (NSArray *)webView:(WebView *)sender contextMenuItemsForElement:(NSDictionary *)element defaultMenuItems:(NSArray *)defaultMenuItems;
+    */
+    HRESULT contextMenuItemsForElement([in] IWebView* sender, [in] IPropertyBag* element, [in] OLE_HANDLE defaultItemsHMenu, [out, retval] OLE_HANDLE* resultHMenu);
+
+    /*!
+        @method webView:validateUserInterfaceItem:defaultValidation:
+        @abstract Controls UI validation
+        @param webView The WebView sending the delegate method
+        @param item The user interface item being validated
+        @pararm defaultValidation Whether or not the WebView thinks the item is valid
+        @discussion This method allows the UI delegate to control WebView's validation of user interface items.
+        See WebView.h to see the methods to that WebView can currently validate. See NSUserInterfaceValidations and
+        NSValidatedUserInterfaceItem for information about UI validation.
+        - (BOOL)webView:(WebView *)webView validateUserInterfaceItem:(id <NSValidatedUserInterfaceItem>)item defaultValidation:(BOOL)defaultValidation;
+    */
+    HRESULT validateUserInterfaceItem([in] IWebView* webView, [in] UINT itemCommandID, [in] BOOL defaultValidation, [out, retval] BOOL* isValid);
+
+    /*!
+        @method webView:shouldPerformAction:fromSender:
+        @abstract Controls actions
+        @param webView The WebView sending the delegate method
+        @param action The action being sent
+        @param sender The sender of the action
+        @discussion This method allows the UI delegate to control WebView's behavior when an action is being sent.
+        For example, if the action is copy:, the delegate can return YES to allow WebView to perform its default
+        copy behavior or return NO and perform copy: in some other way. See WebView.h to see the actions that
+        WebView can perform.
+        - (BOOL)webView:(WebView *)webView shouldPerformAction:(SEL)action fromSender:(id)sender;
+    */
+    HRESULT shouldPerformAction([in] IWebView* webView, [in] UINT itemCommandID, [in] UINT sender);
+
+    /*!
+        @method webView:dragDestinationActionMaskForDraggingInfo:
+        @abstract Controls behavior when dragging to a WebView
+        @param webView The WebView sending the delegate method
+        @param draggingInfo The dragging info of the drag
+        @discussion This method is called periodically as something is dragged over a WebView. The UI delegate can return a mask
+        indicating which drag destination actions can occur, WebDragDestinationActionAny to allow any kind of action or
+        WebDragDestinationActionNone to not accept the drag.
+        - (unsigned)webView:(WebView *)webView dragDestinationActionMaskForDraggingInfo:(id <NSDraggingInfo>)draggingInfo;
+    */
+    HRESULT dragDestinationActionMaskForDraggingInfo([in] IWebView* webView, [in] IDataObject* draggingInfo, [out, retval] WebDragDestinationAction* action);
+
+    /*!
+        @method webView:willPerformDragDestinationAction:forDraggingInfo:
+        @abstract Informs that WebView will perform a drag destination action
+        @param webView The WebView sending the delegate method
+        @param action The drag destination action
+        @param draggingInfo The dragging info of the drag
+        @discussion This method is called after the last call to webView:dragDestinationActionMaskForDraggingInfo: after something is dropped on a WebView.
+        This method informs the UI delegate of the drag destination action that WebView will perform.
+        - (void)webView:(WebView *)webView willPerformDragDestinationAction:(WebDragDestinationAction)action forDraggingInfo:(id <NSDraggingInfo>)draggingInfo;
+    */
+    HRESULT willPerformDragDestinationAction([in] IWebView* webView, [in] WebDragDestinationAction action, [in] IDataObject* draggingInfo);
+
+    /*!
+        @method webView:dragSourceActionMaskForPoint:
+        @abstract Controls behavior when dragging from a WebView
+        @param webView The WebView sending the delegate method
+        @param point The point where the drag started in the coordinates of the WebView
+        @discussion This method is called after the user has begun a drag from a WebView. The UI delegate can return a mask indicating
+        which drag source actions can occur, WebDragSourceActionAny to allow any kind of action or WebDragSourceActionNone to not begin a drag.
+        - (unsigned)webView:(WebView *)webView dragSourceActionMaskForPoint:(NSPoint)point;
+    */
+    HRESULT dragSourceActionMaskForPoint([in] IWebView* webView, [in] LPPOINT point, [out, retval] WebDragSourceAction* action);
+
+    /*!
+        @method webView:willPerformDragSourceAction:fromPoint:withPasteboard:
+        @abstract Informs that a drag a has begun from a WebView
+        @param webView The WebView sending the delegate method
+        @param action The drag source action
+        @param point The point where the drag started in the coordinates of the WebView
+        @param pasteboard The drag pasteboard
+        @discussion This method is called after webView:dragSourceActionMaskForPoint: is called after the user has begun a drag from a WebView.
+        This method informs the UI delegate of the drag source action that will be performed and gives the delegate an opportunity to modify
+        the contents of the dragging pasteboard.
+        - (void)webView:(WebView *)webView willPerformDragSourceAction:(WebDragSourceAction)action fromPoint:(NSPoint)point withPasteboard:(NSPasteboard *)pasteboard;
+    */
+    HRESULT willPerformDragSourceAction([in] IWebView* webView, [in] WebDragSourceAction action, [in] LPPOINT point, [in] IDataObject* pasteboard);
+
+    /*!
+        @method webView:contextMenuItemSelected:ForElement:
+        @abstract Perform the action associated with the selected item.
+        @param sender The WebView sending the delegate method.
+        @param item The menu item that was selected.
+        @param element A dictionary representation of the clicked element.
+    */
+    [local] HRESULT contextMenuItemSelected([in] IWebView* sender, [in] void* item, [in] IPropertyBag* element);
+
+    /*
+        @method hasCustomMenuImplementation:
+        @abstract Returns whether the application uses the following functions to create a custom menu impementation.
+    */
+    HRESULT hasCustomMenuImplementation([out, retval] BOOL* hasCustomMenus);
+    
+    /*
+        @method webView:trackCutsomPopupMenu
+        @abstract Adds custom draw data to the menu items and calls a custom trackPopupMenu.
+        @param sender The WebView sending the delegate method.
+        @param menu The menu that we want to pop up.
+        @param point The point associated with the context menu event in the coordinates of the WebView
+    */
+    HRESULT trackCustomPopupMenu([in] IWebView* sender, [in] OLE_HANDLE hMenu, [in] LPPOINT point);
+
+    /*
+        @method webView:measureCustomMenuItem
+        @abstract This is called when the WM_MEASUREITEM command is received to measure the custom menu items
+        @param sender The WebView sending the delegate method.
+        @param measureItem The LPMEASUREITEMSTRUCT associated with the item.
+    */
+    [local] HRESULT measureCustomMenuItem([in] IWebView* sender, [in] void* measureItem);
+
+    /*
+        @method webView:drawCustomMenuItem
+        @abstract This is called when the WM_DRAWITEM command is received to draw the custom menu item
+        @param sender The WebView sending the delegate method.
+        @param drawItem The LPDRAWITEMSTRUCT associated with the item.
+    */
+    [local] HRESULT drawCustomMenuItem([in] IWebView* sender, [in] void* drawItem);
+
+    /*
+        @method webView:addCustomMenuDrawingData
+        @abstract Add custom data to the menu that the delegate can use when asked to draw.
+        @param sender The WebView sending the delegate method.
+        @param menu The cutsom menu to clean up.
+        @discussion This method is called for submenus as well.
+    */
+    HRESULT addCustomMenuDrawingData([in] IWebView* sender, [in] OLE_HANDLE hMenu);
+
+    /*
+        @method webView:cleanUpCustomMenuDrawingData
+        @abstract Clean up any custom data added to the menu items
+        @param sender The WebView sending the delegate method.
+        @param menu The cutsom menu to clean up.
+    */
+    HRESULT cleanUpCustomMenuDrawingData([in] IWebView* sender, [in] OLE_HANDLE hMenu);
+
+    /*!
+        @method webView:canTakeFocus:
+        @abstract Informs whether focus can be transferred out of the WebView in the specified direction
+        @param sender The WebView sending the delegate method.
+        @param forward Whether focus is moving forward or backward.
+    */
+    HRESULT canTakeFocus([in] IWebView* sender, [in] BOOL forward, [out] BOOL* result);
+
+    /*!
+        @method webView:takeFocus:
+        @abstract Instructs the delegate to take focus out of the WebView
+        @param sender The WebView sending the delegate method.
+        @param forward Whether focus is moving forward or backward.
+    */
+    HRESULT takeFocus([in] IWebView* sender, [in] BOOL forward);
+
+    /// Undo related UI delegate methods --------------------------------------------------------------------------------
+
+    /*!
+        @method registerUndoWithTarget:
+        @abstract Registers an undo operation of a IWebUndoTarget on the undo/redo stack.
+        @param target The target that will be called back when the action is undone
+        @param actionName The name of the action - this will be passed back to the target when we need to undo the operation
+        @param actionArg An object that target used to save undo information
+    */
+    HRESULT registerUndoWithTarget([in] IWebUndoTarget* target, [in] BSTR actionName, [in] IUnknown* actionArg);
+
+    /*!
+        @method removeAllActionsWithTarget:
+        @abstract remove all the undo operations that are registered for the passed in target on the undo/redo stack.
+        @param target 
+    */
+    HRESULT removeAllActionsWithTarget([in] IWebUndoTarget* target);
+
+    /*!
+        @method setActionTitle:
+        @abstract Sets the name of the action for the current group of undo operations
+        @param actionName Name of the action
+    */
+    HRESULT setActionTitle([in] BSTR actionTitle);
+
+    /*!
+        @method undo:
+        @abstract Undo the last group of operations
+    */
+    HRESULT undo();
+
+    /*!
+        @method redo:
+        @abstract Redo the last group of operations
+    */
+    HRESULT redo();
+
+    /*!
+        @method canUndo:
+        @abstract Returns whether there's anything on the undo stack to be undone
+    */
+    HRESULT canUndo([out, retval] BOOL* result);
+
+    /*!
+        @method canRedo:
+        @abstract Returns whether there's anything on the redo stack to be redone
+    */
+    HRESULT canRedo([out, retval] BOOL* result);
+}
+
+/*!
+    @category WebUIDelegate2
+    @discussion A class that supplements the IWebUIDelegate interface
+*/
+[
+    object,
+    oleautomation,
+    uuid(C6FF73E1-304D-4129-A60C-66326C2578DB),
+    pointer_default(unique)
+]
+interface IWebUIDelegate2 : IWebUIDelegate
+{
+/*!
+    @method webView:printFrame:
+    @abstract Informs that a WebFrame needs to be printed
+    @param webView The WebView sending the delegate method
+    @param frame The WebFrame needing to be printed
+    @discussion This method is called when a script or user requests the page to be printed.
+    In this method the delegate can prepare the WebFrame to be printed.
+*/
+    HRESULT printFrame([in] IWebView* webView, [in] IWebFrame* frame);
+
+/*!
+    @method webView:ftpDirectoryTemplatePath
+    @abstract Returns the path to the FTP directory listing template document
+    @param webView The WebView sending the delegate method
+    @param path The path to the template document
+    @discussion This method is called when an FTP directory listing is viewed in a webView.  
+    In practice, all WebViews show the same template document data that was loaded for the very
+    first WebView that displayed a directory listing, so this will only be called once.
+*/
+    HRESULT ftpDirectoryTemplatePath([in] IWebView* webView, [out, retval] BSTR* path);
+
+/*!
+    @method webViewHeaderHeight:
+    @param webView The WebView sending the delegate method
+    @abstract Reserve a height for the printed page header.
+    @result The height to reserve for the printed page header, return 0.0 to not reserve any space for a header.
+    @discussion The height returned will be used to calculate the rect passed to webView:drawHeaderInRect:.
+
+    - (float)webViewHeaderHeight:(WebView *)sender;
+*/
+    HRESULT webViewHeaderHeight([in] IWebView* webView, [out, retval] float* result);
+
+/*!
+    @method webViewFooterHeight:
+    @param webView The WebView sending the delegate method
+    @abstract Reserve a height for the printed page footer.
+    @result The height to reserve for the printed page footer, return 0.0 to not reserve any space for a footer.
+    @discussion The height returned will be used to calculate the rect passed to webView:drawFooterInRect:.
+
+    - (float)webViewFooterHeight:(WebView *)sender;
+*/
+    HRESULT webViewFooterHeight([in] IWebView* webView, [out, retval] float* result);
+
+/*!
+    @method webView:drawHeaderInRect:
+    @param webView The WebView sending the delegate method
+    @param rect The NSRect reserved for the header of the page
+    @abstract The delegate should draw a header for the sender in the supplied rect.
+
+    - (void)webView:(WebView *)sender drawHeaderInRect:(NSRect)rect;
+*/
+    HRESULT drawHeaderInRect([in] IWebView* webView, [in] RECT* rect, [in] OLE_HANDLE drawingContext);
+
+/*!
+    @method webView:drawFooterInRect:
+    @param webView The WebView sending the delegate method
+    @param rect The NSRect reserved for the footer of the page
+    @abstract The delegate should draw a footer for the sender in the supplied rect.
+
+    - (void)webView:(WebView *)sender drawFooterInRect:(NSRect)rect;
+*/
+    HRESULT drawFooterInRect([in] IWebView* webView, [in] RECT* rect, [in] OLE_HANDLE drawingContext, [in] UINT pageIndex, [in] UINT pageCount);
+
+    HRESULT webViewPrintingMarginRect([in] IWebView* webView, [out, retval] RECT* rect);
+}