#include "base/no_destructor.h"
#include "content/public/browser/network_service_instance.h"
#include "content/public/common/content_client.h"
#include "content/public/test/browser_task_environment.h"
#include "content/test/test_content_browser_client.h"
#include "mojo/public/cpp/bindings/remote.h"
#include "services/cert_verifier/public/mojom/cert_verifier_service_factory.mojom.h"
#include "services/network/public/mojom/network_context.mojom.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace content {
namespace {
class EarlyShutdownTestContentBrowserClient : public TestContentBrowserClient {
public:
static EarlyShutdownTestContentBrowserClient* GetInstance() {
static base::NoDestructor<EarlyShutdownTestContentBrowserClient> instance;
return instance.get();
}
private:
bool IsShuttingDown() override { return true; }
};
}
class NetworkServiceShutdownRaceTest : public testing::Test {
public:
NetworkServiceShutdownRaceTest() = default;
NetworkServiceShutdownRaceTest(const NetworkServiceShutdownRaceTest&) =
delete;
NetworkServiceShutdownRaceTest& operator=(
const NetworkServiceShutdownRaceTest&) = delete;
protected:
void CreateNetworkContext() {
mojo::Remote<network::mojom::NetworkContext> network_context;
network::mojom::NetworkContextParamsPtr context_params =
network::mojom::NetworkContextParams::New();
context_params->cert_verifier_params = GetCertVerifierParams(
cert_verifier::mojom::CertVerifierCreationParams::New());
CreateNetworkContextInNetworkService(
network_context.BindNewPipeAndPassReceiver(),
std::move(context_params));
}
private:
BrowserTaskEnvironment task_environment_;
};
TEST_F(NetworkServiceShutdownRaceTest, CreateNetworkContextDuringShutdown) {
std::ignore = SetBrowserClientForTesting(
EarlyShutdownTestContentBrowserClient::GetInstance());
CreateNetworkContext();
}
}