blob: 104b5f3702c67d7648faeff3bf72a2644f20c25a [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]4acc19a62009-04-03 03:05:1114#include "googleurl/src/gurl.h"
[email protected]ef1c7df2011-12-06 13:49:4915#include "ui/gfx/rect.h"
[email protected]4acc19a62009-04-03 03:05:1116
[email protected]9a80e222010-11-22 11:27:2617struct ContextMenuParams;
18
[email protected]f3a1c642011-07-12 19:15:0319namespace base {
20class ListValue;
[email protected]45644f62011-11-23 00:58:2321template<class T> class PropertyAccessor;
22}
23
[email protected]a81343d232011-12-27 07:39:2024namespace content {
25class WebContents;
26}
27
[email protected]45644f62011-11-23 00:58:2328namespace gfx {
29class Size;
[email protected]f3a1c642011-07-12 19:15:0330}
31
[email protected]4acc19a62009-04-03 03:05:1132// Implement this class to receive notifications.
33class HtmlDialogUIDelegate {
34 public:
[email protected]038d52e12009-10-14 16:53:4135 // Returns true if the contents needs to be run in a modal dialog.
36 virtual bool IsDialogModal() const = 0;
[email protected]4acc19a62009-04-03 03:05:1137
[email protected]038d52e12009-10-14 16:53:4138 // Returns the title of the dialog.
[email protected]bdae5c12011-08-05 21:49:0639 virtual string16 GetDialogTitle() const = 0;
[email protected]4acc19a62009-04-03 03:05:1140
[email protected]038d52e12009-10-14 16:53:4141 // Get the HTML file path for the content to load in the dialog.
42 virtual GURL GetDialogContentURL() const = 0;
[email protected]4acc19a62009-04-03 03:05:1143
[email protected]36e12172011-02-08 23:46:0244 // Get WebUIMessageHandler objects to handle messages from the HTML/JS page.
[email protected]038d52e12009-10-14 16:53:4145 // The handlers are used to send and receive messages from the page while it
[email protected]d21cdb12011-02-10 01:22:3246 // is still open. Ownership of each handler is taken over by the WebUI
[email protected]038d52e12009-10-14 16:53:4147 // hosting the page.
[email protected]36e12172011-02-08 23:46:0248 virtual void GetWebUIMessageHandlers(
49 std::vector<WebUIMessageHandler*>* handlers) const = 0;
[email protected]2bc2de62009-06-29 23:37:4250
[email protected]038d52e12009-10-14 16:53:4151 // Get the size of the dialog.
52 virtual void GetDialogSize(gfx::Size* size) const = 0;
[email protected]4acc19a62009-04-03 03:05:1153
[email protected]038d52e12009-10-14 16:53:4154 // Gets the JSON string input to use when showing the dialog.
55 virtual std::string GetDialogArgs() const = 0;
[email protected]4acc19a62009-04-03 03:05:1156
[email protected]038d52e12009-10-14 16:53:4157 // A callback to notify the delegate that the dialog closed.
[email protected]0a02984032011-09-02 20:35:4658 // IMPORTANT: Implementations should delete |this| here (unless they've
59 // arranged for the delegate to be deleted in some other way, e.g. by
60 // registering it as a message handler in the WebUI object).
[email protected]038d52e12009-10-14 16:53:4161 virtual void OnDialogClosed(const std::string& json_retval) = 0;
[email protected]4acc19a62009-04-03 03:05:1162
[email protected]73852b8f2010-05-14 00:38:1263 // A callback to notify the delegate that the contents have gone
64 // away. Only relevant if your dialog hosts code that calls
65 // windows.close() and you've allowed that. If the output parameter
66 // is set to true, then the dialog is closed. The default is false.
[email protected]a81343d232011-12-27 07:39:2067 virtual void OnCloseContents(content::WebContents* source,
68 bool* out_close_dialog) = 0;
[email protected]73852b8f2010-05-14 00:38:1269
[email protected]ea161da2010-11-02 21:57:3570 // A callback to allow the delegate to dictate that the window should not
71 // have a title bar. This is useful when presenting branded interfaces.
72 virtual bool ShouldShowDialogTitle() const = 0;
73
[email protected]9a80e222010-11-22 11:27:2674 // A callback to allow the delegate to inhibit context menu or show
75 // customized menu.
[email protected]eb929d62011-12-23 21:58:2676 // Returns true iff you do NOT want the standard context menu to be
77 // shown (because you want to handle it yourself).
[email protected]9a80e222010-11-22 11:27:2678 virtual bool HandleContextMenu(const ContextMenuParams& params);
79
[email protected]ef1c7df2011-12-06 13:49:4980 // Stores the dialog bounds.
81 virtual void StoreDialogSize(const gfx::Rect dialog_bounds) {}
82
[email protected]038d52e12009-10-14 16:53:4183 protected:
[email protected]1bc6c552010-07-30 20:39:3184 virtual ~HtmlDialogUIDelegate() {}
[email protected]4acc19a62009-04-03 03:05:1185};
86
87// Displays file URL contents inside a modal HTML dialog.
88//
[email protected]0ec4898e2011-12-30 21:09:2489// This application really should not use WebContents + WebUI. It should instead
[email protected]4acc19a62009-04-03 03:05:1190// just embed a RenderView in a dialog and be done with it.
91//
[email protected]d21cdb12011-02-10 01:22:3292// Before loading a URL corresponding to this WebUI, the caller should set its
[email protected]0ec4898e2011-12-30 21:09:2493// delegate as a property on the WebContents. This WebUI will pick it up from
[email protected]4acc19a62009-04-03 03:05:1194// there and call it back. This is a bit of a hack to allow the dialog to pass
[email protected]0ec4898e2011-12-30 21:09:2495// its delegate to the Web UI without having nasty accessors on the WebContents.
[email protected]4acc19a62009-04-03 03:05:1196// The correct design using RVH directly would avoid all of this.
[email protected]4d241a52011-06-06 15:32:2797class HtmlDialogUI : public ChromeWebUI {
[email protected]4acc19a62009-04-03 03:05:1198 public:
99 struct HtmlDialogParams {
100 // The URL for the content that will be loaded in the dialog.
101 GURL url;
102 // Width of the dialog.
103 int width;
104 // Height of the dialog.
105 int height;
106 // The JSON input to pass to the dialog when showing it.
107 std::string json_input;
108 };
109
[email protected]0ec4898e2011-12-30 21:09:24110 // When created, the property should already be set on the WebContents.
111 explicit HtmlDialogUI(content::WebContents* web_contents);
[email protected]4acc19a62009-04-03 03:05:11112 virtual ~HtmlDialogUI();
113
[email protected]8befa1a2011-09-21 02:03:38114 // Close the dialog, passing the specified arguments to the close handler.
115 void CloseDialog(const base::ListValue* args);
116
[email protected]4acc19a62009-04-03 03:05:11117 // Returns the PropertyBag accessor object used to write the delegate pointer
[email protected]0ec4898e2011-12-30 21:09:24118 // into the WebContents (see class-level comment above).
[email protected]45644f62011-11-23 00:58:23119 static base::PropertyAccessor<HtmlDialogUIDelegate*>& GetPropertyAccessor();
[email protected]4acc19a62009-04-03 03:05:11120
121 private:
[email protected]d21cdb12011-02-10 01:22:32122 // WebUI
[email protected]3abbed002011-08-01 16:02:20123 virtual void RenderViewCreated(RenderViewHost* render_view_host) OVERRIDE;
[email protected]4acc19a62009-04-03 03:05:11124
125 // JS message handler.
[email protected]f3a1c642011-07-12 19:15:03126 void OnDialogClosed(const base::ListValue* args);
[email protected]4acc19a62009-04-03 03:05:11127
128 DISALLOW_COPY_AND_ASSIGN(HtmlDialogUI);
129};
130
[email protected]73852b8f2010-05-14 00:38:12131// Displays external URL contents inside a modal HTML dialog.
132//
133// Intended to be the place to collect the settings and lockdowns
[email protected]78637b22011-12-02 20:51:52134// necessary for running external UI components securely (e.g., the
[email protected]73852b8f2010-05-14 00:38:12135// cloud print dialog).
136class ExternalHtmlDialogUI : public HtmlDialogUI {
137 public:
[email protected]0ec4898e2011-12-30 21:09:24138 explicit ExternalHtmlDialogUI(content::WebContents* web_contents);
[email protected]73852b8f2010-05-14 00:38:12139 virtual ~ExternalHtmlDialogUI();
140};
141
[email protected]265a1492011-02-27 05:58:07142#endif // CHROME_BROWSER_UI_WEBUI_HTML_DIALOG_UI_H_