123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191 |
- // Copyright 2021 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 "extensions/common/mojom/permission_set_mojom_traits.h"
- #include "extensions/common/manifest_handler.h"
- #include "extensions/common/mojom/permission_set.mojom.h"
- #include "extensions/common/permissions/api_permission_set.h"
- #include "extensions/common/permissions/mock_manifest_permission.h"
- #include "extensions/common/permissions/permissions_info.h"
- #include "extensions/common/scoped_testing_manifest_handler_registry.h"
- #include "mojo/public/cpp/test_support/test_utils.h"
- #include "testing/gtest/include/gtest/gtest.h"
- namespace extensions {
- using mojo::test::SerializeAndDeserialize;
- class MockManifestHandler : public ManifestHandler {
- public:
- MockManifestHandler() {}
- MockManifestHandler(const MockManifestHandler&) = delete;
- MockManifestHandler& operator=(const MockManifestHandler&) = delete;
- ~MockManifestHandler() override {}
- bool Parse(Extension* extension, std::u16string* error) override {
- return true;
- }
- ManifestPermission* CreatePermission() override {
- return new MockManifestPermission("mock_keys::key");
- }
- base::span<const char* const> Keys() const override {
- static constexpr const char* kKeys[] = {"mock_keys::key"};
- return kKeys;
- }
- };
- TEST(PermissionSetMojomTraitsTest, BasicAPIPermission) {
- const APIPermissionInfo* permission_info =
- PermissionsInfo::GetInstance()->GetByID(mojom::APIPermissionID::kSocket);
- std::unique_ptr<APIPermission> input = permission_info->CreateAPIPermission();
- {
- base::Value value(base::Value::Type::LIST);
- value.Append("tcp-connect:*.example.com:80");
- value.Append("udp-bind::8080");
- value.Append("udp-send-to::8888");
- ASSERT_TRUE(
- input->FromValue(&base::Value::AsListValue(value), nullptr, nullptr));
- }
- std::unique_ptr<APIPermission> output = nullptr;
- EXPECT_TRUE(
- SerializeAndDeserialize<extensions::mojom::APIPermission>(input, output));
- EXPECT_TRUE(input->Equal(output.get()));
- }
- TEST(PermissionSetMojomTraitsTest, BasicAPIPermissionSet) {
- const APIPermissionInfo* permission_info =
- PermissionsInfo::GetInstance()->GetByID(mojom::APIPermissionID::kSocket);
- std::unique_ptr<APIPermission> permission =
- permission_info->CreateAPIPermission();
- {
- base::Value value(base::Value::Type::LIST);
- value.Append("tcp-connect:*.example.com:80");
- value.Append("udp-bind::8080");
- value.Append("udp-send-to::8888");
- ASSERT_TRUE(permission->FromValue(&base::Value::AsListValue(value), nullptr,
- nullptr));
- }
- APIPermissionSet input;
- input.insert(mojom::APIPermissionID::kAudioCapture);
- input.insert(mojom::APIPermissionID::kDns);
- input.insert(mojom::APIPermissionID::kHid);
- input.insert(mojom::APIPermissionID::kPower);
- input.insert(mojom::APIPermissionID::kSerial);
- input.insert(std::move(permission));
- APIPermissionSet output;
- EXPECT_TRUE(SerializeAndDeserialize<extensions::mojom::APIPermissionSet>(
- input, output));
- EXPECT_EQ(input, output);
- }
- TEST(PermissionSetMojomTraitsTest, BasicManifestPermission) {
- ScopedTestingManifestHandlerRegistry scoped_registry;
- ManifestHandlerRegistry::Get()->RegisterHandler(
- std::make_unique<MockManifestHandler>());
- ManifestHandler::FinalizeRegistration();
- std::unique_ptr<extensions::ManifestPermission> input(
- extensions::ManifestHandler::CreatePermission("mock_keys::key"));
- ASSERT_TRUE(input);
- base::Value value("value");
- input->FromValue(&value);
- std::unique_ptr<extensions::ManifestPermission> output = nullptr;
- EXPECT_TRUE(SerializeAndDeserialize<extensions::mojom::ManifestPermission>(
- input, output));
- EXPECT_EQ(input->id(), output->id());
- EXPECT_TRUE(input->Equal(output.get()));
- }
- TEST(PermissionSetMojomTraitsTest, BasicManifestPermissionSet) {
- ScopedTestingManifestHandlerRegistry scoped_registry;
- ManifestHandlerRegistry::Get()->RegisterHandler(
- std::make_unique<MockManifestHandler>());
- ManifestHandler::FinalizeRegistration();
- std::unique_ptr<extensions::ManifestPermission> permission1(
- extensions::ManifestHandler::CreatePermission("mock_keys::key"));
- std::unique_ptr<extensions::ManifestPermission> permission2(
- extensions::ManifestHandler::CreatePermission("mock_keys::key"));
- base::Value value("value");
- permission2->FromValue(&value);
- ManifestPermissionSet input;
- input.insert(std::move(permission1));
- input.insert(std::move(permission2));
- ManifestPermissionSet output;
- EXPECT_TRUE(SerializeAndDeserialize<extensions::mojom::ManifestPermissionSet>(
- input, output));
- EXPECT_EQ(input, output);
- }
- TEST(PermissionSetMojomTraitsTest, BasicPermissionSet) {
- const APIPermissionInfo* permission_info =
- PermissionsInfo::GetInstance()->GetByID(mojom::APIPermissionID::kSocket);
- std::unique_ptr<APIPermission> permission =
- permission_info->CreateAPIPermission();
- {
- base::Value value(base::Value::Type::LIST);
- value.Append("tcp-connect:*.example.com:80");
- value.Append("udp-bind::8080");
- value.Append("udp-send-to::8888");
- ASSERT_TRUE(permission->FromValue(&base::Value::AsListValue(value), nullptr,
- nullptr));
- }
- APIPermissionSet apis;
- apis.insert(mojom::APIPermissionID::kAudioCapture);
- apis.insert(mojom::APIPermissionID::kDns);
- apis.insert(std::move(permission));
- ScopedTestingManifestHandlerRegistry scoped_registry;
- ManifestHandlerRegistry::Get()->RegisterHandler(
- std::make_unique<MockManifestHandler>());
- ManifestHandler::FinalizeRegistration();
- std::unique_ptr<extensions::ManifestPermission> permission1(
- extensions::ManifestHandler::CreatePermission("mock_keys::key"));
- std::unique_ptr<extensions::ManifestPermission> permission2(
- extensions::ManifestHandler::CreatePermission("mock_keys::key"));
- {
- base::Value value("value");
- permission2->FromValue(&value);
- }
- ManifestPermissionSet manifest_permissions;
- manifest_permissions.insert(std::move(permission1));
- manifest_permissions.insert(std::move(permission2));
- URLPattern pattern1(URLPattern::SCHEME_ALL);
- EXPECT_EQ(URLPattern::ParseResult::kSuccess,
- pattern1.Parse("http://*.foo:1234/bar"))
- << "Got unexpected error in the URLPattern parsing";
- URLPattern pattern2(URLPattern::SCHEME_HTTPS);
- EXPECT_EQ(URLPattern::ParseResult::kSuccess,
- pattern2.Parse("https://www.google.com/foobar"))
- << "Got unexpected error in the URLPattern parsing";
- URLPatternSet hosts;
- hosts.AddPattern(pattern1);
- hosts.AddPattern(pattern2);
- URLPattern pattern3(URLPattern::SCHEME_HTTP);
- EXPECT_EQ(URLPattern::ParseResult::kSuccess,
- pattern3.Parse("http://127.0.0.1/*"))
- << "Got unexpected error in the URLPattern parsing";
- URLPatternSet user_script_hosts;
- user_script_hosts.AddPattern(pattern3);
- PermissionSet input(std::move(apis), std::move(manifest_permissions),
- std::move(hosts), std::move(user_script_hosts));
- PermissionSet output;
- EXPECT_TRUE(
- SerializeAndDeserialize<extensions::mojom::PermissionSet>(input, output));
- EXPECT_EQ(input, output);
- }
- } // namespace extensions
|