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 // A callback to notify the delegate that |source|'s loading state has 67 // changed. 68 virtual void OnLoadingStateChanged(content::WebContents* source) {} 69 70 // A callback to notify the delegate that a web dialog has been shown. 71 // |webui| is the WebUI with which the dialog is associated. 72 // |render_view_host| is the RenderViewHost for the shown dialog. 73 virtual void OnDialogShown(content::WebUI* webui, 74 content::RenderViewHost* render_view_host) {} 75 76 // A callback to notify the delegate that the dialog closed. 77 // IMPORTANT: Implementations should delete |this| here (unless they've 78 // arranged for the delegate to be deleted in some other way, e.g. by 79 // registering it as a message handler in the WebUI object). 80 virtual void OnDialogClosed(const std::string& json_retval) = 0; 81 82 // A callback to notify the delegate that the dialog is being closed in 83 // response to a "DialogClose" message from WebUI. 84 virtual void OnDialogCloseFromWebUI(const std::string& json_retval); 85 86 // A callback to notify the delegate that the contents have gone 87 // away. Only relevant if your dialog hosts code that calls 88 // windows.close() and you've allowed that. If the output parameter 89 // is set to true, then the dialog is closed. The default is false. 90 virtual void OnCloseContents(content::WebContents* source, 91 bool* out_close_dialog) = 0; 92 93 // A callback to allow the delegate to dictate that the window should not 94 // have a title bar. This is useful when presenting branded interfaces. 95 virtual bool ShouldShowDialogTitle() const = 0; 96 97 // A callback to allow the delegate to inhibit context menu or show 98 // customized menu. 99 // Returns true iff you do NOT want the standard context menu to be 100 // shown (because you want to handle it yourself). 101 virtual bool HandleContextMenu(const content::ContextMenuParams& params); 102 103 // A callback to allow the delegate to open a new URL inside |source|. 104 // On return |out_new_contents| should contain the WebContents the URL 105 // is opened in. Return false to use the default handler. 106 virtual bool HandleOpenURLFromTab(content::WebContents* source, 107 const content::OpenURLParams& params, 108 content::WebContents** out_new_contents); 109 110 // A callback to create a new tab with |new_contents|. |source| is the 111 // WebContent where the operation originated. |disposition| controls how the 112 // new tab should be opened. |initial_pos| is the position of the window if a 113 // new window is created. |user_gesture| is true if the operation was started 114 // by a user gesture. Return false to use the default handler. 115 virtual bool HandleAddNewContents(content::WebContents* source, 116 content::WebContents* new_contents, 117 WindowOpenDisposition disposition, 118 const gfx::Rect& initial_pos, 119 bool user_gesture); 120 121 // Stores the dialog bounds. 122 virtual void StoreDialogSize(const gfx::Size& dialog_size) {} 123 124 virtual ~WebDialogDelegate() {} 125 }; 126 127 } // namespace ui 128 129 #endif // UI_WEB_DIALOGS_WEB_DIALOG_DELEGATE_H_ 130