Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(249)

Side by Side Diff: chrome/common/extensions/extension_unittest.cc

Issue 6966015: Merge 86164 (Closed) Base URL: svn://svn.chromium.org/chrome/branches/742/src/
Patch Set: Created 9 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « chrome/common/extensions/extension.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 "chrome/common/extensions/extension.h" 5 #include "chrome/common/extensions/extension.h"
6 6
7 #if defined(TOOLKIT_GTK) 7 #if defined(TOOLKIT_GTK)
8 #include <gtk/gtk.h> 8 #include <gtk/gtk.h>
9 #endif 9 #endif
10 10
(...skipping 1277 matching lines...) Expand 10 before | Expand all | Expand 10 after
1288 EXPECT_FALSE(extension->wants_file_access()); 1288 EXPECT_FALSE(extension->wants_file_access());
1289 EXPECT_FALSE(extension->CanExecuteScriptOnPage( 1289 EXPECT_FALSE(extension->CanExecuteScriptOnPage(
1290 file_url, &extension->content_scripts()[0], NULL)); 1290 file_url, &extension->content_scripts()[0], NULL));
1291 extension = LoadManifest("permissions", "content_script_http_scheme.json", 1291 extension = LoadManifest("permissions", "content_script_http_scheme.json",
1292 Extension::ALLOW_FILE_ACCESS); 1292 Extension::ALLOW_FILE_ACCESS);
1293 EXPECT_FALSE(extension->wants_file_access()); 1293 EXPECT_FALSE(extension->wants_file_access());
1294 EXPECT_FALSE(extension->CanExecuteScriptOnPage( 1294 EXPECT_FALSE(extension->CanExecuteScriptOnPage(
1295 file_url, &extension->content_scripts()[0], NULL)); 1295 file_url, &extension->content_scripts()[0], NULL));
1296 } 1296 }
1297 1297
1298 // Base class for testing the CanExecuteScriptOnPage and CanCaptureVisiblePage
1299 // methods of Extension for extensions with various permissions.
1300 class ExtensionScriptAndCaptureVisibleTest : public testing::Test {
1301 public:
1302 ExtensionScriptAndCaptureVisibleTest() {
1303 PathService::Get(chrome::DIR_TEST_DATA, &dirpath_);
1304 }
1305
1306 scoped_refptr<Extension> MakeExtension(const std::string& permissions,
1307 Extension::Location location) {
1308 // Replace single-quotes with double-quotes in permissions, since JSON
1309 // mandates double-quotes.
1310 std::string munged_permissions = permissions;
1311 ReplaceSubstringsAfterOffset(&munged_permissions, 0, "'", "\"");
1312
1313 DictionaryValue dictionary;
1314 dictionary.SetString(keys::kName, "permission test");
1315 dictionary.SetString(keys::kVersion, "1");
1316 std::string error;
1317 JSONStringValueSerializer serializer(munged_permissions);
1318 scoped_ptr<Value> permission_value(serializer.Deserialize(NULL, &error));
1319 EXPECT_EQ("", error);
1320 if (!permission_value.get())
1321 return NULL;
1322 EXPECT_TRUE(permission_value->IsType(Value::TYPE_LIST));
1323 dictionary.Set(keys::kPermissions, permission_value.release());
1324
1325 FilePath dirpath;
1326 PathService::Get(chrome::DIR_TEST_DATA, &dirpath);
1327 dirpath = dirpath.AppendASCII("extensions").AppendASCII("permissions");
1328
1329 scoped_refptr<Extension> extension = Extension::Create(
1330 dirpath,
1331 location,
1332 dictionary,
1333 Extension::STRICT_ERROR_CHECKS,
1334 &error);
1335 if (!extension)
1336 VLOG(1) << error;
1337 return extension;
1338 }
1339
1340 bool Allowed(const Extension* extension, const GURL& url) {
1341 return (extension->CanExecuteScriptOnPage(url, NULL, NULL) &&
1342 extension->CanCaptureVisiblePage(url, NULL));
1343 }
1344
1345 bool CaptureOnly(const Extension* extension, const GURL& url) {
1346 return !extension->CanExecuteScriptOnPage(url, NULL, NULL) &&
1347 extension->CanCaptureVisiblePage(url, NULL);
1348 }
1349
1350 bool Blocked(const Extension* extension, const GURL& url) {
1351 return !(extension->CanExecuteScriptOnPage(url, NULL, NULL) ||
1352 extension->CanCaptureVisiblePage(url, NULL));
1353 }
1354
1355 protected:
1356 FilePath dirpath_;
1357 };
1358
1359 TEST_F(ExtensionScriptAndCaptureVisibleTest, Permissions) {
1360 scoped_refptr<Extension> extension;
1361 // URLs that are "safe" to provide scripting and capture visible tab access
1362 // to if the permissions allow it.
1363 GURL http_url("http://www.google.com");
1364 GURL https_url("https://www.google.com");
1365 GURL file_url("file:///foo/bar");
1366
1367 // We should allow host permission but not scripting permission for favicon
1368 // urls.
1369 GURL favicon_url("chrome://favicon/http://www.google.com");
1370
1371 std::string dummy_id =
1372 Extension::GenerateIdForPath(FilePath(FILE_PATH_LITERAL("whatever")));
1373
1374 // URLs that regular extensions should never get access to.
1375 GURL extension_url("chrome-extension://" + dummy_id);
1376 GURL settings_url("chrome://settings");
1377 GURL about_url("about:flags");
1378
1379 // Test <all_urls> for regular extensions.
1380 extension = MakeExtension("['tabs','<all_urls>']", Extension::INTERNAL);
1381 EXPECT_TRUE(Allowed(extension, http_url));
1382 EXPECT_TRUE(Allowed(extension, https_url));
1383 EXPECT_TRUE(Blocked(extension, file_url));
1384 EXPECT_TRUE(Blocked(extension, settings_url));
1385 EXPECT_TRUE(CaptureOnly(extension, favicon_url));
1386 EXPECT_TRUE(Blocked(extension, about_url));
1387 EXPECT_TRUE(Blocked(extension, extension_url));
1388
1389 EXPECT_FALSE(extension->HasHostPermission(settings_url));
1390 EXPECT_FALSE(extension->HasHostPermission(about_url));
1391 EXPECT_TRUE(extension->HasHostPermission(favicon_url));
1392
1393 // Test * for scheme, which implies just the http/https schemes.
1394 extension = MakeExtension("['tabs','*://*/']", Extension::INTERNAL);
1395 EXPECT_TRUE(Allowed(extension, http_url));
1396 EXPECT_TRUE(Allowed(extension, https_url));
1397 EXPECT_TRUE(Blocked(extension, settings_url));
1398 EXPECT_TRUE(Blocked(extension, about_url));
1399 EXPECT_TRUE(Blocked(extension, file_url));
1400 EXPECT_TRUE(Blocked(extension, favicon_url));
1401 extension = MakeExtension("['tabs','*://settings/*']", Extension::INTERNAL);
1402 EXPECT_TRUE(Blocked(extension, settings_url));
1403
1404 // Having chrome://*/ should not work for regular extensions. Note that
1405 // for favicon access, we require the explicit pattern chrome://favicon/*.
1406 extension = MakeExtension("['tabs','chrome://*/']",
1407 Extension::INTERNAL);
1408 EXPECT_TRUE(extension == NULL);
1409
1410 // Having chrome://favicon/* should not give you chrome://*
1411 extension = MakeExtension("['tabs','chrome://favicon/*']",
1412 Extension::INTERNAL);
1413 EXPECT_TRUE(Blocked(extension, settings_url));
1414 EXPECT_TRUE(CaptureOnly(extension, favicon_url));
1415 EXPECT_TRUE(Blocked(extension, about_url));
1416 EXPECT_TRUE(extension->HasHostPermission(favicon_url));
1417
1418 // Having http://favicon should not give you chrome://favicon
1419 extension = MakeExtension("['tabs', 'http://favicon/']", Extension::INTERNAL);
1420 EXPECT_TRUE(Blocked(extension, settings_url));
1421 EXPECT_TRUE(Blocked(extension, favicon_url));
1422
1423 // Component extensions with <all_urls> should get everything.
1424 extension = MakeExtension("['tabs','<all_urls>']", Extension::COMPONENT);
1425 EXPECT_TRUE(Allowed(extension, http_url));
1426 EXPECT_TRUE(Allowed(extension, https_url));
1427 EXPECT_TRUE(Allowed(extension, settings_url));
1428 EXPECT_TRUE(Allowed(extension, about_url));
1429 EXPECT_TRUE(Allowed(extension, favicon_url));
1430 EXPECT_TRUE(extension->HasHostPermission(favicon_url));
1431
1432 // Component extensions should only get access to what they ask for.
1433 extension = MakeExtension("['tabs', 'http://www.google.com/']",
1434 Extension::COMPONENT);
1435 EXPECT_TRUE(Allowed(extension, http_url));
1436 EXPECT_TRUE(Blocked(extension, https_url));
1437 EXPECT_TRUE(Blocked(extension, file_url));
1438 EXPECT_TRUE(Blocked(extension, settings_url));
1439 EXPECT_TRUE(Blocked(extension, favicon_url));
1440 EXPECT_TRUE(Blocked(extension, about_url));
1441 EXPECT_TRUE(Blocked(extension, extension_url));
1442 EXPECT_FALSE(extension->HasHostPermission(settings_url));
1443 }
1444
1445
1298 TEST(ExtensionTest, GetDistinctHostsForDisplay) { 1446 TEST(ExtensionTest, GetDistinctHostsForDisplay) {
1299 std::vector<std::string> expected; 1447 std::vector<std::string> expected;
1300 expected.push_back("www.foo.com"); 1448 expected.push_back("www.foo.com");
1301 expected.push_back("www.bar.com"); 1449 expected.push_back("www.bar.com");
1302 expected.push_back("www.baz.com"); 1450 expected.push_back("www.baz.com");
1303 URLPatternList actual; 1451 URLPatternList actual;
1304 1452
1305 { 1453 {
1306 SCOPED_TRACE("no dupes"); 1454 SCOPED_TRACE("no dupes");
1307 1455
(...skipping 245 matching lines...) Expand 10 before | Expand all | Expand 10 after
1553 EXPECT_TRUE(Extension::GenerateId("test", &result)); 1701 EXPECT_TRUE(Extension::GenerateId("test", &result));
1554 EXPECT_EQ(result, "jpignaibiiemhngfjkcpokkamffknabf"); 1702 EXPECT_EQ(result, "jpignaibiiemhngfjkcpokkamffknabf");
1555 1703
1556 EXPECT_TRUE(Extension::GenerateId("_", &result)); 1704 EXPECT_TRUE(Extension::GenerateId("_", &result));
1557 EXPECT_EQ(result, "ncocknphbhhlhkikpnnlmbcnbgdempcd"); 1705 EXPECT_EQ(result, "ncocknphbhhlhkikpnnlmbcnbgdempcd");
1558 1706
1559 EXPECT_TRUE(Extension::GenerateId( 1707 EXPECT_TRUE(Extension::GenerateId(
1560 "this_string_is_longer_than_a_single_sha256_hash_digest", &result)); 1708 "this_string_is_longer_than_a_single_sha256_hash_digest", &result));
1561 EXPECT_EQ(result, "jimneklojkjdibfkgiiophfhjhbdgcfi"); 1709 EXPECT_EQ(result, "jimneklojkjdibfkgiiophfhjhbdgcfi");
1562 } 1710 }
OLDNEW
« no previous file with comments | « chrome/common/extensions/extension.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698