| 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, | 
|  | 305                                        false)); | 
| 306 } | 306 } | 
| 307 | 307 | 
| 308 TEST(PermissionsDataTest, GetPermissionMessages_ManyHostsPermissions) { | 308 TEST(PermissionsDataTest, GetPermissionMessages_ManyHostsPermissions) { | 
| 309   scoped_refptr<Extension> extension; | 309   scoped_refptr<Extension> extension; | 
| 310   extension = LoadManifest("permissions", "more-than-3-hosts.json"); | 310   extension = LoadManifest("permissions", "more-than-3-hosts.json"); | 
| 311   std::vector<base::string16> warnings = | 311   std::vector<std::string> submessages; | 
| 312       extension->permissions_data()->GetPermissionMessageStrings(); | 312   submessages.push_back("www.a.com"); | 
| 313   std::vector<base::string16> warnings_details = | 313   submessages.push_back("www.b.com"); | 
| 314       extension->permissions_data()->GetPermissionMessageDetailsStrings(); | 314   submessages.push_back("www.c.com"); | 
| 315   ASSERT_EQ(1u, warnings.size()); | 315   submessages.push_back("www.d.com"); | 
| 316   ASSERT_EQ(1u, warnings_details.size()); | 316   submessages.push_back("www.e.com"); | 
| 317   EXPECT_EQ("Read and change your data on a number of websites", | 317   EXPECT_TRUE(VerifyOnePermissionMessageWithSubmessages( | 
| 318             UTF16ToUTF8(warnings[0])); | 318       extension->permissions_data(), | 
| 319   EXPECT_EQ("www.a.com\nwww.b.com\nwww.c.com\nwww.d.com\nwww.e.com", | 319       "Read and change your data on a number of websites", | 
| 320             UTF16ToUTF8(warnings_details[0])); | 320       submessages)); | 
| 321 } | 321 } | 
| 322 | 322 | 
| 323 TEST(PermissionsDataTest, GetPermissionMessages_LocationApiPermission) { | 323 TEST(PermissionsDataTest, GetPermissionMessages_LocationApiPermission) { | 
| 324   scoped_refptr<Extension> extension; | 324   scoped_refptr<Extension> extension; | 
| 325   extension = LoadManifest("permissions", | 325   extension = LoadManifest("permissions", | 
| 326                            "location-api.json", | 326                            "location-api.json", | 
| 327                            Manifest::COMPONENT, | 327                            Manifest::COMPONENT, | 
| 328                            Extension::NO_FLAGS); | 328                            Extension::NO_FLAGS); | 
| 329   std::vector<base::string16> warnings = | 329   EXPECT_TRUE(VerifyOnePermissionMessage(extension->permissions_data(), | 
| 330       extension->permissions_data()->GetPermissionMessageStrings(); | 330                                          "Detect your physical location")); | 
| 331   ASSERT_EQ(1u, warnings.size()); |  | 
| 332   EXPECT_EQ("Detect your physical location", UTF16ToUTF8(warnings[0])); |  | 
| 333 } | 331 } | 
| 334 | 332 | 
| 335 TEST(PermissionsDataTest, GetPermissionMessages_ManyHosts) { | 333 TEST(PermissionsDataTest, GetPermissionMessages_ManyHosts) { | 
| 336   scoped_refptr<Extension> extension; | 334   scoped_refptr<Extension> extension; | 
| 337   extension = LoadManifest("permissions", "many-hosts.json"); | 335   extension = LoadManifest("permissions", "many-hosts.json"); | 
| 338   std::vector<base::string16> warnings = | 336   EXPECT_TRUE(VerifyOnePermissionMessage( | 
| 339       extension->permissions_data()->GetPermissionMessageStrings(); | 337       extension->permissions_data(), | 
| 340   ASSERT_EQ(1u, warnings.size()); | 338       "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 } | 339 } | 
| 345 | 340 | 
| 346 TEST(PermissionsDataTest, GetPermissionMessages_Plugins) { | 341 TEST(PermissionsDataTest, GetPermissionMessages_Plugins) { | 
| 347   scoped_refptr<Extension> extension; | 342   scoped_refptr<Extension> extension; | 
| 348   extension = LoadManifest("permissions", "plugins.json"); | 343   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 | 344 // We don't parse the plugins key on Chrome OS, so it should not ask for any | 
| 352 // permissions. | 345 // permissions. | 
| 353 #if defined(OS_CHROMEOS) | 346 #if defined(OS_CHROMEOS) | 
| 354   ASSERT_EQ(0u, warnings.size()); | 347   EXPECT_TRUE(VerifyNoPermissionMessages(extension->permissions_data())); | 
| 355 #else | 348 #else | 
| 356   ASSERT_EQ(1u, warnings.size()); | 349   EXPECT_TRUE(VerifyOnePermissionMessage( | 
| 357   EXPECT_EQ( | 350       extension->permissions_data(), | 
| 358       "Read and change all your data on your computer and the websites you " | 351       "Read and change all your data on your computer and the websites you " | 
| 359       "visit", | 352           "visit")); | 
| 360       UTF16ToUTF8(warnings[0])); |  | 
| 361 #endif | 353 #endif | 
| 362 } | 354 } | 
| 363 | 355 | 
| 364 TEST(PermissionsDataTest, ExternalFiles) { | 356 TEST(PermissionsDataTest, ExternalFiles) { | 
| 365   GURL external_file("externalfile:abc"); | 357   GURL external_file("externalfile:abc"); | 
| 366   scoped_refptr<const Extension> extension; | 358   scoped_refptr<const Extension> extension; | 
| 367 | 359 | 
| 368   // A regular extension shouldn't get access to externalfile: scheme URLs | 360   // A regular extension shouldn't get access to externalfile: scheme URLs | 
| 369   // even with <all_urls> specified. | 361   // even with <all_urls> specified. | 
| 370   extension = GetExtensionWithHostPermission( | 362   extension = GetExtensionWithHostPermission( | 
| (...skipping 406 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 777 | 769 | 
| 778   permissions_data->ClearTabSpecificPermissions(1); | 770   permissions_data->ClearTabSpecificPermissions(1); | 
| 779   EXPECT_FALSE(permissions_data->GetTabSpecificPermissionsForTesting(1).get()); | 771   EXPECT_FALSE(permissions_data->GetTabSpecificPermissionsForTesting(1).get()); | 
| 780 | 772 | 
| 781   EXPECT_TRUE(ScriptAllowedExclusivelyOnTab(extension.get(), no_urls, 0)); | 773   EXPECT_TRUE(ScriptAllowedExclusivelyOnTab(extension.get(), no_urls, 0)); | 
| 782   EXPECT_TRUE(ScriptAllowedExclusivelyOnTab(extension.get(), no_urls, 1)); | 774   EXPECT_TRUE(ScriptAllowedExclusivelyOnTab(extension.get(), no_urls, 1)); | 
| 783   EXPECT_TRUE(ScriptAllowedExclusivelyOnTab(extension.get(), no_urls, 2)); | 775   EXPECT_TRUE(ScriptAllowedExclusivelyOnTab(extension.get(), no_urls, 2)); | 
| 784 } | 776 } | 
| 785 | 777 | 
| 786 }  // namespace extensions | 778 }  // namespace extensions | 
| OLD | NEW | 
|---|