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

Side by Side Diff: chrome/browser/extensions/extension_startup_unittest.cc

Issue 149619: Various minor extension fixes (Closed)
Patch Set: One more test Created 11 years, 5 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
OLDNEW
1 #include <vector> 1 #include <vector>
2 2
3 #include "base/command_line.h" 3 #include "base/command_line.h"
4 #include "base/file_path.h" 4 #include "base/file_path.h"
5 #include "base/file_util.h" 5 #include "base/file_util.h"
6 #include "base/path_service.h" 6 #include "base/path_service.h"
7 #include "chrome/browser/browser.h" 7 #include "chrome/browser/browser.h"
8 #include "chrome/browser/extensions/extensions_service.h" 8 #include "chrome/browser/extensions/extensions_service.h"
9 #include "chrome/browser/profile.h" 9 #include "chrome/browser/profile.h"
10 #include "chrome/browser/tab_contents/tab_contents.h" 10 #include "chrome/browser/tab_contents/tab_contents.h"
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
64 PathService::Get(chrome::DIR_TEST_DATA, &src_dir); 64 PathService::Get(chrome::DIR_TEST_DATA, &src_dir);
65 src_dir = src_dir.AppendASCII("extensions").AppendASCII("good") 65 src_dir = src_dir.AppendASCII("extensions").AppendASCII("good")
66 .AppendASCII("Extensions") 66 .AppendASCII("Extensions")
67 .AppendASCII("behllobkkfkfnphdnhnkndlbkcpglgmj") 67 .AppendASCII("behllobkkfkfnphdnhnkndlbkcpglgmj")
68 .AppendASCII("1.0.0.0"); 68 .AppendASCII("1.0.0.0");
69 69
70 file_util::CreateDirectory(user_scripts_dir_); 70 file_util::CreateDirectory(user_scripts_dir_);
71 file_util::CopyFile(src_dir.AppendASCII("script2.js"), 71 file_util::CopyFile(src_dir.AppendASCII("script2.js"),
72 user_scripts_dir_.AppendASCII("script2.user.js")); 72 user_scripts_dir_.AppendASCII("script2.user.js"));
73 } 73 }
74
75 if (!load_extension_.value().empty()) {
76 command_line->AppendSwitchWithValue(switches::kLoadExtension,
77 load_extension_.ToWStringHack());
78 }
74 } 79 }
75 80
76 // NotificationObserver 81 // NotificationObserver
77 virtual void Observe(NotificationType type, 82 virtual void Observe(NotificationType type,
78 const NotificationSource& source, 83 const NotificationSource& source,
79 const NotificationDetails& details) { 84 const NotificationDetails& details) {
80 switch (type.value) { 85 switch (type.value) {
81 case NotificationType::EXTENSIONS_READY: 86 case NotificationType::EXTENSIONS_READY:
82 case NotificationType::USER_SCRIPTS_UPDATED: 87 case NotificationType::USER_SCRIPTS_UPDATED:
83 MessageLoopForUI::current()->Quit(); 88 MessageLoopForUI::current()->Quit();
84 break; 89 break;
85 } 90 }
86 } 91 }
87 92
88 virtual void TearDown() { 93 virtual void TearDown() {
89 file_util::Delete(preferences_file_, false); 94 file_util::Delete(preferences_file_, false);
90 file_util::Delete(user_scripts_dir_, true); 95 file_util::Delete(user_scripts_dir_, true);
91 file_util::Delete(extensions_dir_, true); 96 file_util::Delete(extensions_dir_, true);
92 } 97 }
93 98
99 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
100 bool expect_extensions_enabled) {
101 ExtensionsService* service = browser()->profile()->GetExtensionsService();
102 if (!service->is_ready()) {
103 registrar_.Add(this, NotificationType::EXTENSIONS_READY,
104 NotificationService::AllSources());
105 ui_test_utils::RunMessageLoop();
106 registrar_.Remove(this, NotificationType::EXTENSIONS_READY,
107 NotificationService::AllSources());
108 }
109
110 ASSERT_EQ(static_cast<uint32>(num_expected_extensions),
111 service->extensions()->size());
112 ASSERT_EQ(expect_extensions_enabled, service->extensions_enabled());
113
114 UserScriptMaster* master = browser()->profile()->GetUserScriptMaster();
115 if (!master->ScriptsReady()) {
116 // Wait for UserScriptMaster to finish its scan.
117 registrar_.Add(this, NotificationType::USER_SCRIPTS_UPDATED,
118 NotificationService::AllSources());
119 ui_test_utils::RunMessageLoop();
120 registrar_.Remove(this, NotificationType::USER_SCRIPTS_UPDATED,
121 NotificationService::AllSources());
122 }
123 ASSERT_TRUE(master->ScriptsReady());
124 }
125
126 void TestInjection(bool expect_css, bool expect_script) {
127 // Load a page affected by the content script and test to see the effect.
128 FilePath test_file;
129 PathService::Get(chrome::DIR_TEST_DATA, &test_file);
130 test_file = test_file.AppendASCII("extensions")
131 .AppendASCII("test_file.html");
132
133 ui_test_utils::NavigateToURL(browser(), net::FilePathToFileURL(test_file));
134
135 bool result = false;
136 ui_test_utils::ExecuteJavaScriptAndExtractBool(
137 browser()->GetSelectedTabContents()->render_view_host(), L"",
138 L"window.domAutomationController.send("
139 L"document.defaultView.getComputedStyle(document.body, null)."
140 L"getPropertyValue('background-color') == 'rgb(245, 245, 220)')",
141 &result);
142 EXPECT_EQ(expect_css, result);
143
144 result = false;
145 ui_test_utils::ExecuteJavaScriptAndExtractBool(
146 browser()->GetSelectedTabContents()->render_view_host(), L"",
147 L"window.domAutomationController.send(document.title == 'Modified')",
148 &result);
149 EXPECT_EQ(expect_script, result);
150 }
151
94 FilePath preferences_file_; 152 FilePath preferences_file_;
95 FilePath extensions_dir_; 153 FilePath extensions_dir_;
96 FilePath user_scripts_dir_; 154 FilePath user_scripts_dir_;
97 bool enable_extensions_; 155 bool enable_extensions_;
98 bool enable_user_scripts_; 156 bool enable_user_scripts_;
157 FilePath load_extension_;
99 NotificationRegistrar registrar_; 158 NotificationRegistrar registrar_;
100 }; 159 };
101 160
102 161
103 // ExtensionsStartupTest 162 // ExtensionsStartupTest
104 // Ensures that we can startup the browser with --enable-extensions and some 163 // Ensures that we can startup the browser with --enable-extensions and some
105 // extensions installed and see them run and do basic things. 164 // extensions installed and see them run and do basic things.
106 165
107 class ExtensionsStartupTest : public ExtensionStartupTestBase { 166 class ExtensionsStartupTest : public ExtensionStartupTestBase {
108 public: 167 public:
109 ExtensionsStartupTest() { 168 ExtensionsStartupTest() {
110 enable_extensions_ = true; 169 enable_extensions_ = true;
111 } 170 }
112 }; 171 };
113 172
114 IN_PROC_BROWSER_TEST_F(ExtensionsStartupTest, Test) { 173 IN_PROC_BROWSER_TEST_F(ExtensionsStartupTest, Test) {
115 ExtensionsService* service = browser()->profile()->GetExtensionsService(); 174 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
116 if (!service->is_ready()) { 175 TestInjection(true, true);
117 registrar_.Add(this, NotificationType::EXTENSIONS_READY, 176 }
118 NotificationService::AllSources()); 177
119 ui_test_utils::RunMessageLoop(); 178
120 registrar_.Remove(this, NotificationType::EXTENSIONS_READY, 179 // ExtensionsLoadTest
121 NotificationService::AllSources()); 180 // Ensures that we can startup the browser with --load-extension and see them
181 // run.
182
183 class ExtensionsLoadTest : public ExtensionStartupTestBase {
184 public:
185 ExtensionsLoadTest() {
186 PathService::Get(chrome::DIR_TEST_DATA, &load_extension_);
187 load_extension_ = load_extension_
188 .AppendASCII("extensions")
189 .AppendASCII("good")
190 .AppendASCII("Extensions")
191 .AppendASCII("behllobkkfkfnphdnhnkndlbkcpglgmj")
192 .AppendASCII("1.0.0.0");
122 } 193 }
123 ASSERT_EQ(3u, service->extensions()->size()); 194 };
124 ASSERT_TRUE(service->extensions_enabled());
125 195
126 UserScriptMaster* master = browser()->profile()->GetUserScriptMaster(); 196 IN_PROC_BROWSER_TEST_F(ExtensionsLoadTest, Test) {
127 if (!master->ScriptsReady()) { 197 WaitForServicesToStart(1, false);
128 // Wait for UserScriptMaster to finish its scan. 198 TestInjection(true, true);
129 registrar_.Add(this, NotificationType::USER_SCRIPTS_UPDATED,
130 NotificationService::AllSources());
131 ui_test_utils::RunMessageLoop();
132 registrar_.Remove(this, NotificationType::USER_SCRIPTS_UPDATED,
133 NotificationService::AllSources());
134 }
135 ASSERT_TRUE(master->ScriptsReady());
136
137 FilePath test_file;
138 PathService::Get(chrome::DIR_TEST_DATA, &test_file);
139 test_file = test_file.AppendASCII("extensions")
140 .AppendASCII("test_file.html");
141
142 // Now we should be able to load a page affected by the content script and see
143 // the effect.
144 ui_test_utils::NavigateToURL(browser(), net::FilePathToFileURL(test_file));
145
146 // Test that the content script ran.
147 bool result = false;
148 ui_test_utils::ExecuteJavaScriptAndExtractBool(
149 browser()->GetSelectedTabContents()->render_view_host(), L"",
150 L"window.domAutomationController.send("
151 L"document.defaultView.getComputedStyle(document.body, null)."
152 L"getPropertyValue('background-color') == 'rgb(245, 245, 220)')",
153 &result);
154 EXPECT_TRUE(result);
155
156 result = false;
157 ui_test_utils::ExecuteJavaScriptAndExtractBool(
158 browser()->GetSelectedTabContents()->render_view_host(), L"",
159 L"window.domAutomationController.send(document.title == 'Modified')",
160 &result);
161 EXPECT_TRUE(result);
162 } 199 }
163 200
164 201
165 // ExtensionsStartupUserScriptTest 202 // ExtensionsStartupUserScriptTest
166 // Tests that we can startup with --enable-user-scripts and run user sripts and 203 // Tests that we can startup with --enable-user-scripts and run user scripts and
167 // see them do basic things. 204 // see them do basic things.
168 205
169 class ExtensionsStartupUserScriptTest : public ExtensionStartupTestBase { 206 class ExtensionsStartupUserScriptTest : public ExtensionStartupTestBase {
170 public: 207 public:
171 ExtensionsStartupUserScriptTest() { 208 ExtensionsStartupUserScriptTest() {
172 enable_user_scripts_ = true; 209 enable_user_scripts_ = true;
173 } 210 }
174 }; 211 };
175 212
176 IN_PROC_BROWSER_TEST_F(ExtensionsStartupUserScriptTest, Test) { 213 IN_PROC_BROWSER_TEST_F(ExtensionsStartupUserScriptTest, Test) {
177 UserScriptMaster* master = browser()->profile()->GetUserScriptMaster(); 214 WaitForServicesToStart(0, false);
178 if (!master->ScriptsReady()) { 215 TestInjection(false, true);
179 // Wait for UserScriptMaster to finish its scan. 216 }
180 registrar_.Add(this, NotificationType::USER_SCRIPTS_UPDATED,
181 NotificationService::AllSources());
182 ui_test_utils::RunMessageLoop();
183 registrar_.Remove(this, NotificationType::USER_SCRIPTS_UPDATED,
184 NotificationService::AllSources());
185 }
186 ASSERT_TRUE(master->ScriptsReady());
187 217
188 FilePath test_file; 218 // Ensure we don't inject into chrome:// URLs
189 PathService::Get(chrome::DIR_TEST_DATA, &test_file); 219 IN_PROC_BROWSER_TEST_F(ExtensionsStartupUserScriptTest, NoInjectIntoChrome) {
190 test_file = test_file.AppendASCII("extensions") 220 WaitForServicesToStart(0, false);
191 .AppendASCII("test_file.html");
192 221
193 // Now we should be able to load a page affected by the content script and see 222 ui_test_utils::NavigateToURL(browser(), GURL("chrome://newtab"));
194 // the effect.
195 ui_test_utils::NavigateToURL(browser(), net::FilePathToFileURL(test_file));
196 223
197 // Test that the user script ran.
198 bool result = false; 224 bool result = false;
199 ui_test_utils::ExecuteJavaScriptAndExtractBool( 225 ui_test_utils::ExecuteJavaScriptAndExtractBool(
200 browser()->GetSelectedTabContents()->render_view_host(), L"", 226 browser()->GetSelectedTabContents()->render_view_host(), L"",
201 L"window.domAutomationController.send(document.title == 'Modified')", 227 L"window.domAutomationController.send(document.title == 'Modified')",
202 &result); 228 &result);
203 EXPECT_TRUE(result); 229 EXPECT_FALSE(result);
204 } 230 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698