blob: a17679f44a6ce2314762c96b1c994ec80677a029 [file] [log] [blame]
// Copyright (c) 2006-2008 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_MODAL_HTML_DIALOG_DELEGATE_H_
#define CHROME_BROWSER_MODAL_HTML_DIALOG_DELEGATE_H_
#include <vector>
#include "base/gfx/size.h"
#include "chrome/browser/dom_ui/html_dialog_ui.h"
#include "chrome/common/ipc_message.h"
#include "chrome/common/notification_observer.h"
// This class can only be used on the UI thread.
class ModalHtmlDialogDelegate
: public HtmlDialogUIDelegate,
public NotificationObserver {
public:
ModalHtmlDialogDelegate(const GURL& url,
int width, int height,
const std::string& json_arguments,
IPC::Message* sync_result,
WebContents* contents);
~ModalHtmlDialogDelegate();
// Notification service callback.
virtual void Observe(NotificationType type,
const NotificationSource& source,
const NotificationDetails& details);
// HTMLDialogUIDelegate implementation:
virtual bool IsDialogModal() const;
virtual std::wstring GetDialogTitle() const { return L"Google Gears"; }
virtual GURL GetDialogContentURL() const;
virtual void GetDialogSize(gfx::Size* size) const;
virtual std::string GetDialogArgs() const;
virtual void OnDialogClosed(const std::string& json_retval);
private:
// Invoked from the destructor or when we receive notification the web
// contents has been disconnnected. Removes the observer from the WebContents
// and NULLs out contents_.
void RemoveObserver();
// The WebContents that opened the dialog.
WebContents* contents_;
// The parameters needed to display a modal HTML dialog.
HtmlDialogUI::HtmlDialogParams params_;
// Once we get our reply in OnModalDialogResponse we'll need to respond to the
// plugin using this |sync_result| pointer so we store it between calls.
IPC::Message* sync_response_;
DISALLOW_COPY_AND_ASSIGN(ModalHtmlDialogDelegate);
};
#endif // CHROME_BROWSER_MODAL_HTML_DIALOG_DELEGATE_H_