| OLD | NEW |
| 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 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 <vector> | 5 #include <vector> |
| 6 | 6 |
| 7 #include "base/command_line.h" | 7 #include "base/command_line.h" |
| 8 #include "base/memory/ref_counted.h" | 8 #include "base/memory/ref_counted.h" |
| 9 #include "base/strings/string16.h" | 9 #include "base/strings/string16.h" |
| 10 #include "base/strings/utf_string_conversions.h" | 10 #include "base/strings/utf_string_conversions.h" |
| 11 #include "chrome/common/extensions/extension_test_util.h" | 11 #include "chrome/common/extensions/extension_test_util.h" |
| 12 #include "components/crx_file/id_util.h" | 12 #include "components/crx_file/id_util.h" |
| 13 #include "content/public/common/socket_permission_request.h" | 13 #include "content/public/common/socket_permission_request.h" |
| 14 #include "extensions/common/error_utils.h" | 14 #include "extensions/common/error_utils.h" |
| 15 #include "extensions/common/extension.h" | 15 #include "extensions/common/extension.h" |
| 16 #include "extensions/common/extension_builder.h" | 16 #include "extensions/common/extension_builder.h" |
| 17 #include "extensions/common/manifest.h" | 17 #include "extensions/common/manifest.h" |
| 18 #include "extensions/common/manifest_constants.h" | 18 #include "extensions/common/manifest_constants.h" |
| 19 #include "extensions/common/permissions/api_permission.h" | 19 #include "extensions/common/permissions/api_permission.h" |
| 20 #include "extensions/common/permissions/permission_message_test_util.h" |
| 20 #include "extensions/common/permissions/permission_set.h" | 21 #include "extensions/common/permissions/permission_set.h" |
| 21 #include "extensions/common/permissions/permissions_data.h" | 22 #include "extensions/common/permissions/permissions_data.h" |
| 22 #include "extensions/common/permissions/socket_permission.h" | 23 #include "extensions/common/permissions/socket_permission.h" |
| 23 #include "extensions/common/switches.h" | 24 #include "extensions/common/switches.h" |
| 24 #include "extensions/common/url_pattern_set.h" | 25 #include "extensions/common/url_pattern_set.h" |
| 25 #include "extensions/common/value_builder.h" | 26 #include "extensions/common/value_builder.h" |
| 26 #include "testing/gtest/include/gtest/gtest.h" | 27 #include "testing/gtest/include/gtest/gtest.h" |
| 27 #include "url/gurl.h" | 28 #include "url/gurl.h" |
| 28 | 29 |
| 29 using base::UTF16ToUTF8; | 30 using base::UTF16ToUTF8; |
| (...skipping 255 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 285 | 286 |
| 286 base::CommandLine::ForCurrentProcess()->AppendSwitch( | 287 base::CommandLine::ForCurrentProcess()->AppendSwitch( |
| 287 switches::kExtensionsOnChromeURLs); | 288 switches::kExtensionsOnChromeURLs); |
| 288 // Enabling the switch should allow all extensions to access chrome urls. | 289 // Enabling the switch should allow all extensions to access chrome urls. |
| 289 CheckRestrictedUrls(extension.get(), false); | 290 CheckRestrictedUrls(extension.get(), false); |
| 290 } | 291 } |
| 291 | 292 |
| 292 TEST(PermissionsDataTest, GetPermissionMessages_ManyAPIPermissions) { | 293 TEST(PermissionsDataTest, GetPermissionMessages_ManyAPIPermissions) { |
| 293 scoped_refptr<Extension> extension; | 294 scoped_refptr<Extension> extension; |
| 294 extension = LoadManifest("permissions", "many-apis.json"); | 295 extension = LoadManifest("permissions", "many-apis.json"); |
| 295 std::vector<base::string16> warnings = | |
| 296 extension->permissions_data()->GetPermissionMessageStrings(); | |
| 297 // Warning for "tabs" is suppressed by "history" permission. | 296 // Warning for "tabs" is suppressed by "history" permission. |
| 298 ASSERT_EQ(5u, warnings.size()); | 297 std::vector<std::string> expected_messages; |
| 299 EXPECT_EQ("Read and change your data on api.flickr.com", | 298 expected_messages.push_back("Read and change your data on api.flickr.com"); |
| 300 UTF16ToUTF8(warnings[0])); | 299 expected_messages.push_back("Read and change your bookmarks"); |
| 301 EXPECT_EQ("Read and change your bookmarks", UTF16ToUTF8(warnings[1])); | 300 expected_messages.push_back("Detect your physical location"); |
| 302 EXPECT_EQ("Detect your physical location", UTF16ToUTF8(warnings[2])); | 301 expected_messages.push_back("Read and change your browsing history"); |
| 303 EXPECT_EQ("Read and change your browsing history", UTF16ToUTF8(warnings[3])); | 302 expected_messages.push_back("Manage your apps, extensions, and themes"); |
| 304 EXPECT_EQ("Manage your apps, extensions, and themes", | 303 EXPECT_TRUE(VerifyPermissionMessages(extension->permissions_data(), |
| 305 UTF16ToUTF8(warnings[4])); | 304 expected_messages, false)); |
| 306 } | 305 } |
| 307 | 306 |
| 308 TEST(PermissionsDataTest, GetPermissionMessages_ManyHostsPermissions) { | 307 TEST(PermissionsDataTest, GetPermissionMessages_ManyHostsPermissions) { |
| 309 scoped_refptr<Extension> extension; | 308 scoped_refptr<Extension> extension; |
| 310 extension = LoadManifest("permissions", "more-than-3-hosts.json"); | 309 extension = LoadManifest("permissions", "more-than-3-hosts.json"); |
| 311 std::vector<base::string16> warnings = | 310 std::vector<std::string> submessages; |
| 312 extension->permissions_data()->GetPermissionMessageStrings(); | 311 submessages.push_back("www.a.com"); |
| 313 std::vector<base::string16> warnings_details = | 312 submessages.push_back("www.b.com"); |
| 314 extension->permissions_data()->GetPermissionMessageDetailsStrings(); | 313 submessages.push_back("www.c.com"); |
| 315 ASSERT_EQ(1u, warnings.size()); | 314 submessages.push_back("www.d.com"); |
| 316 ASSERT_EQ(1u, warnings_details.size()); | 315 submessages.push_back("www.e.com"); |
| 317 EXPECT_EQ("Read and change your data on a number of websites", | 316 EXPECT_TRUE(VerifyOnePermissionMessageWithSubmessages( |
| 318 UTF16ToUTF8(warnings[0])); | 317 extension->permissions_data(), |
| 319 EXPECT_EQ("www.a.com\nwww.b.com\nwww.c.com\nwww.d.com\nwww.e.com", | 318 "Read and change your data on a number of websites", submessages)); |
| 320 UTF16ToUTF8(warnings_details[0])); | |
| 321 } | 319 } |
| 322 | 320 |
| 323 TEST(PermissionsDataTest, GetPermissionMessages_LocationApiPermission) { | 321 TEST(PermissionsDataTest, GetPermissionMessages_LocationApiPermission) { |
| 324 scoped_refptr<Extension> extension; | 322 scoped_refptr<Extension> extension; |
| 325 extension = LoadManifest("permissions", | 323 extension = LoadManifest("permissions", |
| 326 "location-api.json", | 324 "location-api.json", |
| 327 Manifest::COMPONENT, | 325 Manifest::COMPONENT, |
| 328 Extension::NO_FLAGS); | 326 Extension::NO_FLAGS); |
| 329 std::vector<base::string16> warnings = | 327 EXPECT_TRUE(VerifyOnePermissionMessage(extension->permissions_data(), |
| 330 extension->permissions_data()->GetPermissionMessageStrings(); | 328 "Detect your physical location")); |
| 331 ASSERT_EQ(1u, warnings.size()); | |
| 332 EXPECT_EQ("Detect your physical location", UTF16ToUTF8(warnings[0])); | |
| 333 } | 329 } |
| 334 | 330 |
| 335 TEST(PermissionsDataTest, GetPermissionMessages_ManyHosts) { | 331 TEST(PermissionsDataTest, GetPermissionMessages_ManyHosts) { |
| 336 scoped_refptr<Extension> extension; | 332 scoped_refptr<Extension> extension; |
| 337 extension = LoadManifest("permissions", "many-hosts.json"); | 333 extension = LoadManifest("permissions", "many-hosts.json"); |
| 338 std::vector<base::string16> warnings = | 334 EXPECT_TRUE(VerifyOnePermissionMessage( |
| 339 extension->permissions_data()->GetPermissionMessageStrings(); | 335 extension->permissions_data(), |
| 340 ASSERT_EQ(1u, warnings.size()); | 336 "Read and change your data on encrypted.google.com and www.google.com")); |
| 341 EXPECT_EQ( | |
| 342 "Read and change your data on encrypted.google.com and www.google.com", | |
| 343 UTF16ToUTF8(warnings[0])); | |
| 344 } | 337 } |
| 345 | 338 |
| 346 TEST(PermissionsDataTest, GetPermissionMessages_Plugins) { | 339 TEST(PermissionsDataTest, GetPermissionMessages_Plugins) { |
| 347 scoped_refptr<Extension> extension; | 340 scoped_refptr<Extension> extension; |
| 348 extension = LoadManifest("permissions", "plugins.json"); | 341 extension = LoadManifest("permissions", "plugins.json"); |
| 349 std::vector<base::string16> warnings = | |
| 350 extension->permissions_data()->GetPermissionMessageStrings(); | |
| 351 // We don't parse the plugins key on Chrome OS, so it should not ask for any | 342 // We don't parse the plugins key on Chrome OS, so it should not ask for any |
| 352 // permissions. | 343 // permissions. |
| 353 #if defined(OS_CHROMEOS) | 344 #if defined(OS_CHROMEOS) |
| 354 ASSERT_EQ(0u, warnings.size()); | 345 EXPECT_TRUE(VerifyNoPermissionMessages(extension->permissions_data())); |
| 355 #else | 346 #else |
| 356 ASSERT_EQ(1u, warnings.size()); | 347 EXPECT_TRUE(VerifyOnePermissionMessage( |
| 357 EXPECT_EQ( | 348 extension->permissions_data(), |
| 358 "Read and change all your data on your computer and the websites you " | 349 "Read and change all your data on your computer and the websites you " |
| 359 "visit", | 350 "visit")); |
| 360 UTF16ToUTF8(warnings[0])); | |
| 361 #endif | 351 #endif |
| 362 } | 352 } |
| 363 | 353 |
| 364 TEST(PermissionsDataTest, ExternalFiles) { | 354 TEST(PermissionsDataTest, ExternalFiles) { |
| 365 GURL external_file("externalfile:abc"); | 355 GURL external_file("externalfile:abc"); |
| 366 scoped_refptr<const Extension> extension; | 356 scoped_refptr<const Extension> extension; |
| 367 | 357 |
| 368 // A regular extension shouldn't get access to externalfile: scheme URLs | 358 // A regular extension shouldn't get access to externalfile: scheme URLs |
| 369 // even with <all_urls> specified. | 359 // even with <all_urls> specified. |
| 370 extension = GetExtensionWithHostPermission( | 360 extension = GetExtensionWithHostPermission( |
| (...skipping 406 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 777 | 767 |
| 778 permissions_data->ClearTabSpecificPermissions(1); | 768 permissions_data->ClearTabSpecificPermissions(1); |
| 779 EXPECT_FALSE(permissions_data->GetTabSpecificPermissionsForTesting(1).get()); | 769 EXPECT_FALSE(permissions_data->GetTabSpecificPermissionsForTesting(1).get()); |
| 780 | 770 |
| 781 EXPECT_TRUE(ScriptAllowedExclusivelyOnTab(extension.get(), no_urls, 0)); | 771 EXPECT_TRUE(ScriptAllowedExclusivelyOnTab(extension.get(), no_urls, 0)); |
| 782 EXPECT_TRUE(ScriptAllowedExclusivelyOnTab(extension.get(), no_urls, 1)); | 772 EXPECT_TRUE(ScriptAllowedExclusivelyOnTab(extension.get(), no_urls, 1)); |
| 783 EXPECT_TRUE(ScriptAllowedExclusivelyOnTab(extension.get(), no_urls, 2)); | 773 EXPECT_TRUE(ScriptAllowedExclusivelyOnTab(extension.get(), no_urls, 2)); |
| 784 } | 774 } |
| 785 | 775 |
| 786 } // namespace extensions | 776 } // namespace extensions |
| OLD | NEW |