172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved. 24a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch// Use of this source code is governed by a BSD-style license that can be 34a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch// found in the LICENSE file. 44a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 54a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#ifndef CHROME_BROWSER_UI_VIEWS_HTML_DIALOG_VIEW_H_ 64a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#define CHROME_BROWSER_UI_VIEWS_HTML_DIALOG_VIEW_H_ 74a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#pragma once 84a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 94a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#include <string> 104a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 1172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "chrome/browser/ui/views/dom_view.h" 12dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "chrome/browser/ui/webui/html_dialog_tab_contents_delegate.h" 13dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "chrome/browser/ui/webui/html_dialog_ui.h" 1472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "ui/gfx/size.h" 154a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#include "views/window/window_delegate.h" 164a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 174a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdochclass Browser; 184a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdochnamespace views { 194a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdochclass Window; 204a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch} 214a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 224a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch//////////////////////////////////////////////////////////////////////////////// 234a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch// 244a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch// HtmlDialogView is a view used to display an HTML dialog to the user. The 254a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch// content of the dialogs is determined by the delegate 264a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch// (HtmlDialogUIDelegate), but is basically a file URL along with a 274a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch// JSON input string. The HTML is supposed to show a UI to the user and is 284a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch// expected to send back a JSON file as a return value. 294a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch// 304a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch//////////////////////////////////////////////////////////////////////////////// 314a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch// 324a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch// TODO(akalin): Make HtmlDialogView contain an HtmlDialogTabContentsDelegate 334a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch// instead of inheriting from it to avoid violating the "no multiple 344a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch// inheritance" rule. 354a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdochclass HtmlDialogView 364a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch : public DOMView, 374a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch public HtmlDialogTabContentsDelegate, 384a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch public HtmlDialogUIDelegate, 394a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch public views::WindowDelegate { 404a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch public: 414a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch HtmlDialogView(Profile* profile, HtmlDialogUIDelegate* delegate); 424a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch virtual ~HtmlDialogView(); 434a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 444a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Initializes the contents of the dialog (the DOMView and the callbacks). 454a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch void InitDialog(); 464a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 474a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Overridden from views::View: 484a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch virtual gfx::Size GetPreferredSize(); 494a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch virtual bool AcceleratorPressed(const views::Accelerator& accelerator); 504a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 514a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Overridden from views::WindowDelegate: 524a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch virtual bool CanResize() const; 534a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch virtual bool IsModal() const; 544a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch virtual std::wstring GetWindowTitle() const; 554a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch virtual void WindowClosing(); 564a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch virtual views::View* GetContentsView(); 574a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch virtual views::View* GetInitiallyFocusedView(); 584a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch virtual bool ShouldShowWindowTitle() const; 594a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 604a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Overridden from HtmlDialogUIDelegate: 614a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch virtual bool IsDialogModal() const; 624a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch virtual std::wstring GetDialogTitle() const; 634a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch virtual GURL GetDialogContentURL() const; 6472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen virtual void GetWebUIMessageHandlers( 6572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen std::vector<WebUIMessageHandler*>* handlers) const; 664a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch virtual void GetDialogSize(gfx::Size* size) const; 674a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch virtual std::string GetDialogArgs() const; 68ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual void OnWindowClosed(); 694a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch virtual void OnDialogClosed(const std::string& json_retval); 704a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch virtual void OnCloseContents(TabContents* source, bool* out_close_dialog); 714a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch virtual bool ShouldShowDialogTitle() const; 72201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch virtual bool HandleContextMenu(const ContextMenuParams& params); 734a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 744a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // Overridden from TabContentsDelegate: 754a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch virtual void MoveContents(TabContents* source, const gfx::Rect& pos); 764a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch virtual void HandleKeyboardEvent(const NativeWebKeyboardEvent& event); 774a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch virtual void CloseContents(TabContents* source); 784a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 794a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch private: 804a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // This view is a delegate to the HTML content since it needs to get notified 814a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // about when the dialog is closing. For all other actions (besides dialog 824a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // closing) we delegate to the creator of this view, which we keep track of 834a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // using this variable. 844a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch HtmlDialogUIDelegate* delegate_; 854a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 864a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch DISALLOW_COPY_AND_ASSIGN(HtmlDialogView); 874a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch}; 884a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 894a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#endif // CHROME_BROWSER_UI_VIEWS_HTML_DIALOG_VIEW_H_ 90