Chromium Code Reviews| Index: chrome/browser/extensions/extension_startup_unittest.cc |
| diff --git a/chrome/browser/extensions/extension_startup_unittest.cc b/chrome/browser/extensions/extension_startup_unittest.cc |
| index 540671e154dee3b35669a8296f7d757e4d207436..74d40a95ec4a8db037d279cd0753d4e8c6a846f0 100644 |
| --- a/chrome/browser/extensions/extension_startup_unittest.cc |
| +++ b/chrome/browser/extensions/extension_startup_unittest.cc |
| @@ -71,6 +71,11 @@ class ExtensionStartupTestBase |
| file_util::CopyFile(src_dir.AppendASCII("script2.js"), |
| user_scripts_dir_.AppendASCII("script2.user.js")); |
| } |
| + |
| + if (!load_extension_.value().empty()) { |
| + command_line->AppendSwitchWithValue(switches::kLoadExtension, |
| + load_extension_.ToWStringHack()); |
| + } |
| } |
| // NotificationObserver |
| @@ -91,11 +96,65 @@ class ExtensionStartupTestBase |
| file_util::Delete(extensions_dir_, true); |
| } |
| + void WaitForServicesToStart(int num_expected_extensions, |
|
Erik does not do reviews
2009/07/14 20:22:38
seems like it would be useful to have a num_expect
Aaron Boodman
2009/07/14 20:35:44
It would be good. We can't do this easily now beca
|
| + bool expect_extensions_enabled) { |
| + ExtensionsService* service = browser()->profile()->GetExtensionsService(); |
| + if (!service->is_ready()) { |
| + registrar_.Add(this, NotificationType::EXTENSIONS_READY, |
| + NotificationService::AllSources()); |
| + ui_test_utils::RunMessageLoop(); |
| + registrar_.Remove(this, NotificationType::EXTENSIONS_READY, |
| + NotificationService::AllSources()); |
| + } |
| + |
| + ASSERT_EQ(static_cast<uint32>(num_expected_extensions), |
| + service->extensions()->size()); |
| + ASSERT_EQ(expect_extensions_enabled, service->extensions_enabled()); |
| + |
| + UserScriptMaster* master = browser()->profile()->GetUserScriptMaster(); |
| + if (!master->ScriptsReady()) { |
| + // Wait for UserScriptMaster to finish its scan. |
| + registrar_.Add(this, NotificationType::USER_SCRIPTS_UPDATED, |
| + NotificationService::AllSources()); |
| + ui_test_utils::RunMessageLoop(); |
| + registrar_.Remove(this, NotificationType::USER_SCRIPTS_UPDATED, |
| + NotificationService::AllSources()); |
| + } |
| + ASSERT_TRUE(master->ScriptsReady()); |
| + } |
| + |
| + void TestInjection(bool expect_css, bool expect_script) { |
| + // Load a page affected by the content script and test to see the effect. |
| + FilePath test_file; |
| + PathService::Get(chrome::DIR_TEST_DATA, &test_file); |
| + test_file = test_file.AppendASCII("extensions") |
| + .AppendASCII("test_file.html"); |
| + |
| + ui_test_utils::NavigateToURL(browser(), net::FilePathToFileURL(test_file)); |
| + |
| + bool result = false; |
| + ui_test_utils::ExecuteJavaScriptAndExtractBool( |
| + browser()->GetSelectedTabContents()->render_view_host(), L"", |
| + L"window.domAutomationController.send(" |
| + L"document.defaultView.getComputedStyle(document.body, null)." |
| + L"getPropertyValue('background-color') == 'rgb(245, 245, 220)')", |
| + &result); |
| + EXPECT_EQ(expect_css, result); |
| + |
| + result = false; |
| + ui_test_utils::ExecuteJavaScriptAndExtractBool( |
| + browser()->GetSelectedTabContents()->render_view_host(), L"", |
| + L"window.domAutomationController.send(document.title == 'Modified')", |
| + &result); |
| + EXPECT_EQ(expect_script, result); |
| + } |
| + |
| FilePath preferences_file_; |
| FilePath extensions_dir_; |
| FilePath user_scripts_dir_; |
| bool enable_extensions_; |
| bool enable_user_scripts_; |
| + FilePath load_extension_; |
| NotificationRegistrar registrar_; |
| }; |
| @@ -112,58 +171,36 @@ class ExtensionsStartupTest : public ExtensionStartupTestBase { |
| }; |
| IN_PROC_BROWSER_TEST_F(ExtensionsStartupTest, Test) { |
| - ExtensionsService* service = browser()->profile()->GetExtensionsService(); |
| - if (!service->is_ready()) { |
| - registrar_.Add(this, NotificationType::EXTENSIONS_READY, |
| - NotificationService::AllSources()); |
| - ui_test_utils::RunMessageLoop(); |
| - registrar_.Remove(this, NotificationType::EXTENSIONS_READY, |
| - NotificationService::AllSources()); |
| - } |
| - ASSERT_EQ(3u, service->extensions()->size()); |
| - ASSERT_TRUE(service->extensions_enabled()); |
| - |
| - UserScriptMaster* master = browser()->profile()->GetUserScriptMaster(); |
| - if (!master->ScriptsReady()) { |
| - // Wait for UserScriptMaster to finish its scan. |
| - registrar_.Add(this, NotificationType::USER_SCRIPTS_UPDATED, |
| - NotificationService::AllSources()); |
| - ui_test_utils::RunMessageLoop(); |
| - registrar_.Remove(this, NotificationType::USER_SCRIPTS_UPDATED, |
| - NotificationService::AllSources()); |
| - } |
| - ASSERT_TRUE(master->ScriptsReady()); |
| + WaitForServicesToStart(3, true); |
|
Erik does not do reviews
2009/07/14 20:22:38
we've got multiple tests that depend on the number
Aaron Boodman
2009/07/14 20:35:44
There are two places that I see: ExtensionsService
|
| + TestInjection(true, true); |
| +} |
| - FilePath test_file; |
| - PathService::Get(chrome::DIR_TEST_DATA, &test_file); |
| - test_file = test_file.AppendASCII("extensions") |
| - .AppendASCII("test_file.html"); |
| - // Now we should be able to load a page affected by the content script and see |
| - // the effect. |
| - ui_test_utils::NavigateToURL(browser(), net::FilePathToFileURL(test_file)); |
| +// ExtensionsLoadTest |
| +// Ensures that we can startup the browser with --load-extension and see them |
| +// run. |
| - // Test that the content script ran. |
| - bool result = false; |
| - ui_test_utils::ExecuteJavaScriptAndExtractBool( |
| - browser()->GetSelectedTabContents()->render_view_host(), L"", |
| - L"window.domAutomationController.send(" |
| - L"document.defaultView.getComputedStyle(document.body, null)." |
| - L"getPropertyValue('background-color') == 'rgb(245, 245, 220)')", |
| - &result); |
| - EXPECT_TRUE(result); |
| +class ExtensionsLoadTest : public ExtensionStartupTestBase { |
| + public: |
| + ExtensionsLoadTest() { |
| + PathService::Get(chrome::DIR_TEST_DATA, &load_extension_); |
| + load_extension_ = load_extension_ |
| + .AppendASCII("extensions") |
| + .AppendASCII("good") |
| + .AppendASCII("Extensions") |
| + .AppendASCII("behllobkkfkfnphdnhnkndlbkcpglgmj") |
| + .AppendASCII("1.0.0.0"); |
| + } |
| +}; |
| - result = false; |
| - ui_test_utils::ExecuteJavaScriptAndExtractBool( |
| - browser()->GetSelectedTabContents()->render_view_host(), L"", |
| - L"window.domAutomationController.send(document.title == 'Modified')", |
| - &result); |
| - EXPECT_TRUE(result); |
| +IN_PROC_BROWSER_TEST_F(ExtensionsLoadTest, Test) { |
| + WaitForServicesToStart(1, false); |
| + TestInjection(true, true); |
| } |
| // ExtensionsStartupUserScriptTest |
| -// Tests that we can startup with --enable-user-scripts and run user sripts and |
| +// Tests that we can startup with --enable-user-scripts and run user scripts and |
| // see them do basic things. |
| class ExtensionsStartupUserScriptTest : public ExtensionStartupTestBase { |
| @@ -174,31 +211,20 @@ class ExtensionsStartupUserScriptTest : public ExtensionStartupTestBase { |
| }; |
| IN_PROC_BROWSER_TEST_F(ExtensionsStartupUserScriptTest, Test) { |
| - UserScriptMaster* master = browser()->profile()->GetUserScriptMaster(); |
| - if (!master->ScriptsReady()) { |
| - // Wait for UserScriptMaster to finish its scan. |
| - registrar_.Add(this, NotificationType::USER_SCRIPTS_UPDATED, |
| - NotificationService::AllSources()); |
| - ui_test_utils::RunMessageLoop(); |
| - registrar_.Remove(this, NotificationType::USER_SCRIPTS_UPDATED, |
| - NotificationService::AllSources()); |
| - } |
| - ASSERT_TRUE(master->ScriptsReady()); |
| + WaitForServicesToStart(0, false); |
| + TestInjection(false, true); |
| +} |
| - FilePath test_file; |
| - PathService::Get(chrome::DIR_TEST_DATA, &test_file); |
| - test_file = test_file.AppendASCII("extensions") |
| - .AppendASCII("test_file.html"); |
| +// Ensure we don't inject into chrome:// URLs |
| +IN_PROC_BROWSER_TEST_F(ExtensionsStartupUserScriptTest, NoInjectIntoChrome) { |
| + WaitForServicesToStart(0, false); |
| - // Now we should be able to load a page affected by the content script and see |
| - // the effect. |
| - ui_test_utils::NavigateToURL(browser(), net::FilePathToFileURL(test_file)); |
| + ui_test_utils::NavigateToURL(browser(), GURL("chrome://newtab")); |
| - // Test that the user script ran. |
| bool result = false; |
| ui_test_utils::ExecuteJavaScriptAndExtractBool( |
| browser()->GetSelectedTabContents()->render_view_host(), L"", |
| L"window.domAutomationController.send(document.title == 'Modified')", |
| &result); |
| - EXPECT_TRUE(result); |
| + EXPECT_FALSE(result); |
| } |