OLD | NEW |
(Empty) | |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. |
| 4 |
| 5 #include "components/crx_file/id_util.h" |
| 6 #include "extensions/common/extension.h" |
| 7 #include "extensions/common/extension_builder.h" |
| 8 #include "extensions/common/extension_messages.h" |
| 9 #include "extensions/common/manifest_handlers/permissions_parser.h" |
| 10 #include "extensions/common/permissions/extensions_api_permissions.h" |
| 11 #include "extensions/common/permissions/permissions_data.h" |
| 12 #include "extensions/common/value_builder.h" |
| 13 #include "ipc/ipc_message.h" |
| 14 #include "testing/gtest/include/gtest/gtest.h" |
| 15 |
| 16 namespace extensions { |
| 17 |
| 18 namespace { |
| 19 |
| 20 void CompareExtension(const Extension& extension1, |
| 21 const Extension& extension2) { |
| 22 EXPECT_EQ(extension1.name(), extension2.name()); |
| 23 EXPECT_EQ(extension1.id(), extension2.id()); |
| 24 EXPECT_EQ(extension1.path(), extension2.path()); |
| 25 EXPECT_EQ(extension1.permissions_data()->active_permissions(), |
| 26 extension2.permissions_data()->active_permissions()); |
| 27 EXPECT_TRUE(extension1.manifest()->Equals(extension2.manifest())); |
| 28 const PermissionsData::TabPermissionsMap& second_tab_permissions = |
| 29 extension2.permissions_data()->tab_specific_permissions(); |
| 30 for (const auto& tab_permissions : |
| 31 extension1.permissions_data()->tab_specific_permissions()) { |
| 32 ASSERT_NE(0u, second_tab_permissions.count(tab_permissions.first)); |
| 33 EXPECT_EQ(*tab_permissions.second, |
| 34 *(second_tab_permissions.at(tab_permissions.first))) |
| 35 << tab_permissions.first; |
| 36 } |
| 37 } |
| 38 |
| 39 } // namespace |
| 40 |
| 41 TEST(ExtensionMessageTypesTest, TestLoadedParams) { |
| 42 std::unique_ptr<base::DictionaryValue> manifest = |
| 43 DictionaryBuilder() |
| 44 .Set("name", "extension") |
| 45 .Set("description", "an extension") |
| 46 .Set("permissions", ListBuilder().Append("alarms").Build()) |
| 47 .Set("manifest_version", 2) |
| 48 .Set("version", "0.1") |
| 49 .Build(); |
| 50 scoped_refptr<const Extension> extension = |
| 51 ExtensionBuilder() |
| 52 .SetManifest(std::move(manifest)) |
| 53 .SetID(crx_file::id_util::GenerateId("foo")) |
| 54 .Build(); |
| 55 const PermissionSet& required_permissions = |
| 56 PermissionsParser::GetRequiredPermissions(extension.get()); |
| 57 LOG(WARNING) << required_permissions.apis().size(); |
| 58 EXPECT_TRUE( |
| 59 extension->permissions_data()->HasAPIPermission(APIPermission::kAlarms)); |
| 60 APIPermissionSet tab_permissions; |
| 61 tab_permissions.insert(APIPermission::kDns); |
| 62 extension->permissions_data()->UpdateTabSpecificPermissions( |
| 63 1, PermissionSet(tab_permissions, ManifestPermissionSet(), |
| 64 URLPatternSet(), URLPatternSet())); |
| 65 |
| 66 ExtensionMsg_Loaded_Params params_in(extension.get(), true); |
| 67 EXPECT_EQ(extension->id(), params_in.id); |
| 68 |
| 69 { |
| 70 // First, test just converting back to an extension. |
| 71 std::string error; |
| 72 scoped_refptr<const Extension> extension_out = |
| 73 params_in.ConvertToExtension(&error); |
| 74 EXPECT_TRUE(error.empty()); |
| 75 ASSERT_TRUE(extension_out); |
| 76 CompareExtension(*extension, *extension_out); |
| 77 } |
| 78 |
| 79 { |
| 80 // Second, try bouncing the params and then converting back. |
| 81 IPC::Message msg; |
| 82 IPC::ParamTraits<ExtensionMsg_Loaded_Params>::Write(&msg, params_in); |
| 83 ExtensionMsg_Loaded_Params params_out; |
| 84 base::PickleIterator iter(msg); |
| 85 EXPECT_TRUE(IPC::ParamTraits<ExtensionMsg_Loaded_Params>::Read( |
| 86 &msg, &iter, ¶ms_out)); |
| 87 |
| 88 EXPECT_EQ(params_in.id, params_out.id); |
| 89 EXPECT_TRUE(params_in.manifest->Equals(params_out.manifest.get())); |
| 90 EXPECT_EQ(params_in.location, params_out.location); |
| 91 EXPECT_EQ(params_in.path, params_out.path); |
| 92 EXPECT_EQ(params_in.creation_flags, params_out.creation_flags); |
| 93 // Permission equaliy on the params will be tested through the conversion to |
| 94 // an extension. |
| 95 |
| 96 std::string error; |
| 97 scoped_refptr<const Extension> extension_out = |
| 98 params_out.ConvertToExtension(&error); |
| 99 EXPECT_TRUE(error.empty()); |
| 100 ASSERT_TRUE(extension_out); |
| 101 CompareExtension(*extension, *extension_out); |
| 102 } |
| 103 } |
| 104 |
| 105 } // namespace extensions |
OLD | NEW |