blob: cc9ed66a26da9c3c19ddbb900199d4fce3f6b045 [file] [log] [blame]
// Copyright 2017 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.
#include "components/offline_pages/core/prefetch/prefetch_request_test_base.h"
#include <memory>
#include "base/feature_list.h"
#include "base/metrics/field_trial_params.h"
#include "base/test/bind.h"
#include "base/test/mock_entropy_provider.h"
#include "base/test/task_environment.h"
#include "components/offline_pages/core/offline_page_feature.h"
#include "components/offline_pages/core/prefetch/prefetch_server_urls.h"
#include "net/url_request/url_fetcher_delegate.h"
#include "services/network/public/mojom/url_response_head.mojom.h"
#include "services/network/test/test_utils.h"
namespace offline_pages {
const char PrefetchRequestTestBase::kExperimentValueSetInFieldTrial[] =
"Test Experiment";
PrefetchRequestTestBase::PrefetchRequestTestBase()
: test_shared_url_loader_factory_(
base::MakeRefCounted<network::WeakWrapperSharedURLLoaderFactory>(
&test_url_loader_factory_)) {}
PrefetchRequestTestBase::~PrefetchRequestTestBase() {}
void PrefetchRequestTestBase::SetUp() {
test_url_loader_factory_.SetInterceptor(
base::BindLambdaForTesting([&](const network::ResourceRequest& request) {
last_resource_request_ = request;
}));
}
void PrefetchRequestTestBase::SetUpExperimentOption() {
std::map<std::string, std::string> params;
params[kPrefetchingOfflinePagesExperimentsOption] =
kExperimentValueSetInFieldTrial;
scoped_feature_list_.InitAndEnableFeatureWithParameters(
kPrefetchingOfflinePagesFeature, params);
}
void PrefetchRequestTestBase::RespondWithNetError(int net_error) {
int pending_requests_count = test_url_loader_factory_.NumPending();
DCHECK(pending_requests_count > 0);
network::URLLoaderCompletionStatus completion_status(net_error);
test_url_loader_factory_.SimulateResponseForPendingRequest(
GetPendingRequest(0)->request.url, completion_status,
network::mojom::URLResponseHead::New(), std::string());
}
void PrefetchRequestTestBase::RespondWithHttpError(
net::HttpStatusCode http_error) {
int pending_requests_count = test_url_loader_factory_.NumPending();
auto url_response_head = network::CreateURLResponseHead(http_error);
DCHECK(pending_requests_count > 0);
test_url_loader_factory_.SimulateResponseForPendingRequest(
GetPendingRequest(0)->request.url,
network::URLLoaderCompletionStatus(net::OK), std::move(url_response_head),
std::string());
}
void PrefetchRequestTestBase::RespondWithData(const std::string& data) {
DCHECK(test_url_loader_factory_.pending_requests()->size() > 0);
test_url_loader_factory_.SimulateResponseForPendingRequest(
GetPendingRequest(0)->request.url.spec(), data);
}
void PrefetchRequestTestBase::RespondWithHttpErrorAndData(
net::HttpStatusCode http_error,
const std::string& data) {
int pending_requests_count = test_url_loader_factory_.NumPending();
auto url_response_head = network::CreateURLResponseHead(http_error);
DCHECK(pending_requests_count > 0);
test_url_loader_factory_.SimulateResponseForPendingRequest(
GetPendingRequest(0)->request.url,
network::URLLoaderCompletionStatus(net::OK), std::move(url_response_head),
data);
}
network::TestURLLoaderFactory::PendingRequest*
PrefetchRequestTestBase::GetPendingRequest(size_t index) {
return test_url_loader_factory_.GetPendingRequest(index);
}
std::string PrefetchRequestTestBase::GetExperiementHeaderValue(
network::TestURLLoaderFactory::PendingRequest* pending_request) {
DCHECK(pending_request);
net::HttpRequestHeaders headers = pending_request->request.headers;
std::string experiment_header;
headers.GetHeader(kPrefetchExperimentHeaderName, &experiment_header);
return experiment_header;
}
void PrefetchRequestTestBase::RunUntilIdle() {
task_environment_.RunUntilIdle();
}
void PrefetchRequestTestBase::FastForwardBy(base::TimeDelta delta) {
task_environment_.FastForwardBy(delta);
}
void PrefetchRequestTestBase::FastForwardUntilNoTasksRemain() {
task_environment_.FastForwardUntilNoTasksRemain();
}
} // namespace offline_pages