| 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 cce4c045a9e5cbe33ba0a82be1f0231ce212a7ac..521c8b19253bb0565f3fe4cce1a2224a60d08e83 100644
|
| --- a/headless/lib/headless_devtools_client_browsertest.cc
|
| +++ b/headless/lib/headless_devtools_client_browsertest.cc
|
| @@ -687,4 +687,63 @@ class HeadlessCrashObserverTest : public HeadlessAsyncDevTooledBrowserTest,
|
|
|
| HEADLESS_ASYNC_DEVTOOLED_TEST_F(HeadlessCrashObserverTest);
|
|
|
| +class HeadlessDevToolsClientAttachTest
|
| + : public HeadlessAsyncDevTooledBrowserTest {
|
| + public:
|
| + void RunDevTooledTest() override {
|
| + other_devtools_client_ = HeadlessDevToolsClient::Create();
|
| + HeadlessDevToolsTarget* devtools_target =
|
| + web_contents_->GetDevToolsTarget();
|
| +
|
| + // Try attaching: there's already a client attached.
|
| + EXPECT_FALSE(devtools_target->AttachClient(other_devtools_client_.get()));
|
| + EXPECT_TRUE(devtools_target->IsAttached());
|
| + // Detach the existing client, attach the other client.
|
| + devtools_target->DetachClient(devtools_client_.get());
|
| + EXPECT_FALSE(devtools_target->IsAttached());
|
| + EXPECT_TRUE(devtools_target->AttachClient(other_devtools_client_.get()));
|
| + EXPECT_TRUE(devtools_target->IsAttached());
|
| +
|
| + // Now, let's make sure this devtools client works.
|
| + other_devtools_client_->GetRuntime()->Evaluate(
|
| + "24 * 7", base::Bind(&HeadlessDevToolsClientAttachTest::OnFirstResult,
|
| + base::Unretained(this)));
|
| + }
|
| +
|
| + void OnFirstResult(std::unique_ptr<runtime::EvaluateResult> result) {
|
| + int value;
|
| + EXPECT_TRUE(result->GetResult()->HasValue());
|
| + EXPECT_TRUE(result->GetResult()->GetValue()->GetAsInteger(&value));
|
| + EXPECT_EQ(24 * 7, value);
|
| +
|
| + HeadlessDevToolsTarget* devtools_target =
|
| + web_contents_->GetDevToolsTarget();
|
| +
|
| + // Try attach, then force-attach the original client.
|
| + EXPECT_FALSE(devtools_target->AttachClient(devtools_client_.get()));
|
| + devtools_target->ForceAttachClient(devtools_client_.get());
|
| + EXPECT_TRUE(devtools_target->IsAttached());
|
| +
|
| + devtools_client_->GetRuntime()->Evaluate(
|
| + "27 * 4", base::Bind(&HeadlessDevToolsClientAttachTest::OnSecondResult,
|
| + base::Unretained(this)));
|
| + }
|
| +
|
| + void OnSecondResult(std::unique_ptr<runtime::EvaluateResult> result) {
|
| + int value;
|
| + EXPECT_TRUE(result->GetResult()->HasValue());
|
| + EXPECT_TRUE(result->GetResult()->GetValue()->GetAsInteger(&value));
|
| + EXPECT_EQ(27 * 4, value);
|
| +
|
| + // If everything worked, this call will not crash, since it
|
| + // detaches devtools_client_.
|
| + FinishAsynchronousTest();
|
| + }
|
| +
|
| + protected:
|
| + std::unique_ptr<HeadlessDevToolsClient> other_devtools_client_;
|
| +};
|
| +
|
| +HEADLESS_ASYNC_DEVTOOLED_TEST_F(HeadlessDevToolsClientAttachTest);
|
| +
|
| } // namespace headless
|
|
|