Index: headless/lib/headless_browser_browsertest.cc |
diff --git a/headless/lib/headless_browser_browsertest.cc b/headless/lib/headless_browser_browsertest.cc |
index 75ae5133006aef82ba6f7c8568817cf9c256f47c..2fd238d7de9c9934073bec97804ab77840ab0aa3 100644 |
--- a/headless/lib/headless_browser_browsertest.cc |
+++ b/headless/lib/headless_browser_browsertest.cc |
@@ -20,23 +20,103 @@ |
namespace headless { |
+namespace { |
+ |
+template <class T> |
+std::vector<T> Sorted(std::vector<T> vector) { |
+ std::sort(vector.begin(), vector.end()); |
+ return vector; |
+} |
+ |
+} // namespace |
+ |
IN_PROC_BROWSER_TEST_F(HeadlessBrowserTest, CreateAndDestroyWebContents) { |
+ std::unique_ptr<HeadlessBrowserContext> browser_context = |
+ browser()->CreateBrowserContextBuilder().Build(); |
HeadlessWebContents* web_contents = |
- browser()->CreateWebContentsBuilder().Build(); |
+ browser_context->CreateWebContentsBuilder().Build(); |
EXPECT_TRUE(web_contents); |
- EXPECT_EQ(static_cast<size_t>(1), browser()->GetAllWebContents().size()); |
- EXPECT_EQ(web_contents, browser()->GetAllWebContents()[0]); |
+ EXPECT_EQ(browser()->GetAllWebContents(), |
+ std::vector<HeadlessWebContents*>({web_contents})); |
+ EXPECT_EQ(browser_context->GetAllWebContents(), |
+ std::vector<HeadlessWebContents*>({web_contents})); |
+ |
// TODO(skyostil): Verify viewport dimensions once we can. |
+ |
web_contents->Close(); |
EXPECT_TRUE(browser()->GetAllWebContents().empty()); |
+ EXPECT_TRUE(browser_context->GetAllWebContents().empty()); |
+} |
+ |
+IN_PROC_BROWSER_TEST_F(HeadlessBrowserTest, |
+ WebContentsAreDestroyedWithContext) { |
+ std::unique_ptr<HeadlessBrowserContext> browser_context = |
+ browser()->CreateBrowserContextBuilder().Build(); |
+ HeadlessWebContents* web_contents = |
+ browser_context->CreateWebContentsBuilder().Build(); |
+ EXPECT_TRUE(web_contents); |
+ |
+ EXPECT_EQ(browser()->GetAllWebContents(), |
+ std::vector<HeadlessWebContents*>({web_contents})); |
+ |
+ EXPECT_EQ(browser_context->GetAllWebContents(), |
+ std::vector<HeadlessWebContents*>({web_contents})); |
+ |
+ // TODO(skyostil): Verify viewport dimensions once we can. |
+ |
+ browser_context.reset(); |
+ |
+ EXPECT_TRUE(browser()->GetAllWebContents().empty()); |
+} |
+ |
+IN_PROC_BROWSER_TEST_F(HeadlessBrowserTest, DestroyAndCreateTwoWebContents) { |
+ std::unique_ptr<HeadlessBrowserContext> browser_context1 = |
+ browser()->CreateBrowserContextBuilder().Build(); |
+ HeadlessWebContents* web_contents1 = |
+ browser_context1->CreateWebContentsBuilder().Build(); |
+ |
+ EXPECT_EQ(browser()->GetAllWebContents(), |
+ std::vector<HeadlessWebContents*>({web_contents1})); |
+ EXPECT_EQ(browser_context1->GetAllWebContents(), |
+ std::vector<HeadlessWebContents*>({web_contents1})); |
+ |
+ std::unique_ptr<HeadlessBrowserContext> browser_context2 = |
+ browser()->CreateBrowserContextBuilder().Build(); |
+ HeadlessWebContents* web_contents2 = |
+ browser_context2->CreateWebContentsBuilder().Build(); |
+ |
+ EXPECT_EQ(Sorted(browser()->GetAllWebContents()), |
+ Sorted(std::vector<HeadlessWebContents*>( |
+ {web_contents1, web_contents2}))); |
+ EXPECT_EQ(browser_context1->GetAllWebContents(), |
+ std::vector<HeadlessWebContents*>({web_contents1})); |
+ EXPECT_EQ(browser_context2->GetAllWebContents(), |
+ std::vector<HeadlessWebContents*>({web_contents2})); |
+ |
+ browser_context1.reset(); |
+ |
+ EXPECT_EQ(browser()->GetAllWebContents(), |
+ std::vector<HeadlessWebContents*>({web_contents2})); |
+ EXPECT_EQ(browser_context2->GetAllWebContents(), |
+ std::vector<HeadlessWebContents*>({web_contents2})); |
+ |
+ browser_context2.reset(); |
+ |
+ EXPECT_TRUE(browser()->GetAllWebContents().empty()); |
} |
IN_PROC_BROWSER_TEST_F(HeadlessBrowserTest, CreateWithBadURL) { |
GURL bad_url("not_valid"); |
+ |
+ std::unique_ptr<HeadlessBrowserContext> browser_context = |
+ browser()->CreateBrowserContextBuilder().Build(); |
HeadlessWebContents* web_contents = |
- browser()->CreateWebContentsBuilder().SetInitialURL(bad_url).Build(); |
+ browser_context->CreateWebContentsBuilder() |
+ .SetInitialURL(bad_url) |
+ .Build(); |
+ |
EXPECT_FALSE(web_contents); |
EXPECT_TRUE(browser()->GetAllWebContents().empty()); |
} |
@@ -66,9 +146,11 @@ class HeadlessBrowserTestWithProxy : public HeadlessBrowserTest { |
}; |
IN_PROC_BROWSER_TEST_F(HeadlessBrowserTestWithProxy, SetProxyServer) { |
- HeadlessBrowser::Options::Builder builder; |
- builder.SetProxyServer(proxy_server()->host_port_pair()); |
- SetBrowserOptions(builder.Build()); |
+ std::unique_ptr<HeadlessBrowserContext> browser_context = |
+ browser() |
+ ->CreateBrowserContextBuilder() |
+ .SetProxyServer(proxy_server()->host_port_pair()) |
+ .Build(); |
// Load a page which doesn't actually exist, but for which the our proxy |
// returns valid content anyway. |
@@ -76,8 +158,7 @@ IN_PROC_BROWSER_TEST_F(HeadlessBrowserTestWithProxy, SetProxyServer) { |
// TODO(altimin): Currently this construction does not serve hello.html |
// from headless/test/data as expected. We should fix this. |
HeadlessWebContents* web_contents = |
- browser() |
- ->CreateWebContentsBuilder() |
+ browser_context->CreateWebContentsBuilder() |
.SetInitialURL(GURL("http://not-an-actual-domain.tld/hello.html")) |
.Build(); |
EXPECT_TRUE(WaitForLoad(web_contents)); |
@@ -89,19 +170,24 @@ IN_PROC_BROWSER_TEST_F(HeadlessBrowserTestWithProxy, SetProxyServer) { |
IN_PROC_BROWSER_TEST_F(HeadlessBrowserTest, SetHostResolverRules) { |
EXPECT_TRUE(embedded_test_server()->Start()); |
- HeadlessBrowser::Options::Builder builder; |
- builder.SetHostResolverRules( |
+ |
+ std::string host_resolver_rules = |
base::StringPrintf("MAP not-an-actual-domain.tld 127.0.0.1:%d", |
- embedded_test_server()->host_port_pair().port())); |
- SetBrowserOptions(builder.Build()); |
+ embedded_test_server()->host_port_pair().port()); |
+ |
+ std::unique_ptr<HeadlessBrowserContext> browser_context = |
+ browser() |
+ ->CreateBrowserContextBuilder() |
+ .SetHostResolverRules(host_resolver_rules) |
+ .Build(); |
// Load a page which doesn't actually exist, but which is turned into a valid |
// address by our host resolver rules. |
HeadlessWebContents* web_contents = |
- browser() |
- ->CreateWebContentsBuilder() |
+ browser_context->CreateWebContentsBuilder() |
.SetInitialURL(GURL("http://not-an-actual-domain.tld/hello.html")) |
.Build(); |
+ |
EXPECT_TRUE(WaitForLoad(web_contents)); |
} |
@@ -111,15 +197,16 @@ IN_PROC_BROWSER_TEST_F(HeadlessBrowserTest, HttpProtocolHandler) { |
protocol_handlers[url::kHttpScheme] = |
base::WrapUnique(new TestProtocolHandler(kResponseBody)); |
- HeadlessBrowser::Options::Builder builder; |
- builder.SetProtocolHandlers(std::move(protocol_handlers)); |
- SetBrowserOptions(builder.Build()); |
+ std::unique_ptr<HeadlessBrowserContext> browser_context = |
+ browser() |
+ ->CreateBrowserContextBuilder() |
+ .SetProtocolHandlers(std::move(protocol_handlers)) |
+ .Build(); |
// Load a page which doesn't actually exist, but which is fetched by our |
// custom protocol handler. |
HeadlessWebContents* web_contents = |
- browser() |
- ->CreateWebContentsBuilder() |
+ browser_context->CreateWebContentsBuilder() |
.SetInitialURL(GURL("http://not-an-actual-domain.tld/hello.html")) |
.Build(); |
EXPECT_TRUE(WaitForLoad(web_contents)); |
@@ -138,15 +225,16 @@ IN_PROC_BROWSER_TEST_F(HeadlessBrowserTest, HttpsProtocolHandler) { |
protocol_handlers[url::kHttpsScheme] = |
base::WrapUnique(new TestProtocolHandler(kResponseBody)); |
- HeadlessBrowser::Options::Builder builder; |
- builder.SetProtocolHandlers(std::move(protocol_handlers)); |
- SetBrowserOptions(builder.Build()); |
+ std::unique_ptr<HeadlessBrowserContext> browser_context = |
+ browser() |
+ ->CreateBrowserContextBuilder() |
+ .SetProtocolHandlers(std::move(protocol_handlers)) |
+ .Build(); |
// Load a page which doesn't actually exist, but which is fetched by our |
// custom protocol handler. |
HeadlessWebContents* web_contents = |
- browser() |
- ->CreateWebContentsBuilder() |
+ browser_context->CreateWebContentsBuilder() |
.SetInitialURL(GURL("https://not-an-actual-domain.tld/hello.html")) |
.Build(); |
EXPECT_TRUE(WaitForLoad(web_contents)); |
@@ -160,8 +248,11 @@ IN_PROC_BROWSER_TEST_F(HeadlessBrowserTest, HttpsProtocolHandler) { |
} |
IN_PROC_BROWSER_TEST_F(HeadlessBrowserTest, WebGLSupported) { |
+ std::unique_ptr<HeadlessBrowserContext> browser_context = |
+ browser()->CreateBrowserContextBuilder().Build(); |
+ |
HeadlessWebContents* web_contents = |
- browser()->CreateWebContentsBuilder().Build(); |
+ browser_context->CreateWebContentsBuilder().Build(); |
bool webgl_supported; |
EXPECT_TRUE(EvaluateScript( |