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

Side by Side Diff: chrome/browser/prerender/prerender_nostate_prefetch_browsertest.cc

Issue 2508143002: Prerender: add true simultaneous nostate prefetch test. (Closed)
Patch Set: comments Created 4 years, 1 month 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 // 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/strings/string16.h" 6 #include "base/strings/string16.h"
7 #include "base/strings/string_split.h" 7 #include "base/strings/string_split.h"
8 #include "base/task_scheduler/post_task.h" 8 #include "base/task_scheduler/post_task.h"
9 #include "chrome/browser/prerender/prerender_handle.h" 9 #include "chrome/browser/prerender/prerender_handle.h"
10 #include "chrome/browser/prerender/prerender_manager.h" 10 #include "chrome/browser/prerender/prerender_manager.h"
(...skipping 182 matching lines...) Expand 10 before | Expand all | Expand 10 after
193 CountRequestForUrl(second_script_url, kPrefetchScript2, &second_script); 193 CountRequestForUrl(second_script_url, kPrefetchScript2, &second_script);
194 PrefetchFromFile(kPrefetchMetaCSP, FINAL_STATUS_NOSTATE_PREFETCH_FINISHED); 194 PrefetchFromFile(kPrefetchMetaCSP, FINAL_STATUS_NOSTATE_PREFETCH_FINISHED);
195 // TODO(mattcary): See test comment above. If the meta CSP tag were parsed, 195 // TODO(mattcary): See test comment above. If the meta CSP tag were parsed,
196 // |second_script| would be loaded. Instead as the background scanner bails as 196 // |second_script| would be loaded. Instead as the background scanner bails as
197 // soon as the meta CSP tag is seen, only |main_page| is fetched. 197 // soon as the meta CSP tag is seen, only |main_page| is fetched.
198 main_page.WaitForCount(1); 198 main_page.WaitForCount(1);
199 second_script.WaitForCount(0); 199 second_script.WaitForCount(0);
200 first_script.WaitForCount(0); 200 first_script.WaitForCount(0);
201 } 201 }
202 202
203 // Checks that the second prefetch request succeeds. TODO(pasko): This test 203 // Checks that the second prefetch request succeeds. This test waits for
204 // waits for Prerender Stop before starting the second request, add a test that 204 // Prerender Stop before starting the second request.
205 // starts the second request from the UI thread immediately without waiting. 205 IN_PROC_BROWSER_TEST_F(NoStatePrefetchBrowserTest, PrefetchMultipleRequest) {
206 IN_PROC_BROWSER_TEST_F(NoStatePrefetchBrowserTest, PrefetchSimultaneous) {
207 RequestCounter first_main_counter; 206 RequestCounter first_main_counter;
208 CountRequestFor(kPrefetchPage, &first_main_counter); 207 CountRequestFor(kPrefetchPage, &first_main_counter);
209 RequestCounter second_main_counter; 208 RequestCounter second_main_counter;
210 CountRequestFor(kPrefetchPage2, &second_main_counter); 209 CountRequestFor(kPrefetchPage2, &second_main_counter);
211 RequestCounter first_script_counter; 210 RequestCounter first_script_counter;
212 CountRequestFor(kPrefetchScript, &first_script_counter); 211 CountRequestFor(kPrefetchScript, &first_script_counter);
213 RequestCounter second_script_counter; 212 RequestCounter second_script_counter;
214 CountRequestFor(kPrefetchScript2, &second_script_counter); 213 CountRequestFor(kPrefetchScript2, &second_script_counter);
215 214
216 // The first prerender is marked as canceled. When the second prerender
217 // starts, it sees that the first has been abandoned (because the earlier
218 // prerender is detached immediately and so dies quickly).
219 PrefetchFromFile(kPrefetchPage, FINAL_STATUS_NOSTATE_PREFETCH_FINISHED); 215 PrefetchFromFile(kPrefetchPage, FINAL_STATUS_NOSTATE_PREFETCH_FINISHED);
220 PrefetchFromFile(kPrefetchPage2, FINAL_STATUS_NOSTATE_PREFETCH_FINISHED); 216 PrefetchFromFile(kPrefetchPage2, FINAL_STATUS_NOSTATE_PREFETCH_FINISHED);
221 first_main_counter.WaitForCount(1); 217 first_main_counter.WaitForCount(1);
222 second_main_counter.WaitForCount(1); 218 second_main_counter.WaitForCount(1);
223 first_script_counter.WaitForCount(1); 219 first_script_counter.WaitForCount(1);
224 second_script_counter.WaitForCount(1); 220 second_script_counter.WaitForCount(1);
225 } 221 }
226 222
223 // Checks that a second prefetch request, started before the first stops,
224 // succeeds.
225 IN_PROC_BROWSER_TEST_F(NoStatePrefetchBrowserTest, PrefetchSimultaneous) {
226 RequestCounter second_main_counter;
227 CountRequestFor(kPrefetchPage2, &second_main_counter);
228 RequestCounter second_script_counter;
229 CountRequestFor(kPrefetchScript2, &second_script_counter);
230
231 GURL first_url = src_server()->GetURL(MakeAbsolute(kPrefetchPage));
232 base::FilePath first_path = ui_test_utils::GetTestFilePath(
233 base::FilePath(), base::FilePath().AppendASCII(kPrefetchPage));
234
235 content::BrowserThread::PostTask(
236 content::BrowserThread::IO, FROM_HERE,
237 base::Bind(&test_utils::CreateHangingFirstRequestInterceptorOnIO,
238 first_url, first_path, base::Closure()));
239
240 // Start the first prefetch directly instead of via PrefetchFromFile for the
241 // first prefetch to avoid the wait on prerender stop.
242 GURL first_loader_url = ServeLoaderURL(
243 kPrefetchLoaderPath, "REPLACE_WITH_PREFETCH_URL", first_url, "");
244 std::vector<FinalStatus> first_expected_status_queue(1,
245 FINAL_STATUS_CANCELLED);
246 NavigateWithPrerenders(first_loader_url, first_expected_status_queue);
247
248 PrefetchFromFile(kPrefetchPage2, FINAL_STATUS_NOSTATE_PREFETCH_FINISHED);
249 second_main_counter.WaitForCount(1);
250 second_script_counter.WaitForCount(1);
251 }
252
227 // Checks a prefetch to a nonexisting page. 253 // Checks a prefetch to a nonexisting page.
228 IN_PROC_BROWSER_TEST_F(NoStatePrefetchBrowserTest, PrefetchNonexisting) { 254 IN_PROC_BROWSER_TEST_F(NoStatePrefetchBrowserTest, PrefetchNonexisting) {
229 std::unique_ptr<TestPrerender> test_prerender = PrefetchFromFile( 255 std::unique_ptr<TestPrerender> test_prerender = PrefetchFromFile(
230 "nonexisting-page.html", FINAL_STATUS_UNSUPPORTED_SCHEME); 256 "nonexisting-page.html", FINAL_STATUS_UNSUPPORTED_SCHEME);
231 } 257 }
232 258
233 // Checks that a 301 redirect is followed. 259 // Checks that a 301 redirect is followed.
234 IN_PROC_BROWSER_TEST_F(NoStatePrefetchBrowserTest, Prefetch301Redirect) { 260 IN_PROC_BROWSER_TEST_F(NoStatePrefetchBrowserTest, Prefetch301Redirect) {
235 RequestCounter script_counter; 261 RequestCounter script_counter;
236 CountRequestFor(kPrefetchScript, &script_counter); 262 CountRequestFor(kPrefetchScript, &script_counter);
(...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after
385 // special way. 411 // special way.
386 // TODO(mattcary): since the prerender will count itself as loaded even if the 412 // TODO(mattcary): since the prerender will count itself as loaded even if the
387 // fetch of the main resource fails, the test doesn't actually confirm what we 413 // fetch of the main resource fails, the test doesn't actually confirm what we
388 // want it to confirm. This may be fixed by planned changes to the prerender 414 // want it to confirm. This may be fixed by planned changes to the prerender
389 // lifecycle. 415 // lifecycle.
390 std::unique_ptr<TestPrerender> prerender = 416 std::unique_ptr<TestPrerender> prerender =
391 PrefetchFromFile(kPrefetchPage, FINAL_STATUS_SAFE_BROWSING); 417 PrefetchFromFile(kPrefetchPage, FINAL_STATUS_SAFE_BROWSING);
392 } 418 }
393 419
394 } // namespace prerender 420 } // namespace prerender
OLDNEW
« no previous file with comments | « chrome/browser/prerender/prerender_browsertest.cc ('k') | chrome/browser/prerender/prerender_test_utils.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698