blob: 3b017d67066fca9bed2c080080ef249c28ac1b81 [file] [log] [blame]
// Copyright 2022 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "headless/test/headless_devtooled_browsertest.h"
#include <memory>
#include "base/values.h"
#include "build/build_config.h"
#include "headless/lib/browser/headless_web_contents_impl.h"
#include "headless/public/headless_browser_context.h"
namespace headless {
HeadlessDevTooledBrowserTest::HeadlessDevTooledBrowserTest() = default;
HeadlessDevTooledBrowserTest::~HeadlessDevTooledBrowserTest() = default;
void HeadlessDevTooledBrowserTest::RunTest() {
HeadlessBrowserContext::Builder builder =
browser()->CreateBrowserContextBuilder();
CustomizeHeadlessBrowserContext(builder);
browser_context_ = builder.Build();
browser()->SetDefaultBrowserContext(browser_context_);
browser_devtools_client_.AttachToBrowser();
HeadlessWebContents::Builder web_contents_builder =
browser_context_->CreateWebContentsBuilder();
web_contents_builder.SetEnableBeginFrameControl(GetEnableBeginFrameControl());
CustomizeHeadlessWebContents(web_contents_builder);
web_contents_ = web_contents_builder.Build();
web_contents_->AddObserver(this);
PreRunAsynchronousTest();
RunAsynchronousTest();
PostRunAsynchronousTest();
devtools_client_.DetachClient();
web_contents_->RemoveObserver(this);
web_contents_->Close();
web_contents_ = nullptr;
browser_devtools_client_.DetachClient();
browser_context_->Close();
browser_context_ = nullptr;
// Let the tasks that might have beein scheduled during web contents
// being closed run (see https://crbug.com/1036627 for details).
base::RunLoop().RunUntilIdle();
}
void HeadlessDevTooledBrowserTest::DevToolsTargetReady() {
devtools_client_.AttachToWebContents(
HeadlessWebContentsImpl::From(web_contents_)->web_contents());
#if BUILDFLAG(IS_MAC)
base::Value::Dict params;
params.Set("width", 0);
params.Set("height", 0);
params.Set("deviceScaleFactor", 1);
params.Set("mobile", false);
devtools_client_.SendCommand(
"Emulation.setDeviceMetricsOverride", std::move(params),
base::BindOnce([](HeadlessDevTooledBrowserTest* self,
base::Value::Dict params) { self->RunDevTooledTest(); },
base::Unretained(this)));
#else
RunDevTooledTest();
#endif
}
void HeadlessDevTooledBrowserTest::RenderProcessExited(
base::TerminationStatus status,
int exit_code) {
if (status == base::TERMINATION_STATUS_NORMAL_TERMINATION)
return;
FinishAsynchronousTest();
FAIL() << "Abnormal renderer termination "
<< "(status=" << status << ", exit_code=" << exit_code << ")";
}
bool HeadlessDevTooledBrowserTest::GetEnableBeginFrameControl() {
return false;
}
void HeadlessDevTooledBrowserTest::CustomizeHeadlessBrowserContext(
HeadlessBrowserContext::Builder& builder) {}
void HeadlessDevTooledBrowserTest::CustomizeHeadlessWebContents(
HeadlessWebContents::Builder& builder) {}
} // namespace headless