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