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

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

Issue 11571037: Pass load events from prerenders to launching elements. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: remediate Created 7 years, 11 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 | Annotate | Revision Log
« no previous file with comments | « no previous file | chrome/browser/prerender/prerender_contents.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 <deque> 5 #include <deque>
6 6
7 #include "base/command_line.h" 7 #include "base/command_line.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/stringprintf.h" 10 #include "base/stringprintf.h"
(...skipping 843 matching lines...) Expand 10 before | Expand all | Expand 10 after
854 L"window.domAutomationController.send(Boolean(" 854 L"window.domAutomationController.send(Boolean("
855 L"receivedPrerenderStartEvents[%d]))", index); 855 L"receivedPrerenderStartEvents[%d]))", index);
856 856
857 CHECK(content::ExecuteJavaScriptAndExtractBool( 857 CHECK(content::ExecuteJavaScriptAndExtractBool(
858 chrome::GetActiveWebContents(current_browser())->GetRenderViewHost(), 858 chrome::GetActiveWebContents(current_browser())->GetRenderViewHost(),
859 L"", expression, 859 L"", expression,
860 &received_prerender_started)); 860 &received_prerender_started));
861 return received_prerender_started; 861 return received_prerender_started;
862 } 862 }
863 863
864 bool DidReceivePrerenderLoadEventForLinkNumber(int index) const {
865 bool received_prerender_loaded;
866 std::wstring expression = base::StringPrintf(
867 L"window.domAutomationController.send(Boolean("
868 L"receivedPrerenderLoadEvents[%d]))", index);
869
870 CHECK(content::ExecuteJavaScriptAndExtractBool(
871 chrome::GetActiveWebContents(current_browser())->GetRenderViewHost(),
872 L"", expression,
873 &received_prerender_loaded));
874 return received_prerender_loaded;
875 }
876
864 bool DidReceivePrerenderStopEventForLinkNumber(int index) const { 877 bool DidReceivePrerenderStopEventForLinkNumber(int index) const {
865 bool received_prerender_stopped; 878 bool received_prerender_stopped;
866 std::wstring expression = base::StringPrintf( 879 std::wstring expression = base::StringPrintf(
867 L"window.domAutomationController.send(Boolean(" 880 L"window.domAutomationController.send(Boolean("
868 L"receivedPrerenderStopEvents[%d]))", index); 881 L"receivedPrerenderStopEvents[%d]))", index);
869 882
870 CHECK(content::ExecuteJavaScriptAndExtractBool( 883 CHECK(content::ExecuteJavaScriptAndExtractBool(
871 chrome::GetActiveWebContents(current_browser())->GetRenderViewHost(), 884 chrome::GetActiveWebContents(current_browser())->GetRenderViewHost(),
872 L"", expression, 885 L"", expression,
873 &received_prerender_stopped)); 886 &received_prerender_stopped));
874 return received_prerender_stopped; 887 return received_prerender_stopped;
875 } 888 }
876 889
890 bool HadPrerenderEventErrors() const {
891 bool had_prerender_event_errors;
892 CHECK(content::ExecuteJavaScriptAndExtractBool(
893 chrome::GetActiveWebContents(current_browser())->GetRenderViewHost(),
894 L"", L"window.domAutomationController.send(Boolean("
895 L"hadPrerenderEventErrors))", &had_prerender_event_errors));
896 return had_prerender_event_errors;
897 }
898
877 // Asserting on this can result in flaky tests. PrerenderHandles are 899 // Asserting on this can result in flaky tests. PrerenderHandles are
878 // removed from the PrerenderLinkManager when the prerender is canceled from 900 // removed from the PrerenderLinkManager when the prerender is canceled from
879 // the browser, when the prerenders are cancelled from the renderer process, 901 // the browser, when the prerenders are cancelled from the renderer process,
880 // or the channel for the renderer process is closed on the IO thread. In the 902 // or the channel for the renderer process is closed on the IO thread. In the
881 // last case, the code must be careful to wait for the channel to close, as it 903 // last case, the code must be careful to wait for the channel to close, as it
882 // is done asynchronously after swapping out the old process. See 904 // is done asynchronously after swapping out the old process. See
883 // ChannelDestructionWatcher. 905 // ChannelDestructionWatcher.
884 bool IsEmptyPrerenderLinkManager() const { 906 bool IsEmptyPrerenderLinkManager() const {
885 return GetPrerenderLinkManager()->IsEmpty(); 907 return GetPrerenderLinkManager()->IsEmpty();
886 } 908 }
(...skipping 282 matching lines...) Expand 10 before | Expand all | Expand 10 after
1169 first_channel_close_watcher.WatchChannel( 1191 first_channel_close_watcher.WatchChannel(
1170 chrome::GetActiveWebContents(browser())->GetRenderProcessHost()); 1192 chrome::GetActiveWebContents(browser())->GetRenderProcessHost());
1171 NavigateToDestURL(); 1193 NavigateToDestURL();
1172 // NavigateToDestURL doesn't run a message loop. Normally that's fine, but in 1194 // NavigateToDestURL doesn't run a message loop. Normally that's fine, but in
1173 // this case, we need the pending prerenders to start. 1195 // this case, we need the pending prerenders to start.
1174 content::RunMessageLoop(); 1196 content::RunMessageLoop();
1175 first_channel_close_watcher.WaitForChannelClose(); 1197 first_channel_close_watcher.WaitForChannelClose();
1176 1198
1177 EXPECT_TRUE(DidReceivePrerenderStartEventForLinkNumber(0)); 1199 EXPECT_TRUE(DidReceivePrerenderStartEventForLinkNumber(0));
1178 EXPECT_FALSE(DidReceivePrerenderStopEventForLinkNumber(0)); 1200 EXPECT_FALSE(DidReceivePrerenderStopEventForLinkNumber(0));
1201 EXPECT_FALSE(HadPrerenderEventErrors());
1179 1202
1180 const GURL prerender_page_url = 1203 const GURL prerender_page_url =
1181 test_server()->GetURL("files/prerender/prerender_page.html"); 1204 test_server()->GetURL("files/prerender/prerender_page.html");
1182 EXPECT_FALSE(IsEmptyPrerenderLinkManager()); 1205 EXPECT_FALSE(IsEmptyPrerenderLinkManager());
1183 EXPECT_NE(static_cast<TestPrerenderContents*>(NULL), 1206 EXPECT_NE(static_cast<TestPrerenderContents*>(NULL),
1184 GetPrerenderContentsFor(prerender_page_url)); 1207 GetPrerenderContentsFor(prerender_page_url));
1185 1208
1186 // Now navigate to our target page. 1209 // Now navigate to our target page.
1187 ChannelDestructionWatcher second_channel_close_watcher; 1210 ChannelDestructionWatcher second_channel_close_watcher;
1188 second_channel_close_watcher.WatchChannel( 1211 second_channel_close_watcher.WatchChannel(
(...skipping 13 matching lines...) Expand all
1202 FINAL_STATUS_USED, 1); 1225 FINAL_STATUS_USED, 1);
1203 1226
1204 ChannelDestructionWatcher channel_close_watcher; 1227 ChannelDestructionWatcher channel_close_watcher;
1205 channel_close_watcher.WatchChannel( 1228 channel_close_watcher.WatchChannel(
1206 chrome::GetActiveWebContents(browser())->GetRenderProcessHost()); 1229 chrome::GetActiveWebContents(browser())->GetRenderProcessHost());
1207 NavigateToDestURL(); 1230 NavigateToDestURL();
1208 channel_close_watcher.WaitForChannelClose(); 1231 channel_close_watcher.WaitForChannelClose();
1209 1232
1210 EXPECT_FALSE(DidReceivePrerenderStartEventForLinkNumber(1)); 1233 EXPECT_FALSE(DidReceivePrerenderStartEventForLinkNumber(1));
1211 EXPECT_FALSE(DidReceivePrerenderStopEventForLinkNumber(1)); 1234 EXPECT_FALSE(DidReceivePrerenderStopEventForLinkNumber(1));
1235 EXPECT_FALSE(HadPrerenderEventErrors());
1212 // IsEmptyPrerenderLinkManager() is not racy because the earlier DidReceive* 1236 // IsEmptyPrerenderLinkManager() is not racy because the earlier DidReceive*
1213 // calls did a thread/process hop to the renderer which insured pending 1237 // calls did a thread/process hop to the renderer which insured pending
1214 // renderer events have arrived. 1238 // renderer events have arrived.
1215 ASSERT_TRUE(IsEmptyPrerenderLinkManager()); 1239 ASSERT_TRUE(IsEmptyPrerenderLinkManager());
1216 } 1240 }
1217 1241
1218 // Flaky, http://crbug.com/167340. 1242 // Flaky, http://crbug.com/167340.
1219 IN_PROC_BROWSER_TEST_F( 1243 IN_PROC_BROWSER_TEST_F(
1220 PrerenderBrowserTest, DISABLED_PrerenderPageRemovingLink) { 1244 PrerenderBrowserTest, DISABLED_PrerenderPageRemovingLink) {
1221 set_loader_path("files/prerender/prerender_loader_removing_links.html"); 1245 set_loader_path("files/prerender/prerender_loader_removing_links.html");
1222 set_loader_query_and_fragment("?links_to_insert=1"); 1246 set_loader_query_and_fragment("?links_to_insert=1");
1223 PrerenderTestURL("files/prerender/prerender_page.html", 1247 PrerenderTestURL("files/prerender/prerender_page.html",
1224 FINAL_STATUS_CANCELLED, 1); 1248 FINAL_STATUS_CANCELLED, 1);
1225 EXPECT_TRUE(DidReceivePrerenderStartEventForLinkNumber(0)); 1249 EXPECT_TRUE(DidReceivePrerenderStartEventForLinkNumber(0));
1226 EXPECT_FALSE(DidReceivePrerenderStopEventForLinkNumber(0)); 1250 EXPECT_FALSE(DidReceivePrerenderStopEventForLinkNumber(0));
1227 1251
1228 // No ChannelDestructionWatcher is needed here, since prerenders in the 1252 // No ChannelDestructionWatcher is needed here, since prerenders in the
1229 // PrerenderLinkManager should be deleted by removing the links, rather than 1253 // PrerenderLinkManager should be deleted by removing the links, rather than
1230 // shutting down the renderer process. 1254 // shutting down the renderer process.
1231 RemoveLinkElement(0); 1255 RemoveLinkElement(0);
1232 EXPECT_TRUE(DidReceivePrerenderStartEventForLinkNumber(0)); 1256 EXPECT_TRUE(DidReceivePrerenderStartEventForLinkNumber(0));
1233 EXPECT_FALSE(DidReceivePrerenderStopEventForLinkNumber(0)); 1257 EXPECT_FALSE(DidReceivePrerenderStopEventForLinkNumber(0));
1258 EXPECT_FALSE(HadPrerenderEventErrors());
1234 // IsEmptyPrerenderLinkManager() is not racy because the earlier DidReceive* 1259 // IsEmptyPrerenderLinkManager() is not racy because the earlier DidReceive*
1235 // calls did a thread/process hop to the renderer which insured pending 1260 // calls did a thread/process hop to the renderer which insured pending
1236 // renderer events have arrived. 1261 // renderer events have arrived.
1237 EXPECT_TRUE(IsEmptyPrerenderLinkManager()); 1262 EXPECT_TRUE(IsEmptyPrerenderLinkManager());
1238 } 1263 }
1239 1264
1240 // Flaky, http://crbug.com/167340. 1265 // Flaky, http://crbug.com/167340.
1241 IN_PROC_BROWSER_TEST_F( 1266 IN_PROC_BROWSER_TEST_F(
1242 PrerenderBrowserTest, DISABLED_PrerenderPageRemovingLinkWithTwoLinks) { 1267 PrerenderBrowserTest, DISABLED_PrerenderPageRemovingLinkWithTwoLinks) {
1243 GetPrerenderManager()->mutable_config().max_link_concurrency = 2; 1268 GetPrerenderManager()->mutable_config().max_link_concurrency = 2;
1244 GetPrerenderManager()->mutable_config().max_link_concurrency_per_launcher = 2; 1269 GetPrerenderManager()->mutable_config().max_link_concurrency_per_launcher = 2;
1245 1270
1246 set_loader_path("files/prerender/prerender_loader_removing_links.html"); 1271 set_loader_path("files/prerender/prerender_loader_removing_links.html");
1247 set_loader_query_and_fragment("?links_to_insert=2"); 1272 set_loader_query_and_fragment("?links_to_insert=2");
1248 PrerenderTestURL("files/prerender/prerender_page.html", 1273 PrerenderTestURL("files/prerender/prerender_page.html",
1249 FINAL_STATUS_CANCELLED, 1); 1274 FINAL_STATUS_CANCELLED, 1);
1250 EXPECT_TRUE(DidReceivePrerenderStartEventForLinkNumber(0)); 1275 EXPECT_TRUE(DidReceivePrerenderStartEventForLinkNumber(0));
1251 EXPECT_FALSE(DidReceivePrerenderStopEventForLinkNumber(0)); 1276 EXPECT_FALSE(DidReceivePrerenderStopEventForLinkNumber(0));
1252 EXPECT_TRUE(DidReceivePrerenderStartEventForLinkNumber(1)); 1277 EXPECT_TRUE(DidReceivePrerenderStartEventForLinkNumber(1));
1253 EXPECT_FALSE(DidReceivePrerenderStopEventForLinkNumber(1)); 1278 EXPECT_FALSE(DidReceivePrerenderStopEventForLinkNumber(1));
1254 1279
1255 RemoveLinkElement(0); 1280 RemoveLinkElement(0);
1256 RemoveLinkElement(1); 1281 RemoveLinkElement(1);
1257 EXPECT_TRUE(DidReceivePrerenderStartEventForLinkNumber(0)); 1282 EXPECT_TRUE(DidReceivePrerenderStartEventForLinkNumber(0));
1258 EXPECT_FALSE(DidReceivePrerenderStopEventForLinkNumber(0)); 1283 EXPECT_FALSE(DidReceivePrerenderStopEventForLinkNumber(0));
1259 EXPECT_TRUE(DidReceivePrerenderStartEventForLinkNumber(1)); 1284 EXPECT_TRUE(DidReceivePrerenderStartEventForLinkNumber(1));
1260 EXPECT_FALSE(DidReceivePrerenderStopEventForLinkNumber(1)); 1285 EXPECT_FALSE(DidReceivePrerenderStopEventForLinkNumber(1));
1286 EXPECT_FALSE(HadPrerenderEventErrors());
1261 // IsEmptyPrerenderLinkManager() is not racy because the earlier DidReceive* 1287 // IsEmptyPrerenderLinkManager() is not racy because the earlier DidReceive*
1262 // calls did a thread/process hop to the renderer which insured pending 1288 // calls did a thread/process hop to the renderer which insured pending
1263 // renderer events have arrived. 1289 // renderer events have arrived.
1264 EXPECT_TRUE(IsEmptyPrerenderLinkManager()); 1290 EXPECT_TRUE(IsEmptyPrerenderLinkManager());
1265 } 1291 }
1266 1292
1267 #if defined(OS_WIN) 1293 #if defined(OS_WIN)
1268 // TODO(gavinp): Fails on XP Rel - http://crbug.com/128841 1294 // TODO(gavinp): Fails on XP Rel - http://crbug.com/128841
1269 #define MAYBE_PrerenderPageRemovingLinkWithTwoLinksRemovingOne \ 1295 #define MAYBE_PrerenderPageRemovingLinkWithTwoLinksRemovingOne \
1270 DISABLED_PrerenderPageRemovingLinkWithTwoLinksRemovingOne 1296 DISABLED_PrerenderPageRemovingLinkWithTwoLinksRemovingOne
(...skipping 13 matching lines...) Expand all
1284 EXPECT_TRUE(DidReceivePrerenderStartEventForLinkNumber(0)); 1310 EXPECT_TRUE(DidReceivePrerenderStartEventForLinkNumber(0));
1285 EXPECT_FALSE(DidReceivePrerenderStopEventForLinkNumber(0)); 1311 EXPECT_FALSE(DidReceivePrerenderStopEventForLinkNumber(0));
1286 EXPECT_TRUE(DidReceivePrerenderStartEventForLinkNumber(1)); 1312 EXPECT_TRUE(DidReceivePrerenderStartEventForLinkNumber(1));
1287 EXPECT_FALSE(DidReceivePrerenderStopEventForLinkNumber(1)); 1313 EXPECT_FALSE(DidReceivePrerenderStopEventForLinkNumber(1));
1288 1314
1289 RemoveLinkElement(0); 1315 RemoveLinkElement(0);
1290 EXPECT_TRUE(DidReceivePrerenderStartEventForLinkNumber(0)); 1316 EXPECT_TRUE(DidReceivePrerenderStartEventForLinkNumber(0));
1291 EXPECT_FALSE(DidReceivePrerenderStopEventForLinkNumber(0)); 1317 EXPECT_FALSE(DidReceivePrerenderStopEventForLinkNumber(0));
1292 EXPECT_TRUE(DidReceivePrerenderStartEventForLinkNumber(1)); 1318 EXPECT_TRUE(DidReceivePrerenderStartEventForLinkNumber(1));
1293 EXPECT_FALSE(DidReceivePrerenderStopEventForLinkNumber(1)); 1319 EXPECT_FALSE(DidReceivePrerenderStopEventForLinkNumber(1));
1320 EXPECT_FALSE(HadPrerenderEventErrors());
1294 // IsEmptyPrerenderLinkManager() is not racy because the earlier DidReceive* 1321 // IsEmptyPrerenderLinkManager() is not racy because the earlier DidReceive*
1295 // calls did a thread/process hop to the renderer which insured pending 1322 // calls did a thread/process hop to the renderer which insured pending
1296 // renderer events have arrived. 1323 // renderer events have arrived.
1297 EXPECT_FALSE(IsEmptyPrerenderLinkManager()); 1324 EXPECT_FALSE(IsEmptyPrerenderLinkManager());
1298 1325
1299 ChannelDestructionWatcher channel_close_watcher; 1326 ChannelDestructionWatcher channel_close_watcher;
1300 channel_close_watcher.WatchChannel( 1327 channel_close_watcher.WatchChannel(
1301 chrome::GetActiveWebContents(browser())->GetRenderProcessHost()); 1328 chrome::GetActiveWebContents(browser())->GetRenderProcessHost());
1302 NavigateToDestURL(); 1329 NavigateToDestURL();
1303 channel_close_watcher.WaitForChannelClose(); 1330 channel_close_watcher.WaitForChannelClose();
(...skipping 1090 matching lines...) Expand 10 before | Expand all | Expand 10 after
2394 MessageLoop::current()->PostTask( 2421 MessageLoop::current()->PostTask(
2395 FROM_HERE, base::Bind(&CancelAllPrerenders, GetPrerenderManager())); 2422 FROM_HERE, base::Bind(&CancelAllPrerenders, GetPrerenderManager()));
2396 content::RunMessageLoop(); 2423 content::RunMessageLoop();
2397 EXPECT_TRUE(GetPrerenderContents() == NULL); 2424 EXPECT_TRUE(GetPrerenderContents() == NULL);
2398 } 2425 }
2399 2426
2400 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderEvents) { 2427 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderEvents) {
2401 PrerenderTestURL("files/prerender/prerender_page.html", 2428 PrerenderTestURL("files/prerender/prerender_page.html",
2402 FINAL_STATUS_CANCELLED, 1); 2429 FINAL_STATUS_CANCELLED, 1);
2403 EXPECT_TRUE(DidReceivePrerenderStartEventForLinkNumber(0)); 2430 EXPECT_TRUE(DidReceivePrerenderStartEventForLinkNumber(0));
2431 EXPECT_TRUE(DidReceivePrerenderLoadEventForLinkNumber(0));
2404 EXPECT_FALSE(DidReceivePrerenderStopEventForLinkNumber(0)); 2432 EXPECT_FALSE(DidReceivePrerenderStopEventForLinkNumber(0));
2405 2433
2406 MessageLoop::current()->PostTask( 2434 MessageLoop::current()->PostTask(
2407 FROM_HERE, base::Bind(&CancelAllPrerenders, GetPrerenderManager())); 2435 FROM_HERE, base::Bind(&CancelAllPrerenders, GetPrerenderManager()));
2408 content::RunMessageLoop(); 2436 content::RunMessageLoop();
2409 2437
2410 EXPECT_TRUE(DidReceivePrerenderStartEventForLinkNumber(0)); 2438 EXPECT_TRUE(DidReceivePrerenderStartEventForLinkNumber(0));
2411 EXPECT_TRUE(DidReceivePrerenderStopEventForLinkNumber(0)); 2439 EXPECT_TRUE(DidReceivePrerenderStopEventForLinkNumber(0));
2440 EXPECT_FALSE(HadPrerenderEventErrors());
2441 }
2442
2443 // PrerenderBrowserTest.PrerenderEventsNoLoad may pass flakily on regression,
2444 // so plesae be aggressive about filing bugs when this test is failing.
mmenke 2012/12/28 18:48:36 nit: please
gavinp 2012/12/28 20:13:16 Done.
2445 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderEventsNoLoad) {
2446 // This should be canceled.
2447 PrerenderTestURL("files/prerender/prerender_http_auth_container.html",
2448 FINAL_STATUS_AUTH_NEEDED,
2449 1);
2450 EXPECT_TRUE(DidReceivePrerenderStartEventForLinkNumber(0));
2451 EXPECT_FALSE(DidReceivePrerenderLoadEventForLinkNumber(0));
2452 EXPECT_FALSE(DidReceivePrerenderStopEventForLinkNumber(0));
2453 EXPECT_FALSE(HadPrerenderEventErrors());
2412 } 2454 }
2413 2455
2414 // Prerendering and history tests. 2456 // Prerendering and history tests.
2415 // The prerendered page is navigated to in several ways [navigate via 2457 // The prerendered page is navigated to in several ways [navigate via
2416 // omnibox, click on link, key-modified click to open in background tab, etc], 2458 // omnibox, click on link, key-modified click to open in background tab, etc],
2417 // followed by a navigation to another page from the prerendered page, followed 2459 // followed by a navigation to another page from the prerendered page, followed
2418 // by a back navigation. 2460 // by a back navigation.
2419 2461
2420 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderNavigateClickGoBack) { 2462 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderNavigateClickGoBack) {
2421 PrerenderTestURL("files/prerender/prerender_page_with_link.html", 2463 PrerenderTestURL("files/prerender/prerender_page_with_link.html",
(...skipping 218 matching lines...) Expand 10 before | Expand all | Expand 10 after
2640 channel_close_watcher.WatchChannel( 2682 channel_close_watcher.WatchChannel(
2641 chrome::GetActiveWebContents(browser())->GetRenderProcessHost()); 2683 chrome::GetActiveWebContents(browser())->GetRenderProcessHost());
2642 NavigateToDestURL(); 2684 NavigateToDestURL();
2643 channel_close_watcher.WaitForChannelClose(); 2685 channel_close_watcher.WaitForChannelClose();
2644 2686
2645 ASSERT_TRUE(IsEmptyPrerenderLinkManager()); 2687 ASSERT_TRUE(IsEmptyPrerenderLinkManager());
2646 ASSERT_TRUE(catcher.GetNextResult()) << catcher.message(); 2688 ASSERT_TRUE(catcher.GetNextResult()) << catcher.message();
2647 } 2689 }
2648 2690
2649 } // namespace prerender 2691 } // namespace prerender
OLDNEW
« no previous file with comments | « no previous file | chrome/browser/prerender/prerender_contents.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698