Index: headless/lib/headless_web_contents_browsertest.cc |
diff --git a/headless/lib/headless_web_contents_browsertest.cc b/headless/lib/headless_web_contents_browsertest.cc |
index 14384a971068a38fcd3090844062ca9ea03c5ff1..9d92f2a2642921309d23180c667fe5d407be2109 100644 |
--- a/headless/lib/headless_web_contents_browsertest.cc |
+++ b/headless/lib/headless_web_contents_browsertest.cc |
@@ -7,7 +7,6 @@ |
#include <vector> |
#include "base/base64.h" |
-#include "base/json/json_writer.h" |
#include "content/public/test/browser_test.h" |
#include "headless/public/devtools/domains/page.h" |
#include "headless/public/devtools/domains/runtime.h" |
@@ -295,8 +294,8 @@ |
HEADLESS_ASYNC_DEVTOOLED_TEST_F(HeadlessWebContentsSecurityTest); |
-class GetHeadlessTabSocketButNoTabSocket |
- : public HeadlessAsyncDevTooledBrowserTest { |
+class HeadlessTabSocketTest : public HeadlessAsyncDevTooledBrowserTest, |
+ public HeadlessTabSocket::Listener { |
public: |
void SetUp() override { |
options()->mojo_service_names.insert("headless::TabSocket"); |
@@ -304,30 +303,11 @@ |
} |
void RunDevTooledTest() override { |
- ASSERT_THAT(web_contents_->GetHeadlessTabSocket(), testing::IsNull()); |
- FinishAsynchronousTest(); |
- } |
- |
- HeadlessWebContents::Builder::TabSocketType GetTabSocketType() override { |
- return HeadlessWebContents::Builder::TabSocketType::NONE; |
- } |
-}; |
- |
-HEADLESS_ASYNC_DEVTOOLED_TEST_F(GetHeadlessTabSocketButNoTabSocket); |
- |
-class HeadlessMainWorldTabSocketTest : public HeadlessAsyncDevTooledBrowserTest, |
- public HeadlessTabSocket::Listener { |
- public: |
- void SetUp() override { |
- options()->mojo_service_names.insert("headless::TabSocket"); |
- HeadlessAsyncDevTooledBrowserTest::SetUp(); |
- } |
- |
- void RunDevTooledTest() override { |
devtools_client_->GetRuntime()->Evaluate( |
R"(window.TabSocket.onmessage = |
- function(message) { |
- window.TabSocket.send('Embedder sent us: ' + message); |
+ function(event) { |
+ window.TabSocket.send( |
+ 'Embedder sent us: ' + event.detail.message); |
}; |
)"); |
@@ -344,203 +324,9 @@ |
FinishAsynchronousTest(); |
} |
- HeadlessWebContents::Builder::TabSocketType GetTabSocketType() override { |
- return HeadlessWebContents::Builder::TabSocketType::MAIN_WORLD; |
- } |
+ bool GetCreateTabSocket() override { return true; } |
}; |
-HEADLESS_ASYNC_DEVTOOLED_TEST_F(HeadlessMainWorldTabSocketTest); |
- |
-class HeadlessMainWorldTabSocketNotThereTest |
- : public HeadlessAsyncDevTooledBrowserTest, |
- public HeadlessTabSocket::Listener { |
- public: |
- void SetUp() override { |
- options()->mojo_service_names.insert("headless::TabSocket"); |
- HeadlessAsyncDevTooledBrowserTest::SetUp(); |
- } |
- |
- void RunDevTooledTest() override { |
- // We expect this to fail because the TabSocket is being injected into |
- // isolated worlds. |
- devtools_client_->GetRuntime()->Evaluate( |
- "window.TabSocket.send('This should not work!');", |
- base::Bind(&HeadlessMainWorldTabSocketNotThereTest::EvaluateResult, |
- base::Unretained(this))); |
- |
- HeadlessTabSocket* headless_tab_socket = |
- web_contents_->GetHeadlessTabSocket(); |
- DCHECK(headless_tab_socket); |
- |
- headless_tab_socket->SetListener(this); |
- } |
- |
- void EvaluateResult(std::unique_ptr<runtime::EvaluateResult> result) { |
- EXPECT_TRUE(result->HasExceptionDetails()); |
- FinishAsynchronousTest(); |
- } |
- |
- void OnMessageFromTab(const std::string&) override { |
- FAIL() << "Should not receive a message from the tab!"; |
- FinishAsynchronousTest(); |
- } |
- |
- HeadlessWebContents::Builder::TabSocketType GetTabSocketType() override { |
- return HeadlessWebContents::Builder::TabSocketType::ISOLATED_WORLD; |
- } |
-}; |
- |
-HEADLESS_ASYNC_DEVTOOLED_TEST_F(HeadlessMainWorldTabSocketNotThereTest); |
- |
-class HeadlessIsolatedWorldTabSocketTest |
- : public HeadlessAsyncDevTooledBrowserTest, |
- public HeadlessTabSocket::Listener, |
- public runtime::Observer { |
- public: |
- void SetUp() override { |
- options()->mojo_service_names.insert("headless::TabSocket"); |
- HeadlessAsyncDevTooledBrowserTest::SetUp(); |
- } |
- |
- void RunDevTooledTest() override { |
- devtools_client_->GetRuntime()->AddObserver(this); |
- devtools_client_->GetRuntime()->Enable(); |
- |
- devtools_client_->GetPage()->GetExperimental()->GetResourceTree( |
- page::GetResourceTreeParams::Builder().Build(), |
- base::Bind(&HeadlessIsolatedWorldTabSocketTest::OnResourceTree, |
- base::Unretained(this))); |
- |
- HeadlessTabSocket* headless_tab_socket = |
- web_contents_->GetHeadlessTabSocket(); |
- DCHECK(headless_tab_socket); |
- headless_tab_socket->SendMessageToTab("Hello!!!"); |
- headless_tab_socket->SetListener(this); |
- } |
- |
- void OnResourceTree(std::unique_ptr<page::GetResourceTreeResult> result) { |
- main_frame_id_ = result->GetFrameTree()->GetFrame()->GetId(); |
- devtools_client_->GetPage()->GetExperimental()->CreateIsolatedWorld( |
- page::CreateIsolatedWorldParams::Builder() |
- .SetFrameId(main_frame_id_) |
- .Build()); |
- } |
- |
- void OnExecutionContextCreated( |
- const runtime::ExecutionContextCreatedParams& params) override { |
- const base::DictionaryValue* dictionary; |
- std::string frame_id; |
- bool is_main_world; |
- // If the isolated world was created then eval some script in it. |
- if (params.GetContext()->HasAuxData() && |
- params.GetContext()->GetAuxData()->GetAsDictionary(&dictionary) && |
- dictionary->GetString("frameId", &frame_id) && |
- frame_id == main_frame_id_ && |
- dictionary->GetBoolean("isDefault", &is_main_world) && !is_main_world) { |
- devtools_client_->GetRuntime()->Evaluate( |
- runtime::EvaluateParams::Builder() |
- .SetExpression( |
- R"(window.TabSocket.onmessage = |
- function(message) { |
- TabSocket.send('Embedder sent us: ' + message); |
- }; |
- )") |
- .SetContextId(params.GetContext()->GetId()) |
- .Build()); |
- } |
- } |
- |
- void OnMessageFromTab(const std::string& message) override { |
- EXPECT_EQ("Embedder sent us: Hello!!!", message); |
- FinishAsynchronousTest(); |
- } |
- |
- HeadlessWebContents::Builder::TabSocketType GetTabSocketType() override { |
- return HeadlessWebContents::Builder::TabSocketType::ISOLATED_WORLD; |
- } |
- |
- private: |
- std::string main_frame_id_; |
-}; |
- |
-HEADLESS_ASYNC_DEVTOOLED_TEST_F(HeadlessIsolatedWorldTabSocketTest); |
- |
-class HeadlessIsolatedWorldTabSocketNotThereTest |
- : public HeadlessAsyncDevTooledBrowserTest, |
- public HeadlessTabSocket::Listener, |
- public runtime::Observer { |
- public: |
- void SetUp() override { |
- options()->mojo_service_names.insert("headless::TabSocket"); |
- HeadlessAsyncDevTooledBrowserTest::SetUp(); |
- } |
- |
- void RunDevTooledTest() override { |
- devtools_client_->GetRuntime()->AddObserver(this); |
- devtools_client_->GetRuntime()->Enable(); |
- |
- devtools_client_->GetPage()->GetExperimental()->GetResourceTree( |
- page::GetResourceTreeParams::Builder().Build(), |
- base::Bind(&HeadlessIsolatedWorldTabSocketNotThereTest::OnResourceTree, |
- base::Unretained(this))); |
- |
- HeadlessTabSocket* headless_tab_socket = |
- web_contents_->GetHeadlessTabSocket(); |
- DCHECK(headless_tab_socket); |
- headless_tab_socket->SendMessageToTab("Hello!!!"); |
- headless_tab_socket->SetListener(this); |
- } |
- |
- void OnResourceTree(std::unique_ptr<page::GetResourceTreeResult> result) { |
- main_frame_id_ = result->GetFrameTree()->GetFrame()->GetId(); |
- devtools_client_->GetPage()->GetExperimental()->CreateIsolatedWorld( |
- page::CreateIsolatedWorldParams::Builder() |
- .SetFrameId(main_frame_id_) |
- .Build()); |
- } |
- |
- void OnExecutionContextCreated( |
- const runtime::ExecutionContextCreatedParams& params) override { |
- const base::DictionaryValue* dictionary; |
- std::string frame_id; |
- bool is_main_world; |
- // If the isolated world was created then eval some script in it. |
- if (params.GetContext()->HasAuxData() && |
- params.GetContext()->GetAuxData()->GetAsDictionary(&dictionary) && |
- dictionary->GetString("frameId", &frame_id) && |
- frame_id == main_frame_id_ && |
- dictionary->GetBoolean("isDefault", &is_main_world) && !is_main_world) { |
- // We expect this to fail because the TabSocket is being injected into the |
- // main world. |
- devtools_client_->GetRuntime()->Evaluate( |
- runtime::EvaluateParams::Builder() |
- .SetExpression("window.TabSocket.send('This should not work!');") |
- .SetContextId(params.GetContext()->GetId()) |
- .Build(), |
- base::Bind( |
- &HeadlessIsolatedWorldTabSocketNotThereTest::EvaluateResult, |
- base::Unretained(this))); |
- } |
- } |
- |
- void EvaluateResult(std::unique_ptr<runtime::EvaluateResult> result) { |
- EXPECT_TRUE(result->HasExceptionDetails()); |
- FinishAsynchronousTest(); |
- } |
- |
- void OnMessageFromTab(const std::string&) override { |
- FAIL() << "Should not receive a message from the tab!"; |
- FinishAsynchronousTest(); |
- } |
- |
- HeadlessWebContents::Builder::TabSocketType GetTabSocketType() override { |
- return HeadlessWebContents::Builder::TabSocketType::MAIN_WORLD; |
- } |
- |
- private: |
- std::string main_frame_id_; |
-}; |
- |
-HEADLESS_ASYNC_DEVTOOLED_TEST_F(HeadlessIsolatedWorldTabSocketNotThereTest); |
+HEADLESS_ASYNC_DEVTOOLED_TEST_F(HeadlessTabSocketTest); |
} // namespace headless |