// Copyright 2024 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "components/constrained_window/constrained_window_views.h"

#include <memory>

#include "build/build_config.h"
#include "components/web_modal/test_web_contents_modal_dialog_host.h"
#include "components/web_modal/test_web_contents_modal_dialog_manager_delegate.h"
#include "components/web_modal/web_contents_modal_dialog_manager.h"
#include "content/public/test/browser_test.h"
#include "content/public/test/content_browser_test.h"
#include "content/shell/browser/shell.h"
#include "testing/gtest/include/gtest/gtest-spi.h"
#include "ui/base/mojom/ui_base_types.mojom-shared.h"
#include "ui/base/ui_base_types.h"
#include "ui/gfx/native_ui_types.h"
#include "ui/views/test/test_views_delegate.h"
#include "ui/views/widget/widget.h"
#include "ui/views/window/dialog_delegate.h"

namespace constrained_window {

class ConstrainedWindowViewsBrowserTest : public content::ContentBrowserTest {
 public:
  void PreRunTestOnMainThread() override {
    content::ContentBrowserTest::PreRunTestOnMainThread();

    content::WebContents* web_contents = shell()->web_contents();

    dialog_delegate_ = std::make_unique<
        web_modal::TestWebContentsModalDialogManagerDelegate>();
    dialog_host_ = std::make_unique<web_modal::TestWebContentsModalDialogHost>(
        web_contents->GetNativeView());
    dialog_delegate_->set_web_contents_modal_dialog_host(dialog_host_.get());

    web_modal::WebContentsModalDialogManager::CreateForWebContents(
        web_contents);
    web_modal::WebContentsModalDialogManager::FromWebContents(web_contents)
        ->SetDelegate(dialog_delegate_.get());
  }

 private:
  std::unique_ptr<web_modal::TestWebContentsModalDialogHost> dialog_host_;
  std::unique_ptr<web_modal::TestWebContentsModalDialogManagerDelegate>
      dialog_delegate_;
};

// Test that DialogDelegate::SetOwnershipOfNewWidget() controls the ownership of
// the views::Widget created by ShowMebModalDialogViewsOwned().
IN_PROC_BROWSER_TEST_F(ConstrainedWindowViewsBrowserTest,
                       ShowWebModalDialogViewsOwned) {
  auto delegate = std::make_unique<views::DialogDelegate>();
  delegate->SetOwnershipOfNewWidget(
      views::Widget::InitParams::CLIENT_OWNS_WIDGET);
  delegate->SetModalType(ui::mojom::ModalType::kChild);

  std::unique_ptr<views::Widget> widget = ShowWebModalDialogViewsOwned(
      delegate.get(), shell()->web_contents(),
      views::Widget::InitParams::CLIENT_OWNS_WIDGET);
  EXPECT_EQ(widget->ownership(), views::Widget::InitParams::CLIENT_OWNS_WIDGET);
}

}  // namespace constrained_window
