// Copyright 2014 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 COMPONENTS_WEB_MODAL_SINGLE_WEB_CONTENTS_DIALOG_MANAGER_H_
#define COMPONENTS_WEB_MODAL_SINGLE_WEB_CONTENTS_DIALOG_MANAGER_H_

#include "ui/gfx/native_widget_types.h"

namespace content {
class WebContents;
}  // namespace content

namespace web_modal {

class WebContentsModalDialogHost;

// Interface from SingleWebContentsDialogManager to
// WebContentsModalDialogManager.
class SingleWebContentsDialogManagerDelegate {
 public:
  SingleWebContentsDialogManagerDelegate() {}
  virtual ~SingleWebContentsDialogManagerDelegate() {}

  virtual content::WebContents* GetWebContents() const = 0;

  // Notify the delegate that the dialog is closing. The native
  // manager will be deleted before the end of this call.
  virtual void WillClose(gfx::NativeWindow dialog) = 0;

 private:
  DISALLOW_COPY_AND_ASSIGN(SingleWebContentsDialogManagerDelegate);
};

// Provides an interface for platform-specific UI implementation for the web
// contents modal dialog. Each object will manage a single dialog window
// during its lifecycle.
//
// Implementation classes should accept a dialog window at construction time
// and register to be notified when the dialog is closing, so that it can
// notify its delegate (WillClose method).
class SingleWebContentsDialogManager {
 public:
  virtual ~SingleWebContentsDialogManager() {}

  // Makes the web contents modal dialog visible. Only one web contents modal
  // dialog is shown at a time per tab.
  virtual void Show() = 0;

  // Hides the web contents modal dialog without closing it.
  virtual void Hide() = 0;

  // Closes the web contents modal dialog.
  // If this method causes a WillClose() call to the delegate, the manager
  // will be deleted at the close of that invocation.
  virtual void Close() = 0;

  // Sets focus on the web contents modal dialog.
  virtual void Focus() = 0;

  // Runs a pulse animation for the web contents modal dialog.
  virtual void Pulse() = 0;

  // Called when the host view for the dialog has changed.
  virtual void HostChanged(WebContentsModalDialogHost* new_host) = 0;

  // Return the dialog under management by this object.
  virtual gfx::NativeWindow dialog() = 0;

 protected:
  SingleWebContentsDialogManager() {}

 private:
  DISALLOW_COPY_AND_ASSIGN(SingleWebContentsDialogManager);
};

}  // namespace web_modal

#endif  // COMPONENTS_WEB_MODAL_SINGLE_WEB_CONTENTS_DIALOG_MANAGER_H_
