1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106
|
// 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 "chrome/browser/enterprise/data_controls/desktop_data_controls_dialog_test_helper.h"
#include "base/run_loop.h"
#include "base/task/single_thread_task_runner.h"
#include "base/test/gtest_util.h"
namespace data_controls {
DesktopDataControlsDialogTestHelper::DesktopDataControlsDialogTestHelper(
DataControlsDialog::Type expected_dialog_type)
: expected_dialog_type_(expected_dialog_type) {
dialog_init_loop_ = std::make_unique<base::RunLoop>();
dialog_close_loop_ = std::make_unique<base::RunLoop>();
dialog_init_callback_ = dialog_init_loop_->QuitClosure();
dialog_close_callback_ = dialog_close_loop_->QuitClosure();
}
DesktopDataControlsDialogTestHelper::~DesktopDataControlsDialogTestHelper() =
default;
void DesktopDataControlsDialogTestHelper::OnConstructed(
DesktopDataControlsDialog* dialog,
views::DialogDelegate* dialog_delegate) {
ASSERT_FALSE(dialog_)
<< "Only one DesktopDataControlsDialog should be opened at a time for a "
"test using this helper class.";
ASSERT_FALSE(dialog_delegate_)
<< "Only one views::DialogDelegate should be opened at a time for a "
"test using this helper class.";
dialog_ = dialog;
dialog_delegate_ = dialog_delegate;
ASSERT_EQ(dialog->type(), expected_dialog_type_);
}
void DesktopDataControlsDialogTestHelper::OnWidgetInitialized(
DesktopDataControlsDialog* dialog,
views::DialogDelegate* dialog_delegate) {
ASSERT_TRUE(dialog);
ASSERT_TRUE(dialog_delegate);
ASSERT_EQ(dialog, dialog_);
ASSERT_EQ(dialog_delegate, dialog_delegate_);
std::move(dialog_init_callback_).Run();
}
void DesktopDataControlsDialogTestHelper::OnDestructed(
DesktopDataControlsDialog* dialog) {
ASSERT_TRUE(dialog);
ASSERT_EQ(dialog, dialog_);
dialog_ = nullptr;
dialog_delegate_ = nullptr;
std::move(dialog_close_callback_).Run();
}
DesktopDataControlsDialog* DesktopDataControlsDialogTestHelper::dialog() {
return dialog_;
}
views::DialogDelegate* DesktopDataControlsDialogTestHelper::dialog_delegate() {
return dialog_delegate_;
}
void DesktopDataControlsDialogTestHelper::BypassWarning() {
// Some platforms crash if the dialog has been accepted/cancelled before fully
// launching modally, so to avoid that issue accepting/cancelling the dialog
// is done asynchronously.
ASSERT_TRUE(dialog_delegate_);
ASSERT_TRUE(dialog_->type() ==
DataControlsDialog::Type::kClipboardPasteWarn ||
dialog_->type() == DataControlsDialog::Type::kClipboardCopyWarn);
base::SingleThreadTaskRunner::GetCurrentDefault()->PostTask(
FROM_HERE, base::BindOnce(&views::DialogDelegate::CancelDialog,
base::Unretained(dialog_delegate_)));
}
void DesktopDataControlsDialogTestHelper::CloseDialogWithoutBypass() {
// Some platforms crash if the dialog has been accepted/cancelled before fully
// launching modally, so to avoid that issue accepting/cancelling the dialog
// is done asynchronously.
ASSERT_TRUE(dialog_delegate_);
base::SingleThreadTaskRunner::GetCurrentDefault()->PostTask(
FROM_HERE, base::BindOnce(&views::DialogDelegate::AcceptDialog,
base::Unretained(dialog_delegate_)));
}
void DesktopDataControlsDialogTestHelper::WaitForDialogToInitialize() {
ASSERT_TRUE(dialog_init_loop_);
dialog_init_loop_->Run();
}
void DesktopDataControlsDialogTestHelper::WaitForDialogToClose() {
ASSERT_TRUE(dialog_close_loop_);
dialog_close_loop_->Run();
dialog_ = nullptr;
dialog_delegate_ = nullptr;
}
} // namespace data_controls
|