// Copyright 2021 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef ASH_WEBUI_WEB_APPLICATIONS_WEBUI_TEST_PROD_UTIL_H_
#define ASH_WEBUI_WEB_APPLICATIONS_WEBUI_TEST_PROD_UTIL_H_
#include "content/public/browser/web_ui_data_source.h"
// If the current process is running for tests, configures |host_source| for
// testing by installing a request filter that can be satisfied by tests wanting
// to provide custom resources.
// If handler_name and the switch kWebUiDataSourcePathForTesting are provided,
// then before attempting to load the real resource, it will first attempt to
// load it from <switch_value>/handler_name.
// For example, if the switch is /tmp/resource_overrides, attempting to load
// js/app_main.js from the handler named "help_app/untrusted" will first
// attempt to load from /tmp/resource_overrides/help_app/untrusted/js/main.js.
// Note that if these resources are scripts, further CSP changes (e.g.
// trusted-types) may be required in order for them to load. If
// `real_[should_]handle_request_callback` arguments are provided, the test
// request filter will be configured to handle these as well. If not running for
// tests, `real_[should_]handle_request_callback` arguments are passed directly
// to host_source->SetRequestFilter(). Returns true if the testing request
// filter was installed.
bool MaybeConfigureTestableDataSource(
content::WebUIDataSource* host_source,
const std::string& handler_name = "",
const content::WebUIDataSource::ShouldHandleRequestCallback&
real_should_handle_request_callback = {},
const content::WebUIDataSource::HandleRequestCallback&
real_handle_request_callback = {});
// Configures the data source request filter used for testing. Only testing code
// should call this.
void SetTestableDataSourceRequestHandlerForTesting(
content::WebUIDataSource::ShouldHandleRequestCallback should_handle,
content::WebUIDataSource::HandleRequestCallback handler);
#endif // ASH_WEBUI_WEB_APPLICATIONS_WEBUI_TEST_PROD_UTIL_H_