Index: extensions/common/extension_messages_unittest.cc |
diff --git a/extensions/common/extension_messages_unittest.cc b/extensions/common/extension_messages_unittest.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..ea5dd033571939fa8f0aa0321f3af0e6ad3093cf |
--- /dev/null |
+++ b/extensions/common/extension_messages_unittest.cc |
@@ -0,0 +1,105 @@ |
+// Copyright 2016 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 "components/crx_file/id_util.h" |
+#include "extensions/common/extension.h" |
+#include "extensions/common/extension_builder.h" |
+#include "extensions/common/extension_messages.h" |
+#include "extensions/common/manifest_handlers/permissions_parser.h" |
+#include "extensions/common/permissions/extensions_api_permissions.h" |
+#include "extensions/common/permissions/permissions_data.h" |
+#include "extensions/common/value_builder.h" |
+#include "ipc/ipc_message.h" |
+#include "testing/gtest/include/gtest/gtest.h" |
+ |
+namespace extensions { |
+ |
+namespace { |
+ |
+void CompareExtension(const Extension& extension1, |
+ const Extension& extension2) { |
+ EXPECT_EQ(extension1.name(), extension2.name()); |
+ EXPECT_EQ(extension1.id(), extension2.id()); |
+ EXPECT_EQ(extension1.path(), extension2.path()); |
+ EXPECT_EQ(extension1.permissions_data()->active_permissions(), |
+ extension2.permissions_data()->active_permissions()); |
+ EXPECT_TRUE(extension1.manifest()->Equals(extension2.manifest())); |
+ const PermissionsData::TabPermissionsMap& second_tab_permissions = |
+ extension2.permissions_data()->tab_specific_permissions(); |
+ for (const auto& tab_permissions : |
+ extension1.permissions_data()->tab_specific_permissions()) { |
+ ASSERT_NE(0u, second_tab_permissions.count(tab_permissions.first)); |
+ EXPECT_EQ(*tab_permissions.second, |
+ *(second_tab_permissions.at(tab_permissions.first))) |
+ << tab_permissions.first; |
+ } |
+} |
+ |
+} // namespace |
+ |
+TEST(ExtensionMessageTypesTest, TestLoadedParams) { |
+ std::unique_ptr<base::DictionaryValue> manifest = |
+ DictionaryBuilder() |
+ .Set("name", "extension") |
+ .Set("description", "an extension") |
+ .Set("permissions", ListBuilder().Append("alarms").Build()) |
+ .Set("manifest_version", 2) |
+ .Set("version", "0.1") |
+ .Build(); |
+ scoped_refptr<const Extension> extension = |
+ ExtensionBuilder() |
+ .SetManifest(std::move(manifest)) |
+ .SetID(crx_file::id_util::GenerateId("foo")) |
+ .Build(); |
+ const PermissionSet& required_permissions = |
+ PermissionsParser::GetRequiredPermissions(extension.get()); |
+ LOG(WARNING) << required_permissions.apis().size(); |
+ EXPECT_TRUE( |
+ extension->permissions_data()->HasAPIPermission(APIPermission::kAlarms)); |
+ APIPermissionSet tab_permissions; |
+ tab_permissions.insert(APIPermission::kDns); |
+ extension->permissions_data()->UpdateTabSpecificPermissions( |
+ 1, PermissionSet(tab_permissions, ManifestPermissionSet(), |
+ URLPatternSet(), URLPatternSet())); |
+ |
+ ExtensionMsg_Loaded_Params params_in(extension.get(), true); |
+ EXPECT_EQ(extension->id(), params_in.id); |
+ |
+ { |
+ // First, test just converting back to an extension. |
+ std::string error; |
+ scoped_refptr<const Extension> extension_out = |
+ params_in.ConvertToExtension(&error); |
+ EXPECT_TRUE(error.empty()); |
+ ASSERT_TRUE(extension_out); |
+ CompareExtension(*extension, *extension_out); |
+ } |
+ |
+ { |
+ // Second, try bouncing the params and then converting back. |
+ IPC::Message msg; |
+ IPC::ParamTraits<ExtensionMsg_Loaded_Params>::Write(&msg, params_in); |
+ ExtensionMsg_Loaded_Params params_out; |
+ base::PickleIterator iter(msg); |
+ EXPECT_TRUE(IPC::ParamTraits<ExtensionMsg_Loaded_Params>::Read( |
+ &msg, &iter, ¶ms_out)); |
+ |
+ EXPECT_EQ(params_in.id, params_out.id); |
+ EXPECT_TRUE(params_in.manifest->Equals(params_out.manifest.get())); |
+ EXPECT_EQ(params_in.location, params_out.location); |
+ EXPECT_EQ(params_in.path, params_out.path); |
+ EXPECT_EQ(params_in.creation_flags, params_out.creation_flags); |
+ // Permission equaliy on the params will be tested through the conversion to |
+ // an extension. |
+ |
+ std::string error; |
+ scoped_refptr<const Extension> extension_out = |
+ params_out.ConvertToExtension(&error); |
+ EXPECT_TRUE(error.empty()); |
+ ASSERT_TRUE(extension_out); |
+ CompareExtension(*extension, *extension_out); |
+ } |
+} |
+ |
+} // namespace extensions |