| // Copyright 2017 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "chromecast/browser/renderer_prelauncher.h" |
| |
| #include <memory> |
| |
| #include "base/command_line.h" |
| #include "base/macros.h" |
| #include "base/run_loop.h" |
| #include "chromecast/base/chromecast_switches.h" |
| #include "chromecast/base/metrics/cast_metrics_helper.h" |
| #include "chromecast/browser/cast_browser_context.h" |
| #include "chromecast/browser/cast_browser_process.h" |
| #include "content/public/browser/browser_thread.h" |
| #include "content/public/browser/site_instance.h" |
| #include "content/public/browser/web_contents.h" |
| #include "content/public/common/content_switches.h" |
| #include "content/public/test/browser_test.h" |
| #include "content/public/test/browser_test_base.h" |
| |
| namespace chromecast { |
| |
| class RendererPrelauncherTest : public content::BrowserTestBase { |
| public: |
| RendererPrelauncherTest() {} |
| ~RendererPrelauncherTest() override {} |
| |
| protected: |
| // content::BrowserTestBase implementation: |
| void SetUp() override; |
| void PreRunTestOnMainThread() override; |
| void PostRunTestOnMainThread() override {} |
| |
| private: |
| DISALLOW_COPY_AND_ASSIGN(RendererPrelauncherTest); |
| }; |
| |
| void RendererPrelauncherTest::SetUp() { |
| base::CommandLine* command_line = base::CommandLine::ForCurrentProcess(); |
| command_line->AppendSwitch(switches::kNoWifi); |
| command_line->AppendSwitchASCII(switches::kTestType, "browser"); |
| |
| BrowserTestBase::SetUp(); |
| } |
| |
| void RendererPrelauncherTest::PreRunTestOnMainThread() { |
| DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
| base::RunLoop().RunUntilIdle(); |
| |
| metrics::CastMetricsHelper::GetInstance()->SetDummySessionIdForTesting(); |
| } |
| |
| IN_PROC_BROWSER_TEST_F(RendererPrelauncherTest, ReusedRenderer) { |
| GURL gurl("https://www.google.com/"); |
| content::BrowserContext* browser_context = |
| shell::CastBrowserProcess::GetInstance()->browser_context(); |
| EXPECT_TRUE(browser_context); |
| |
| // Prelaunch a renderer process for the url. |
| auto prelauncher = |
| std::make_unique<RendererPrelauncher>(browser_context, gurl); |
| prelauncher->Prelaunch(); |
| scoped_refptr<content::SiteInstance> site_instance = |
| prelauncher->site_instance(); |
| EXPECT_TRUE(site_instance->HasProcess()); |
| |
| // Launch a web contents for the site instance. |
| content::WebContents::CreateParams create_params(browser_context, NULL); |
| create_params.site_instance = site_instance; |
| std::unique_ptr<content::WebContents> web_contents( |
| content::WebContents::Create(create_params)); |
| EXPECT_EQ(site_instance->GetProcess(), |
| web_contents->GetSiteInstance()->GetProcess()); |
| |
| // Nativgate to the url. |
| content::NavigationController::LoadURLParams params(gurl); |
| web_contents->GetController().LoadURLWithParams(params); |
| EXPECT_EQ(site_instance->GetProcess(), |
| web_contents->GetSiteInstance()->GetProcess()); |
| |
| // Ensure that the renderer process terminates. |
| prelauncher.reset(); |
| web_contents.reset(); |
| if (!base::CommandLine::ForCurrentProcess()->HasSwitch( |
| switches::kSingleProcess)) { |
| EXPECT_FALSE(site_instance->HasProcess()); |
| } |
| } |
| |
| } // namespace chromecast |