| 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 "base/command_line.h" | 5 #include "base/command_line.h" |
| 6 #include "base/memory/scoped_vector.h" | 6 #include "base/memory/scoped_vector.h" |
| 7 #include "base/path_service.h" | 7 #include "base/path_service.h" |
| 8 #include "base/strings/stringprintf.h" | 8 #include "base/strings/stringprintf.h" |
| 9 #include "chrome/browser/extensions/extension_apitest.h" | 9 #include "chrome/browser/extensions/extension_apitest.h" |
| 10 #include "chrome/browser/extensions/extension_test_message_listener.h" | 10 #include "chrome/browser/extensions/extension_test_message_listener.h" |
| 11 #include "chrome/browser/profiles/profile.h" | 11 #include "chrome/browser/profiles/profile.h" |
| 12 #include "chrome/browser/ui/browser.h" | 12 #include "chrome/browser/ui/browser.h" |
| 13 #include "chrome/browser/ui/browser_finder.h" | 13 #include "chrome/browser/ui/browser_finder.h" |
| 14 #include "chrome/browser/ui/browser_iterator.h" | 14 #include "chrome/browser/ui/browser_iterator.h" |
| 15 #include "chrome/browser/ui/panels/panel_manager.h" | 15 #include "chrome/browser/ui/panels/panel_manager.h" |
| 16 #include "chrome/browser/ui/tabs/tab_strip_model.h" | 16 #include "chrome/browser/ui/tabs/tab_strip_model.h" |
| 17 #include "chrome/common/chrome_paths.h" | 17 #include "chrome/common/chrome_paths.h" |
| 18 #include "chrome/common/chrome_switches.h" | 18 #include "chrome/common/chrome_switches.h" |
| 19 #include "chrome/test/base/test_switches.h" | 19 #include "chrome/test/base/test_switches.h" |
| 20 #include "chrome/test/base/ui_test_utils.h" | 20 #include "chrome/test/base/ui_test_utils.h" |
| 21 #include "content/public/browser/render_process_host.h" | 21 #include "content/public/browser/render_process_host.h" |
| 22 #include "content/public/browser/web_contents.h" | 22 #include "content/public/browser/web_contents.h" |
| 23 #include "content/public/common/result_codes.h" | 23 #include "content/public/common/result_codes.h" |
| 24 #include "content/public/common/url_constants.h" |
| 24 #include "content/public/test/browser_test_utils.h" | 25 #include "content/public/test/browser_test_utils.h" |
| 25 #include "extensions/browser/extension_host.h" | 26 #include "extensions/browser/extension_host.h" |
| 26 #include "extensions/browser/extension_system.h" | 27 #include "extensions/browser/extension_system.h" |
| 27 #include "extensions/browser/process_manager.h" | 28 #include "extensions/browser/process_manager.h" |
| 29 #include "extensions/common/constants.h" |
| 28 #include "extensions/common/extension.h" | 30 #include "extensions/common/extension.h" |
| 29 #include "extensions/common/switches.h" | 31 #include "extensions/common/switches.h" |
| 30 #include "net/dns/mock_host_resolver.h" | 32 #include "net/dns/mock_host_resolver.h" |
| 31 #include "net/test/embedded_test_server/embedded_test_server.h" | 33 #include "net/test/embedded_test_server/embedded_test_server.h" |
| 32 #include "testing/gtest/include/gtest/gtest.h" | 34 #include "testing/gtest/include/gtest/gtest.h" |
| 33 | 35 |
| 34 #if defined(USE_ASH) | 36 #if defined(USE_ASH) |
| 35 #include "apps/app_window_registry.h" | 37 #include "apps/app_window_registry.h" |
| 36 #endif | 38 #endif |
| 37 | 39 |
| (...skipping 406 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 444 ASSERT_TRUE(RunExtensionTest("window_open/window_size")) << message_; | 446 ASSERT_TRUE(RunExtensionTest("window_open/window_size")) << message_; |
| 445 EXPECT_TRUE(WaitForTabsAndPopups(browser(), 0, 1, 0)); | 447 EXPECT_TRUE(WaitForTabsAndPopups(browser(), 0, 1, 0)); |
| 446 } | 448 } |
| 447 | 449 |
| 448 // Tests that an extension page can call window.open to an extension URL and | 450 // Tests that an extension page can call window.open to an extension URL and |
| 449 // the new window has extension privileges. | 451 // the new window has extension privileges. |
| 450 IN_PROC_BROWSER_TEST_F(ExtensionBrowserTest, WindowOpenExtension) { | 452 IN_PROC_BROWSER_TEST_F(ExtensionBrowserTest, WindowOpenExtension) { |
| 451 ASSERT_TRUE(LoadExtension( | 453 ASSERT_TRUE(LoadExtension( |
| 452 test_data_dir_.AppendASCII("uitest").AppendASCII("window_open"))); | 454 test_data_dir_.AppendASCII("uitest").AppendASCII("window_open"))); |
| 453 | 455 |
| 454 GURL start_url(std::string("chrome-extension://") + | 456 GURL start_url(std::string(extensions::kExtensionScheme) + |
| 457 content::kStandardSchemeSeparator + |
| 455 last_loaded_extension_id() + "/test.html"); | 458 last_loaded_extension_id() + "/test.html"); |
| 456 ui_test_utils::NavigateToURL(browser(), start_url); | 459 ui_test_utils::NavigateToURL(browser(), start_url); |
| 457 WebContents* newtab = NULL; | 460 WebContents* newtab = NULL; |
| 458 ASSERT_NO_FATAL_FAILURE( | 461 ASSERT_NO_FATAL_FAILURE( |
| 459 OpenWindow(browser()->tab_strip_model()->GetActiveWebContents(), | 462 OpenWindow(browser()->tab_strip_model()->GetActiveWebContents(), |
| 460 start_url.Resolve("newtab.html"), true, &newtab)); | 463 start_url.Resolve("newtab.html"), true, &newtab)); |
| 461 | 464 |
| 462 bool result = false; | 465 bool result = false; |
| 463 ASSERT_TRUE(content::ExecuteScriptAndExtractBool(newtab, "testExtensionApi()", | 466 ASSERT_TRUE(content::ExecuteScriptAndExtractBool(newtab, "testExtensionApi()", |
| 464 &result)); | 467 &result)); |
| 465 EXPECT_TRUE(result); | 468 EXPECT_TRUE(result); |
| 466 } | 469 } |
| 467 | 470 |
| 468 // Tests that if an extension page calls window.open to an invalid extension | 471 // Tests that if an extension page calls window.open to an invalid extension |
| 469 // URL, the browser doesn't crash. | 472 // URL, the browser doesn't crash. |
| 470 IN_PROC_BROWSER_TEST_F(ExtensionBrowserTest, WindowOpenInvalidExtension) { | 473 IN_PROC_BROWSER_TEST_F(ExtensionBrowserTest, WindowOpenInvalidExtension) { |
| 471 ASSERT_TRUE(LoadExtension( | 474 ASSERT_TRUE(LoadExtension( |
| 472 test_data_dir_.AppendASCII("uitest").AppendASCII("window_open"))); | 475 test_data_dir_.AppendASCII("uitest").AppendASCII("window_open"))); |
| 473 | 476 |
| 474 GURL start_url(std::string("chrome-extension://") + | 477 GURL start_url(std::string(extensions::kExtensionScheme) + |
| 478 content::kStandardSchemeSeparator + |
| 475 last_loaded_extension_id() + "/test.html"); | 479 last_loaded_extension_id() + "/test.html"); |
| 476 ui_test_utils::NavigateToURL(browser(), start_url); | 480 ui_test_utils::NavigateToURL(browser(), start_url); |
| 477 ASSERT_NO_FATAL_FAILURE( | 481 ASSERT_NO_FATAL_FAILURE( |
| 478 OpenWindow(browser()->tab_strip_model()->GetActiveWebContents(), | 482 OpenWindow(browser()->tab_strip_model()->GetActiveWebContents(), |
| 479 GURL("chrome-extension://thisissurelynotavalidextensionid/newtab.html"), | 483 GURL("chrome-extension://thisissurelynotavalidextensionid/newtab.html"), |
| 480 false, NULL)); | 484 false, NULL)); |
| 481 | 485 |
| 482 // If we got to this point, we didn't crash, so we're good. | 486 // If we got to this point, we didn't crash, so we're good. |
| 483 } | 487 } |
| 484 | 488 |
| 485 // Tests that calling window.open from the newtab page to an extension URL | 489 // Tests that calling window.open from the newtab page to an extension URL |
| 486 // gives the new window extension privileges - even though the opening page | 490 // gives the new window extension privileges - even though the opening page |
| 487 // does not have extension privileges, we break the script connection, so | 491 // does not have extension privileges, we break the script connection, so |
| 488 // there is no privilege leak. | 492 // there is no privilege leak. |
| 489 IN_PROC_BROWSER_TEST_F(ExtensionBrowserTest, WindowOpenNoPrivileges) { | 493 IN_PROC_BROWSER_TEST_F(ExtensionBrowserTest, WindowOpenNoPrivileges) { |
| 490 ASSERT_TRUE(LoadExtension( | 494 ASSERT_TRUE(LoadExtension( |
| 491 test_data_dir_.AppendASCII("uitest").AppendASCII("window_open"))); | 495 test_data_dir_.AppendASCII("uitest").AppendASCII("window_open"))); |
| 492 | 496 |
| 493 ui_test_utils::NavigateToURL(browser(), GURL("about:blank")); | 497 ui_test_utils::NavigateToURL(browser(), GURL("about:blank")); |
| 494 WebContents* newtab = NULL; | 498 WebContents* newtab = NULL; |
| 495 ASSERT_NO_FATAL_FAILURE( | 499 ASSERT_NO_FATAL_FAILURE( |
| 496 OpenWindow(browser()->tab_strip_model()->GetActiveWebContents(), | 500 OpenWindow(browser()->tab_strip_model()->GetActiveWebContents(), |
| 497 GURL(std::string("chrome-extension://") + last_loaded_extension_id() + | 501 GURL(std::string(extensions::kExtensionScheme) + |
| 502 content::kStandardSchemeSeparator + last_loaded_extension_id() + |
| 498 "/newtab.html"), false, &newtab)); | 503 "/newtab.html"), false, &newtab)); |
| 499 | 504 |
| 500 // Extension API should succeed. | 505 // Extension API should succeed. |
| 501 bool result = false; | 506 bool result = false; |
| 502 ASSERT_TRUE(content::ExecuteScriptAndExtractBool(newtab, "testExtensionApi()", | 507 ASSERT_TRUE(content::ExecuteScriptAndExtractBool(newtab, "testExtensionApi()", |
| 503 &result)); | 508 &result)); |
| 504 EXPECT_TRUE(result); | 509 EXPECT_TRUE(result); |
| 505 } | 510 } |
| OLD | NEW |