1// Copyright (c) 2011 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 CHROME_BROWSER_UI_VIEWS_HTML_DIALOG_VIEW_H_ 6#define CHROME_BROWSER_UI_VIEWS_HTML_DIALOG_VIEW_H_ 7#pragma once 8 9#include <string> 10 11#include "chrome/browser/ui/views/dom_view.h" 12#include "chrome/browser/ui/webui/html_dialog_tab_contents_delegate.h" 13#include "chrome/browser/ui/webui/html_dialog_ui.h" 14#include "ui/gfx/size.h" 15#include "views/window/window_delegate.h" 16 17class Browser; 18namespace views { 19class Window; 20} 21 22//////////////////////////////////////////////////////////////////////////////// 23// 24// HtmlDialogView is a view used to display an HTML dialog to the user. The 25// content of the dialogs is determined by the delegate 26// (HtmlDialogUIDelegate), but is basically a file URL along with a 27// JSON input string. The HTML is supposed to show a UI to the user and is 28// expected to send back a JSON file as a return value. 29// 30//////////////////////////////////////////////////////////////////////////////// 31// 32// TODO(akalin): Make HtmlDialogView contain an HtmlDialogTabContentsDelegate 33// instead of inheriting from it to avoid violating the "no multiple 34// inheritance" rule. 35class HtmlDialogView 36 : public DOMView, 37 public HtmlDialogTabContentsDelegate, 38 public HtmlDialogUIDelegate, 39 public views::WindowDelegate { 40 public: 41 HtmlDialogView(Profile* profile, HtmlDialogUIDelegate* delegate); 42 virtual ~HtmlDialogView(); 43 44 // Initializes the contents of the dialog (the DOMView and the callbacks). 45 void InitDialog(); 46 47 // Overridden from views::View: 48 virtual gfx::Size GetPreferredSize(); 49 virtual bool AcceleratorPressed(const views::Accelerator& accelerator); 50 51 // Overridden from views::WindowDelegate: 52 virtual bool CanResize() const; 53 virtual bool IsModal() const; 54 virtual std::wstring GetWindowTitle() const; 55 virtual void WindowClosing(); 56 virtual views::View* GetContentsView(); 57 virtual views::View* GetInitiallyFocusedView(); 58 virtual bool ShouldShowWindowTitle() const; 59 60 // Overridden from HtmlDialogUIDelegate: 61 virtual bool IsDialogModal() const; 62 virtual std::wstring GetDialogTitle() const; 63 virtual GURL GetDialogContentURL() const; 64 virtual void GetWebUIMessageHandlers( 65 std::vector<WebUIMessageHandler*>* handlers) const; 66 virtual void GetDialogSize(gfx::Size* size) const; 67 virtual std::string GetDialogArgs() const; 68 virtual void OnWindowClosed(); 69 virtual void OnDialogClosed(const std::string& json_retval); 70 virtual void OnCloseContents(TabContents* source, bool* out_close_dialog); 71 virtual bool ShouldShowDialogTitle() const; 72 virtual bool HandleContextMenu(const ContextMenuParams& params); 73 74 // Overridden from TabContentsDelegate: 75 virtual void MoveContents(TabContents* source, const gfx::Rect& pos); 76 virtual void HandleKeyboardEvent(const NativeWebKeyboardEvent& event); 77 virtual void CloseContents(TabContents* source); 78 79 private: 80 // This view is a delegate to the HTML content since it needs to get notified 81 // about when the dialog is closing. For all other actions (besides dialog 82 // closing) we delegate to the creator of this view, which we keep track of 83 // using this variable. 84 HtmlDialogUIDelegate* delegate_; 85 86 DISALLOW_COPY_AND_ASSIGN(HtmlDialogView); 87}; 88 89#endif // CHROME_BROWSER_UI_VIEWS_HTML_DIALOG_VIEW_H_ 90