1818#include " flutter/shell/platform/windows/flutter_window.h"
1919#include " flutter/shell/platform/windows/flutter_windows_engine.h"
2020#include " flutter/shell/platform/windows/flutter_windows_texture_registrar.h"
21+ #include " flutter/shell/platform/windows/flutter_windows_view_controller.h"
2122#include " flutter/shell/platform/windows/testing/egl/mock_context.h"
2223#include " flutter/shell/platform/windows/testing/egl/mock_manager.h"
2324#include " flutter/shell/platform/windows/testing/egl/mock_window_surface.h"
@@ -121,6 +122,7 @@ class MockFlutterWindowsEngine : public FlutterWindowsEngine {
121122
122123 MOCK_METHOD (bool , running, (), (const ));
123124 MOCK_METHOD (bool , Stop, (), ());
125+ MOCK_METHOD (void , RemoveView, (FlutterViewId view_id), ());
124126 MOCK_METHOD (bool , PostRasterThreadTask, (fml::closure), (const ));
125127
126128 private:
@@ -241,6 +243,8 @@ TEST(FlutterWindowsViewTest, Shutdown) {
241243 std::make_unique<NiceMock<MockWindowBindingHandler>>();
242244 auto egl_manager = std::make_unique<egl::MockManager>();
243245 auto surface = std::make_unique<egl::MockWindowSurface>();
246+
247+ auto engine_ptr = engine.get ();
244248 auto surface_ptr = surface.get ();
245249
246250 EngineModifier modifier{engine.get ()};
@@ -250,12 +254,16 @@ TEST(FlutterWindowsViewTest, Shutdown) {
250254 std::unique_ptr<FlutterWindowsView> view =
251255 engine->CreateView (std::move (window_binding_handler));
252256
257+ auto view_id = view->view_id ();
253258 ViewModifier view_modifier{view.get ()};
254259 view_modifier.SetSurface (std::move (surface));
255260
256- // The engine must be stopped before the surface can be destroyed.
261+ FlutterWindowsViewController controller{std::move (engine), std::move (view)};
262+
263+ // The view must be removed before the surface can be destroyed.
257264 InSequence s;
258- EXPECT_CALL (*engine.get (), Stop).Times (1 );
265+ EXPECT_CALL (*engine_ptr, running).WillOnce (Return (true ));
266+ EXPECT_CALL (*engine_ptr, RemoveView (view_id)).Times (1 );
259267 EXPECT_CALL (*surface_ptr, Destroy).Times (1 );
260268 }
261269}
@@ -1392,7 +1400,6 @@ TEST(FlutterWindowsViewTest, DisablesVSyncAtStartup) {
13921400 EXPECT_CALL (*surface_ptr, SetVSyncEnabled (false )).WillOnce (Return (true ));
13931401 EXPECT_CALL (render_context, ClearCurrent).WillOnce (Return (true ));
13941402
1395- EXPECT_CALL (*engine.get (), Stop).Times (1 );
13961403 EXPECT_CALL (*surface_ptr, Destroy).Times (1 );
13971404
13981405 EngineModifier modifier{engine.get ()};
@@ -1430,7 +1437,6 @@ TEST(FlutterWindowsViewTest, EnablesVSyncAtStartup) {
14301437 EXPECT_CALL (*surface_ptr, SetVSyncEnabled (true )).WillOnce (Return (true ));
14311438 EXPECT_CALL (render_context, ClearCurrent).WillOnce (Return (true ));
14321439
1433- EXPECT_CALL (*engine.get (), Stop).Times (1 );
14341440 EXPECT_CALL (*surface_ptr, Destroy).Times (1 );
14351441
14361442 EngineModifier modifier{engine.get ()};
@@ -1471,7 +1477,6 @@ TEST(FlutterWindowsViewTest, DisablesVSyncAfterStartup) {
14711477 EXPECT_CALL (*surface_ptr, MakeCurrent).WillOnce (Return (true ));
14721478 EXPECT_CALL (*surface_ptr, SetVSyncEnabled (false )).WillOnce (Return (true ));
14731479 EXPECT_CALL (render_context, ClearCurrent).WillOnce (Return (true ));
1474- EXPECT_CALL (*engine.get (), Stop).Times (1 );
14751480 EXPECT_CALL (*surface_ptr, Destroy).Times (1 );
14761481
14771482 EngineModifier modifier{engine.get ()};
@@ -1514,7 +1519,6 @@ TEST(FlutterWindowsViewTest, EnablesVSyncAfterStartup) {
15141519 EXPECT_CALL (*surface_ptr, MakeCurrent).WillOnce (Return (true ));
15151520 EXPECT_CALL (*surface_ptr, SetVSyncEnabled (true )).WillOnce (Return (true ));
15161521 EXPECT_CALL (render_context, ClearCurrent).WillOnce (Return (true ));
1517- EXPECT_CALL (*engine.get (), Stop).Times (1 );
15181522 EXPECT_CALL (*surface_ptr, Destroy).Times (1 );
15191523
15201524 EngineModifier modifier{engine.get ()};
@@ -1563,7 +1567,6 @@ TEST(FlutterWindowsViewTest, UpdatesVSyncOnDwmUpdates) {
15631567 EXPECT_CALL (*surface_ptr, SetVSyncEnabled (false )).WillOnce (Return (true ));
15641568 EXPECT_CALL (render_context, ClearCurrent).WillOnce (Return (true ));
15651569
1566- EXPECT_CALL (*engine.get (), Stop).Times (1 );
15671570 EXPECT_CALL (*surface_ptr, Destroy).Times (1 );
15681571
15691572 EngineModifier engine_modifier{engine.get ()};
0 commit comments