// Copyright 2024 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "content/browser/webui/web_ui_impl.h"

#include "content/browser/webui/url_data_manager_backend.h"
#include "content/browser/webui/web_ui_data_source_impl.h"
#include "content/public/browser/url_data_source.h"
#include "content/public/test/browser_task_environment.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "ui/base/webui/web_ui_util.h"
#include "url/origin.h"

namespace content {

class WebUIImplTest : public testing::Test {
 protected:
  WebUIDataSourceImpl* CreateDataSource(const std::string& source_name) {
    return new WebUIDataSourceImpl(source_name);
  }
  BrowserTaskEnvironment task_environment;
};

// The URLDataManagerBackend starts with two data source, "chrome://resources"
// and "chrome-untrusted://resources". Currently, only "chrome://resources" is
// supported.
TEST_F(WebUIImplTest, LocalResourceLoaderConfigForDefaultDataSource) {
  URLDataManagerBackend data_backend;
  auto config =
      WebUIImpl::GetLocalResourceLoaderConfigForTesting(&data_backend);
  url::Origin origin = url::Origin::Create(GURL("chrome://resources/"));
  const auto& config_source = config->sources[origin];
  ASSERT_TRUE(config_source);
  EXPECT_TRUE(config_source->headers.starts_with("HTTP/1.1 200 OK"));
  EXPECT_EQ(config_source->should_replace_i18n_in_js, false);
  EXPECT_GT(config_source->path_to_resource_id_map.size(), 0ul);
  EXPECT_GT(config_source->replacement_strings.size(), 0ul);
}

// This test adds a data source with extra string replacements and resource
// paths added to it and ensures this metadata is reflected in the resulting
// Mojo struct.
TEST_F(WebUIImplTest, LocalResourceLoaderConfigForCustomDataSource) {
  URLDataManagerBackend data_backend;
  auto* data_source = CreateDataSource("my-data-source");
  data_source->AddString("a", "b");
  data_source->AddResourcePath("path/to/resource", 42);
  data_source->EnableReplaceI18nInJS();
  data_backend.AddDataSource(data_source);
  auto config =
      WebUIImpl::GetLocalResourceLoaderConfigForTesting(&data_backend);
  url::Origin origin = url::Origin::Create(GURL("chrome://my-data-source"));
  const auto& config_source = config->sources[origin];
  ASSERT_TRUE(config_source);
  EXPECT_TRUE(config_source->headers.starts_with("HTTP/1.1 200 OK"));
  EXPECT_EQ(config_source->should_replace_i18n_in_js, true);
  EXPECT_EQ(config_source->path_to_resource_id_map["path/to/resource"], 42);
  EXPECT_EQ(config_source->replacement_strings["a"], "b");
}

}  // namespace content
