[SyncFS] Build indexes from FileTracker entries on disk.
[chromium-blink-merge.git] / ui / views / controls / webview / web_dialog_view.h
blob2e69ad314bad7fdef8ac28cdca5f1a9a1c560312
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.
5 #ifndef UI_VIEWS_CONTROLS_WEBVIEW_WEB_DIALOG_VIEW_H_
6 #define UI_VIEWS_CONTROLS_WEBVIEW_WEB_DIALOG_VIEW_H_
8 #include <string>
9 #include <vector>
11 #include "base/gtest_prod_util.h"
12 #include "base/memory/scoped_ptr.h"
13 #include "ui/gfx/size.h"
14 #include "ui/views/controls/webview/webview_export.h"
15 #include "ui/views/widget/widget_delegate.h"
16 #include "ui/views/window/client_view.h"
17 #include "ui/web_dialogs/web_dialog_delegate.h"
18 #include "ui/web_dialogs/web_dialog_web_contents_delegate.h"
20 namespace content {
21 class BrowserContext;
24 namespace views {
25 class WebView;
27 ////////////////////////////////////////////////////////////////////////////////
29 // WebDialogView is a view used to display an web dialog to the user. The
30 // content of the dialogs is determined by the delegate
31 // (ui::WebDialogDelegate), but is basically a file URL along with a
32 // JSON input string. The HTML is supposed to show a UI to the user and is
33 // expected to send back a JSON file as a return value.
35 ////////////////////////////////////////////////////////////////////////////////
37 // TODO(akalin): Make WebDialogView contain an WebDialogWebContentsDelegate
38 // instead of inheriting from it to avoid violating the "no multiple
39 // inheritance" rule.
40 class WEBVIEW_EXPORT WebDialogView : public views::ClientView,
41 public ui::WebDialogWebContentsDelegate,
42 public ui::WebDialogDelegate,
43 public views::WidgetDelegate {
44 public:
45 // |handler| must not be NULL and this class takes the ownership.
46 WebDialogView(content::BrowserContext* context,
47 ui::WebDialogDelegate* delegate,
48 WebContentsHandler* handler);
49 virtual ~WebDialogView();
51 // For testing.
52 content::WebContents* web_contents();
54 // Overridden from views::ClientView:
55 virtual gfx::Size GetPreferredSize() const OVERRIDE;
56 virtual gfx::Size GetMinimumSize() const OVERRIDE;
57 virtual bool AcceleratorPressed(const ui::Accelerator& accelerator)
58 OVERRIDE;
59 virtual void ViewHierarchyChanged(
60 const ViewHierarchyChangedDetails& details) OVERRIDE;
61 virtual bool CanClose() OVERRIDE;
63 // Overridden from views::WidgetDelegate:
64 virtual bool CanResize() const OVERRIDE;
65 virtual ui::ModalType GetModalType() const OVERRIDE;
66 virtual base::string16 GetWindowTitle() const OVERRIDE;
67 virtual std::string GetWindowName() const OVERRIDE;
68 virtual void WindowClosing() OVERRIDE;
69 virtual views::View* GetContentsView() OVERRIDE;
70 virtual ClientView* CreateClientView(views::Widget* widget) OVERRIDE;
71 virtual views::View* GetInitiallyFocusedView() OVERRIDE;
72 virtual bool ShouldShowWindowTitle() const OVERRIDE;
73 virtual views::Widget* GetWidget() OVERRIDE;
74 virtual const views::Widget* GetWidget() const OVERRIDE;
76 // Overridden from ui::WebDialogDelegate:
77 virtual ui::ModalType GetDialogModalType() const OVERRIDE;
78 virtual base::string16 GetDialogTitle() const OVERRIDE;
79 virtual GURL GetDialogContentURL() const OVERRIDE;
80 virtual void GetWebUIMessageHandlers(
81 std::vector<content::WebUIMessageHandler*>* handlers) const OVERRIDE;
82 virtual void GetDialogSize(gfx::Size* size) const OVERRIDE;
83 virtual void GetMinimumDialogSize(gfx::Size* size) const OVERRIDE;
84 virtual std::string GetDialogArgs() const OVERRIDE;
85 virtual void OnDialogShown(
86 content::WebUI* webui,
87 content::RenderViewHost* render_view_host) OVERRIDE;
88 virtual void OnDialogClosed(const std::string& json_retval) OVERRIDE;
89 virtual void OnDialogCloseFromWebUI(
90 const std::string& json_retval) OVERRIDE;
91 virtual void OnCloseContents(content::WebContents* source,
92 bool* out_close_dialog) OVERRIDE;
93 virtual bool ShouldShowDialogTitle() const OVERRIDE;
94 virtual bool HandleContextMenu(
95 const content::ContextMenuParams& params) OVERRIDE;
97 // Overridden from content::WebContentsDelegate:
98 virtual void MoveContents(content::WebContents* source,
99 const gfx::Rect& pos) OVERRIDE;
100 virtual void HandleKeyboardEvent(
101 content::WebContents* source,
102 const content::NativeWebKeyboardEvent& event) OVERRIDE;
103 virtual void CloseContents(content::WebContents* source) OVERRIDE;
104 virtual content::WebContents* OpenURLFromTab(
105 content::WebContents* source,
106 const content::OpenURLParams& params) OVERRIDE;
107 virtual void AddNewContents(content::WebContents* source,
108 content::WebContents* new_contents,
109 WindowOpenDisposition disposition,
110 const gfx::Rect& initial_pos,
111 bool user_gesture,
112 bool* was_blocked) OVERRIDE;
113 virtual void LoadingStateChanged(content::WebContents* source,
114 bool to_different_document) OVERRIDE;
115 virtual void BeforeUnloadFired(content::WebContents* tab,
116 bool proceed,
117 bool* proceed_to_fire_unload) OVERRIDE;
119 private:
120 FRIEND_TEST_ALL_PREFIXES(WebDialogBrowserTest, WebContentRendered);
122 // Initializes the contents of the dialog.
123 void InitDialog();
125 // This view is a delegate to the HTML content since it needs to get notified
126 // about when the dialog is closing. For all other actions (besides dialog
127 // closing) we delegate to the creator of this view, which we keep track of
128 // using this variable.
129 ui::WebDialogDelegate* delegate_;
131 views::WebView* web_view_;
133 // Whether user is attempting to close the dialog and we are processing
134 // beforeunload event.
135 bool is_attempting_close_dialog_;
137 // Whether beforeunload event has been fired and we have finished processing
138 // beforeunload event.
139 bool before_unload_fired_;
141 // Whether the dialog is closed from WebUI in response to a "dialogClose"
142 // message.
143 bool closed_via_webui_;
145 // A json string returned to WebUI from a "dialogClose" message.
146 std::string dialog_close_retval_;
148 // Whether CloseContents() has been called.
149 bool close_contents_called_;
151 DISALLOW_COPY_AND_ASSIGN(WebDialogView);
154 } // namespace views
156 #endif // UI_VIEWS_CONTROLS_WEBVIEW_WEB_DIALOG_VIEW_H_