OLD | NEW |
---|---|
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 "content/browser/site_per_process_browsertest.h" | 5 #include "content/browser/site_per_process_browsertest.h" |
6 | 6 |
7 #include "base/command_line.h" | 7 #include "base/command_line.h" |
8 #include "base/strings/stringprintf.h" | 8 #include "base/strings/stringprintf.h" |
9 #include "base/strings/utf_string_conversions.h" | |
9 #include "content/browser/frame_host/cross_process_frame_connector.h" | 10 #include "content/browser/frame_host/cross_process_frame_connector.h" |
10 #include "content/browser/frame_host/frame_tree.h" | 11 #include "content/browser/frame_host/frame_tree.h" |
11 #include "content/browser/frame_host/navigator.h" | 12 #include "content/browser/frame_host/navigator.h" |
12 #include "content/browser/frame_host/render_frame_proxy_host.h" | 13 #include "content/browser/frame_host/render_frame_proxy_host.h" |
13 #include "content/browser/frame_host/render_widget_host_view_child_frame.h" | 14 #include "content/browser/frame_host/render_widget_host_view_child_frame.h" |
14 #include "content/browser/renderer_host/render_view_host_impl.h" | 15 #include "content/browser/renderer_host/render_view_host_impl.h" |
15 #include "content/browser/web_contents/web_contents_impl.h" | 16 #include "content/browser/web_contents/web_contents_impl.h" |
16 #include "content/public/browser/notification_observer.h" | 17 #include "content/public/browser/notification_observer.h" |
17 #include "content/public/browser/notification_service.h" | 18 #include "content/public/browser/notification_service.h" |
18 #include "content/public/browser/notification_types.h" | 19 #include "content/public/browser/notification_types.h" |
(...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
158 SitePerProcessBrowserTest::SitePerProcessBrowserTest() { | 159 SitePerProcessBrowserTest::SitePerProcessBrowserTest() { |
159 }; | 160 }; |
160 | 161 |
161 void SitePerProcessBrowserTest::StartFrameAtDataURL() { | 162 void SitePerProcessBrowserTest::StartFrameAtDataURL() { |
162 std::string data_url_script = | 163 std::string data_url_script = |
163 "var iframes = document.getElementById('test');iframes.src=" | 164 "var iframes = document.getElementById('test');iframes.src=" |
164 "'data:text/html,dataurl';"; | 165 "'data:text/html,dataurl';"; |
165 ASSERT_TRUE(ExecuteScript(shell()->web_contents(), data_url_script)); | 166 ASSERT_TRUE(ExecuteScript(shell()->web_contents(), data_url_script)); |
166 } | 167 } |
167 | 168 |
168 bool SitePerProcessBrowserTest::NavigateIframeToURL(Shell* window, | 169 void SitePerProcessBrowserTest::NavigateIframeToURL(Shell* window, |
Charlie Reis
2014/12/06 00:18:51
Please don't change this. It's more useful to hav
lfg
2014/12/08 20:45:33
I agree it's more useful to see the test immediate
Charlie Reis
2014/12/09 19:14:37
Ah, good point. Instead, let's return false befor
| |
169 const GURL& url, | 170 const GURL& url, |
170 std::string iframe_id) { | 171 std::string iframe_id) { |
171 // TODO(creis): This should wait for LOAD_STOP, but cross-site subframe | 172 // TODO(creis): This should wait for LOAD_STOP, but cross-site subframe |
172 // navigations generate extra DidStartLoading and DidStopLoading messages. | 173 // navigations generate extra DidStartLoading and DidStopLoading messages. |
173 // Until we replace swappedout:// with frame proxies, we need to listen for | 174 // Until we replace swappedout:// with frame proxies, we need to listen for |
174 // something else. For now, we trigger NEW_SUBFRAME navigations and listen | 175 // something else. For now, we trigger NEW_SUBFRAME navigations and listen |
175 // for commit. | 176 // for commit. |
176 std::string script = base::StringPrintf( | 177 std::string script = base::StringPrintf( |
177 "setTimeout(\"" | 178 "setTimeout(\"" |
178 "var iframes = document.getElementById('%s');iframes.src='%s';" | 179 "var iframes = document.getElementById('%s');iframes.src='%s';" |
179 "\",0)", | 180 "\",0)", |
180 iframe_id.c_str(), url.spec().c_str()); | 181 iframe_id.c_str(), url.spec().c_str()); |
181 WindowedNotificationObserver load_observer( | 182 WindowedNotificationObserver load_observer( |
182 NOTIFICATION_NAV_ENTRY_COMMITTED, | 183 NOTIFICATION_NAV_ENTRY_COMMITTED, |
183 Source<NavigationController>( | 184 Source<NavigationController>( |
184 &window->web_contents()->GetController())); | 185 &window->web_contents()->GetController())); |
185 bool result = ExecuteScript(window->web_contents(), script); | 186 EXPECT_TRUE(ExecuteScript(window->web_contents(), script)); |
186 load_observer.Wait(); | 187 load_observer.Wait(); |
187 return result; | |
188 } | 188 } |
189 | 189 |
190 void SitePerProcessBrowserTest::SetUpCommandLine(CommandLine* command_line) { | 190 void SitePerProcessBrowserTest::SetUpCommandLine(CommandLine* command_line) { |
191 command_line->AppendSwitch(switches::kSitePerProcess); | 191 command_line->AppendSwitch(switches::kSitePerProcess); |
192 }; | 192 }; |
193 | 193 |
194 void SitePerProcessBrowserTest::SetUpOnMainThread() { | 194 void SitePerProcessBrowserTest::SetUpOnMainThread() { |
195 host_resolver()->AddRule("*", "127.0.0.1"); | 195 host_resolver()->AddRule("*", "127.0.0.1"); |
196 ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady()); | 196 ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady()); |
197 SetupCrossSiteRedirector(embedded_test_server()); | 197 SetupCrossSiteRedirector(embedded_test_server()); |
(...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
354 GURL main_url(embedded_test_server()->GetURL("/site_per_process_main.html")); | 354 GURL main_url(embedded_test_server()->GetURL("/site_per_process_main.html")); |
355 NavigateToURL(shell(), main_url); | 355 NavigateToURL(shell(), main_url); |
356 | 356 |
357 StartFrameAtDataURL(); | 357 StartFrameAtDataURL(); |
358 | 358 |
359 // These must stay in scope with replace_host. | 359 // These must stay in scope with replace_host. |
360 GURL::Replacements replace_host; | 360 GURL::Replacements replace_host; |
361 std::string foo_com("foo.com"); | 361 std::string foo_com("foo.com"); |
362 | 362 |
363 // Load cross-site page into iframe. | 363 // Load cross-site page into iframe. |
364 EXPECT_TRUE(NavigateIframeToURL( | 364 NavigateIframeToURL(shell(), embedded_test_server()->GetURL( |
365 shell(), | 365 "/cross-site/foo.com/title2.html"), |
366 embedded_test_server()->GetURL("/cross-site/foo.com/title2.html"), | 366 "test"); |
367 "test")); | |
368 | 367 |
369 // Check the subframe process. | 368 // Check the subframe process. |
370 FrameTreeNode* root = | 369 FrameTreeNode* root = |
371 static_cast<WebContentsImpl*>(shell()->web_contents())-> | 370 static_cast<WebContentsImpl*>(shell()->web_contents())-> |
372 GetFrameTree()->root(); | 371 GetFrameTree()->root(); |
373 ASSERT_EQ(1U, root->child_count()); | 372 ASSERT_EQ(1U, root->child_count()); |
374 FrameTreeNode* child = root->child_at(0); | 373 FrameTreeNode* child = root->child_at(0); |
375 EXPECT_EQ(main_url, root->current_url()); | 374 EXPECT_EQ(main_url, root->current_url()); |
376 EXPECT_EQ("foo.com", child->current_url().host()); | 375 EXPECT_EQ("foo.com", child->current_url().host()); |
377 EXPECT_EQ("/title2.html", child->current_url().path()); | 376 EXPECT_EQ("/title2.html", child->current_url().path()); |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
431 GURL https_url(https_server.GetURL("files/title1.html")); | 430 GURL https_url(https_server.GetURL("files/title1.html")); |
432 | 431 |
433 NavigateToURL(shell(), main_url); | 432 NavigateToURL(shell(), main_url); |
434 | 433 |
435 SitePerProcessWebContentsObserver observer(shell()->web_contents()); | 434 SitePerProcessWebContentsObserver observer(shell()->web_contents()); |
436 { | 435 { |
437 // Load cross-site client-redirect page into Iframe. | 436 // Load cross-site client-redirect page into Iframe. |
438 // Should be blocked. | 437 // Should be blocked. |
439 GURL client_redirect_https_url(https_server.GetURL( | 438 GURL client_redirect_https_url(https_server.GetURL( |
440 "client-redirect?files/title1.html")); | 439 "client-redirect?files/title1.html")); |
441 EXPECT_TRUE(NavigateIframeToURL(shell(), | 440 NavigateIframeToURL(shell(), client_redirect_https_url, "test"); |
442 client_redirect_https_url, "test")); | |
443 // DidFailProvisionalLoad when navigating to client_redirect_https_url. | 441 // DidFailProvisionalLoad when navigating to client_redirect_https_url. |
444 EXPECT_EQ(observer.navigation_url(), client_redirect_https_url); | 442 EXPECT_EQ(observer.navigation_url(), client_redirect_https_url); |
445 EXPECT_FALSE(observer.navigation_succeeded()); | 443 EXPECT_FALSE(observer.navigation_succeeded()); |
446 } | 444 } |
447 | 445 |
448 { | 446 { |
449 // Load cross-site server-redirect page into Iframe, | 447 // Load cross-site server-redirect page into Iframe, |
450 // which redirects to same-site page. | 448 // which redirects to same-site page. |
451 GURL server_redirect_http_url(https_server.GetURL( | 449 GURL server_redirect_http_url(https_server.GetURL( |
452 "server-redirect?" + http_url.spec())); | 450 "server-redirect?" + http_url.spec())); |
453 EXPECT_TRUE(NavigateIframeToURL(shell(), | 451 NavigateIframeToURL(shell(), server_redirect_http_url, "test"); |
454 server_redirect_http_url, "test")); | |
455 EXPECT_EQ(observer.navigation_url(), http_url); | 452 EXPECT_EQ(observer.navigation_url(), http_url); |
456 EXPECT_TRUE(observer.navigation_succeeded()); | 453 EXPECT_TRUE(observer.navigation_succeeded()); |
457 } | 454 } |
458 | 455 |
459 { | 456 { |
460 // Load cross-site server-redirect page into Iframe, | 457 // Load cross-site server-redirect page into Iframe, |
461 // which redirects to cross-site page. | 458 // which redirects to cross-site page. |
462 GURL server_redirect_http_url(https_server.GetURL( | 459 GURL server_redirect_http_url(https_server.GetURL( |
463 "server-redirect?files/title1.html")); | 460 "server-redirect?files/title1.html")); |
464 EXPECT_TRUE(NavigateIframeToURL(shell(), | 461 NavigateIframeToURL(shell(), server_redirect_http_url, "test"); |
465 server_redirect_http_url, "test")); | |
466 // DidFailProvisionalLoad when navigating to https_url. | 462 // DidFailProvisionalLoad when navigating to https_url. |
467 EXPECT_EQ(observer.navigation_url(), https_url); | 463 EXPECT_EQ(observer.navigation_url(), https_url); |
468 EXPECT_FALSE(observer.navigation_succeeded()); | 464 EXPECT_FALSE(observer.navigation_succeeded()); |
469 } | 465 } |
470 | 466 |
471 { | 467 { |
472 // Load same-site server-redirect page into Iframe, | 468 // Load same-site server-redirect page into Iframe, |
473 // which redirects to cross-site page. | 469 // which redirects to cross-site page. |
474 GURL server_redirect_http_url(test_server()->GetURL( | 470 GURL server_redirect_http_url(test_server()->GetURL( |
475 "server-redirect?" + https_url.spec())); | 471 "server-redirect?" + https_url.spec())); |
476 EXPECT_TRUE(NavigateIframeToURL(shell(), | 472 NavigateIframeToURL(shell(), server_redirect_http_url, "test"); |
477 server_redirect_http_url, "test")); | |
478 | 473 |
479 EXPECT_EQ(observer.navigation_url(), https_url); | 474 EXPECT_EQ(observer.navigation_url(), https_url); |
480 EXPECT_FALSE(observer.navigation_succeeded()); | 475 EXPECT_FALSE(observer.navigation_succeeded()); |
481 } | 476 } |
482 | 477 |
483 { | 478 { |
484 // Load same-site client-redirect page into Iframe, | 479 // Load same-site client-redirect page into Iframe, |
485 // which redirects to cross-site page. | 480 // which redirects to cross-site page. |
486 GURL client_redirect_http_url(test_server()->GetURL( | 481 GURL client_redirect_http_url(test_server()->GetURL( |
487 "client-redirect?" + https_url.spec())); | 482 "client-redirect?" + https_url.spec())); |
488 | 483 |
489 RedirectNotificationObserver load_observer2( | 484 RedirectNotificationObserver load_observer2( |
490 NOTIFICATION_LOAD_STOP, | 485 NOTIFICATION_LOAD_STOP, |
491 Source<NavigationController>( | 486 Source<NavigationController>( |
492 &shell()->web_contents()->GetController())); | 487 &shell()->web_contents()->GetController())); |
493 | 488 |
494 EXPECT_TRUE(NavigateIframeToURL(shell(), | 489 NavigateIframeToURL(shell(), client_redirect_http_url, "test"); |
495 client_redirect_http_url, "test")); | |
496 | 490 |
497 // Same-site Client-Redirect Page should be loaded successfully. | 491 // Same-site Client-Redirect Page should be loaded successfully. |
498 EXPECT_EQ(observer.navigation_url(), client_redirect_http_url); | 492 EXPECT_EQ(observer.navigation_url(), client_redirect_http_url); |
499 EXPECT_TRUE(observer.navigation_succeeded()); | 493 EXPECT_TRUE(observer.navigation_succeeded()); |
500 | 494 |
501 // Redirecting to Cross-site Page should be blocked. | 495 // Redirecting to Cross-site Page should be blocked. |
502 load_observer2.Wait(); | 496 load_observer2.Wait(); |
503 EXPECT_EQ(observer.navigation_url(), https_url); | 497 EXPECT_EQ(observer.navigation_url(), https_url); |
504 EXPECT_FALSE(observer.navigation_succeeded()); | 498 EXPECT_FALSE(observer.navigation_succeeded()); |
505 } | 499 } |
506 | 500 |
507 { | 501 { |
508 // Load same-site server-redirect page into Iframe, | 502 // Load same-site server-redirect page into Iframe, |
509 // which redirects to same-site page. | 503 // which redirects to same-site page. |
510 GURL server_redirect_http_url(test_server()->GetURL( | 504 GURL server_redirect_http_url( |
511 "server-redirect?files/title1.html")); | 505 test_server()->GetURL("server-redirect?files/title1.html")); |
512 EXPECT_TRUE(NavigateIframeToURL(shell(), | 506 NavigateIframeToURL(shell(), server_redirect_http_url, "test"); |
513 server_redirect_http_url, "test")); | |
514 EXPECT_EQ(observer.navigation_url(), http_url); | 507 EXPECT_EQ(observer.navigation_url(), http_url); |
515 EXPECT_TRUE(observer.navigation_succeeded()); | 508 EXPECT_TRUE(observer.navigation_succeeded()); |
516 } | 509 } |
517 | 510 |
518 { | 511 { |
519 // Load same-site client-redirect page into Iframe, | 512 // Load same-site client-redirect page into Iframe, |
520 // which redirects to same-site page. | 513 // which redirects to same-site page. |
521 GURL client_redirect_http_url(test_server()->GetURL( | 514 GURL client_redirect_http_url(test_server()->GetURL( |
522 "client-redirect?" + http_url.spec())); | 515 "client-redirect?" + http_url.spec())); |
523 RedirectNotificationObserver load_observer2( | 516 RedirectNotificationObserver load_observer2( |
524 NOTIFICATION_LOAD_STOP, | 517 NOTIFICATION_LOAD_STOP, |
525 Source<NavigationController>( | 518 Source<NavigationController>( |
526 &shell()->web_contents()->GetController())); | 519 &shell()->web_contents()->GetController())); |
527 | 520 |
528 EXPECT_TRUE(NavigateIframeToURL(shell(), | 521 NavigateIframeToURL(shell(), client_redirect_http_url, "test"); |
529 client_redirect_http_url, "test")); | |
530 | 522 |
531 // Same-site Client-Redirect Page should be loaded successfully. | 523 // Same-site Client-Redirect Page should be loaded successfully. |
532 EXPECT_EQ(observer.navigation_url(), client_redirect_http_url); | 524 EXPECT_EQ(observer.navigation_url(), client_redirect_http_url); |
533 EXPECT_TRUE(observer.navigation_succeeded()); | 525 EXPECT_TRUE(observer.navigation_succeeded()); |
534 | 526 |
535 // Redirecting to Same-site Page should be loaded successfully. | 527 // Redirecting to Same-site Page should be loaded successfully. |
536 load_observer2.Wait(); | 528 load_observer2.Wait(); |
537 EXPECT_EQ(observer.navigation_url(), http_url); | 529 EXPECT_EQ(observer.navigation_url(), http_url); |
538 EXPECT_TRUE(observer.navigation_succeeded()); | 530 EXPECT_TRUE(observer.navigation_succeeded()); |
539 } | 531 } |
(...skipping 26 matching lines...) Expand all Loading... | |
566 "client-redirect?" + http_url.spec())); | 558 "client-redirect?" + http_url.spec())); |
567 GURL client_redirect_http_url(test_server()->GetURL( | 559 GURL client_redirect_http_url(test_server()->GetURL( |
568 "client-redirect?" + client_redirect_https_url.spec())); | 560 "client-redirect?" + client_redirect_https_url.spec())); |
569 | 561 |
570 // We should wait until second client redirect get cancelled. | 562 // We should wait until second client redirect get cancelled. |
571 RedirectNotificationObserver load_observer2( | 563 RedirectNotificationObserver load_observer2( |
572 NOTIFICATION_LOAD_STOP, | 564 NOTIFICATION_LOAD_STOP, |
573 Source<NavigationController>( | 565 Source<NavigationController>( |
574 &shell()->web_contents()->GetController())); | 566 &shell()->web_contents()->GetController())); |
575 | 567 |
576 EXPECT_TRUE(NavigateIframeToURL(shell(), client_redirect_http_url, "test")); | 568 NavigateIframeToURL(shell(), client_redirect_http_url, "test"); |
577 | 569 |
578 // DidFailProvisionalLoad when navigating to client_redirect_https_url. | 570 // DidFailProvisionalLoad when navigating to client_redirect_https_url. |
579 load_observer2.Wait(); | 571 load_observer2.Wait(); |
580 EXPECT_EQ(observer.navigation_url(), client_redirect_https_url); | 572 EXPECT_EQ(observer.navigation_url(), client_redirect_https_url); |
581 EXPECT_FALSE(observer.navigation_succeeded()); | 573 EXPECT_FALSE(observer.navigation_succeeded()); |
582 } | 574 } |
583 | 575 |
584 { | 576 { |
585 // Load server-redirect page pointing to a cross-site server-redirect page, | 577 // Load server-redirect page pointing to a cross-site server-redirect page, |
586 // which eventually redirect back to same-site page. | 578 // which eventually redirect back to same-site page. |
587 GURL server_redirect_https_url(https_server.GetURL( | 579 GURL server_redirect_https_url(https_server.GetURL( |
588 "server-redirect?" + http_url.spec())); | 580 "server-redirect?" + http_url.spec())); |
589 GURL server_redirect_http_url(test_server()->GetURL( | 581 GURL server_redirect_http_url(test_server()->GetURL( |
590 "server-redirect?" + server_redirect_https_url.spec())); | 582 "server-redirect?" + server_redirect_https_url.spec())); |
591 EXPECT_TRUE(NavigateIframeToURL(shell(), | 583 NavigateIframeToURL(shell(), server_redirect_http_url, "test"); |
592 server_redirect_http_url, "test")); | |
593 EXPECT_EQ(observer.navigation_url(), http_url); | 584 EXPECT_EQ(observer.navigation_url(), http_url); |
594 EXPECT_TRUE(observer.navigation_succeeded()); | 585 EXPECT_TRUE(observer.navigation_succeeded()); |
595 } | 586 } |
596 | 587 |
597 { | 588 { |
598 // Load server-redirect page pointing to a cross-site server-redirect page, | 589 // Load server-redirect page pointing to a cross-site server-redirect page, |
599 // which eventually redirects back to cross-site page. | 590 // which eventually redirects back to cross-site page. |
600 GURL server_redirect_https_url(https_server.GetURL( | 591 GURL server_redirect_https_url(https_server.GetURL( |
601 "server-redirect?" + https_url.spec())); | 592 "server-redirect?" + https_url.spec())); |
602 GURL server_redirect_http_url(test_server()->GetURL( | 593 GURL server_redirect_http_url(test_server()->GetURL( |
603 "server-redirect?" + server_redirect_https_url.spec())); | 594 "server-redirect?" + server_redirect_https_url.spec())); |
604 EXPECT_TRUE(NavigateIframeToURL(shell(), server_redirect_http_url, "test")); | 595 NavigateIframeToURL(shell(), server_redirect_http_url, "test"); |
605 | 596 |
606 // DidFailProvisionalLoad when navigating to https_url. | 597 // DidFailProvisionalLoad when navigating to https_url. |
607 EXPECT_EQ(observer.navigation_url(), https_url); | 598 EXPECT_EQ(observer.navigation_url(), https_url); |
608 EXPECT_FALSE(observer.navigation_succeeded()); | 599 EXPECT_FALSE(observer.navigation_succeeded()); |
609 } | 600 } |
610 | 601 |
611 { | 602 { |
612 // Load server-redirect page pointing to a cross-site client-redirect page, | 603 // Load server-redirect page pointing to a cross-site client-redirect page, |
613 // which eventually redirects back to same-site page. | 604 // which eventually redirects back to same-site page. |
614 GURL client_redirect_http_url(https_server.GetURL( | 605 GURL client_redirect_http_url(https_server.GetURL( |
615 "client-redirect?" + http_url.spec())); | 606 "client-redirect?" + http_url.spec())); |
616 GURL server_redirect_http_url(test_server()->GetURL( | 607 GURL server_redirect_http_url(test_server()->GetURL( |
617 "server-redirect?" + client_redirect_http_url.spec())); | 608 "server-redirect?" + client_redirect_http_url.spec())); |
618 EXPECT_TRUE(NavigateIframeToURL(shell(), server_redirect_http_url, "test")); | 609 NavigateIframeToURL(shell(), server_redirect_http_url, "test"); |
619 | 610 |
620 // DidFailProvisionalLoad when navigating to client_redirect_http_url. | 611 // DidFailProvisionalLoad when navigating to client_redirect_http_url. |
621 EXPECT_EQ(observer.navigation_url(), client_redirect_http_url); | 612 EXPECT_EQ(observer.navigation_url(), client_redirect_http_url); |
622 EXPECT_FALSE(observer.navigation_succeeded()); | 613 EXPECT_FALSE(observer.navigation_succeeded()); |
623 } | 614 } |
624 } | 615 } |
625 | 616 |
626 // Ensure that when navigating a frame cross-process RenderFrameProxyHosts are | 617 // Ensure that when navigating a frame cross-process RenderFrameProxyHosts are |
627 // created in the FrameTree skipping the subtree of the navigating frame. | 618 // created in the FrameTree skipping the subtree of the navigating frame. |
628 // | 619 // |
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
728 child->child_at(i)->render_manager()->GetRenderFrameProxyHost(site2)); | 719 child->child_at(i)->render_manager()->GetRenderFrameProxyHost(site2)); |
729 } | 720 } |
730 | 721 |
731 navigation_observer.Wait(); | 722 navigation_observer.Wait(); |
732 EXPECT_TRUE(observer.navigation_succeeded()); | 723 EXPECT_TRUE(observer.navigation_succeeded()); |
733 EXPECT_EQ(cross_site_url, observer.navigation_url()); | 724 EXPECT_EQ(cross_site_url, observer.navigation_url()); |
734 EXPECT_EQ(0U, child->child_count()); | 725 EXPECT_EQ(0U, child->child_count()); |
735 } | 726 } |
736 } | 727 } |
737 | 728 |
729 // Disabled because of http://crbug.com/433012 . | |
Charlie Reis
2014/12/06 00:18:51
If we can avoid using script to check the title be
lfg
2014/12/08 20:45:33
Yes, it would. If we don't depend on the renderer
| |
730 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, | |
731 DISABLED_NavigateRemoteToDataURL) { | |
732 GURL main_url(embedded_test_server()->GetURL("/site_per_process_main.html")); | |
733 NavigateToURL(shell(), main_url); | |
734 | |
735 // It is safe to obtain the root frame tree node here, as it doesn't change. | |
736 FrameTreeNode* root = static_cast<WebContentsImpl*>(shell()->web_contents()) | |
737 ->GetFrameTree() | |
738 ->root(); | |
739 | |
740 SitePerProcessWebContentsObserver observer(shell()->web_contents()); | |
741 | |
742 // Load cross-site page into iframe. | |
743 GURL url = embedded_test_server()->GetURL("foo.com", "/title1.html"); | |
744 NavigateFrameToURL(root->child_at(0), url); | |
745 EXPECT_TRUE(observer.navigation_succeeded()); | |
746 EXPECT_EQ(url, observer.navigation_url()); | |
747 | |
748 // Ensure that we have created a new process for the subframe. | |
749 EXPECT_NE(shell()->web_contents()->GetSiteInstance(), | |
750 root->child_at(0)->current_frame_host()->GetSiteInstance()); | |
751 | |
752 // Navigate iframe to a data URL. The navigation happens from a script in the | |
753 // parent renderer, so the data URL should be rendered in the parent renderer. | |
754 GURL data_url("data:text/html,dataurl"); | |
755 std::string script = base::StringPrintf( | |
756 "setTimeout(function() {" | |
757 "var iframe = document.getElementById('test');" | |
758 "iframe.onload = function() { document.title = 'LOADED'; };" | |
Charlie Reis
2014/12/06 00:18:51
Can we avoid using the title? I don't understand
lfg
2014/12/08 20:45:33
RenderFrameHostImpl::IsCrossProcessSubframe() retu
Charlie Reis
2014/12/09 19:14:37
Ah! Good find.
We could try to revise that check
| |
759 "iframe.src=\"%s\";" | |
760 "},0);", | |
761 data_url.spec().c_str()); | |
762 base::string16 passed_string(base::UTF8ToUTF16("LOADED")); | |
763 TitleWatcher title_watcher(shell()->web_contents(), passed_string); | |
764 EXPECT_TRUE(ExecuteScript(shell()->web_contents(), script)); | |
765 (void)title_watcher.WaitAndGetTitle(); | |
766 EXPECT_TRUE(observer.navigation_succeeded()); | |
767 EXPECT_EQ(data_url, observer.navigation_url()); | |
768 | |
769 // Ensure that we have navigated using the top level process. | |
770 EXPECT_EQ(shell()->web_contents()->GetSiteInstance(), | |
771 root->child_at(0)->current_frame_host()->GetSiteInstance()); | |
772 } | |
773 | |
774 // Disabled because of http://crbug.com/433012 . | |
775 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, | |
776 DISABLED_NavigateRemoteBlankURL) { | |
Charlie Reis
2014/12/06 00:18:51
nit: NavigateRemoteToBlankURL
lfg
2014/12/08 20:45:33
Done.
| |
777 GURL main_url(embedded_test_server()->GetURL("/site_per_process_main.html")); | |
778 NavigateToURL(shell(), main_url); | |
779 | |
780 // It is safe to obtain the root frame tree node here, as it doesn't change. | |
781 FrameTreeNode* root = static_cast<WebContentsImpl*>(shell()->web_contents()) | |
782 ->GetFrameTree() | |
783 ->root(); | |
784 | |
785 SitePerProcessWebContentsObserver observer(shell()->web_contents()); | |
786 | |
787 // Load cross-site page into iframe. | |
788 GURL url = embedded_test_server()->GetURL("foo.com", "/title1.html"); | |
789 NavigateFrameToURL(root->child_at(0), url); | |
790 EXPECT_TRUE(observer.navigation_succeeded()); | |
791 EXPECT_EQ(url, observer.navigation_url()); | |
792 | |
793 // Ensure that we have created a new process for the subframe. | |
794 EXPECT_NE(shell()->web_contents()->GetSiteInstance(), | |
795 root->child_at(0)->current_frame_host()->GetSiteInstance()); | |
796 | |
797 // Navigate iframe to a data URL. The navigation happens from a script in the | |
798 // parent renderer, so the data URL should be rendered in the parent renderer. | |
799 GURL data_url("about:blank"); | |
800 std::string script = base::StringPrintf( | |
801 "setTimeout(function() {" | |
802 "var iframe = document.getElementById('test');" | |
803 "iframe.onload = function() { document.title = 'LOADED'; };" | |
804 "iframe.src=\"%s\";" | |
805 "},0);", | |
806 data_url.spec().c_str()); | |
807 base::string16 passed_string(base::UTF8ToUTF16("LOADED")); | |
808 TitleWatcher title_watcher(shell()->web_contents(), passed_string); | |
809 EXPECT_TRUE(ExecuteScript(shell()->web_contents(), script)); | |
810 (void)title_watcher.WaitAndGetTitle(); | |
811 EXPECT_TRUE(observer.navigation_succeeded()); | |
812 EXPECT_EQ(data_url, observer.navigation_url()); | |
813 | |
814 // Ensure that we have navigated using the top level process. | |
815 EXPECT_EQ(shell()->web_contents()->GetSiteInstance(), | |
816 root->child_at(0)->current_frame_host()->GetSiteInstance()); | |
817 } | |
818 | |
738 } // namespace content | 819 } // namespace content |
OLD | NEW |