blob: 4165a2b04f23e7642f5805fe4bceaa1ad93dccb0 [file] [log] [blame]
// Copyright 2021 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef COMPONENTS_SUBRESOURCE_REDIRECT_SUBRESOURCE_REDIRECT_BROWSER_TEST_UTIL_H_
#define COMPONENTS_SUBRESOURCE_REDIRECT_SUBRESOURCE_REDIRECT_BROWSER_TEST_UTIL_H_
#include <map>
#include <string>
#include "base/test/metrics/histogram_tester.h"
#include "components/subresource_redirect/subresource_redirect_test_util.h"
#include "net/test/embedded_test_server/embedded_test_server.h"
#include "url/gurl.h"
namespace subresource_redirect {
// Retries fetching |histogram_name| until it contains at least |count| samples.
void RetryForHistogramUntilCountReached(base::HistogramTester* histogram_tester,
const std::string& histogram_name,
size_t count);
// Fetches histograms from renderer child processes.
void FetchHistogramsFromChildProcesses();
// Embedded test server for the robots rules.
class RobotsRulesTestServer {
public:
// Different failures modes the robots server should return.
enum FailureMode {
kNone = 0,
kLoadshed503RetryAfterResponse,
kTimeout,
};
RobotsRulesTestServer();
~RobotsRulesTestServer();
// Start the server.
bool Start();
std::string GetURL() const {
return server_.GetURL("robotsrules.com", "/").spec();
}
void AddRobotsRules(const GURL& origin,
const std::vector<RobotsRule>& robots_rules);
void VerifyRequestedOrigins(const std::set<std::string>& requests);
std::set<std::string> received_requests() const { return received_requests_; }
void set_failure_mode(FailureMode failure_mode) {
failure_mode_ = failure_mode;
}
private:
std::unique_ptr<net::test_server::HttpResponse> OnServerRequest(
const net::test_server::HttpRequest& request);
// Called on every robots request.
void OnRequestMonitor(const net::test_server::HttpRequest& request);
// Robots rules proto keyed by origin.
std::map<std::string, std::string> robots_rules_proto_;
// Whether the robots server should return failure.
FailureMode failure_mode_ = FailureMode::kNone;
// All the origins the robots rules are requested for.
std::set<std::string> received_requests_;
net::EmbeddedTestServer server_;
};
// Embedded test server to serve the image resources.
class ImageCompressionTestServer {
public:
// Different failures modes the image server should return
enum FailureMode {
kNone = 0,
kLoadshed503RetryAfterResponse,
};
ImageCompressionTestServer();
~ImageCompressionTestServer();
// Start the server.
bool Start();
std::string GetURL() const {
return server_.GetURL("imagecompression.com", "/").spec();
}
void VerifyRequestedImagePaths(const std::set<std::string>& paths);
void set_failure_mode(FailureMode failure_mode) {
failure_mode_ = failure_mode;
}
private:
std::unique_ptr<net::test_server::HttpResponse> OnServerRequest(
const net::test_server::HttpRequest& request);
// Called on every subresource request.
void OnRequestMonitor(const net::test_server::HttpRequest& request);
// All the URL paths of the requested images.
std::set<std::string> received_request_paths_;
// Whether the subresource server should return failure.
FailureMode failure_mode_ = FailureMode::kNone;
net::EmbeddedTestServer server_;
};
} // namespace subresource_redirect
#endif // COMPONENTS_SUBRESOURCE_REDIRECT_SUBRESOURCE_REDIRECT_BROWSER_TEST_UTIL_H_