172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved. 2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be 3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file. 4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#ifndef CHROME_BROWSER_UI_GTK_HTML_DIALOG_GTK_H_ 672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#define CHROME_BROWSER_UI_GTK_HTML_DIALOG_GTK_H_ 73345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#pragma once 8c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 9c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include <string> 10c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include <vector> 11c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 12ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/memory/scoped_ptr.h" 13dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "chrome/browser/ui/webui/html_dialog_tab_contents_delegate.h" 14dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "chrome/browser/ui/webui/html_dialog_ui.h" 1572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "ui/base/gtk/gtk_signal.h" 1672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "ui/gfx/native_widget_types.h" 1772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "ui/gfx/size.h" 18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 19c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtypedef struct _GtkWidget GtkWidget; 20c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 21c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass Browser; 22c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass Profile; 23c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass TabContents; 24c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass TabContentsContainerGtk; 25ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenclass TabContentsWrapper; 26c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 27c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass HtmlDialogGtk : public HtmlDialogTabContentsDelegate, 28c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public HtmlDialogUIDelegate { 29c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch HtmlDialogGtk(Profile* profile, HtmlDialogUIDelegate* delegate, 31c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch gfx::NativeWindow parent_window); 32c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual ~HtmlDialogGtk(); 33c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Initializes the contents of the dialog (the DOMView and the callbacks). 3572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen gfx::NativeWindow InitDialog(); 36c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Overridden from HtmlDialogUI::Delegate: 38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual bool IsDialogModal() const; 39c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual std::wstring GetDialogTitle() const; 40c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual GURL GetDialogContentURL() const; 4172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen virtual void GetWebUIMessageHandlers( 4272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen std::vector<WebUIMessageHandler*>* handlers) const; 43c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void GetDialogSize(gfx::Size* size) const; 44c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual std::string GetDialogArgs() const; 45c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void OnDialogClosed(const std::string& json_retval); 46c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void OnCloseContents(TabContents* source, bool* out_close_dialog) { } 4721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen virtual bool ShouldShowDialogTitle() const; 48c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 49c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Overridden from TabContentsDelegate: 50c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void MoveContents(TabContents* source, const gfx::Rect& pos); 51c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void HandleKeyboardEvent(const NativeWebKeyboardEvent& event); 52c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 53c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private: 543345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick CHROMEGTK_CALLBACK_1(HtmlDialogGtk, void, OnResponse, int); 55c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 56c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // This view is a delegate to the HTML content since it needs to get notified 57c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // about when the dialog is closing. For all other actions (besides dialog 58c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // closing) we delegate to the creator of this view, which we keep track of 59c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // using this variable. 60c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch HtmlDialogUIDelegate* delegate_; 61c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 62c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch gfx::NativeWindow parent_window_; 63c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 64c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch GtkWidget* dialog_; 65c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 66ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen scoped_ptr<TabContentsWrapper> tab_; 67c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch scoped_ptr<TabContentsContainerGtk> tab_contents_container_; 68c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 69c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch DISALLOW_COPY_AND_ASSIGN(HtmlDialogGtk); 70c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 71c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 7272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#endif // CHROME_BROWSER_UI_GTK_HTML_DIALOG_GTK_H_ 73