#include <cmath>
#include <optional>
#include <string>
#include "base/command_line.h"
#include "base/files/file_path.h"
#include "base/files/file_util.h"
#include "base/files/scoped_temp_dir.h"
#include "base/functional/bind.h"
#include "base/strings/stringprintf.h"
#include "base/strings/to_string.h"
#include "base/task/single_thread_task_runner.h"
#include "base/test/test_timeouts.h"
#include "base/threading/thread_restrictions.h"
#include "build/build_config.h"
#include "components/headless/command_handler/headless_command_handler.h"
#include "components/headless/command_handler/headless_command_switches.h"
#include "components/headless/test/bitmap_utils.h"
#include "components/headless/test/capture_std_stream.h"
#include "content/public/browser/web_contents_observer.h"
#include "content/public/test/browser_test.h"
#include "headless/lib/browser/headless_browser_context_impl.h"
#include "headless/lib/browser/headless_browser_impl.h"
#include "headless/lib/browser/headless_web_contents_impl.h"
#include "headless/public/headless_browser.h"
#include "headless/public/headless_browser_context.h"
#include "headless/public/headless_web_contents.h"
#include "headless/public/switches.h"
#include "headless/test/headless_browser_test.h"
#include "headless/test/headless_browser_test_utils.h"
#include "net/test/embedded_test_server/embedded_test_server.h"
#include "pdf/buildflags.h"
#include "printing/buildflags/buildflags.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "third_party/skia/include/core/SkBitmap.h"
#include "third_party/skia/include/core/SkColor.h"
#include "ui/display/display_switches.h"
#include "ui/gfx/codec/png_codec.h"
#include "ui/gfx/geometry/point.h"
#include "ui/gfx/geometry/rect.h"
#include "ui/gfx/geometry/size.h"
#include "url/gurl.h"
#if BUILDFLAG(IS_POSIX)
#include <signal.h>
#include <unistd.h>
#endif
#if BUILDFLAG(IS_WIN)
#include <Windows.h>
#endif
#if BUILDFLAG(ENABLE_PRINTING) && BUILDFLAG(ENABLE_PDF)
#include "components/headless/test/pdf_utils.h"
#endif
namespace headless {
namespace {
bool DecodePNG(const std::string& png_data, SkBitmap* bitmap) { … }
}
class HeadlessCommandBrowserTest : public HeadlessBrowserTest,
public content::WebContentsObserver { … };
class HeadlessFileCommandBrowserTest : public HeadlessCommandBrowserTest { … };
class HeadlessDumpDomCommandBrowserTest : public HeadlessCommandBrowserTest { … };
IN_PROC_BROWSER_TEST_F(HeadlessDumpDomCommandBrowserTest, DumpDom) { … }
class HeadlessDumpDomVirtualTimeBudgetCommandBrowserTest
: public HeadlessDumpDomCommandBrowserTest { … };
IN_PROC_BROWSER_TEST_F(HeadlessDumpDomVirtualTimeBudgetCommandBrowserTest,
DumpDomVirtualTimeBudget) { … }
class HeadlessDumpDomTimeoutCommandBrowserTestBase
: public HeadlessDumpDomCommandBrowserTest { … };
class HeadlessDumpDomTimeoutCommandBrowserTest
: public HeadlessDumpDomTimeoutCommandBrowserTestBase { … };
IN_PROC_BROWSER_TEST_F(HeadlessDumpDomTimeoutCommandBrowserTest,
DumpDomTimeout) { … }
class HeadlessDumpDomSubResourceTimeoutCommandBrowserTest
: public HeadlessDumpDomTimeoutCommandBrowserTestBase,
public testing::WithParamInterface<bool> { … };
INSTANTIATE_TEST_SUITE_P(…);
IN_PROC_BROWSER_TEST_P(HeadlessDumpDomSubResourceTimeoutCommandBrowserTest,
DumpDomSubResourceTimeout) { … }
class HeadlessScreenshotCommandBrowserTest
: public HeadlessFileCommandBrowserTest { … };
IN_PROC_BROWSER_TEST_F(HeadlessScreenshotCommandBrowserTest, Screenshot) { … }
class HeadlessScreenshotWithBackgroundCommandBrowserTest
: public HeadlessScreenshotCommandBrowserTest { … };
IN_PROC_BROWSER_TEST_F(HeadlessScreenshotWithBackgroundCommandBrowserTest,
ScreenshotBackground) { … }
class HeadlessScreenshotCommandBrowserTestWithWindowSize
: public HeadlessScreenshotCommandBrowserTest { … };
IN_PROC_BROWSER_TEST_F(HeadlessScreenshotCommandBrowserTestWithWindowSize,
ScreenshotWindowSize) { … }
#if BUILDFLAG(ENABLE_PRINTING) && BUILDFLAG(ENABLE_PDF)
class HeadlessPrintToPdfCommandBrowserTest
: public HeadlessFileCommandBrowserTest { … };
IN_PROC_BROWSER_TEST_F(HeadlessPrintToPdfCommandBrowserTest, PrintToPdf) { … }
class HeadlessPrintToPdfWithBackgroundCommandBrowserTest
: public HeadlessPrintToPdfCommandBrowserTest { … };
IN_PROC_BROWSER_TEST_F(HeadlessPrintToPdfWithBackgroundCommandBrowserTest,
PrintToPdfBackground) { … }
#endif
#if BUILDFLAG(IS_POSIX) || BUILDFLAG(IS_WIN)
class HeadlessCommandSignalBrowserTest
: public HeadlessDumpDomCommandBrowserTest { … };
IN_PROC_BROWSER_TEST_F(HeadlessCommandSignalBrowserTest, SendCtrlCSignal) { … }
#endif
}