Chromium Code Reviews| 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 "base/base_paths.h" | 5 #include "base/base_paths.h" |
| 6 #include "base/file_path.h" | 6 #include "base/file_path.h" |
| 7 #include "base/file_util.h" | 7 #include "base/file_util.h" |
| 8 #include "base/path_service.h" | 8 #include "base/path_service.h" |
| 9 #include "base/string_util.h" | 9 #include "base/string_util.h" |
| 10 #include "base/sys_info.h" | 10 #include "base/sys_info.h" |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 67 ASSERT_TRUE(session_end_completed); | 67 ASSERT_TRUE(session_end_completed); |
| 68 | 68 |
| 69 // Make sure session restore says we didn't crash. | 69 // Make sure session restore says we didn't crash. |
| 70 scoped_ptr<DictionaryValue> profile_prefs(GetDefaultProfilePreferences()); | 70 scoped_ptr<DictionaryValue> profile_prefs(GetDefaultProfilePreferences()); |
| 71 ASSERT_TRUE(profile_prefs.get()); | 71 ASSERT_TRUE(profile_prefs.get()); |
| 72 ASSERT_TRUE(profile_prefs->GetBoolean(prefs::kSessionExitedCleanly, | 72 ASSERT_TRUE(profile_prefs->GetBoolean(prefs::kSessionExitedCleanly, |
| 73 &exited_cleanly)); | 73 &exited_cleanly)); |
| 74 ASSERT_TRUE(exited_cleanly); | 74 ASSERT_TRUE(exited_cleanly); |
| 75 } | 75 } |
| 76 | 76 |
| 77 // Test that scripts can fork a new renderer process for a tab in a particular | |
| 78 // case (which matches following a link in Gmail). The script must open a new | |
| 79 // tab, set its window.opener to null, and redirect it to a cross-site URL. | |
| 80 // (Bug 1115708) | |
| 81 // This test can only run if V8 is in use, and not KJS, because KJS will not | |
| 82 // set window.opener to null properly. | |
| 83 #ifdef CHROME_V8 | |
|
Charlie Reis
2011/08/25 18:32:20
This ifdef is apparently stale, so this test hasn'
Mihai Parparita -not on Chrome
2011/08/25 18:44:55
Not necessarily in this CL, but were you planning
Charlie Reis
2011/08/25 18:56:53
I actually don't know much about the history of CH
| |
| 84 TEST_F(BrowserTest, NullOpenerRedirectForksProcess) { | |
| 85 net::TestServer test_server(net::TestServer::TYPE_HTTP, | |
| 86 FilePath(FILE_PATH_LITERAL("chrome/test/data"))); | |
| 87 ASSERT_TRUE(test_server.Start()); | |
| 88 | |
| 89 FilePath test_file(test_data_directory_); | |
| 90 scoped_refptr<BrowserProxy> window(automation()->GetBrowserWindow(0)); | |
| 91 ASSERT_TRUE(window.get()); | |
| 92 scoped_refptr<TabProxy> tab(window->GetActiveTab()); | |
| 93 ASSERT_TRUE(tab.get()); | |
| 94 | |
| 95 // Start with a file:// url | |
| 96 test_file = test_file.AppendASCII("title2.html"); | |
| 97 tab->NavigateToURL(net::FilePathToFileURL(test_file)); | |
| 98 int orig_tab_count = -1; | |
| 99 ASSERT_TRUE(window->GetTabCount(&orig_tab_count)); | |
| 100 int orig_process_count = 0; | |
| 101 ASSERT_TRUE(GetBrowserProcessCount(&orig_process_count)); | |
| 102 ASSERT_GE(orig_process_count, 1); | |
| 103 | |
| 104 // Use JavaScript URL to "fork" a new tab, just like Gmail. (Open tab to a | |
| 105 // blank page, set its opener to null, and redirect it cross-site.) | |
| 106 std::wstring url_prefix(L"javascript:(function(){w=window.open();"); | |
| 107 GURL fork_url(url_prefix + | |
| 108 L"w.opener=null;w.document.location=\"http://localhost:1337\";})()"); | |
| 109 | |
| 110 // Make sure that a new tab has been created and that we have a new renderer | |
| 111 // process for it. | |
| 112 ASSERT_TRUE(tab->NavigateToURLAsync(fork_url)); | |
| 113 PlatformThread::Sleep(TestTimeouts::action_timeout_ms()); | |
| 114 int process_count = 0; | |
| 115 ASSERT_TRUE(GetBrowserProcessCount(&process_count)); | |
| 116 ASSERT_EQ(orig_process_count + 1, process_count); | |
| 117 int new_tab_count = -1; | |
| 118 ASSERT_TRUE(window->GetTabCount(&new_tab_count)); | |
| 119 ASSERT_EQ(orig_tab_count + 1, new_tab_count); | |
| 120 } | |
| 121 #endif // CHROME_V8 | |
| 122 | |
| 123 // This test fails on ChromeOS (it has never been known to work on it). | |
| 124 // Currently flaky on Windows - it has crashed a couple of times. | |
| 125 // http://crbug.com/32799 | |
| 126 #if defined(OS_CHROMEOS) | |
| 127 #define MAYBE_OtherRedirectsDontForkProcess DISABLED_OtherRedirectsDontForkProce ss | |
| 128 #else | |
| 129 #define MAYBE_OtherRedirectsDontForkProcess FLAKY_OtherRedirectsDontForkProcess | |
| 130 #endif | |
|
Charlie Reis
2011/08/25 18:32:20
Hoping the move to browsertests resolves this flak
Paweł Hajdan Jr.
2011/08/25 18:34:56
Ha ha, it's not that it magically solves all probl
Charlie Reis
2011/08/25 18:44:45
Well, at least it's a chance to get rid of things
| |
| 131 | |
| 132 // Tests that non-Gmail-like script redirects (i.e., non-null window.opener) or | |
| 133 // a same-page-redirect) will not fork a new process. | |
| 134 TEST_F(BrowserTest, MAYBE_OtherRedirectsDontForkProcess) { | |
| 135 net::TestServer test_server(net::TestServer::TYPE_HTTP, | |
| 136 FilePath(FILE_PATH_LITERAL("chrome/test/data"))); | |
| 137 ASSERT_TRUE(test_server.Start()); | |
| 138 | |
| 139 FilePath test_file(test_data_directory_); | |
| 140 scoped_refptr<BrowserProxy> window(automation()->GetBrowserWindow(0)); | |
| 141 ASSERT_TRUE(window.get()); | |
| 142 scoped_refptr<TabProxy> tab(window->GetActiveTab()); | |
| 143 ASSERT_TRUE(tab.get()); | |
| 144 | |
| 145 // Start with a file:// url | |
| 146 test_file = test_file.AppendASCII("title2.html"); | |
| 147 ASSERT_EQ(AUTOMATION_MSG_NAVIGATION_SUCCESS, | |
| 148 tab->NavigateToURL(net::FilePathToFileURL(test_file))); | |
| 149 int orig_tab_count = -1; | |
| 150 ASSERT_TRUE(window->GetTabCount(&orig_tab_count)); | |
| 151 int orig_process_count = 0; | |
| 152 ASSERT_TRUE(GetBrowserProcessCount(&orig_process_count)); | |
| 153 ASSERT_GE(orig_process_count, 1); | |
| 154 | |
| 155 // Use JavaScript URL to almost fork a new tab, but not quite. (Leave the | |
| 156 // opener non-null.) Should not fork a process. | |
| 157 std::string url_str = "javascript:(function(){w=window.open(); "; | |
| 158 url_str += "w.document.location=\""; | |
| 159 url_str += test_server.GetURL("").spec(); | |
| 160 url_str += "\";})()"; | |
| 161 GURL dont_fork_url(url_str); | |
| 162 | |
| 163 // Make sure that a new tab but not new process has been created. | |
| 164 ASSERT_TRUE(tab->NavigateToURLAsync(dont_fork_url)); | |
| 165 base::PlatformThread::Sleep(TestTimeouts::action_timeout_ms()); | |
| 166 int process_count = 0; | |
| 167 ASSERT_TRUE(GetBrowserProcessCount(&process_count)); | |
| 168 ASSERT_EQ(orig_process_count, process_count); | |
| 169 int new_tab_count = -1; | |
| 170 ASSERT_TRUE(window->GetTabCount(&new_tab_count)); | |
| 171 ASSERT_EQ(orig_tab_count + 1, new_tab_count); | |
| 172 | |
| 173 // Same thing if the current tab tries to redirect itself. | |
| 174 url_str = "javascript:(function(){w=window.open(); "; | |
| 175 url_str += "document.location=\""; | |
| 176 url_str += test_server.GetURL("").spec(); | |
| 177 url_str += "\";})()"; | |
| 178 GURL dont_fork_url2(url_str); | |
| 179 | |
| 180 // Make sure that no new process has been created. | |
| 181 ASSERT_TRUE(tab->NavigateToURLAsync(dont_fork_url2)); | |
| 182 base::PlatformThread::Sleep(TestTimeouts::action_timeout_ms()); | |
| 183 ASSERT_TRUE(GetBrowserProcessCount(&process_count)); | |
| 184 ASSERT_EQ(orig_process_count, process_count); | |
| 185 } | |
| 186 | |
| 187 // WindowOpenClose is flaky on ChromeOS and fails consistently on linux views. | 77 // WindowOpenClose is flaky on ChromeOS and fails consistently on linux views. |
| 188 // See http://crbug.com/85763. | 78 // See http://crbug.com/85763. |
| 189 #if defined (OS_CHROMEOS) | 79 #if defined (OS_CHROMEOS) |
| 190 #define MAYBE_WindowOpenClose FLAKY_WindowOpenClose | 80 #define MAYBE_WindowOpenClose FLAKY_WindowOpenClose |
| 191 #elif defined(OS_LINUX) && defined(TOOLKIT_VIEWS) | 81 #elif defined(OS_LINUX) && defined(TOOLKIT_VIEWS) |
| 192 #define MAYBE_WindowOpenClose FAILS_WindowOpenClose | 82 #define MAYBE_WindowOpenClose FAILS_WindowOpenClose |
| 193 #else | 83 #else |
| 194 #define MAYBE_WindowOpenClose WindowOpenClose | 84 #define MAYBE_WindowOpenClose WindowOpenClose |
| 195 #endif | 85 #endif |
| 196 | 86 |
| (...skipping 178 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 375 | 265 |
| 376 // Verify that the window is present. | 266 // Verify that the window is present. |
| 377 scoped_refptr<BrowserProxy> browser(automation()->GetBrowserWindow(0)); | 267 scoped_refptr<BrowserProxy> browser(automation()->GetBrowserWindow(0)); |
| 378 ASSERT_TRUE(browser.get()); | 268 ASSERT_TRUE(browser.get()); |
| 379 | 269 |
| 380 // Verify the browser is in application mode. | 270 // Verify the browser is in application mode. |
| 381 bool is_application; | 271 bool is_application; |
| 382 ASSERT_TRUE(browser->IsApplication(&is_application)); | 272 ASSERT_TRUE(browser->IsApplication(&is_application)); |
| 383 EXPECT_TRUE(is_application); | 273 EXPECT_TRUE(is_application); |
| 384 } | 274 } |
| OLD | NEW |