Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(239)

Unified Diff: headless/lib/headless_devtools_client_browsertest.cc

Issue 2794883002: [headless] Fix race in TargetDomainCreateTwoContexts test. (Closed)
Patch Set: . Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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(
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698