Chromium Code Reviews| Index: headless/lib/headless_devtools_client_browsertest.cc |
| diff --git a/headless/lib/headless_devtools_client_browsertest.cc b/headless/lib/headless_devtools_client_browsertest.cc |
| index dec58bbc81d29a0b4c51ebe7ff14f7cbab88ab95..bc67e65dbe4522fa15fd5c8d1ccdfbdcba786c0e 100644 |
| --- a/headless/lib/headless_devtools_client_browsertest.cc |
| +++ b/headless/lib/headless_devtools_client_browsertest.cc |
| @@ -477,7 +477,7 @@ class TargetDomainCreateTwoContexts : public HeadlessAsyncDevTooledBrowserTest, |
| devtools_client_->GetTarget()->GetExperimental()->CreateTarget( |
| target::CreateTargetParams::Builder() |
| - .SetUrl(embedded_test_server()->GetURL("/hello.html").spec()) |
| + .SetUrl("about://blank") |
| .SetBrowserContextId(context_id_one_) |
| .Build(), |
| base::Bind(&TargetDomainCreateTwoContexts::OnCreateTargetOneResult, |
| @@ -485,7 +485,7 @@ class TargetDomainCreateTwoContexts : public HeadlessAsyncDevTooledBrowserTest, |
| devtools_client_->GetTarget()->GetExperimental()->CreateTarget( |
| target::CreateTargetParams::Builder() |
| - .SetUrl(embedded_test_server()->GetURL("/hello.html").spec()) |
| + .SetUrl("about://blank") |
| .SetBrowserContextId(context_id_two_) |
| .Build(), |
| base::Bind(&TargetDomainCreateTwoContexts::OnCreateTargetTwoResult, |
| @@ -525,19 +525,42 @@ class TargetDomainCreateTwoContexts : public HeadlessAsyncDevTooledBrowserTest, |
| void OnAttachedToTargetOne( |
| std::unique_ptr<target::AttachToTargetResult> result) { |
| + StopNavigationOnTarget(101, page_id_one_); |
| + } |
| + |
| + void OnAttachedToTargetTwo( |
| + std::unique_ptr<target::AttachToTargetResult> result) { |
| + StopNavigationOnTarget(102, page_id_two_); |
| + } |
| + |
| + void StopNavigationOnTarget(int message_id, std::string target_id) { |
| + // Avoid triggering Page.loadEventFired for about://blank if loading hasn't |
| + // finished yet. |
| devtools_client_->GetTarget()->GetExperimental()->SendMessageToTarget( |
| target::SendMessageToTargetParams::Builder() |
| - .SetTargetId(page_id_one_) |
| - .SetMessage("{\"id\":101, \"method\": \"Page.enable\"}") |
| + .SetTargetId(target_id) |
| + .SetMessage("{\"id\":" + std::to_string(message_id) + |
| + ", \"method\": \"Page.stopLoading\"}") |
| .Build()); |
| } |
| - void OnAttachedToTargetTwo( |
| - std::unique_ptr<target::AttachToTargetResult> result) { |
| + void EnablePageOnTarget(int message_id, std::string target_id) { |
| devtools_client_->GetTarget()->GetExperimental()->SendMessageToTarget( |
| target::SendMessageToTargetParams::Builder() |
| - .SetTargetId(page_id_two_) |
| - .SetMessage("{\"id\":102, \"method\": \"Page.enable\"}") |
| + .SetTargetId(target_id) |
| + .SetMessage("{\"id\":" + std::to_string(message_id) + |
| + ", \"method\": \"Page.enable\"}") |
| + .Build()); |
| + } |
| + |
| + void NavigateTarget(int message_id, std::string target_id) { |
| + devtools_client_->GetTarget()->GetExperimental()->SendMessageToTarget( |
| + target::SendMessageToTargetParams::Builder() |
| + .SetTargetId(target_id) |
| + .SetMessage( |
| + "{\"id\":" + std::to_string(message_id) + |
| + ", \"method\": \"Page.navigate\", \"params\": {\"url\": \"" + |
| + embedded_test_server()->GetURL("/hello.html").spec() + "\"}}") |
| .Build()); |
| } |
| @@ -548,7 +571,7 @@ class TargetDomainCreateTwoContexts : public HeadlessAsyncDevTooledBrowserTest, |
| devtools_client_->GetTarget()->GetExperimental()->SendMessageToTarget( |
| target::SendMessageToTargetParams::Builder() |
| .SetTargetId(page_id_one_) |
| - .SetMessage("{\"id\":201, \"method\": \"Runtime.evaluate\", " |
| + .SetMessage("{\"id\":401, \"method\": \"Runtime.evaluate\", " |
| "\"params\": {\"expression\": " |
| "\"document.cookie = 'foo=bar';\"}}") |
| .Build()); |
| @@ -562,6 +585,7 @@ class TargetDomainCreateTwoContexts : public HeadlessAsyncDevTooledBrowserTest, |
| if (!message || !message->GetAsDictionary(&message_dict)) { |
| return; |
| } |
| + |
| std::string method; |
| if (message_dict->GetString("method", &method) && |
| method == "Page.loadEventFired") { |
| @@ -573,24 +597,50 @@ class TargetDomainCreateTwoContexts : public HeadlessAsyncDevTooledBrowserTest, |
| MaybeSetCookieOnPageOne(); |
| return; |
| } |
| + |
| + int message_id = 0; |
| + if (!message_dict->GetInteger("id", &message_id)) |
| + return; |
| const base::DictionaryValue* result_dict; |
| if (message_dict->GetDictionary("result", &result_dict)) { |
| - // There's a nested result. We want the inner one. |
| - if (!result_dict->GetDictionary("result", &result_dict)) |
| - return; |
| - std::string value; |
| - if (params.GetTargetId() == page_id_one_) { |
| + if (message_id == 101) { |
| + // 101: Page.stopNavigation on target one. |
| + EXPECT_EQ(page_id_one_, params.GetTargetId()); |
| + EnablePageOnTarget(201, page_id_one_); |
| + } else if (message_id == 102) { |
| + // 102: Page.stopNavigation on target two. |
| + EXPECT_EQ(page_id_two_, params.GetTargetId()); |
| + EnablePageOnTarget(202, page_id_two_); |
| + } else if (message_id == 201) { |
| + // 201: Page.enable on target one. |
| + EXPECT_EQ(page_id_one_, params.GetTargetId()); |
| + NavigateTarget(301, page_id_one_); |
| + } else if (message_id == 202) { |
| + // 202: Page.enable on target two. |
| + EXPECT_EQ(page_id_two_, params.GetTargetId()); |
| + NavigateTarget(302, page_id_two_); |
| + } else if (message_id == 401) { |
| + // 401: Runtime.evaluate on target one. |
| + EXPECT_EQ(page_id_one_, params.GetTargetId()); |
| + |
| // TODO(alexclarke): Make some better bindings |
| // for Target.SendMessageToTarget. |
| devtools_client_->GetTarget()->GetExperimental()->SendMessageToTarget( |
| target::SendMessageToTargetParams::Builder() |
| .SetTargetId(page_id_two_) |
| - .SetMessage("{\"id\":202, \"method\": \"Runtime.evaluate\", " |
| + .SetMessage("{\"id\":402, \"method\": \"Runtime.evaluate\", " |
| "\"params\": {\"expression\": " |
| "\"document.cookie;\"}}") |
| .Build()); |
| - } else if (params.GetTargetId() == page_id_two_ && |
| - result_dict->GetString("value", &value)) { |
| + } else if (message_id == 402) { |
| + // 402: Runtime.evaluate on target two. |
| + EXPECT_EQ(page_id_two_, params.GetTargetId()); |
| + |
| + // There's a nested result. We want the inner one. |
|
Sami
2017/04/03 10:10:44
Well spotted :)
Eric Seckler
2017/04/03 10:41:45
That's just copy paste, no change there :)
Sami
2017/04/03 10:44:11
Ah, now I noticed it :)
|
| + EXPECT_TRUE(result_dict->GetDictionary("result", &result_dict)); |
| + |
| + std::string value; |
| + EXPECT_TRUE(result_dict->GetString("value", &value)); |
| EXPECT_EQ("", value) << "Page 2 should not share cookies from page one"; |
| devtools_client_->GetTarget()->GetExperimental()->CloseTarget( |