1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef UI_WEB_DIALOGS_WEB_DIALOG_DELEGATE_H_ 6 #define UI_WEB_DIALOGS_WEB_DIALOG_DELEGATE_H_ 7 8 #include <string> 9 #include <vector> 10 11 #include "base/strings/string16.h" 12 #include "ui/base/ui_base_types.h" 13 #include "ui/base/window_open_disposition.h" 14 #include "ui/web_dialogs/web_dialogs_export.h" 15 16 class GURL; 17 18 namespace content { 19 class RenderViewHost; 20 class WebContents; 21 class WebUI; 22 class WebUIMessageHandler; 23 struct ContextMenuParams; 24 struct OpenURLParams; 25 } 26 27 namespace gfx { 28 class Rect; 29 class Size; 30 } 31 32 namespace ui { 33 34 // Implement this class to receive notifications. 35 class WEB_DIALOGS_EXPORT WebDialogDelegate { 36 public: 37 // Returns true if the contents needs to be run in a modal dialog. 38 virtual ModalType GetDialogModalType() const = 0; 39 40 // Returns the title of the dialog. 41 virtual base::string16 GetDialogTitle() const = 0; 42 43 // Returns the dialog's name identifier. Used to identify this dialog for 44 // state restoration. 45 virtual std::string GetDialogName() const; 46 47 // Get the HTML file path for the content to load in the dialog. 48 virtual GURL GetDialogContentURL() const = 0; 49 50 // Get WebUIMessageHandler objects to handle messages from the HTML/JS page. 51 // The handlers are used to send and receive messages from the page while it 52 // is still open. Ownership of each handler is taken over by the WebUI 53 // hosting the page. 54 virtual void GetWebUIMessageHandlers( 55 std::vector<content::WebUIMessageHandler*>* handlers) const = 0; 56 57 // Get the size of the dialog. 58 virtual void GetDialogSize(gfx::Size* size) const = 0; 59 60 // Get the size of the dialog. 61 virtual void GetMinimumDialogSize(gfx::Size* size) const; 62 63 // Gets the JSON string input to use when showing the dialog. 64 virtual std::string GetDialogArgs() const = 0; 65 66 // Returns true to signal that the dialog can be closed. Specialized 67 // WebDialogDelegate subclasses can override this default behavior to allow 68 // the close to be blocked until the user corrects mistakes, accepts an 69 // agreement, etc. 70 virtual bool CanCloseDialog() const; 71 72 // A callback to notify the delegate that |source|'s loading state has 73 // changed. OnLoadingStateChanged(content::WebContents * source)74 virtual void OnLoadingStateChanged(content::WebContents* source) {} 75 76 // A callback to notify the delegate that a web dialog has been shown. 77 // |webui| is the WebUI with which the dialog is associated. 78 // |render_view_host| is the RenderViewHost for the shown dialog. OnDialogShown(content::WebUI * webui,content::RenderViewHost * render_view_host)79 virtual void OnDialogShown(content::WebUI* webui, 80 content::RenderViewHost* render_view_host) {} 81 82 // A callback to notify the delegate that the dialog closed. 83 // IMPORTANT: Implementations should delete |this| here (unless they've 84 // arranged for the delegate to be deleted in some other way, e.g. by 85 // registering it as a message handler in the WebUI object). 86 virtual void OnDialogClosed(const std::string& json_retval) = 0; 87 88 // A callback to notify the delegate that the dialog is being closed in 89 // response to a "DialogClose" message from WebUI. 90 virtual void OnDialogCloseFromWebUI(const std::string& json_retval); 91 92 // A callback to notify the delegate that the contents have gone 93 // away. Only relevant if your dialog hosts code that calls 94 // windows.close() and you've allowed that. If the output parameter 95 // is set to true, then the dialog is closed. The default is false. 96 virtual void OnCloseContents(content::WebContents* source, 97 bool* out_close_dialog) = 0; 98 99 // A callback to allow the delegate to dictate that the window should not 100 // have a title bar. This is useful when presenting branded interfaces. 101 virtual bool ShouldShowDialogTitle() const = 0; 102 103 // A callback to allow the delegate to inhibit context menu or show 104 // customized menu. 105 // Returns true iff you do NOT want the standard context menu to be 106 // shown (because you want to handle it yourself). 107 virtual bool HandleContextMenu(const content::ContextMenuParams& params); 108 109 // A callback to allow the delegate to open a new URL inside |source|. 110 // On return |out_new_contents| should contain the WebContents the URL 111 // is opened in. Return false to use the default handler. 112 virtual bool HandleOpenURLFromTab(content::WebContents* source, 113 const content::OpenURLParams& params, 114 content::WebContents** out_new_contents); 115 116 // A callback to create a new tab with |new_contents|. |source| is the 117 // WebContent where the operation originated. |disposition| controls how the 118 // new tab should be opened. |initial_pos| is the position of the window if a 119 // new window is created. |user_gesture| is true if the operation was started 120 // by a user gesture. Return false to use the default handler. 121 virtual bool HandleAddNewContents(content::WebContents* source, 122 content::WebContents* new_contents, 123 WindowOpenDisposition disposition, 124 const gfx::Rect& initial_pos, 125 bool user_gesture); 126 127 // Stores the dialog bounds. StoreDialogSize(const gfx::Size & dialog_size)128 virtual void StoreDialogSize(const gfx::Size& dialog_size) {} 129 ~WebDialogDelegate()130 virtual ~WebDialogDelegate() {} 131 }; 132 133 } // namespace ui 134 135 #endif // UI_WEB_DIALOGS_WEB_DIALOG_DELEGATE_H_ 136