OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 <string> | 5 #include <string> |
6 | 6 |
7 #include "base/compiler_specific.h" | 7 #include "base/compiler_specific.h" |
8 #include "base/file_path.h" | 8 #include "base/file_path.h" |
9 #include "base/sys_info.h" | 9 #include "base/sys_info.h" |
10 #include "base/utf_string_conversions.h" | 10 #include "base/utf_string_conversions.h" |
(...skipping 29 matching lines...) Expand all Loading... |
40 #include "net/test/test_server.h" | 40 #include "net/test/test_server.h" |
41 #include "ui/base/l10n/l10n_util.h" | 41 #include "ui/base/l10n/l10n_util.h" |
42 | 42 |
43 #if defined(OS_WIN) | 43 #if defined(OS_WIN) |
44 #include "base/i18n/rtl.h" | 44 #include "base/i18n/rtl.h" |
45 #include "chrome/browser/browser_process.h" | 45 #include "chrome/browser/browser_process.h" |
46 #endif | 46 #endif |
47 | 47 |
48 namespace { | 48 namespace { |
49 | 49 |
50 const std::string BEFORE_UNLOAD_HTML = | 50 const char* kBeforeUnloadHTML = |
51 "<html><head><title>beforeunload</title></head><body>" | 51 "<html><head><title>beforeunload</title></head><body>" |
52 "<script>window.onbeforeunload=function(e){return 'foo'}</script>" | 52 "<script>window.onbeforeunload=function(e){return 'foo'}</script>" |
53 "</body></html>"; | 53 "</body></html>"; |
54 | 54 |
55 const std::wstring OPEN_NEW_BEFOREUNLOAD_PAGE = | 55 const char* kOpenNewBeforeUnloadPage = |
56 L"w=window.open(); w.onbeforeunload=function(e){return 'foo'};"; | 56 "w=window.open(); w.onbeforeunload=function(e){return 'foo'};"; |
57 | 57 |
58 const FilePath::CharType* kTitle1File = FILE_PATH_LITERAL("title1.html"); | 58 const FilePath::CharType* kTitle1File = FILE_PATH_LITERAL("title1.html"); |
59 const FilePath::CharType* kTitle2File = FILE_PATH_LITERAL("title2.html"); | 59 const FilePath::CharType* kTitle2File = FILE_PATH_LITERAL("title2.html"); |
60 | 60 |
61 const FilePath::CharType kDocRoot[] = FILE_PATH_LITERAL("chrome/test/data"); | 61 const FilePath::CharType kDocRoot[] = FILE_PATH_LITERAL("chrome/test/data"); |
62 | 62 |
63 // Given a page title, returns the expected window caption string. | 63 // Given a page title, returns the expected window caption string. |
64 std::wstring WindowCaptionFromPageTitle(std::wstring page_title) { | 64 std::wstring WindowCaptionFromPageTitle(std::wstring page_title) { |
65 #if defined(OS_MACOSX) || defined(OS_CHROMEOS) | 65 #if defined(OS_MACOSX) || defined(OS_CHROMEOS) |
66 // On Mac or ChromeOS, we don't want to suffix the page title with | 66 // On Mac or ChromeOS, we don't want to suffix the page title with |
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
204 | 204 |
205 IN_PROC_BROWSER_TEST_F(BrowserTest, JavascriptAlertActivatesTab) { | 205 IN_PROC_BROWSER_TEST_F(BrowserTest, JavascriptAlertActivatesTab) { |
206 GURL url(ui_test_utils::GetTestUrl(FilePath(FilePath::kCurrentDirectory), | 206 GURL url(ui_test_utils::GetTestUrl(FilePath(FilePath::kCurrentDirectory), |
207 FilePath(kTitle1File))); | 207 FilePath(kTitle1File))); |
208 ui_test_utils::NavigateToURL(browser(), url); | 208 ui_test_utils::NavigateToURL(browser(), url); |
209 AddTabAtIndex(0, url, PageTransition::TYPED); | 209 AddTabAtIndex(0, url, PageTransition::TYPED); |
210 EXPECT_EQ(2, browser()->tab_count()); | 210 EXPECT_EQ(2, browser()->tab_count()); |
211 EXPECT_EQ(0, browser()->selected_index()); | 211 EXPECT_EQ(0, browser()->selected_index()); |
212 TabContents* second_tab = browser()->GetTabContentsAt(1); | 212 TabContents* second_tab = browser()->GetTabContentsAt(1); |
213 ASSERT_TRUE(second_tab); | 213 ASSERT_TRUE(second_tab); |
214 second_tab->render_view_host()->ExecuteJavascriptInWebFrame(L"", | 214 second_tab->render_view_host()->ExecuteJavascriptInWebFrame( |
215 L"alert('Activate!');"); | 215 string16(), |
| 216 ASCIIToUTF16("alert('Activate!');")); |
216 AppModalDialog* alert = ui_test_utils::WaitForAppModalDialog(); | 217 AppModalDialog* alert = ui_test_utils::WaitForAppModalDialog(); |
217 alert->CloseModalDialog(); | 218 alert->CloseModalDialog(); |
218 EXPECT_EQ(2, browser()->tab_count()); | 219 EXPECT_EQ(2, browser()->tab_count()); |
219 EXPECT_EQ(1, browser()->selected_index()); | 220 EXPECT_EQ(1, browser()->selected_index()); |
220 } | 221 } |
221 | 222 |
222 // Create 34 tabs and verify that a lot of processes have been created. The | 223 // Create 34 tabs and verify that a lot of processes have been created. The |
223 // exact number of processes depends on the amount of memory. Previously we | 224 // exact number of processes depends on the amount of memory. Previously we |
224 // had a hard limit of 31 processes and this test is mainly directed at | 225 // had a hard limit of 31 processes and this test is mainly directed at |
225 // verifying that we don't crash when we pass this limit. | 226 // verifying that we don't crash when we pass this limit. |
(...skipping 13 matching lines...) Expand all Loading... |
239 if (base::SysInfo::AmountOfPhysicalMemoryMB() >= 2048) { | 240 if (base::SysInfo::AmountOfPhysicalMemoryMB() >= 2048) { |
240 EXPECT_GE(CountRenderProcessHosts(), 24); | 241 EXPECT_GE(CountRenderProcessHosts(), 24); |
241 } else { | 242 } else { |
242 EXPECT_LE(CountRenderProcessHosts(), 23); | 243 EXPECT_LE(CountRenderProcessHosts(), 23); |
243 } | 244 } |
244 } | 245 } |
245 | 246 |
246 // Test for crbug.com/22004. Reloading a page with a before unload handler and | 247 // Test for crbug.com/22004. Reloading a page with a before unload handler and |
247 // then canceling the dialog should not leave the throbber spinning. | 248 // then canceling the dialog should not leave the throbber spinning. |
248 IN_PROC_BROWSER_TEST_F(BrowserTest, ReloadThenCancelBeforeUnload) { | 249 IN_PROC_BROWSER_TEST_F(BrowserTest, ReloadThenCancelBeforeUnload) { |
249 GURL url("data:text/html," + BEFORE_UNLOAD_HTML); | 250 GURL url(std::string("data:text/html,") + kBeforeUnloadHTML); |
250 ui_test_utils::NavigateToURL(browser(), url); | 251 ui_test_utils::NavigateToURL(browser(), url); |
251 | 252 |
252 // Navigate to another page, but click cancel in the dialog. Make sure that | 253 // Navigate to another page, but click cancel in the dialog. Make sure that |
253 // the throbber stops spinning. | 254 // the throbber stops spinning. |
254 browser()->Reload(CURRENT_TAB); | 255 browser()->Reload(CURRENT_TAB); |
255 AppModalDialog* alert = ui_test_utils::WaitForAppModalDialog(); | 256 AppModalDialog* alert = ui_test_utils::WaitForAppModalDialog(); |
256 alert->CloseModalDialog(); | 257 alert->CloseModalDialog(); |
257 EXPECT_FALSE(browser()->GetSelectedTabContents()->is_loading()); | 258 EXPECT_FALSE(browser()->GetSelectedTabContents()->is_loading()); |
258 | 259 |
259 // Clear the beforeunload handler so the test can easily exit. | 260 // Clear the beforeunload handler so the test can easily exit. |
260 browser()->GetSelectedTabContents()->render_view_host()-> | 261 browser()->GetSelectedTabContents()->render_view_host()-> |
261 ExecuteJavascriptInWebFrame(L"", L"onbeforeunload=null;"); | 262 ExecuteJavascriptInWebFrame(string16(), |
| 263 ASCIIToUTF16("onbeforeunload=null;")); |
262 } | 264 } |
263 | 265 |
264 // Crashy on mac. http://crbug.com/38522 | 266 // Crashy on mac. http://crbug.com/38522 |
265 #if defined(OS_MACOSX) | 267 #if defined(OS_MACOSX) |
266 #define MAYBE_SingleBeforeUnloadAfterWindowClose \ | 268 #define MAYBE_SingleBeforeUnloadAfterWindowClose \ |
267 DISABLED_SingleBeforeUnloadAfterWindowClose | 269 DISABLED_SingleBeforeUnloadAfterWindowClose |
268 #else | 270 #else |
269 #define MAYBE_SingleBeforeUnloadAfterWindowClose \ | 271 #define MAYBE_SingleBeforeUnloadAfterWindowClose \ |
270 SingleBeforeUnloadAfterWindowClose | 272 SingleBeforeUnloadAfterWindowClose |
271 #endif | 273 #endif |
272 | 274 |
273 // Test for crbug.com/11647. A page closed with window.close() should not have | 275 // Test for crbug.com/11647. A page closed with window.close() should not have |
274 // two beforeunload dialogs shown. | 276 // two beforeunload dialogs shown. |
275 IN_PROC_BROWSER_TEST_F(BrowserTest, MAYBE_SingleBeforeUnloadAfterWindowClose) { | 277 IN_PROC_BROWSER_TEST_F(BrowserTest, MAYBE_SingleBeforeUnloadAfterWindowClose) { |
276 browser()->GetSelectedTabContents()->render_view_host()-> | 278 browser()->GetSelectedTabContents()->render_view_host()-> |
277 ExecuteJavascriptInWebFrame(L"", OPEN_NEW_BEFOREUNLOAD_PAGE); | 279 ExecuteJavascriptInWebFrame(string16(), |
| 280 ASCIIToUTF16(kOpenNewBeforeUnloadPage)); |
278 | 281 |
279 // Close the new window with JavaScript, which should show a single | 282 // Close the new window with JavaScript, which should show a single |
280 // beforeunload dialog. Then show another alert, to make it easy to verify | 283 // beforeunload dialog. Then show another alert, to make it easy to verify |
281 // that a second beforeunload dialog isn't shown. | 284 // that a second beforeunload dialog isn't shown. |
282 browser()->GetTabContentsAt(0)->render_view_host()-> | 285 browser()->GetTabContentsAt(0)->render_view_host()-> |
283 ExecuteJavascriptInWebFrame(L"", L"w.close(); alert('bar');"); | 286 ExecuteJavascriptInWebFrame(string16(), |
| 287 ASCIIToUTF16("w.close(); alert('bar');")); |
284 AppModalDialog* alert = ui_test_utils::WaitForAppModalDialog(); | 288 AppModalDialog* alert = ui_test_utils::WaitForAppModalDialog(); |
285 alert->native_dialog()->AcceptAppModalDialog(); | 289 alert->native_dialog()->AcceptAppModalDialog(); |
286 | 290 |
287 alert = ui_test_utils::WaitForAppModalDialog(); | 291 alert = ui_test_utils::WaitForAppModalDialog(); |
288 EXPECT_FALSE(static_cast<JavaScriptAppModalDialog*>(alert)-> | 292 EXPECT_FALSE(static_cast<JavaScriptAppModalDialog*>(alert)-> |
289 is_before_unload_dialog()); | 293 is_before_unload_dialog()); |
290 alert->native_dialog()->AcceptAppModalDialog(); | 294 alert->native_dialog()->AcceptAppModalDialog(); |
291 } | 295 } |
292 | 296 |
293 // Test that get_process_idle_time() returns reasonable values when compared | 297 // Test that get_process_idle_time() returns reasonable values when compared |
(...skipping 483 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
777 | 781 |
778 // The normal browser should now have four. | 782 // The normal browser should now have four. |
779 EXPECT_EQ(4, browser()->tab_count()); | 783 EXPECT_EQ(4, browser()->tab_count()); |
780 | 784 |
781 // Close the additional browsers. | 785 // Close the additional browsers. |
782 popup_browser->CloseAllTabs(); | 786 popup_browser->CloseAllTabs(); |
783 app_browser->CloseAllTabs(); | 787 app_browser->CloseAllTabs(); |
784 app_popup_browser->CloseAllTabs(); | 788 app_popup_browser->CloseAllTabs(); |
785 } | 789 } |
786 #endif | 790 #endif |
OLD | NEW |