| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "base/message_loop.h" | 5 #include "base/message_loop.h" |
| 6 #include "base/path_service.h" | 6 #include "base/path_service.h" |
| 7 #include "chrome/browser/extensions/extension_info_map.h" | 7 #include "chrome/browser/extensions/extension_info_map.h" |
| 8 #include "chrome/common/chrome_paths.h" | 8 #include "chrome/common/chrome_paths.h" |
| 9 #include "chrome/common/extensions/extension.h" | 9 #include "chrome/common/extensions/extension.h" |
| 10 #include "content/browser/browser_thread.h" | 10 #include "content/browser/browser_thread.h" |
| (...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 77 | 77 |
| 78 // New extensions should have a single reference holding onto them. | 78 // New extensions should have a single reference holding onto them. |
| 79 scoped_refptr<Extension> extension1(CreateExtension("extension1")); | 79 scoped_refptr<Extension> extension1(CreateExtension("extension1")); |
| 80 scoped_refptr<Extension> extension2(CreateExtension("extension2")); | 80 scoped_refptr<Extension> extension2(CreateExtension("extension2")); |
| 81 scoped_refptr<Extension> extension3(CreateExtension("extension3")); | 81 scoped_refptr<Extension> extension3(CreateExtension("extension3")); |
| 82 EXPECT_TRUE(extension1->HasOneRef()); | 82 EXPECT_TRUE(extension1->HasOneRef()); |
| 83 EXPECT_TRUE(extension2->HasOneRef()); | 83 EXPECT_TRUE(extension2->HasOneRef()); |
| 84 EXPECT_TRUE(extension3->HasOneRef()); | 84 EXPECT_TRUE(extension3->HasOneRef()); |
| 85 | 85 |
| 86 // Add a ref to each extension and give it to the info map. | 86 // Add a ref to each extension and give it to the info map. |
| 87 info_map->AddExtension(extension1); | 87 info_map->AddExtension(extension1, base::Time(), false); |
| 88 info_map->AddExtension(extension2); | 88 info_map->AddExtension(extension2, base::Time(), false); |
| 89 info_map->AddExtension(extension3); | 89 info_map->AddExtension(extension3, base::Time(), false); |
| 90 | 90 |
| 91 // Release extension1, and the info map should have the only ref. | 91 // Release extension1, and the info map should have the only ref. |
| 92 const Extension* weak_extension1 = extension1; | 92 const Extension* weak_extension1 = extension1; |
| 93 extension1 = NULL; | 93 extension1 = NULL; |
| 94 EXPECT_TRUE(weak_extension1->HasOneRef()); | 94 EXPECT_TRUE(weak_extension1->HasOneRef()); |
| 95 | 95 |
| 96 // Remove extension2, and the extension2 object should have the only ref. | 96 // Remove extension2, and the extension2 object should have the only ref. |
| 97 info_map->RemoveExtension(extension2->id(), UnloadedExtensionInfo::UNINSTALL); | 97 info_map->RemoveExtension(extension2->id(), UnloadedExtensionInfo::UNINSTALL); |
| 98 EXPECT_TRUE(extension2->HasOneRef()); | 98 EXPECT_TRUE(extension2->HasOneRef()); |
| 99 | 99 |
| 100 // Delete the info map, and the extension3 object should have the only ref. | 100 // Delete the info map, and the extension3 object should have the only ref. |
| 101 info_map = NULL; | 101 info_map = NULL; |
| 102 EXPECT_TRUE(extension3->HasOneRef()); | 102 EXPECT_TRUE(extension3->HasOneRef()); |
| 103 } | 103 } |
| 104 | 104 |
| 105 // Tests that we can query a few extension properties from the ExtensionInfoMap. | 105 // Tests that we can query a few extension properties from the ExtensionInfoMap. |
| 106 TEST_F(ExtensionInfoMapTest, Properties) { | 106 TEST_F(ExtensionInfoMapTest, Properties) { |
| 107 scoped_refptr<ExtensionInfoMap> info_map(new ExtensionInfoMap()); | 107 scoped_refptr<ExtensionInfoMap> info_map(new ExtensionInfoMap()); |
| 108 | 108 |
| 109 scoped_refptr<Extension> extension1(CreateExtension("extension1")); | 109 scoped_refptr<Extension> extension1(CreateExtension("extension1")); |
| 110 scoped_refptr<Extension> extension2(CreateExtension("extension2")); | 110 scoped_refptr<Extension> extension2(CreateExtension("extension2")); |
| 111 | 111 |
| 112 info_map->AddExtension(extension1); | 112 info_map->AddExtension(extension1, base::Time(), false); |
| 113 info_map->AddExtension(extension2); | 113 info_map->AddExtension(extension2, base::Time(), false); |
| 114 | 114 |
| 115 EXPECT_EQ(2u, info_map->extensions().size()); | 115 EXPECT_EQ(2u, info_map->extensions().size()); |
| 116 EXPECT_EQ(extension1.get(), info_map->extensions().GetByID(extension1->id())); | 116 EXPECT_EQ(extension1.get(), info_map->extensions().GetByID(extension1->id())); |
| 117 EXPECT_EQ(extension2.get(), info_map->extensions().GetByID(extension2->id())); | 117 EXPECT_EQ(extension2.get(), info_map->extensions().GetByID(extension2->id())); |
| 118 } | 118 } |
| 119 | 119 |
| 120 // Tests CheckURLAccessToExtensionPermission given both extension and app URLs. | 120 // Tests CheckURLAccessToExtensionPermission given both extension and app URLs. |
| 121 TEST_F(ExtensionInfoMapTest, CheckPermissions) { | 121 TEST_F(ExtensionInfoMapTest, CheckPermissions) { |
| 122 scoped_refptr<ExtensionInfoMap> info_map(new ExtensionInfoMap()); | 122 scoped_refptr<ExtensionInfoMap> info_map(new ExtensionInfoMap()); |
| 123 | 123 |
| 124 scoped_refptr<Extension> app(LoadManifest("manifest_tests", | 124 scoped_refptr<Extension> app(LoadManifest("manifest_tests", |
| 125 "valid_app.json")); | 125 "valid_app.json")); |
| 126 scoped_refptr<Extension> extension(LoadManifest("manifest_tests", | 126 scoped_refptr<Extension> extension(LoadManifest("manifest_tests", |
| 127 "tabs_extension.json")); | 127 "tabs_extension.json")); |
| 128 | 128 |
| 129 GURL app_url("http://www.google.com/mail/foo.html"); | 129 GURL app_url("http://www.google.com/mail/foo.html"); |
| 130 ASSERT_TRUE(app->is_app()); | 130 ASSERT_TRUE(app->is_app()); |
| 131 ASSERT_TRUE(app->web_extent().MatchesURL(app_url)); | 131 ASSERT_TRUE(app->web_extent().MatchesURL(app_url)); |
| 132 | 132 |
| 133 info_map->AddExtension(app); | 133 info_map->AddExtension(app, base::Time(), false); |
| 134 info_map->AddExtension(extension); | 134 info_map->AddExtension(extension, base::Time(), false); |
| 135 | 135 |
| 136 // The app should have the notifications permission, either from a | 136 // The app should have the notifications permission, either from a |
| 137 // chrome-extension URL or from its web extent. | 137 // chrome-extension URL or from its web extent. |
| 138 const Extension* match = info_map->extensions().GetByURL( | 138 const Extension* match = info_map->extensions().GetByURL( |
| 139 app->GetResourceURL("a.html")); | 139 app->GetResourceURL("a.html")); |
| 140 EXPECT_TRUE(match && | 140 EXPECT_TRUE(match && |
| 141 match->HasApiPermission(Extension::kNotificationPermission)); | 141 match->HasApiPermission(Extension::kNotificationPermission)); |
| 142 match = info_map->extensions().GetByURL(app_url); | 142 match = info_map->extensions().GetByURL(app_url); |
| 143 EXPECT_TRUE(match && | 143 EXPECT_TRUE(match && |
| 144 match->HasApiPermission(Extension::kNotificationPermission)); | 144 match->HasApiPermission(Extension::kNotificationPermission)); |
| 145 EXPECT_FALSE(match && | 145 EXPECT_FALSE(match && |
| 146 match->HasApiPermission(Extension::kTabPermission)); | 146 match->HasApiPermission(Extension::kTabPermission)); |
| 147 | 147 |
| 148 // The extension should have the tabs permission. | 148 // The extension should have the tabs permission. |
| 149 match = info_map->extensions().GetByURL(extension->GetResourceURL("a.html")); | 149 match = info_map->extensions().GetByURL(extension->GetResourceURL("a.html")); |
| 150 EXPECT_TRUE(match && | 150 EXPECT_TRUE(match && |
| 151 match->HasApiPermission(Extension::kTabPermission)); | 151 match->HasApiPermission(Extension::kTabPermission)); |
| 152 EXPECT_FALSE(match && | 152 EXPECT_FALSE(match && |
| 153 match->HasApiPermission(Extension::kNotificationPermission)); | 153 match->HasApiPermission(Extension::kNotificationPermission)); |
| 154 | 154 |
| 155 // Random URL should not have any permissions. | 155 // Random URL should not have any permissions. |
| 156 match = info_map->extensions().GetByURL(GURL("http://evil.com/a.html")); | 156 match = info_map->extensions().GetByURL(GURL("http://evil.com/a.html")); |
| 157 EXPECT_FALSE(match); | 157 EXPECT_FALSE(match); |
| 158 } | 158 } |
| 159 | 159 |
| 160 } // namespace | 160 } // namespace |
| OLD | NEW |