| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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/files/file_path.h" | 5 #include "base/files/file_path.h" |
| 6 #include "base/macros.h" | 6 #include "base/macros.h" |
| 7 #include "base/strings/stringprintf.h" | 7 #include "base/strings/stringprintf.h" |
| 8 #include "chrome/browser/extensions/active_script_controller.h" | 8 #include "chrome/browser/extensions/active_script_controller.h" |
| 9 #include "chrome/browser/extensions/extension_action.h" | 9 #include "chrome/browser/extensions/extension_action.h" |
| 10 #include "chrome/browser/extensions/extension_browsertest.h" | 10 #include "chrome/browser/extensions/extension_browsertest.h" |
| 11 #include "chrome/browser/extensions/extension_util.h" |
| 11 #include "chrome/browser/extensions/tab_helper.h" | 12 #include "chrome/browser/extensions/tab_helper.h" |
| 12 #include "chrome/browser/extensions/test_extension_dir.h" | 13 #include "chrome/browser/extensions/test_extension_dir.h" |
| 13 #include "chrome/browser/ui/browser.h" | 14 #include "chrome/browser/ui/browser.h" |
| 14 #include "chrome/browser/ui/tabs/tab_strip_model.h" | 15 #include "chrome/browser/ui/tabs/tab_strip_model.h" |
| 15 #include "chrome/test/base/ui_test_utils.h" | 16 #include "chrome/test/base/ui_test_utils.h" |
| 16 #include "content/public/test/browser_test_utils.h" | 17 #include "content/public/test/browser_test_utils.h" |
| 17 #include "extensions/common/feature_switch.h" | 18 #include "extensions/common/feature_switch.h" |
| 18 #include "extensions/common/switches.h" | 19 #include "extensions/common/switches.h" |
| 19 #include "extensions/test/extension_test_message_listener.h" | 20 #include "extensions/test/extension_test_message_listener.h" |
| 20 #include "net/test/embedded_test_server/embedded_test_server.h" | 21 #include "net/test/embedded_test_server/embedded_test_server.h" |
| (...skipping 374 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 395 | 396 |
| 396 // We should still be able to run the request for extension1. | 397 // We should still be able to run the request for extension1. |
| 397 ExtensionTestMessageListener inject_success_listener( | 398 ExtensionTestMessageListener inject_success_listener( |
| 398 new ExtensionTestMessageListener(kInjectSucceeded, | 399 new ExtensionTestMessageListener(kInjectSucceeded, |
| 399 false /* won't reply */)); | 400 false /* won't reply */)); |
| 400 inject_success_listener.set_extension_id(extension1->id()); | 401 inject_success_listener.set_extension_id(extension1->id()); |
| 401 active_script_controller->OnClicked(extension1); | 402 active_script_controller->OnClicked(extension1); |
| 402 inject_success_listener.WaitUntilSatisfied(); | 403 inject_success_listener.WaitUntilSatisfied(); |
| 403 } | 404 } |
| 404 | 405 |
| 406 // Test that granting the extension all urls permission allows it to run on |
| 407 // pages, and that the permission update is sent to existing renderers. |
| 408 IN_PROC_BROWSER_TEST_F(ActiveScriptControllerBrowserTest, |
| 409 GrantExtensionAllUrlsPermission) { |
| 410 |
| 411 // Loadup an extension and navigate. |
| 412 const Extension* extension = CreateExtension(ALL_HOSTS, CONTENT_SCRIPT); |
| 413 ASSERT_TRUE(extension); |
| 414 |
| 415 content::WebContents* web_contents = |
| 416 browser()->tab_strip_model()->GetActiveWebContents(); |
| 417 ASSERT_TRUE(web_contents); |
| 418 ActiveScriptController* active_script_controller = |
| 419 ActiveScriptController::GetForWebContents(web_contents); |
| 420 ASSERT_TRUE(active_script_controller); |
| 421 |
| 422 ExtensionTestMessageListener inject_success_listener( |
| 423 new ExtensionTestMessageListener(kInjectSucceeded, |
| 424 false /* won't reply */)); |
| 425 inject_success_listener.set_extension_id(extension->id()); |
| 426 |
| 427 ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady()); |
| 428 GURL url = embedded_test_server()->GetURL("/extensions/test_file.html"); |
| 429 ui_test_utils::NavigateToURL(browser(), url); |
| 430 |
| 431 // The extension shouldn't be allowed to run. |
| 432 EXPECT_TRUE(active_script_controller->WantsToRun(extension)); |
| 433 EXPECT_EQ(1, active_script_controller->num_page_requests()); |
| 434 EXPECT_FALSE(inject_success_listener.was_satisfied()); |
| 435 |
| 436 // Enable the extension to run on all urls. |
| 437 util::SetAllowedScriptingOnAllUrls(extension->id(), profile(), true); |
| 438 EXPECT_TRUE(RunAllPendingInRenderer(web_contents)); |
| 439 |
| 440 // Navigate again - this time, the extension should execute immediately (and |
| 441 // should not need to ask the script controller for permission). |
| 442 ui_test_utils::NavigateToURL(browser(), url); |
| 443 EXPECT_FALSE(active_script_controller->WantsToRun(extension)); |
| 444 EXPECT_EQ(0, active_script_controller->num_page_requests()); |
| 445 EXPECT_TRUE(inject_success_listener.WaitUntilSatisfied()); |
| 446 |
| 447 // Revoke all urls permissions. |
| 448 inject_success_listener.Reset(); |
| 449 util::SetAllowedScriptingOnAllUrls(extension->id(), profile(), false); |
| 450 EXPECT_TRUE(RunAllPendingInRenderer(web_contents)); |
| 451 |
| 452 // Re-navigate; the extension should again need permission to run. |
| 453 ui_test_utils::NavigateToURL(browser(), url); |
| 454 EXPECT_TRUE(active_script_controller->WantsToRun(extension)); |
| 455 EXPECT_EQ(1, active_script_controller->num_page_requests()); |
| 456 EXPECT_FALSE(inject_success_listener.was_satisfied()); |
| 457 } |
| 458 |
| 405 // A version of the test with the flag off, in order to test that everything | 459 // A version of the test with the flag off, in order to test that everything |
| 406 // still works as expected. | 460 // still works as expected. |
| 407 class FlagOffActiveScriptControllerBrowserTest | 461 class FlagOffActiveScriptControllerBrowserTest |
| 408 : public ActiveScriptControllerBrowserTest { | 462 : public ActiveScriptControllerBrowserTest { |
| 409 private: | 463 private: |
| 410 // Simply don't append the flag. | 464 // Simply don't append the flag. |
| 411 void SetUpCommandLine(base::CommandLine* command_line) override { | 465 void SetUpCommandLine(base::CommandLine* command_line) override { |
| 412 ExtensionBrowserTest::SetUpCommandLine(command_line); | 466 ExtensionBrowserTest::SetUpCommandLine(command_line); |
| 413 } | 467 } |
| 414 }; | 468 }; |
| (...skipping 21 matching lines...) Expand all Loading... |
| 436 | 490 |
| 437 ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady()); | 491 ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady()); |
| 438 ui_test_utils::NavigateToURL( | 492 ui_test_utils::NavigateToURL( |
| 439 browser(), embedded_test_server()->GetURL("/extensions/test_file.html")); | 493 browser(), embedded_test_server()->GetURL("/extensions/test_file.html")); |
| 440 | 494 |
| 441 for (size_t i = 0u; i < arraysize(testers); ++i) | 495 for (size_t i = 0u; i < arraysize(testers); ++i) |
| 442 EXPECT_TRUE(testers[i].Verify()) << kExtensionNames[i]; | 496 EXPECT_TRUE(testers[i].Verify()) << kExtensionNames[i]; |
| 443 } | 497 } |
| 444 | 498 |
| 445 } // namespace extensions | 499 } // namespace extensions |
| OLD | NEW |