// Copyright 2016 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_CONSTRAINED_WINDOW_NATIVE_WEB_CONTENTS_MODAL_DIALOG_MANAGER_VIEWS_H_
#define COMPONENTS_CONSTRAINED_WINDOW_NATIVE_WEB_CONTENTS_MODAL_DIALOG_MANAGER_VIEWS_H_

#include <set>

#include "base/macros.h"
#include "components/web_modal/modal_dialog_host.h"
#include "components/web_modal/single_web_contents_dialog_manager.h"
#include "ui/gfx/native_widget_types.h"
#include "ui/views/widget/widget_observer.h"

namespace views {
class Widget;
}

namespace constrained_window {

// Class for parenting a tab-modal views dialog off of a views browser.
class NativeWebContentsModalDialogManagerViews
    : public web_modal::SingleWebContentsDialogManager,
      public web_modal::ModalDialogHostObserver,
      public views::WidgetObserver {
 public:
  NativeWebContentsModalDialogManagerViews(
      gfx::NativeWindow dialog,
      web_modal::SingleWebContentsDialogManagerDelegate* native_delegate);

  ~NativeWebContentsModalDialogManagerViews() override;

  // Sets up this object to manage the |dialog_|. Registers for closing events
  // in order to notify the delegate.
  void ManageDialog();

  // web_modal::SingleWebContentsDialogManager:
  void Show() override;
  void Hide() override;
  void Close() override;
  void Focus() override;
  void Pulse() override;

  // web_modal::ModalDialogHostObserver:
  void OnPositionRequiresUpdate() override;
  void OnHostDestroying() override;

  // views::WidgetObserver:

  // NOTE(wittman): OnWidgetClosing is overriden to ensure that, when the widget
  // is explicitly closed, the destruction occurs within the same call
  // stack. This avoids event races that lead to non-deterministic destruction
  // ordering in e.g. the print preview dialog. OnWidgetDestroying is overridden
  // because OnWidgetClosing is *only* invoked on explicit close, not when the
  // widget is implicitly destroyed due to its parent being closed. This
  // situation occurs with app windows.  WidgetClosing removes the observer, so
  // only one of these two functions is ever invoked for a given widget.
  void OnWidgetClosing(views::Widget* widget) override;
  void OnWidgetDestroying(views::Widget* widget) override;
  void HostChanged(web_modal::WebContentsModalDialogHost* new_host) override;
  gfx::NativeWindow dialog() override;

 protected:
  web_modal::SingleWebContentsDialogManagerDelegate* native_delegate() {
    return native_delegate_;
  }

  // By default just calls widget->Show() or Hide(), but allows a derived class
  // to override in order to hide an alternate way (e.g. if the default hide
  // would tear down attached dialogs too early).
  virtual void ShowWidget(views::Widget* widget);
  virtual void HideWidget(views::Widget* widget);

  static views::Widget* GetWidget(gfx::NativeWindow dialog);

 private:
  void WidgetClosing(views::Widget* widget);

  web_modal::SingleWebContentsDialogManagerDelegate* native_delegate_;
  gfx::NativeWindow dialog_;
  web_modal::WebContentsModalDialogHost* host_;
  bool host_destroying_;
  std::set<views::Widget*> observed_widgets_;
  std::set<views::Widget*> shown_widgets_;

  DISALLOW_COPY_AND_ASSIGN(NativeWebContentsModalDialogManagerViews);
};

}  // namespace constrained_window

#endif  // COMPONENTS_CONSTRAINED_WINDOW_NATIVE_WEB_CONTENTS_MODAL_DIALOG_MANAGER_VIEWS_H_
