| // Copyright 2023 The Chromium Authors | 
 | // Use of this source code is governed by a BSD-style license that can be | 
 | // found in the LICENSE file. | 
 |  | 
 | #include "build/build_config.h" | 
 |  | 
 | #include "base/run_loop.h" | 
 | #include "content/browser/gpu/gpu_data_manager_impl.h" | 
 | #include "content/browser/renderer_host/compositor_dependencies_android.h" | 
 | #include "content/public/browser/gpu_data_manager_observer.h" | 
 | #include "content/public/test/browser_test.h" | 
 | #include "content/public/test/content_browser_test.h" | 
 | #include "content/test/gpu_browsertest_helpers.h" | 
 | #include "gpu/ipc/client/gpu_channel_host.h" | 
 | #include "testing/gtest/include/gtest/gtest.h" | 
 |  | 
 | namespace content { | 
 |  | 
 | using base::RepeatingClosure; | 
 | using base::RunLoop; | 
 |  | 
 | class BackgroundKillGpuManagerObserver : public GpuDataManagerObserver { | 
 |  public: | 
 |   explicit BackgroundKillGpuManagerObserver(RepeatingClosure callback) | 
 |       : callback_(std::move(callback)) { | 
 |     GpuDataManagerImpl::GetInstance()->AddObserver(this); | 
 |   } | 
 |   ~BackgroundKillGpuManagerObserver() override { | 
 |     GpuDataManagerImpl::GetInstance()->RemoveObserver(this); | 
 |   } | 
 |   void OnGpuProcessCrashed() override { callback_.Run(); } | 
 |  | 
 |  private: | 
 |   RepeatingClosure callback_; | 
 | }; | 
 |  | 
 | class GpuKillBackgroundTest : public ContentBrowserTest { | 
 |  public: | 
 |   GpuKillBackgroundTest() = default; | 
 |  | 
 |   bool IsChannelEstablished() { | 
 |     return gpu_channel_host_ && !gpu_channel_host_->IsLost(); | 
 |   } | 
 |  | 
 |   scoped_refptr<gpu::GpuChannelHost> gpu_channel_host_; | 
 | }; | 
 |  | 
 | // TODO(crbug.com/40926381): Flaky. | 
 | IN_PROC_BROWSER_TEST_F(GpuKillBackgroundTest, DISABLED_Simple) { | 
 |   ASSERT_FALSE(IsChannelEstablished()); | 
 |  | 
 |   gpu_channel_host_ = GpuBrowsertestEstablishGpuChannelSyncRunLoop(); | 
 |  | 
 |   ASSERT_TRUE(IsChannelEstablished()); | 
 |  | 
 |   auto& cda = CompositorDependenciesAndroid::Get(); | 
 |  | 
 |   RunLoop run_loop; | 
 |   BackgroundKillGpuManagerObserver observer(run_loop.QuitClosure()); | 
 |  | 
 |   cda.DoLowEndBackgroundCleanupForTesting(); | 
 |  | 
 |   run_loop.Run(); | 
 |  | 
 |   ASSERT_FALSE(IsChannelEstablished()); | 
 | } | 
 |  | 
 | }  // namespace content |