blob: c3aeb277425d5e9dc0c12df98c511548f97ac5dc [file] [log] [blame]
// Copyright 2023 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include <string>
#include "chrome/browser/extensions/extension_browsertest.h"
#include "content/public/test/browser_test.h"
#include "extensions/common/extension_features.h"
#include "extensions/common/manifest_handlers/web_file_handlers_info.h"
#include "extensions/test/test_extension_dir.h"
namespace extensions {
namespace {
class WebFileHandlersBrowserTest : public ExtensionBrowserTest {
public:
WebFileHandlersBrowserTest() {
feature_list_.InitAndDisableFeature(
extensions_features::kExtensionWebFileHandlers);
}
private:
base::test::ScopedFeatureList feature_list_;
};
// Web File Handlers are either parsed or emit a warning, depending on the
// current browser channel and feature enablement.
IN_PROC_BROWSER_TEST_F(WebFileHandlersBrowserTest, Warning) {
struct {
const char* name;
const char* manifest;
} test_cases[] = {
{"Valid `file_handlers` key",
R"({
"name": "Test",
"version": "0.0.1",
"manifest_version": 3,
"file_handlers": [
{
"name": "Comma separated values",
"action": "/open-csv.html",
"accept": {"text/csv": [".csv"]}
}
]
})"},
{"Invalid `file_handlers` key",
R"({
"name": "Test",
"version": "0.0.1",
"manifest_version": 3,
"file_handlers": [
{
"error": "Invalid"
}
]
})"},
};
for (const auto& test_case : test_cases) {
SCOPED_TRACE(test_case.name);
// Create an extension.
TestExtensionDir extension_dir;
extension_dir.WriteFile(FILE_PATH_LITERAL("open-csv.html"), "");
extension_dir.WriteManifest(test_case.manifest);
// Load the extension.
const Extension* extension = LoadExtension(
extension_dir.UnpackedPath(), {.ignore_manifest_warnings = true});
ASSERT_TRUE(extension);
// Verify that there are no file handlers and that a warning was observed.
ASSERT_FALSE(WebFileHandlers::HasFileHandlers(*extension));
ASSERT_EQ(1u, extension->install_warnings().size());
#if BUILDFLAG(IS_CHROMEOS)
EXPECT_EQ("Unrecognized manifest key 'file_handlers'.",
extension->install_warnings().front().message);
#else
EXPECT_EQ(
"'file_handlers' is only allowed for packaged apps, but this is a "
"extension.",
extension->install_warnings().front().message);
#endif // IS_CHROMEOS
}
}
} // namespace
} // namespace extensions