| Index: headless/lib/headless_browser_browsertest.cc
|
| diff --git a/headless/lib/headless_browser_browsertest.cc b/headless/lib/headless_browser_browsertest.cc
|
| index 2c85ae0c80b1704977921e687724af65a0d50d3e..f23d5af7eaef105e623a59372e3544cb46de7d5b 100644
|
| --- a/headless/lib/headless_browser_browsertest.cc
|
| +++ b/headless/lib/headless_browser_browsertest.cc
|
| @@ -21,6 +21,7 @@
|
| #include "headless/public/devtools/domains/inspector.h"
|
| #include "headless/public/devtools/domains/network.h"
|
| #include "headless/public/devtools/domains/page.h"
|
| +#include "headless/public/devtools/domains/tracing.h"
|
| #include "headless/public/headless_browser.h"
|
| #include "headless/public/headless_devtools_client.h"
|
| #include "headless/public/headless_devtools_target.h"
|
| @@ -829,4 +830,76 @@ IN_PROC_BROWSER_TEST_F(HeadlessBrowserTestWithNetLog, WriteNetLog) {
|
| EXPECT_GE(net_log_data.find("hello.html"), 0u);
|
| }
|
|
|
| +namespace {
|
| +
|
| +class TraceHelper : public headless::tracing::ExperimentalObserver {
|
| + public:
|
| + TraceHelper(HeadlessBrowserTest* browser_test, HeadlessDevToolsTarget* target)
|
| + : browser_test_(browser_test),
|
| + target_(target),
|
| + client_(HeadlessDevToolsClient::Create()),
|
| + tracing_data_(base::MakeUnique<base::ListValue>()) {
|
| + EXPECT_FALSE(target_->IsAttached());
|
| + target_->AttachClient(client_.get());
|
| + EXPECT_TRUE(target_->IsAttached());
|
| +
|
| + client_->GetTracing()->GetExperimental()->AddObserver(this);
|
| +
|
| + client_->GetTracing()->GetExperimental()->Start(
|
| + tracing::StartParams::Builder().Build(),
|
| + base::Bind(&TraceHelper::OnTracingStarted, base::Unretained(this)));
|
| + }
|
| +
|
| + ~TraceHelper() override {
|
| + target_->DetachClient(client_.get());
|
| + EXPECT_FALSE(target_->IsAttached());
|
| + }
|
| +
|
| + std::unique_ptr<base::ListValue> TakeTracingData() {
|
| + return std::move(tracing_data_);
|
| + }
|
| +
|
| + private:
|
| + void OnTracingStarted(std::unique_ptr<headless::tracing::StartResult>) {
|
| + // We don't need the callback from End, but the OnTracingComplete event.
|
| + client_->GetTracing()->GetExperimental()->End(
|
| + headless::tracing::EndParams::Builder().Build());
|
| + }
|
| +
|
| + // headless::tracing::ExperimentalObserver implementation:
|
| + void OnDataCollected(
|
| + const headless::tracing::DataCollectedParams& params) override {
|
| + for (const auto& value : *params.GetValue()) {
|
| + tracing_data_->Append(value->CreateDeepCopy());
|
| + }
|
| + }
|
| +
|
| + void OnTracingComplete(
|
| + const headless::tracing::TracingCompleteParams& params) override {
|
| + browser_test_->FinishAsynchronousTest();
|
| + }
|
| +
|
| + HeadlessBrowserTest* browser_test_; // Not owned.
|
| + HeadlessDevToolsTarget* target_; // Not owned.
|
| + std::unique_ptr<HeadlessDevToolsClient> client_;
|
| +
|
| + std::unique_ptr<base::ListValue> tracing_data_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(TraceHelper);
|
| +};
|
| +
|
| +} // namespace
|
| +
|
| +IN_PROC_BROWSER_TEST_F(HeadlessBrowserTest, TraceUsingBrowserDevToolsTarget) {
|
| + HeadlessDevToolsTarget* target = browser()->GetDevToolsTarget();
|
| + EXPECT_NE(nullptr, target);
|
| +
|
| + TraceHelper helper(this, target);
|
| + RunAsynchronousTest();
|
| +
|
| + std::unique_ptr<base::ListValue> tracing_data = helper.TakeTracingData();
|
| + EXPECT_TRUE(tracing_data);
|
| + EXPECT_LT(0u, tracing_data->GetSize());
|
| +}
|
| +
|
| } // namespace headless
|
|
|