|  | // 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 "ash/quick_insert/quick_insert_paste_request.h" | 
|  |  | 
|  | #include <optional> | 
|  | #include <string> | 
|  |  | 
|  | #include "ash/clipboard/test_support/mock_clipboard_history_controller.h" | 
|  | #include "base/unguessable_token.h" | 
|  | #include "chromeos/crosapi/mojom/clipboard_history.mojom.h" | 
|  | #include "testing/gtest/include/gtest/gtest.h" | 
|  | #include "ui/aura/client/focus_client.h" | 
|  | #include "ui/events/event_constants.h" | 
|  | #include "ui/views/test/views_test_base.h" | 
|  | #include "ui/views/test/widget_test.h" | 
|  |  | 
|  | namespace ash { | 
|  | namespace { | 
|  |  | 
|  | using ::testing::_; | 
|  |  | 
|  | using QuickInsertPasteRequestTest = views::ViewsTestBase; | 
|  |  | 
|  | TEST_F(QuickInsertPasteRequestTest, DoesNotPasteWithoutNewFocus) { | 
|  | auto widget = CreateTestWidget(views::Widget::InitParams::CLIENT_OWNS_WIDGET); | 
|  | widget->Show(); | 
|  | views::test::WidgetVisibleWaiter(widget.get()).Wait(); | 
|  | MockClipboardHistoryController clipboard_history_controller; | 
|  | auto item_id = base::UnguessableToken::Create(); | 
|  |  | 
|  | EXPECT_CALL(clipboard_history_controller, PasteClipboardItemById(_, _, _)) | 
|  | .Times(0); | 
|  |  | 
|  | QuickInsertPasteRequest request( | 
|  | &clipboard_history_controller, | 
|  | aura::client::GetFocusClient(widget->GetNativeView()), item_id); | 
|  | widget->CloseNow(); | 
|  | } | 
|  |  | 
|  | TEST_F(QuickInsertPasteRequestTest, PastesOnNewFocus) { | 
|  | auto old_widget = | 
|  | CreateTestWidget(views::Widget::InitParams::CLIENT_OWNS_WIDGET); | 
|  | old_widget->Show(); | 
|  | views::test::WidgetVisibleWaiter(old_widget.get()).Wait(); | 
|  | MockClipboardHistoryController clipboard_history_controller; | 
|  | auto item_id = base::UnguessableToken::Create(); | 
|  |  | 
|  | EXPECT_CALL(clipboard_history_controller, | 
|  | PasteClipboardItemById( | 
|  | item_id.ToString(), ui::EF_NONE, | 
|  | crosapi::mojom::ClipboardHistoryControllerShowSource:: | 
|  | kVirtualKeyboard)) | 
|  | .Times(1); | 
|  |  | 
|  | QuickInsertPasteRequest request( | 
|  | &clipboard_history_controller, | 
|  | aura::client::GetFocusClient(old_widget->GetNativeView()), item_id); | 
|  | old_widget->CloseNow(); | 
|  | auto new_widget = | 
|  | CreateTestWidget(views::Widget::InitParams::CLIENT_OWNS_WIDGET); | 
|  | new_widget->Show(); | 
|  | views::test::WidgetVisibleWaiter(new_widget.get()).Wait(); | 
|  | } | 
|  |  | 
|  | TEST_F(QuickInsertPasteRequestTest, DoesNotPasteAfterDestruction) { | 
|  | auto old_widget = | 
|  | CreateTestWidget(views::Widget::InitParams::CLIENT_OWNS_WIDGET); | 
|  | old_widget->Show(); | 
|  | views::test::WidgetVisibleWaiter(old_widget.get()).Wait(); | 
|  | MockClipboardHistoryController clipboard_history_controller; | 
|  | auto item_id = base::UnguessableToken::Create(); | 
|  |  | 
|  | EXPECT_CALL(clipboard_history_controller, PasteClipboardItemById(_, _, _)) | 
|  | .Times(0); | 
|  |  | 
|  | { | 
|  | QuickInsertPasteRequest request( | 
|  | &clipboard_history_controller, | 
|  | aura::client::GetFocusClient(old_widget->GetNativeView()), item_id); | 
|  | old_widget->CloseNow(); | 
|  | } | 
|  | auto new_widget = | 
|  | CreateTestWidget(views::Widget::InitParams::CLIENT_OWNS_WIDGET); | 
|  | new_widget->Show(); | 
|  | views::test::WidgetVisibleWaiter(new_widget.get()).Wait(); | 
|  | } | 
|  |  | 
|  | }  // namespace | 
|  | }  // namespace ash |