blob: 9e26f855dfa0869a5d65c3ea0ed03d1bb5883016 [file] [log] [blame]
[email protected]7ade2732011-02-10 00:13:581// Copyright (c) 2011 The Chromium Authors. All rights reserved.
[email protected]4acc19a62009-04-03 03:05:112// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
[email protected]265a1492011-02-27 05:58:075#ifndef CHROME_BROWSER_UI_WEBUI_HTML_DIALOG_UI_H_
6#define CHROME_BROWSER_UI_WEBUI_HTML_DIALOG_UI_H_
[email protected]32b76ef2010-07-26 23:08:247#pragma once
[email protected]4acc19a62009-04-03 03:05:118
[email protected]038d52e12009-10-14 16:53:419#include <string>
[email protected]2bc2de62009-06-29 23:37:4210#include <vector>
11
[email protected]bdae5c12011-08-05 21:49:0612#include "base/string16.h"
[email protected]4d241a52011-06-06 15:32:2713#include "chrome/browser/ui/webui/chrome_web_ui.h"
[email protected]15a5fa52011-03-10 20:16:0414#include "content/common/property_bag.h"
[email protected]4acc19a62009-04-03 03:05:1115#include "googleurl/src/gurl.h"
16
[email protected]5c238752009-06-13 10:29:0717namespace gfx {
18class Size;
19}
20
[email protected]9a80e222010-11-22 11:27:2621struct ContextMenuParams;
22
[email protected]f3a1c642011-07-12 19:15:0323namespace base {
24class ListValue;
25}
26
[email protected]4acc19a62009-04-03 03:05:1127// Implement this class to receive notifications.
28class HtmlDialogUIDelegate {
29 public:
[email protected]038d52e12009-10-14 16:53:4130 // Returns true if the contents needs to be run in a modal dialog.
31 virtual bool IsDialogModal() const = 0;
[email protected]4acc19a62009-04-03 03:05:1132
[email protected]038d52e12009-10-14 16:53:4133 // Returns the title of the dialog.
[email protected]bdae5c12011-08-05 21:49:0634 virtual string16 GetDialogTitle() const = 0;
[email protected]4acc19a62009-04-03 03:05:1135
[email protected]038d52e12009-10-14 16:53:4136 // Get the HTML file path for the content to load in the dialog.
37 virtual GURL GetDialogContentURL() const = 0;
[email protected]4acc19a62009-04-03 03:05:1138
[email protected]36e12172011-02-08 23:46:0239 // Get WebUIMessageHandler objects to handle messages from the HTML/JS page.
[email protected]038d52e12009-10-14 16:53:4140 // The handlers are used to send and receive messages from the page while it
[email protected]d21cdb12011-02-10 01:22:3241 // is still open. Ownership of each handler is taken over by the WebUI
[email protected]038d52e12009-10-14 16:53:4142 // hosting the page.
[email protected]36e12172011-02-08 23:46:0243 virtual void GetWebUIMessageHandlers(
44 std::vector<WebUIMessageHandler*>* handlers) const = 0;
[email protected]2bc2de62009-06-29 23:37:4245
[email protected]038d52e12009-10-14 16:53:4146 // Get the size of the dialog.
47 virtual void GetDialogSize(gfx::Size* size) const = 0;
[email protected]4acc19a62009-04-03 03:05:1148
[email protected]038d52e12009-10-14 16:53:4149 // Gets the JSON string input to use when showing the dialog.
50 virtual std::string GetDialogArgs() const = 0;
[email protected]4acc19a62009-04-03 03:05:1151
[email protected]038d52e12009-10-14 16:53:4152 // A callback to notify the delegate that the dialog closed.
[email protected]0a02984032011-09-02 20:35:4653 // IMPORTANT: Implementations should delete |this| here (unless they've
54 // arranged for the delegate to be deleted in some other way, e.g. by
55 // registering it as a message handler in the WebUI object).
[email protected]038d52e12009-10-14 16:53:4156 virtual void OnDialogClosed(const std::string& json_retval) = 0;
[email protected]4acc19a62009-04-03 03:05:1157
[email protected]73852b8f2010-05-14 00:38:1258 // A callback to notify the delegate that the contents have gone
59 // away. Only relevant if your dialog hosts code that calls
60 // windows.close() and you've allowed that. If the output parameter
61 // is set to true, then the dialog is closed. The default is false.
62 virtual void OnCloseContents(TabContents* source, bool* out_close_dialog) = 0;
63
[email protected]ea161da2010-11-02 21:57:3564 // A callback to allow the delegate to dictate that the window should not
65 // have a title bar. This is useful when presenting branded interfaces.
66 virtual bool ShouldShowDialogTitle() const = 0;
67
[email protected]9a80e222010-11-22 11:27:2668 // A callback to allow the delegate to inhibit context menu or show
69 // customized menu.
70 virtual bool HandleContextMenu(const ContextMenuParams& params);
71
[email protected]038d52e12009-10-14 16:53:4172 protected:
[email protected]1bc6c552010-07-30 20:39:3173 virtual ~HtmlDialogUIDelegate() {}
[email protected]4acc19a62009-04-03 03:05:1174};
75
76// Displays file URL contents inside a modal HTML dialog.
77//
[email protected]d21cdb12011-02-10 01:22:3278// This application really should not use TabContents + WebUI. It should instead
[email protected]4acc19a62009-04-03 03:05:1179// just embed a RenderView in a dialog and be done with it.
80//
[email protected]d21cdb12011-02-10 01:22:3281// Before loading a URL corresponding to this WebUI, the caller should set its
82// delegate as a property on the TabContents. This WebUI will pick it up from
[email protected]4acc19a62009-04-03 03:05:1183// there and call it back. This is a bit of a hack to allow the dialog to pass
[email protected]e0112912011-02-02 22:54:3584// its delegate to the Web UI without having nasty accessors on the TabContents.
[email protected]4acc19a62009-04-03 03:05:1185// The correct design using RVH directly would avoid all of this.
[email protected]4d241a52011-06-06 15:32:2786class HtmlDialogUI : public ChromeWebUI {
[email protected]4acc19a62009-04-03 03:05:1187 public:
88 struct HtmlDialogParams {
89 // The URL for the content that will be loaded in the dialog.
90 GURL url;
91 // Width of the dialog.
92 int width;
93 // Height of the dialog.
94 int height;
95 // The JSON input to pass to the dialog when showing it.
96 std::string json_input;
97 };
98
[email protected]57c6a652009-05-04 07:58:3499 // When created, the property should already be set on the TabContents.
[email protected]038d52e12009-10-14 16:53:41100 explicit HtmlDialogUI(TabContents* tab_contents);
[email protected]4acc19a62009-04-03 03:05:11101 virtual ~HtmlDialogUI();
102
[email protected]8befa1a2011-09-21 02:03:38103 // Close the dialog, passing the specified arguments to the close handler.
104 void CloseDialog(const base::ListValue* args);
105
[email protected]4acc19a62009-04-03 03:05:11106 // Returns the PropertyBag accessor object used to write the delegate pointer
[email protected]57c6a652009-05-04 07:58:34107 // into the TabContents (see class-level comment above).
[email protected]4acc19a62009-04-03 03:05:11108 static PropertyAccessor<HtmlDialogUIDelegate*>& GetPropertyAccessor();
109
110 private:
[email protected]d21cdb12011-02-10 01:22:32111 // WebUI
[email protected]3abbed002011-08-01 16:02:20112 virtual void RenderViewCreated(RenderViewHost* render_view_host) OVERRIDE;
[email protected]4acc19a62009-04-03 03:05:11113
114 // JS message handler.
[email protected]f3a1c642011-07-12 19:15:03115 void OnDialogClosed(const base::ListValue* args);
[email protected]4acc19a62009-04-03 03:05:11116
117 DISALLOW_COPY_AND_ASSIGN(HtmlDialogUI);
118};
119
[email protected]73852b8f2010-05-14 00:38:12120// Displays external URL contents inside a modal HTML dialog.
121//
122// Intended to be the place to collect the settings and lockdowns
123// necessary for running external UI conponents securely (e.g., the
124// cloud print dialog).
125class ExternalHtmlDialogUI : public HtmlDialogUI {
126 public:
127 explicit ExternalHtmlDialogUI(TabContents* tab_contents);
128 virtual ~ExternalHtmlDialogUI();
129};
130
[email protected]265a1492011-02-27 05:58:07131#endif // CHROME_BROWSER_UI_WEBUI_HTML_DIALOG_UI_H_