| // Copyright 2011 The Chromium Authors | |
| // Use of this source code is governed by a BSD-style license that can be | |
| // found in the LICENSE file. | |
| #include "components/web_cache/browser/web_cache_manager.h" | |
| #include "content/public/test/mock_render_process_host.h" | |
| #include "content/public/test/test_renderer_host.h" | |
| #include "testing/gtest/include/gtest/gtest.h" | |
| namespace web_cache { | |
| using WebCacheManagerTest = content::RenderViewHostTestHarness; | |
| TEST_F(WebCacheManagerTest, AddRemoveRendererTest) { | |
| WebCacheManager manager; | |
| EXPECT_EQ(0U, manager.web_cache_services_.size()); | |
| manager.Add(process()); | |
| EXPECT_EQ(1U, manager.web_cache_services_.size()); | |
| manager.Remove(process()); | |
| EXPECT_EQ(0U, manager.web_cache_services_.size()); | |
| } | |
| TEST_F(WebCacheManagerTest, OnlyClearCacheWhenProcessReady) { | |
| WebCacheManager manager; | |
| auto renderer = | |
| std::make_unique<content::MockRenderProcessHost>(browser_context()); | |
| renderer->Init(); | |
| EXPECT_FALSE(renderer->IsReady()); | |
| EXPECT_FALSE(manager.rph_observations_.IsObservingSource(renderer.get())); | |
| EXPECT_EQ(manager.web_cache_services_.find(renderer->GetID()), | |
| manager.web_cache_services_.end()); | |
| // Simulate the creation of a process host to ensure 'manager' observer this | |
| // 'RenderProcessHost'. | |
| manager.OnRenderProcessHostCreated(renderer.get()); | |
| EXPECT_FALSE(renderer->IsReady()); | |
| EXPECT_TRUE(manager.rph_observations_.IsObservingSource(renderer.get())); | |
| EXPECT_FALSE(manager.web_cache_services_.contains(renderer->GetID())); | |
| renderer->SimulateReady(); | |
| EXPECT_TRUE(renderer->IsReady()); | |
| EXPECT_TRUE(manager.rph_observations_.IsObservingSource(renderer.get())); | |
| EXPECT_TRUE(manager.web_cache_services_.contains(renderer->GetID())); | |
| } | |
| TEST_F(WebCacheManagerTest, PreExistingRenderProcessHost) { | |
| std::unique_ptr<content::MockRenderProcessHost> pre_renderer_not_ready = | |
| std::make_unique<content::MockRenderProcessHost>(browser_context()); | |
| pre_renderer_not_ready->Init(); | |
| std::unique_ptr<content::MockRenderProcessHost> pre_renderer_ready = | |
| std::make_unique<content::MockRenderProcessHost>(browser_context()); | |
| pre_renderer_ready->Init(); | |
| pre_renderer_ready->SimulateReady(); | |
| // RenderProcessHosts that are created before the WebCacheManager must also be | |
| // observed. | |
| WebCacheManager manager; | |
| EXPECT_FALSE(pre_renderer_not_ready->IsReady()); | |
| EXPECT_TRUE(manager.rph_observations_.IsObservingSource( | |
| pre_renderer_not_ready.get())); | |
| EXPECT_FALSE( | |
| manager.web_cache_services_.contains(pre_renderer_not_ready->GetID())); | |
| EXPECT_TRUE(pre_renderer_ready->IsReady()); | |
| EXPECT_TRUE( | |
| manager.rph_observations_.IsObservingSource(pre_renderer_ready.get())); | |
| EXPECT_TRUE( | |
| manager.web_cache_services_.contains(pre_renderer_ready->GetID())); | |
| } | |
| } // namespace web_cache |