@@ -4527,6 +4527,65 @@ TEST_F(EmbedderTest, CreateInvalidBackingstoreOpenGLFramebuffer) {
45274527 latch.Wait ();
45284528}
45294529
4530+ TEST_F (EmbedderTest, CreateInvalidBackingstoreOpenGLSurface) {
4531+ auto & context = GetEmbedderContext (EmbedderTestContextType::kOpenGLContext );
4532+ EmbedderConfigBuilder builder (context);
4533+ builder.SetOpenGLRendererConfig (SkISize::Make (800 , 600 ));
4534+ builder.SetCompositor ();
4535+ builder.SetRenderTargetType (
4536+ EmbedderTestBackingStoreProducer::RenderTargetType::kOpenGLSurface );
4537+ builder.SetDartEntrypoint (" invalid_backingstore" );
4538+
4539+ fml::AutoResetWaitableEvent latch;
4540+
4541+ builder.GetCompositor ().create_backing_store_callback =
4542+ [](const FlutterBackingStoreConfig* config, //
4543+ FlutterBackingStore* backing_store_out, //
4544+ void * user_data //
4545+ ) {
4546+ backing_store_out->type = kFlutterBackingStoreTypeOpenGL ;
4547+ backing_store_out->user_data = user_data;
4548+ backing_store_out->open_gl .type = kFlutterOpenGLTargetTypeSurface ;
4549+ backing_store_out->open_gl .surface .user_data = user_data;
4550+ // Deliberately set this to an invalid format
4551+ backing_store_out->open_gl .surface .format = 0 ;
4552+ backing_store_out->open_gl .surface .make_current_callback = [](void *,
4553+ bool *) {
4554+ ADD_FAILURE () << " make_current_callback method should not be called" ;
4555+ return true ;
4556+ };
4557+ backing_store_out->open_gl .surface .clear_current_callback = [](void *,
4558+ bool *) {
4559+ ADD_FAILURE () << " clear_current_callback method should not be called" ;
4560+ return true ;
4561+ };
4562+ backing_store_out->open_gl .surface .destruction_callback =
4563+ [](void * user_data) {
4564+ FAIL () << " destruction_callback method should not be called" ;
4565+ };
4566+
4567+ return true ;
4568+ };
4569+
4570+ context.AddNativeCallback (
4571+ " SignalNativeTest" ,
4572+ CREATE_NATIVE_ENTRY (
4573+ [&latch](Dart_NativeArguments args) { latch.Signal (); }));
4574+
4575+ auto engine = builder.LaunchEngine ();
4576+
4577+ // Send a window metrics events so frames may be scheduled.
4578+ FlutterWindowMetricsEvent event = {};
4579+ event.struct_size = sizeof (event);
4580+ event.width = 800 ;
4581+ event.height = 600 ;
4582+ event.pixel_ratio = 1.0 ;
4583+ ASSERT_EQ (FlutterEngineSendWindowMetricsEvent (engine.get (), &event),
4584+ kSuccess );
4585+ ASSERT_TRUE (engine.is_valid ());
4586+ latch.Wait ();
4587+ }
4588+
45304589TEST_F (EmbedderTest, ExternalTextureGLRefreshedTooOften) {
45314590 TestGLSurface surface (SkISize::Make (100 , 100 ));
45324591 auto context = surface.GetGrContext ();
0 commit comments