| // Copyright 2018 The Chromium Authors | 
 | // Use of this source code is governed by a BSD-style license that can be | 
 | // found in the LICENSE file. | 
 |  | 
 | #include <memory> | 
 |  | 
 | #include "base/functional/bind.h" | 
 | #include "content/public/test/browser_test.h" | 
 | #include "headless/test/headless_browser_test.h" | 
 | #include "headless/test/headless_browser_test_utils.h" | 
 | #include "headless/test/headless_devtooled_browsertest.h" | 
 | #include "testing/gtest/include/gtest/gtest.h" | 
 |  | 
 | using simple_devtools_protocol_client::SimpleDevToolsProtocolClient; | 
 |  | 
 | namespace headless { | 
 |  | 
 | class HeadlessClientBrowserTest : public HeadlessDevTooledBrowserTest { | 
 |  public: | 
 |   HeadlessClientBrowserTest() = default; | 
 |  | 
 |  private: | 
 |   void RunDevTooledTest() override { | 
 |     browser_devtools_client_.SendCommand( | 
 |         "Target.createTarget", Param("url", "about:blank"), | 
 |         base::BindOnce(&HeadlessClientBrowserTest::AttachToTarget, | 
 |                        base::Unretained(this))); | 
 |   } | 
 |  | 
 |   void AttachToTarget(base::Value::Dict result) { | 
 |     base::Value::Dict params; | 
 |     params.Set("targetId", DictString(result, "result.targetId")); | 
 |     params.Set("flatten", true); | 
 |     browser_devtools_client_.SendCommand( | 
 |         "Target.attachToTarget", std::move(params), | 
 |         base::BindOnce(&HeadlessClientBrowserTest::CreateSession, | 
 |                        base::Unretained(this))); | 
 |   } | 
 |  | 
 |   void CreateSession(base::Value::Dict result) { | 
 |     session_client_ = browser_devtools_client_.CreateSession( | 
 |         DictString(result, "result.sessionId")); | 
 |  | 
 |     session_client_->SendCommand( | 
 |         "Runtime.evaluate", Param("expression", "window.location.href"), | 
 |         base::BindOnce(&HeadlessClientBrowserTest::FinishTest, | 
 |                        base::Unretained(this))); | 
 |   } | 
 |  | 
 |   void FinishTest(base::Value::Dict result) { | 
 |     EXPECT_THAT(result, DictHasValue("result.result.value", "about:blank")); | 
 |     session_client_.reset(); | 
 |     FinishAsynchronousTest(); | 
 |   } | 
 |  | 
 |  private: | 
 |   std::unique_ptr<SimpleDevToolsProtocolClient> session_client_; | 
 | }; | 
 |  | 
 | IN_PROC_BROWSER_TEST_F(HeadlessClientBrowserTest, FlatProtocolAccess) { | 
 |   RunTest(); | 
 | } | 
 |  | 
 | }  // namespace headless |