summaryrefslogtreecommitdiff
path: root/chromium/chrome/common/extensions/manifest_tests/extension_manifests_initvalue_unittest.cc
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@qt.io>2020-03-05 14:36:22 +0100
committerAllan Sandfeld Jensen <allan.jensen@qt.io>2020-03-05 14:37:32 +0100
commit28db9b54de6402bd38770ecc1d620255e9d1e78f (patch)
tree469a957ff6b9b6d0ee9fb4074b9139cbaa050443 /chromium/chrome/common/extensions/manifest_tests/extension_manifests_initvalue_unittest.cc
parent3239a38a9b35d29e483b7bd67b786b4f9d109908 (diff)
parent248b70b82a40964d5594eb04feca0fa36716185d (diff)
downloadqtwebengine-chromium-28db9b54de6402bd38770ecc1d620255e9d1e78f.tar.gz
Merge remote-tracking branch 'origin/upstream-master' into 79-based
Conflicts: chromium/chrome/common/pref_names.cc chromium/chrome/common/pref_names.h Change-Id: I9be20fb8dfd946e3db1fa298dce076db5fd1f397
Diffstat (limited to 'chromium/chrome/common/extensions/manifest_tests/extension_manifests_initvalue_unittest.cc')
-rw-r--r--chromium/chrome/common/extensions/manifest_tests/extension_manifests_initvalue_unittest.cc177
1 files changed, 177 insertions, 0 deletions
diff --git a/chromium/chrome/common/extensions/manifest_tests/extension_manifests_initvalue_unittest.cc b/chromium/chrome/common/extensions/manifest_tests/extension_manifests_initvalue_unittest.cc
new file mode 100644
index 00000000000..fa1de5ddd84
--- /dev/null
+++ b/chromium/chrome/common/extensions/manifest_tests/extension_manifests_initvalue_unittest.cc
@@ -0,0 +1,177 @@
+// Copyright (c) 2012 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 "base/command_line.h"
+#include "base/i18n/rtl.h"
+#include "base/path_service.h"
+#include "base/stl_util.h"
+#include "base/strings/utf_string_conversions.h"
+#include "chrome/common/chrome_paths.h"
+#include "chrome/common/extensions/manifest_tests/chrome_manifest_test.h"
+#include "components/crx_file/id_util.h"
+#include "extensions/common/constants.h"
+#include "extensions/common/extension.h"
+#include "extensions/common/features/simple_feature.h"
+#include "extensions/common/manifest_constants.h"
+#include "extensions/common/manifest_handlers/options_page_info.h"
+#include "extensions/common/switches.h"
+#include "testing/gtest/include/gtest/gtest.h"
+#include "ui/base/l10n/l10n_util.h"
+
+namespace extensions {
+
+namespace {
+
+// The ID of test manifests requiring allowlisting.
+const char kAllowlistID[] = "lmadimbbgapmngbiclpjjngmdickadpl";
+
+} // namespace
+
+namespace errors = manifest_errors;
+namespace keys = manifest_keys;
+
+class InitValueManifestTest : public ChromeManifestTest {
+};
+
+TEST_F(InitValueManifestTest, InitFromValueInvalid) {
+ SimpleFeature::ScopedThreadUnsafeAllowlistForTest allowlist(kAllowlistID);
+ Testcase testcases[] = {
+ Testcase("init_invalid_version_missing.json", errors::kInvalidVersion),
+ Testcase("init_invalid_version_invalid.json", errors::kInvalidVersion),
+ Testcase("init_invalid_version_name_invalid.json",
+ errors::kInvalidVersionName),
+ Testcase("init_invalid_name_missing.json", errors::kInvalidName),
+ Testcase("init_invalid_name_invalid.json", errors::kInvalidName),
+ Testcase("init_invalid_description_invalid.json",
+ errors::kInvalidDescription),
+ Testcase("init_invalid_icons_invalid.json", errors::kInvalidIcons),
+ Testcase("init_invalid_icons_path_invalid.json",
+ errors::kInvalidIconPath),
+ Testcase("init_invalid_script_invalid.json",
+ errors::kInvalidContentScriptsList),
+ Testcase("init_invalid_script_item_invalid.json",
+ errors::kInvalidContentScript),
+ Testcase("init_invalid_script_matches_missing.json",
+ errors::kInvalidMatches),
+ Testcase("init_invalid_script_matches_invalid.json",
+ errors::kInvalidMatches),
+ Testcase("init_invalid_script_matches_empty.json",
+ errors::kInvalidMatchCount),
+ Testcase("init_invalid_script_match_item_invalid.json",
+ errors::kInvalidMatch),
+ Testcase("init_invalid_script_match_item_invalid_2.json",
+ errors::kInvalidMatch),
+ Testcase("init_invalid_script_files_missing.json", errors::kMissingFile),
+ Testcase("init_invalid_files_js_invalid.json", errors::kInvalidJsList),
+ Testcase("init_invalid_files_empty.json", errors::kMissingFile),
+ Testcase("init_invalid_files_js_empty_css_missing.json",
+ errors::kMissingFile),
+ Testcase("init_invalid_files_js_item_invalid.json", errors::kInvalidJs),
+ Testcase("init_invalid_files_css_invalid.json", errors::kInvalidCssList),
+ Testcase("init_invalid_files_css_item_invalid.json", errors::kInvalidCss),
+ Testcase("init_invalid_permissions_invalid.json",
+ errors::kInvalidPermissions),
+ Testcase("init_invalid_host_permissions_invalid.json",
+ errors::kInvalidHostPermissions),
+ Testcase("init_invalid_permissions_item_invalid.json",
+ errors::kInvalidPermission),
+ Testcase("init_invalid_options_url_invalid.json",
+ errors::kInvalidOptionsPage),
+ Testcase("init_invalid_locale_invalid.json",
+ errors::kInvalidDefaultLocale),
+ Testcase("init_invalid_locale_empty.json", errors::kInvalidDefaultLocale),
+ Testcase("init_invalid_min_chrome_invalid.json",
+ errors::kInvalidMinimumChromeVersion),
+ Testcase("init_invalid_chrome_version_too_low.json",
+ errors::kChromeVersionTooLow),
+ Testcase("init_invalid_short_name_empty.json", errors::kInvalidShortName),
+ Testcase("init_invalid_short_name_type.json", errors::kInvalidShortName),
+ };
+
+ RunTestcases(testcases, base::size(testcases), EXPECT_TYPE_ERROR);
+}
+
+TEST_F(InitValueManifestTest, InitFromValueValid) {
+ scoped_refptr<Extension> extension(LoadAndExpectSuccess(
+ "init_valid_minimal.json"));
+
+ base::FilePath path;
+ base::PathService::Get(chrome::DIR_TEST_DATA, &path);
+ path = path.AppendASCII("extensions");
+
+ EXPECT_TRUE(crx_file::id_util::IdIsValid(extension->id()));
+ EXPECT_EQ("1.0.0.0", extension->VersionString());
+ EXPECT_EQ("my extension", extension->name());
+ EXPECT_EQ(extension->name(), extension->short_name());
+ EXPECT_EQ(extension->id(), extension->url().host());
+ EXPECT_EQ(extension->path(), path);
+ EXPECT_EQ(path, extension->path());
+
+ // Test permissions scheme.
+ // We allow unknown API permissions, so this will be valid until we better
+ // distinguish between API and host permissions.
+ LoadAndExpectSuccess("init_valid_permissions.json");
+
+ // Test with an options page.
+ extension = LoadAndExpectSuccess("init_valid_options.json");
+ EXPECT_EQ(extensions::kExtensionScheme,
+ OptionsPageInfo::GetOptionsPage(extension.get()).scheme());
+ EXPECT_EQ("/options.html",
+ OptionsPageInfo::GetOptionsPage(extension.get()).path());
+
+ // Test optional short_name field.
+ extension = LoadAndExpectSuccess("init_valid_short_name.json");
+ EXPECT_EQ("a very descriptive extension name", extension->name());
+ EXPECT_EQ("concise name", extension->short_name());
+
+ // Test optional version_name field.
+ extension = LoadAndExpectSuccess("init_valid_version_name.json");
+ EXPECT_EQ("1.0.0.0", extension->VersionString());
+ EXPECT_EQ("1.0 alpha", extension->GetVersionForDisplay());
+
+ Testcase testcases[] = {
+ // Test with a minimum_chrome_version.
+ Testcase("init_valid_minimum_chrome.json"),
+
+ // Test a hosted app with a minimum_chrome_version.
+ Testcase("init_valid_app_minimum_chrome.json"),
+
+ // Test a hosted app with a requirements section.
+ Testcase("init_valid_app_requirements.json"),
+
+ // Verify empty permission settings are considered valid.
+ Testcase("init_valid_permissions_empty.json"),
+
+ // We allow unknown API permissions, so this will be valid until we better
+ // distinguish between API and host permissions.
+ Testcase("init_valid_permissions_unknown.json")
+ };
+
+ RunTestcases(testcases, base::size(testcases), EXPECT_TYPE_SUCCESS);
+}
+
+TEST_F(InitValueManifestTest, InitFromValueValidNameInRTL) {
+ std::string locale = l10n_util::GetApplicationLocale("");
+ base::i18n::SetICUDefaultLocale("he");
+
+ // No strong RTL characters in name.
+ scoped_refptr<Extension> extension(LoadAndExpectSuccess(
+ "init_valid_name_no_rtl.json"));
+
+ base::string16 localized_name(base::ASCIIToUTF16("Dictionary (by Google)"));
+ base::i18n::AdjustStringForLocaleDirection(&localized_name);
+ EXPECT_EQ(localized_name, base::UTF8ToUTF16(extension->name()));
+
+ // Strong RTL characters in name.
+ extension = LoadAndExpectSuccess("init_valid_name_strong_rtl.json");
+
+ localized_name = base::WideToUTF16(L"Dictionary (\x05D1\x05D2" L" Google)");
+ base::i18n::AdjustStringForLocaleDirection(&localized_name);
+ EXPECT_EQ(localized_name, base::UTF8ToUTF16(extension->name()));
+
+ // Reset locale.
+ base::i18n::SetICUDefaultLocale(locale);
+}
+
+} // namespace extensions