| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 <set> | 5 #include <set> |
| 6 #include <string> | 6 #include <string> |
| 7 | 7 |
| 8 #include "base/basictypes.h" | 8 #include "base/basictypes.h" |
| 9 #include "base/files/file_path.h" | 9 #include "base/files/file_path.h" |
| 10 #include "base/platform_file.h" | 10 #include "base/platform_file.h" |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 71 virtual void TearDown() { | 71 virtual void TearDown() { |
| 72 test_browser_client_.ClearSchemes(); | 72 test_browser_client_.ClearSchemes(); |
| 73 SetBrowserClientForTesting(old_browser_client_); | 73 SetBrowserClientForTesting(old_browser_client_); |
| 74 } | 74 } |
| 75 | 75 |
| 76 protected: | 76 protected: |
| 77 void RegisterTestScheme(const std::string& scheme) { | 77 void RegisterTestScheme(const std::string& scheme) { |
| 78 test_browser_client_.AddScheme(scheme); | 78 test_browser_client_.AddScheme(scheme); |
| 79 } | 79 } |
| 80 | 80 |
| 81 void GrantPermissionsForFile(ChildProcessSecurityPolicyImpl* p, |
| 82 int child_id, |
| 83 const base::FilePath& file, |
| 84 int permissions) { |
| 85 p->GrantPermissionsForFile(child_id, file, permissions); |
| 86 } |
| 87 |
| 81 private: | 88 private: |
| 82 ChildProcessSecurityPolicyTestBrowserClient test_browser_client_; | 89 ChildProcessSecurityPolicyTestBrowserClient test_browser_client_; |
| 83 ContentBrowserClient* old_browser_client_; | 90 ContentBrowserClient* old_browser_client_; |
| 84 }; | 91 }; |
| 85 | 92 |
| 86 TEST_F(ChildProcessSecurityPolicyTest, IsWebSafeSchemeTest) { | 93 TEST_F(ChildProcessSecurityPolicyTest, IsWebSafeSchemeTest) { |
| 87 ChildProcessSecurityPolicyImpl* p = | 94 ChildProcessSecurityPolicyImpl* p = |
| 88 ChildProcessSecurityPolicyImpl::GetInstance(); | 95 ChildProcessSecurityPolicyImpl::GetInstance(); |
| 89 | 96 |
| 90 EXPECT_TRUE(p->IsWebSafeScheme(chrome::kHttpScheme)); | 97 EXPECT_TRUE(p->IsWebSafeScheme(chrome::kHttpScheme)); |
| (...skipping 258 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 349 base::FilePath relative_file = base::FilePath(FILE_PATH_LITERAL("home/joe")); | 356 base::FilePath relative_file = base::FilePath(FILE_PATH_LITERAL("home/joe")); |
| 350 | 357 |
| 351 ChildProcessSecurityPolicyImpl* p = | 358 ChildProcessSecurityPolicyImpl* p = |
| 352 ChildProcessSecurityPolicyImpl::GetInstance(); | 359 ChildProcessSecurityPolicyImpl::GetInstance(); |
| 353 | 360 |
| 354 // Grant permissions for a file. | 361 // Grant permissions for a file. |
| 355 p->Add(kRendererID); | 362 p->Add(kRendererID); |
| 356 EXPECT_FALSE(p->HasPermissionsForFile(kRendererID, granted_file, | 363 EXPECT_FALSE(p->HasPermissionsForFile(kRendererID, granted_file, |
| 357 base::PLATFORM_FILE_OPEN)); | 364 base::PLATFORM_FILE_OPEN)); |
| 358 | 365 |
| 359 p->GrantPermissionsForFile(kRendererID, granted_file, | 366 GrantPermissionsForFile(p, kRendererID, granted_file, |
| 360 base::PLATFORM_FILE_OPEN | | 367 base::PLATFORM_FILE_OPEN | |
| 361 base::PLATFORM_FILE_OPEN_TRUNCATED | | 368 base::PLATFORM_FILE_OPEN_TRUNCATED | |
| 362 base::PLATFORM_FILE_READ | | 369 base::PLATFORM_FILE_READ | |
| 363 base::PLATFORM_FILE_WRITE); | 370 base::PLATFORM_FILE_WRITE); |
| 364 EXPECT_TRUE(p->HasPermissionsForFile(kRendererID, granted_file, | 371 EXPECT_TRUE(p->HasPermissionsForFile(kRendererID, granted_file, |
| 365 base::PLATFORM_FILE_OPEN | | 372 base::PLATFORM_FILE_OPEN | |
| 366 base::PLATFORM_FILE_OPEN_TRUNCATED | | 373 base::PLATFORM_FILE_OPEN_TRUNCATED | |
| 367 base::PLATFORM_FILE_READ | | 374 base::PLATFORM_FILE_READ | |
| 368 base::PLATFORM_FILE_WRITE)); | 375 base::PLATFORM_FILE_WRITE)); |
| 369 EXPECT_TRUE(p->HasPermissionsForFile(kRendererID, granted_file, | 376 EXPECT_TRUE(p->HasPermissionsForFile(kRendererID, granted_file, |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 401 // CPSP doesn't allow this case for the sake of simplicity. | 408 // CPSP doesn't allow this case for the sake of simplicity. |
| 402 EXPECT_FALSE(p->HasPermissionsForFile(kRendererID, self_traversal, | 409 EXPECT_FALSE(p->HasPermissionsForFile(kRendererID, self_traversal, |
| 403 base::PLATFORM_FILE_OPEN | | 410 base::PLATFORM_FILE_OPEN | |
| 404 base::PLATFORM_FILE_READ)); | 411 base::PLATFORM_FILE_READ)); |
| 405 p->Remove(kRendererID); | 412 p->Remove(kRendererID); |
| 406 | 413 |
| 407 // Grant permissions for the directory the file is in. | 414 // Grant permissions for the directory the file is in. |
| 408 p->Add(kRendererID); | 415 p->Add(kRendererID); |
| 409 EXPECT_FALSE(p->HasPermissionsForFile(kRendererID, granted_file, | 416 EXPECT_FALSE(p->HasPermissionsForFile(kRendererID, granted_file, |
| 410 base::PLATFORM_FILE_OPEN)); | 417 base::PLATFORM_FILE_OPEN)); |
| 411 p->GrantPermissionsForFile(kRendererID, parent_file, | 418 GrantPermissionsForFile(p, kRendererID, parent_file, |
| 412 base::PLATFORM_FILE_OPEN | | 419 base::PLATFORM_FILE_OPEN | |
| 413 base::PLATFORM_FILE_READ); | 420 base::PLATFORM_FILE_READ); |
| 414 EXPECT_TRUE(p->HasPermissionsForFile(kRendererID, granted_file, | 421 EXPECT_TRUE(p->HasPermissionsForFile(kRendererID, granted_file, |
| 415 base::PLATFORM_FILE_OPEN)); | 422 base::PLATFORM_FILE_OPEN)); |
| 416 EXPECT_FALSE(p->HasPermissionsForFile(kRendererID, granted_file, | 423 EXPECT_FALSE(p->HasPermissionsForFile(kRendererID, granted_file, |
| 417 base::PLATFORM_FILE_READ | | 424 base::PLATFORM_FILE_READ | |
| 418 base::PLATFORM_FILE_WRITE)); | 425 base::PLATFORM_FILE_WRITE)); |
| 419 p->Remove(kRendererID); | 426 p->Remove(kRendererID); |
| 420 | 427 |
| 421 // Grant permissions for the directory the file is in (with trailing '/'). | 428 // Grant permissions for the directory the file is in (with trailing '/'). |
| 422 p->Add(kRendererID); | 429 p->Add(kRendererID); |
| 423 EXPECT_FALSE(p->HasPermissionsForFile(kRendererID, granted_file, | 430 EXPECT_FALSE(p->HasPermissionsForFile(kRendererID, granted_file, |
| 424 base::PLATFORM_FILE_OPEN)); | 431 base::PLATFORM_FILE_OPEN)); |
| 425 p->GrantPermissionsForFile(kRendererID, parent_slash_file, | 432 GrantPermissionsForFile(p, kRendererID, parent_slash_file, |
| 426 base::PLATFORM_FILE_OPEN | | 433 base::PLATFORM_FILE_OPEN | |
| 427 base::PLATFORM_FILE_READ); | 434 base::PLATFORM_FILE_READ); |
| 428 EXPECT_TRUE(p->HasPermissionsForFile(kRendererID, granted_file, | 435 EXPECT_TRUE(p->HasPermissionsForFile(kRendererID, granted_file, |
| 429 base::PLATFORM_FILE_OPEN)); | 436 base::PLATFORM_FILE_OPEN)); |
| 430 EXPECT_FALSE(p->HasPermissionsForFile(kRendererID, granted_file, | 437 EXPECT_FALSE(p->HasPermissionsForFile(kRendererID, granted_file, |
| 431 base::PLATFORM_FILE_READ | | 438 base::PLATFORM_FILE_READ | |
| 432 base::PLATFORM_FILE_WRITE)); | 439 base::PLATFORM_FILE_WRITE)); |
| 433 | 440 |
| 434 // Grant permissions for the file (should overwrite the permissions granted | 441 // Grant permissions for the file (should overwrite the permissions granted |
| 435 // for the directory). | 442 // for the directory). |
| 436 p->GrantPermissionsForFile(kRendererID, granted_file, | 443 GrantPermissionsForFile(p, kRendererID, granted_file, |
| 437 base::PLATFORM_FILE_TEMPORARY); | 444 base::PLATFORM_FILE_TEMPORARY); |
| 438 EXPECT_FALSE(p->HasPermissionsForFile(kRendererID, granted_file, | 445 EXPECT_FALSE(p->HasPermissionsForFile(kRendererID, granted_file, |
| 439 base::PLATFORM_FILE_OPEN)); | 446 base::PLATFORM_FILE_OPEN)); |
| 440 EXPECT_TRUE(p->HasPermissionsForFile(kRendererID, granted_file, | 447 EXPECT_TRUE(p->HasPermissionsForFile(kRendererID, granted_file, |
| 441 base::PLATFORM_FILE_TEMPORARY)); | 448 base::PLATFORM_FILE_TEMPORARY)); |
| 442 | 449 |
| 443 // Revoke all permissions for the file (it should inherit its permissions | 450 // Revoke all permissions for the file (it should inherit its permissions |
| 444 // from the directory again). | 451 // from the directory again). |
| 445 p->RevokeAllPermissionsForFile(kRendererID, granted_file); | 452 p->RevokeAllPermissionsForFile(kRendererID, granted_file); |
| 446 EXPECT_TRUE(p->HasPermissionsForFile(kRendererID, granted_file, | 453 EXPECT_TRUE(p->HasPermissionsForFile(kRendererID, granted_file, |
| 447 base::PLATFORM_FILE_OPEN | | 454 base::PLATFORM_FILE_OPEN | |
| 448 base::PLATFORM_FILE_READ)); | 455 base::PLATFORM_FILE_READ)); |
| 449 EXPECT_FALSE(p->HasPermissionsForFile(kRendererID, granted_file, | 456 EXPECT_FALSE(p->HasPermissionsForFile(kRendererID, granted_file, |
| 450 base::PLATFORM_FILE_TEMPORARY)); | 457 base::PLATFORM_FILE_TEMPORARY)); |
| 451 p->Remove(kRendererID); | 458 p->Remove(kRendererID); |
| 452 | 459 |
| 453 // Grant file permissions for the file to main thread renderer process, | 460 // Grant file permissions for the file to main thread renderer process, |
| 454 // make sure its worker thread renderer process inherits those. | 461 // make sure its worker thread renderer process inherits those. |
| 455 p->Add(kRendererID); | 462 p->Add(kRendererID); |
| 456 p->GrantPermissionsForFile(kRendererID, granted_file, | 463 GrantPermissionsForFile(p, kRendererID, granted_file, |
| 457 base::PLATFORM_FILE_OPEN | | 464 base::PLATFORM_FILE_OPEN | |
| 458 base::PLATFORM_FILE_READ); | 465 base::PLATFORM_FILE_READ); |
| 459 EXPECT_TRUE(p->HasPermissionsForFile(kRendererID, granted_file, | 466 EXPECT_TRUE(p->HasPermissionsForFile(kRendererID, granted_file, |
| 460 base::PLATFORM_FILE_OPEN | | 467 base::PLATFORM_FILE_OPEN | |
| 461 base::PLATFORM_FILE_READ)); | 468 base::PLATFORM_FILE_READ)); |
| 462 EXPECT_FALSE(p->HasPermissionsForFile(kRendererID, granted_file, | 469 EXPECT_FALSE(p->HasPermissionsForFile(kRendererID, granted_file, |
| 463 base::PLATFORM_FILE_WRITE)); | 470 base::PLATFORM_FILE_WRITE)); |
| 464 p->AddWorker(kWorkerRendererID, kRendererID); | 471 p->AddWorker(kWorkerRendererID, kRendererID); |
| 465 EXPECT_TRUE(p->HasPermissionsForFile(kWorkerRendererID, granted_file, | 472 EXPECT_TRUE(p->HasPermissionsForFile(kWorkerRendererID, granted_file, |
| 466 base::PLATFORM_FILE_OPEN | | 473 base::PLATFORM_FILE_OPEN | |
| 467 base::PLATFORM_FILE_READ)); | 474 base::PLATFORM_FILE_READ)); |
| 468 EXPECT_FALSE(p->HasPermissionsForFile(kWorkerRendererID, granted_file, | 475 EXPECT_FALSE(p->HasPermissionsForFile(kWorkerRendererID, granted_file, |
| 469 base::PLATFORM_FILE_WRITE)); | 476 base::PLATFORM_FILE_WRITE)); |
| 470 p->Remove(kRendererID); | 477 p->Remove(kRendererID); |
| 471 EXPECT_FALSE(p->HasPermissionsForFile(kWorkerRendererID, granted_file, | 478 EXPECT_FALSE(p->HasPermissionsForFile(kWorkerRendererID, granted_file, |
| 472 base::PLATFORM_FILE_OPEN | | 479 base::PLATFORM_FILE_OPEN | |
| 473 base::PLATFORM_FILE_READ)); | 480 base::PLATFORM_FILE_READ)); |
| 474 p->Remove(kWorkerRendererID); | 481 p->Remove(kWorkerRendererID); |
| 475 | 482 |
| 476 p->Add(kRendererID); | 483 p->Add(kRendererID); |
| 477 p->GrantPermissionsForFile(kRendererID, relative_file, | 484 GrantPermissionsForFile(p, kRendererID, relative_file, |
| 478 base::PLATFORM_FILE_OPEN); | 485 base::PLATFORM_FILE_OPEN); |
| 479 EXPECT_FALSE(p->HasPermissionsForFile(kRendererID, relative_file, | 486 EXPECT_FALSE(p->HasPermissionsForFile(kRendererID, relative_file, |
| 480 base::PLATFORM_FILE_OPEN)); | 487 base::PLATFORM_FILE_OPEN)); |
| 481 p->Remove(kRendererID); | 488 p->Remove(kRendererID); |
| 482 } | 489 } |
| 483 | 490 |
| 484 TEST_F(ChildProcessSecurityPolicyTest, CanServiceWebUIBindings) { | 491 TEST_F(ChildProcessSecurityPolicyTest, CanServiceWebUIBindings) { |
| 485 ChildProcessSecurityPolicyImpl* p = | 492 ChildProcessSecurityPolicyImpl* p = |
| 486 ChildProcessSecurityPolicyImpl::GetInstance(); | 493 ChildProcessSecurityPolicyImpl::GetInstance(); |
| 487 | 494 |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 521 // queried on the IO thread. The ChildProcessSecurityPolicy needs to be | 528 // queried on the IO thread. The ChildProcessSecurityPolicy needs to be |
| 522 // prepared to answer policy questions about renderers who no longer exist. | 529 // prepared to answer policy questions about renderers who no longer exist. |
| 523 | 530 |
| 524 // In this case, we default to secure behavior. | 531 // In this case, we default to secure behavior. |
| 525 EXPECT_FALSE(p->CanRequestURL(kRendererID, url)); | 532 EXPECT_FALSE(p->CanRequestURL(kRendererID, url)); |
| 526 EXPECT_FALSE(p->CanReadFile(kRendererID, file)); | 533 EXPECT_FALSE(p->CanReadFile(kRendererID, file)); |
| 527 EXPECT_FALSE(p->HasWebUIBindings(kRendererID)); | 534 EXPECT_FALSE(p->HasWebUIBindings(kRendererID)); |
| 528 } | 535 } |
| 529 | 536 |
| 530 } // namespace content | 537 } // namespace content |
| OLD | NEW |