| // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef CHROME_BROWSER_UI_WEBUI_CONSTRAINED_WEB_DIALOG_UI_H_ |
| #define CHROME_BROWSER_UI_WEBUI_CONSTRAINED_WEB_DIALOG_UI_H_ |
| |
| #include <memory> |
| |
| #include "base/compiler_specific.h" |
| #include "base/macros.h" |
| #include "content/public/browser/web_ui_controller.h" |
| #include "ui/gfx/native_widget_types.h" |
| |
| namespace gfx { |
| class Size; |
| } |
| |
| namespace content { |
| class BrowserContext; |
| class WebContents; |
| } |
| |
| namespace ui { |
| class WebDialogDelegate; |
| } |
| |
| class ConstrainedWebDialogDelegate { |
| public: |
| virtual const ui::WebDialogDelegate* GetWebDialogDelegate() const = 0; |
| virtual ui::WebDialogDelegate* GetWebDialogDelegate() = 0; |
| |
| // Called when the dialog is being closed in response to a "dialogClose" |
| // message from WebUI. |
| virtual void OnDialogCloseFromWebUI() = 0; |
| |
| // If called, the dialog will release the ownership of its WebContents. |
| // The dialog will continue to use it until it is destroyed. |
| virtual std::unique_ptr<content::WebContents> ReleaseWebContents() = 0; |
| |
| // Returns the WebContents owned by the constrained window. |
| virtual content::WebContents* GetWebContents() = 0; |
| |
| // Returns the native type used to display the dialog. |
| virtual gfx::NativeWindow GetNativeDialog() = 0; |
| |
| // Returns the minimum size for the dialog. |
| virtual gfx::Size GetConstrainedWebDialogMinimumSize() const = 0; |
| |
| // Returns the maximum size for the dialog. |
| virtual gfx::Size GetConstrainedWebDialogMaximumSize() const = 0; |
| |
| // Returns the preferred size for the dialog, or an empty size if |
| // the dialog has been closed. |
| virtual gfx::Size GetConstrainedWebDialogPreferredSize() const = 0; |
| |
| protected: |
| virtual ~ConstrainedWebDialogDelegate() {} |
| }; |
| |
| // ConstrainedWebDialogUI is a facility to show HTML WebUI content |
| // in a tab-modal constrained dialog. It is implemented as an adapter |
| // between an WebDialogUI object and a web contents modal dialog. |
| // |
| // Since the web contents modal dialog requires platform-specific delegate |
| // implementations, this class is just a factory stub. |
| class ConstrainedWebDialogUI : public content::WebUIController { |
| public: |
| explicit ConstrainedWebDialogUI(content::WebUI* web_ui); |
| ~ConstrainedWebDialogUI() override; |
| |
| // WebUIController implementation: |
| void RenderFrameCreated(content::RenderFrameHost* render_frame_host) override; |
| |
| // Sets the delegate on the WebContents. |
| static void SetConstrainedDelegate(content::WebContents* web_contents, |
| ConstrainedWebDialogDelegate* delegate); |
| static void ClearConstrainedDelegate(content::WebContents* web_contents); |
| |
| protected: |
| // Returns the ConstrainedWebDialogDelegate saved with the WebContents. |
| // Returns NULL if no such delegate is set. |
| ConstrainedWebDialogDelegate* GetConstrainedDelegate(); |
| |
| private: |
| // JS Message Handler |
| void OnDialogCloseMessage(const base::ListValue* args); |
| |
| DISALLOW_COPY_AND_ASSIGN(ConstrainedWebDialogUI); |
| }; |
| |
| // Create and show a constrained HTML dialog. The actual object that gets |
| // created is a ConstrainedWebDialogDelegate, which later triggers construction |
| // of a ConstrainedWebDialogUI object. |
| // |browser_context| is used to construct the constrained HTML dialog's |
| // WebContents. |
| // |delegate| controls the behavior of the dialog. |
| // |overshadowed| is the tab being overshadowed by the dialog. |
| ConstrainedWebDialogDelegate* ShowConstrainedWebDialog( |
| content::BrowserContext* browser_context, |
| ui::WebDialogDelegate* delegate, |
| content::WebContents* overshadowed); |
| |
| // Create and show a constrained HTML dialog with auto-resize enabled. The |
| // dialog is shown automatically after document load has completed to avoid UI |
| // jankiness. |
| // |browser_context| is used to construct the dialog's WebContents. |
| // |delegate| controls the behavior of the dialog. |
| // |overshadowed| is the tab being overshadowed by the dialog. |
| // |min_size| is the minimum size of the dialog. |
| // |max_size| is the maximum size of the dialog. |
| ConstrainedWebDialogDelegate* ShowConstrainedWebDialogWithAutoResize( |
| content::BrowserContext* browser_context, |
| ui::WebDialogDelegate* delegate, |
| content::WebContents* overshadowed, |
| const gfx::Size& min_size, |
| const gfx::Size& max_size); |
| |
| #endif // CHROME_BROWSER_UI_WEBUI_CONSTRAINED_WEB_DIALOG_UI_H_ |