0
Files
src/content/browser/site_per_process_browsertest.h
Chris Fredrickson 5b9810c468 Rewrite SitePerProcess tests to avoid manual replies
Removing reliance on EXECUTE_SCRIPT_USE_MANUAL_REPLY forces the
JavaScript to be written in terms of promises, which makes the code
less bug-prone since double-sends are systematically prevented (see
https://crrev.com/c/4318742 for an example bug that would have been
prevented by this).

Bug: 1423407
Change-Id: I7eb3bb012213da269cf5671ad492561c8c65fc27
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4371949
Reviewed-by: Ken Buchanan <kenrb@chromium.org>
Auto-Submit: Chris Fredrickson <cfredric@chromium.org>
Commit-Queue: Chris Fredrickson <cfredric@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1122645}
2023-03-27 21:08:30 +00:00

87 lines
2.5 KiB
C++

// Copyright 2014 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CONTENT_BROWSER_SITE_PER_PROCESS_BROWSERTEST_H_
#define CONTENT_BROWSER_SITE_PER_PROCESS_BROWSERTEST_H_
#include <string>
#include "base/test/scoped_feature_list.h"
#include "content/browser/web_contents/web_contents_impl.h"
#include "content/public/test/content_browser_test.h"
#include "content/public/test/content_mock_cert_verifier.h"
#include "content/shell/browser/shell.h"
#include "content/test/content_browser_test_utils_internal.h"
#include "url/gurl.h"
namespace content {
class FrameTreeNode;
class SitePerProcessBrowserTestBase : public ContentBrowserTest {
public:
SitePerProcessBrowserTestBase();
SitePerProcessBrowserTestBase(const SitePerProcessBrowserTestBase&) = delete;
SitePerProcessBrowserTestBase& operator=(
const SitePerProcessBrowserTestBase&) = delete;
protected:
std::string DepictFrameTree(FrameTreeNode* node);
std::string WaitForMessageScript(const std::string& result_expression);
void SetUpCommandLine(base::CommandLine* command_line) override;
void SetUpOnMainThread() override;
WebContentsImpl* web_contents() const {
return static_cast<WebContentsImpl*>(shell()->web_contents());
}
static void ForceUpdateViewportIntersection(
FrameTreeNode* frame_tree_node,
const blink::mojom::ViewportIntersectionState& intersection_state);
void RunPostedTasks();
private:
FrameTreeVisualizer visualizer_;
base::test::ScopedFeatureList feature_list_;
};
class SitePerProcessBrowserTest
: public SitePerProcessBrowserTestBase,
public ::testing::WithParamInterface<std::string> {
public:
SitePerProcessBrowserTest();
SitePerProcessBrowserTest(const SitePerProcessBrowserTest&) = delete;
SitePerProcessBrowserTest& operator=(const SitePerProcessBrowserTest&) =
delete;
std::string GetExpectedOrigin(const std::string& host);
private:
base::test::ScopedFeatureList feature_list_;
};
class SitePerProcessIgnoreCertErrorsBrowserTest
: public SitePerProcessBrowserTest {
public:
SitePerProcessIgnoreCertErrorsBrowserTest() = default;
protected:
void SetUpOnMainThread() override;
void SetUpCommandLine(base::CommandLine* command_line) override;
void SetUpInProcessBrowserTestFixture() override;
void TearDownInProcessBrowserTestFixture() override;
private:
content::ContentMockCertVerifier mock_cert_verifier_;
};
} // namespace content
#endif // CONTENT_BROWSER_SITE_PER_PROCESS_BROWSERTEST_H_