OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 <stddef.h> | 5 #include <stddef.h> |
6 | 6 |
7 #include <memory> | 7 #include <memory> |
8 #include <utility> | 8 #include <utility> |
9 | 9 |
10 #include "base/callback.h" | 10 #include "base/callback.h" |
(...skipping 228 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
239 NavigationCompletedObserver observer( | 239 NavigationCompletedObserver observer( |
240 browser()->tab_strip_model()->GetActiveWebContents()); | 240 browser()->tab_strip_model()->GetActiveWebContents()); |
241 | 241 |
242 ui_test_utils::NavigateToURL(browser(), url); | 242 ui_test_utils::NavigateToURL(browser(), url); |
243 | 243 |
244 // Wait until the last RenderFrameHosts are deleted. This wait doesn't take | 244 // Wait until the last RenderFrameHosts are deleted. This wait doesn't take |
245 // long. | 245 // long. |
246 observer.Wait(); | 246 observer.Wait(); |
247 } | 247 } |
248 | 248 |
249 size_t IfExtensionsIsolated(size_t if_enabled, size_t if_disabled) { | |
250 return content::AreAllSitesIsolatedForTesting() || | |
251 IsIsolateExtensionsEnabled() | |
252 ? if_enabled | |
253 : if_disabled; | |
254 } | |
255 | |
256 content::WebContents* OpenPopup(content::RenderFrameHost* opener, | 249 content::WebContents* OpenPopup(content::RenderFrameHost* opener, |
257 const GURL& url) { | 250 const GURL& url) { |
258 content::WindowedNotificationObserver popup_observer( | 251 content::WindowedNotificationObserver popup_observer( |
259 chrome::NOTIFICATION_TAB_ADDED, | 252 chrome::NOTIFICATION_TAB_ADDED, |
260 content::NotificationService::AllSources()); | 253 content::NotificationService::AllSources()); |
261 EXPECT_TRUE(ExecuteScript( | 254 EXPECT_TRUE(ExecuteScript( |
262 opener, "window.popup = window.open('" + url.spec() + "')")); | 255 opener, "window.popup = window.open('" + url.spec() + "')")); |
263 popup_observer.Wait(); | 256 popup_observer.Wait(); |
264 content::WebContents* popup = | 257 content::WebContents* popup = |
265 browser()->tab_strip_model()->GetActiveWebContents(); | 258 browser()->tab_strip_model()->GetActiveWebContents(); |
(...skipping 251 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
517 EXPECT_EQ(0u, pm->GetRenderFrameHostsForExtension(extension2->id()).size()); | 510 EXPECT_EQ(0u, pm->GetRenderFrameHostsForExtension(extension2->id()).size()); |
518 | 511 |
519 NavigateToURL(embedded_test_server()->GetURL("/two_iframes.html")); | 512 NavigateToURL(embedded_test_server()->GetURL("/two_iframes.html")); |
520 EXPECT_EQ(0u, pm->GetAllFrames().size()); | 513 EXPECT_EQ(0u, pm->GetAllFrames().size()); |
521 | 514 |
522 content::WebContents* tab = | 515 content::WebContents* tab = |
523 browser()->tab_strip_model()->GetActiveWebContents(); | 516 browser()->tab_strip_model()->GetActiveWebContents(); |
524 | 517 |
525 // Tests extension frames in non-extension page. | 518 // Tests extension frames in non-extension page. |
526 EXPECT_TRUE(content::NavigateIframeToURL(tab, "frame1", kExt1EmptyUrl)); | 519 EXPECT_TRUE(content::NavigateIframeToURL(tab, "frame1", kExt1EmptyUrl)); |
527 EXPECT_EQ(IfExtensionsIsolated(1, 0), | 520 EXPECT_EQ(1u, pm->GetRenderFrameHostsForExtension(extension1->id()).size()); |
528 pm->GetRenderFrameHostsForExtension(extension1->id()).size()); | 521 EXPECT_EQ(1u, pm->GetAllFrames().size()); |
529 EXPECT_EQ(IfExtensionsIsolated(1, 0), pm->GetAllFrames().size()); | |
530 | 522 |
531 EXPECT_TRUE(content::NavigateIframeToURL(tab, "frame2", kExt2EmptyUrl)); | 523 EXPECT_TRUE(content::NavigateIframeToURL(tab, "frame2", kExt2EmptyUrl)); |
532 EXPECT_EQ(IfExtensionsIsolated(1, 0), | 524 EXPECT_EQ(1u, pm->GetRenderFrameHostsForExtension(extension2->id()).size()); |
533 pm->GetRenderFrameHostsForExtension(extension2->id()).size()); | 525 EXPECT_EQ(2u, pm->GetAllFrames().size()); |
534 EXPECT_EQ(IfExtensionsIsolated(2, 0), pm->GetAllFrames().size()); | |
535 | 526 |
536 // Tests non-extension page in extension frame. | 527 // Tests non-extension page in extension frame. |
537 NavigateToURL(kExt1TwoFramesUrl); | 528 NavigateToURL(kExt1TwoFramesUrl); |
538 // 1 top-level + 2 child frames from Extension 1. | 529 // 1 top-level + 2 child frames from Extension 1. |
539 EXPECT_EQ(3u, pm->GetAllFrames().size()); | 530 EXPECT_EQ(3u, pm->GetAllFrames().size()); |
540 EXPECT_EQ(3u, pm->GetRenderFrameHostsForExtension(extension1->id()).size()); | 531 EXPECT_EQ(3u, pm->GetRenderFrameHostsForExtension(extension1->id()).size()); |
541 EXPECT_EQ(0u, pm->GetRenderFrameHostsForExtension(extension2->id()).size()); | 532 EXPECT_EQ(0u, pm->GetRenderFrameHostsForExtension(extension2->id()).size()); |
542 | 533 |
543 EXPECT_TRUE(content::NavigateIframeToURL(tab, "frame1", | 534 EXPECT_TRUE(content::NavigateIframeToURL(tab, "frame1", |
544 embedded_test_server() | 535 embedded_test_server() |
545 ->GetURL("/empty.html"))); | 536 ->GetURL("/empty.html"))); |
546 // 1 top-level + 1 child frame from Extension 1. | 537 // 1 top-level + 1 child frame from Extension 1. |
547 EXPECT_EQ(2u, pm->GetRenderFrameHostsForExtension(extension1->id()).size()); | 538 EXPECT_EQ(2u, pm->GetRenderFrameHostsForExtension(extension1->id()).size()); |
548 EXPECT_EQ(2u, pm->GetAllFrames().size()); | 539 EXPECT_EQ(2u, pm->GetAllFrames().size()); |
549 | 540 |
550 EXPECT_TRUE(content::NavigateIframeToURL(tab, "frame1", kExt1EmptyUrl)); | 541 EXPECT_TRUE(content::NavigateIframeToURL(tab, "frame1", kExt1EmptyUrl)); |
551 // 1 top-level + 2 child frames from Extension 1. | 542 // 1 top-level + 2 child frames from Extension 1. |
552 EXPECT_EQ(3u, pm->GetAllFrames().size()); | 543 EXPECT_EQ(3u, pm->GetAllFrames().size()); |
553 EXPECT_EQ(3u, pm->GetRenderFrameHostsForExtension(extension1->id()).size()); | 544 EXPECT_EQ(3u, pm->GetRenderFrameHostsForExtension(extension1->id()).size()); |
554 | 545 |
555 // Load a frame from another extension. | 546 // Load a frame from another extension. |
556 EXPECT_TRUE(content::NavigateIframeToURL(tab, "frame1", kExt2EmptyUrl)); | 547 EXPECT_TRUE(content::NavigateIframeToURL(tab, "frame1", kExt2EmptyUrl)); |
557 // 1 top-level + 1 child frame from Extension 1, | 548 // 1 top-level + 1 child frame from Extension 1, |
558 // 1 child frame from Extension 2. | 549 // 1 child frame from Extension 2. |
559 EXPECT_EQ(IfExtensionsIsolated(3, 2), pm->GetAllFrames().size()); | 550 EXPECT_EQ(3u, pm->GetAllFrames().size()); |
560 EXPECT_EQ(2u, pm->GetRenderFrameHostsForExtension(extension1->id()).size()); | 551 EXPECT_EQ(2u, pm->GetRenderFrameHostsForExtension(extension1->id()).size()); |
561 EXPECT_EQ(IfExtensionsIsolated(1, 0), | 552 EXPECT_EQ(1u, pm->GetRenderFrameHostsForExtension(extension2->id()).size()); |
562 pm->GetRenderFrameHostsForExtension(extension2->id()).size()); | |
563 | 553 |
564 // Destroy all existing frames by navigating to another extension. | 554 // Destroy all existing frames by navigating to another extension. |
565 NavigateToURL(extension2->url().Resolve("empty.html")); | 555 NavigateToURL(extension2->url().Resolve("empty.html")); |
566 EXPECT_EQ(1u, pm->GetAllFrames().size()); | 556 EXPECT_EQ(1u, pm->GetAllFrames().size()); |
567 EXPECT_EQ(0u, pm->GetRenderFrameHostsForExtension(extension1->id()).size()); | 557 EXPECT_EQ(0u, pm->GetRenderFrameHostsForExtension(extension1->id()).size()); |
568 EXPECT_EQ(1u, pm->GetRenderFrameHostsForExtension(extension2->id()).size()); | 558 EXPECT_EQ(1u, pm->GetRenderFrameHostsForExtension(extension2->id()).size()); |
569 | 559 |
570 // Test about:blank and about:srcdoc child frames. | 560 // Test about:blank and about:srcdoc child frames. |
571 NavigateToURL(extension2->url().Resolve("srcdoc_iframe.html")); | 561 NavigateToURL(extension2->url().Resolve("srcdoc_iframe.html")); |
572 // 1 top-level frame + 1 child frame from Extension 2. | 562 // 1 top-level frame + 1 child frame from Extension 2. |
(...skipping 27 matching lines...) Expand all Loading... |
600 // 1 top-level + 2 child frames from Extension 1, | 590 // 1 top-level + 2 child frames from Extension 1, |
601 // 2 child frames in frame1 from Extension 2. | 591 // 2 child frames in frame1 from Extension 2. |
602 EXPECT_EQ(5u, pm->GetAllFrames().size()); | 592 EXPECT_EQ(5u, pm->GetAllFrames().size()); |
603 EXPECT_EQ(5u, pm->GetRenderFrameHostsForExtension(extension2->id()).size()); | 593 EXPECT_EQ(5u, pm->GetRenderFrameHostsForExtension(extension2->id()).size()); |
604 | 594 |
605 // The extension frame from the other extension should not be classified as an | 595 // The extension frame from the other extension should not be classified as an |
606 // extension (unless out-of-process frames are enabled). | 596 // extension (unless out-of-process frames are enabled). |
607 EXPECT_TRUE(content::NavigateIframeToURL(tab, "frame1", kExt1EmptyUrl)); | 597 EXPECT_TRUE(content::NavigateIframeToURL(tab, "frame1", kExt1EmptyUrl)); |
608 // 1 top-level + 1 child frames from Extension 2, | 598 // 1 top-level + 1 child frames from Extension 2, |
609 // 1 child frame from Extension 1. | 599 // 1 child frame from Extension 1. |
610 EXPECT_EQ(IfExtensionsIsolated(3, 2), pm->GetAllFrames().size()); | 600 EXPECT_EQ(3u, pm->GetAllFrames().size()); |
611 EXPECT_EQ(IfExtensionsIsolated(1, 0), | 601 EXPECT_EQ(1u, pm->GetRenderFrameHostsForExtension(extension1->id()).size()); |
612 pm->GetRenderFrameHostsForExtension(extension1->id()).size()); | |
613 EXPECT_EQ(2u, pm->GetRenderFrameHostsForExtension(extension2->id()).size()); | 602 EXPECT_EQ(2u, pm->GetRenderFrameHostsForExtension(extension2->id()).size()); |
614 | 603 |
615 EXPECT_TRUE(content::NavigateIframeToURL(tab, "frame2", kExt1TwoFramesUrl)); | 604 EXPECT_TRUE(content::NavigateIframeToURL(tab, "frame2", kExt1TwoFramesUrl)); |
616 // 1 top-level + 1 child frames from Extension 2, | 605 // 1 top-level + 1 child frames from Extension 2, |
617 // 1 child frame + 2 child frames in frame2 from Extension 1. | 606 // 1 child frame + 2 child frames in frame2 from Extension 1. |
618 EXPECT_EQ(IfExtensionsIsolated(5, 1), pm->GetAllFrames().size()); | 607 EXPECT_EQ(5u, pm->GetAllFrames().size()); |
619 EXPECT_EQ(IfExtensionsIsolated(4, 0), | 608 EXPECT_EQ(4u, pm->GetRenderFrameHostsForExtension(extension1->id()).size()); |
620 pm->GetRenderFrameHostsForExtension(extension1->id()).size()); | |
621 EXPECT_EQ(1u, pm->GetRenderFrameHostsForExtension(extension2->id()).size()); | 609 EXPECT_EQ(1u, pm->GetRenderFrameHostsForExtension(extension2->id()).size()); |
622 | 610 |
623 // Crash tab where the top-level frame is an extension frame. | 611 // Crash tab where the top-level frame is an extension frame. |
624 content::CrashTab(tab); | 612 content::CrashTab(tab); |
625 EXPECT_EQ(0u, pm->GetAllFrames().size()); | 613 EXPECT_EQ(0u, pm->GetAllFrames().size()); |
626 EXPECT_EQ(0u, pm->GetRenderFrameHostsForExtension(extension1->id()).size()); | 614 EXPECT_EQ(0u, pm->GetRenderFrameHostsForExtension(extension1->id()).size()); |
627 EXPECT_EQ(0u, pm->GetRenderFrameHostsForExtension(extension2->id()).size()); | 615 EXPECT_EQ(0u, pm->GetRenderFrameHostsForExtension(extension2->id()).size()); |
628 | 616 |
629 // Now load an extension page and a non-extension page... | 617 // Now load an extension page and a non-extension page... |
630 ui_test_utils::NavigateToURLWithDisposition( | 618 ui_test_utils::NavigateToURLWithDisposition( |
631 browser(), kExt1EmptyUrl, WindowOpenDisposition::NEW_BACKGROUND_TAB, | 619 browser(), kExt1EmptyUrl, WindowOpenDisposition::NEW_BACKGROUND_TAB, |
632 ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION); | 620 ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION); |
633 NavigateToURL(embedded_test_server()->GetURL("/two_iframes.html")); | 621 NavigateToURL(embedded_test_server()->GetURL("/two_iframes.html")); |
634 EXPECT_EQ(1u, pm->GetAllFrames().size()); | 622 EXPECT_EQ(1u, pm->GetAllFrames().size()); |
635 | 623 |
636 // ... load an extension frame in the non-extension process | 624 // ... load an extension frame in the non-extension process |
637 EXPECT_TRUE(content::NavigateIframeToURL(tab, "frame1", kExt1EmptyUrl)); | 625 EXPECT_TRUE(content::NavigateIframeToURL(tab, "frame1", kExt1EmptyUrl)); |
638 EXPECT_EQ(IfExtensionsIsolated(2, 1), | 626 EXPECT_EQ(2u, pm->GetRenderFrameHostsForExtension(extension1->id()).size()); |
639 pm->GetRenderFrameHostsForExtension(extension1->id()).size()); | |
640 | 627 |
641 // ... and take down the tab. The extension process is not part of the tab, | 628 // ... and take down the tab. The extension process is not part of the tab, |
642 // so it should be kept alive (minus the frames that died). | 629 // so it should be kept alive (minus the frames that died). |
643 content::CrashTab(tab); | 630 content::CrashTab(tab); |
644 EXPECT_EQ(1u, pm->GetAllFrames().size()); | 631 EXPECT_EQ(1u, pm->GetAllFrames().size()); |
645 EXPECT_EQ(1u, pm->GetRenderFrameHostsForExtension(extension1->id()).size()); | 632 EXPECT_EQ(1u, pm->GetRenderFrameHostsForExtension(extension1->id()).size()); |
646 } | 633 } |
647 | 634 |
648 // Verify correct keepalive count behavior on network request events. | 635 // Verify correct keepalive count behavior on network request events. |
649 // Regression test for http://crbug.com/535716. | 636 // Regression test for http://crbug.com/535716. |
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
751 // Navigate main tab to a web page with two web iframes. There should be no | 738 // Navigate main tab to a web page with two web iframes. There should be no |
752 // extension frames yet. | 739 // extension frames yet. |
753 NavigateToURL(embedded_test_server()->GetURL("/two_iframes.html")); | 740 NavigateToURL(embedded_test_server()->GetURL("/two_iframes.html")); |
754 ProcessManager* pm = ProcessManager::Get(profile()); | 741 ProcessManager* pm = ProcessManager::Get(profile()); |
755 EXPECT_EQ(0u, pm->GetAllFrames().size()); | 742 EXPECT_EQ(0u, pm->GetAllFrames().size()); |
756 EXPECT_EQ(0u, pm->GetRenderFrameHostsForExtension(extension->id()).size()); | 743 EXPECT_EQ(0u, pm->GetRenderFrameHostsForExtension(extension->id()).size()); |
757 | 744 |
758 content::WebContents* tab = | 745 content::WebContents* tab = |
759 browser()->tab_strip_model()->GetActiveWebContents(); | 746 browser()->tab_strip_model()->GetActiveWebContents(); |
760 | 747 |
761 // Navigate first subframe to an extension URL. With --isolate-extensions, | 748 // Navigate first subframe to an extension URL. This will go into a new |
762 // this will go into a new extension process. | 749 // extension process. |
763 const GURL extension_url(extension->url().Resolve("empty.html")); | 750 const GURL extension_url(extension->url().Resolve("empty.html")); |
764 EXPECT_TRUE(content::NavigateIframeToURL(tab, "frame1", extension_url)); | 751 EXPECT_TRUE(content::NavigateIframeToURL(tab, "frame1", extension_url)); |
765 EXPECT_EQ(IfExtensionsIsolated(1, 0), | 752 EXPECT_EQ(1u, pm->GetRenderFrameHostsForExtension(extension->id()).size()); |
766 pm->GetRenderFrameHostsForExtension(extension->id()).size()); | 753 EXPECT_EQ(1u, pm->GetAllFrames().size()); |
767 EXPECT_EQ(IfExtensionsIsolated(1, 0), pm->GetAllFrames().size()); | |
768 | 754 |
769 content::RenderFrameHost* main_frame = tab->GetMainFrame(); | 755 content::RenderFrameHost* main_frame = tab->GetMainFrame(); |
770 content::RenderFrameHost* extension_frame = ChildFrameAt(main_frame, 0); | 756 content::RenderFrameHost* extension_frame = ChildFrameAt(main_frame, 0); |
771 | 757 |
772 // Validate that permissions have been granted for the extension scheme | 758 // Validate that permissions have been granted for the extension scheme |
773 // to the process of the extension iframe. | 759 // to the process of the extension iframe. |
774 content::ChildProcessSecurityPolicy* policy = | 760 content::ChildProcessSecurityPolicy* policy = |
775 content::ChildProcessSecurityPolicy::GetInstance(); | 761 content::ChildProcessSecurityPolicy::GetInstance(); |
776 EXPECT_TRUE(policy->CanRequestURL( | 762 EXPECT_TRUE(policy->CanRequestURL( |
777 extension_frame->GetProcess()->GetID(), | 763 extension_frame->GetProcess()->GetID(), |
778 GURL("blob:chrome-extension://some-extension-id/some-guid"))); | 764 GURL("blob:chrome-extension://some-extension-id/some-guid"))); |
779 EXPECT_TRUE(policy->CanRequestURL( | 765 EXPECT_TRUE(policy->CanRequestURL( |
780 main_frame->GetProcess()->GetID(), | 766 main_frame->GetProcess()->GetID(), |
781 GURL("blob:chrome-extension://some-extension-id/some-guid"))); | 767 GURL("blob:chrome-extension://some-extension-id/some-guid"))); |
782 EXPECT_TRUE(policy->CanRequestURL( | 768 EXPECT_TRUE(policy->CanRequestURL( |
783 extension_frame->GetProcess()->GetID(), | 769 extension_frame->GetProcess()->GetID(), |
784 GURL("filesystem:chrome-extension://some-extension-id/some-path"))); | 770 GURL("filesystem:chrome-extension://some-extension-id/some-path"))); |
785 EXPECT_TRUE(policy->CanRequestURL( | 771 EXPECT_TRUE(policy->CanRequestURL( |
786 main_frame->GetProcess()->GetID(), | 772 main_frame->GetProcess()->GetID(), |
787 GURL("filesystem:chrome-extension://some-extension-id/some-path"))); | 773 GURL("filesystem:chrome-extension://some-extension-id/some-path"))); |
788 EXPECT_TRUE(policy->CanRequestURL( | 774 EXPECT_TRUE(policy->CanRequestURL( |
789 extension_frame->GetProcess()->GetID(), | 775 extension_frame->GetProcess()->GetID(), |
790 GURL("chrome-extension://some-extension-id/resource.html"))); | 776 GURL("chrome-extension://some-extension-id/resource.html"))); |
791 EXPECT_TRUE(policy->CanRequestURL( | 777 EXPECT_TRUE(policy->CanRequestURL( |
792 main_frame->GetProcess()->GetID(), | 778 main_frame->GetProcess()->GetID(), |
793 GURL("chrome-extension://some-extension-id/resource.html"))); | 779 GURL("chrome-extension://some-extension-id/resource.html"))); |
794 | 780 |
795 if (IsIsolateExtensionsEnabled()) { | 781 EXPECT_TRUE(policy->CanCommitURL( |
796 EXPECT_TRUE(policy->CanCommitURL( | 782 extension_frame->GetProcess()->GetID(), |
797 extension_frame->GetProcess()->GetID(), | 783 GURL("blob:chrome-extension://some-extension-id/some-guid"))); |
798 GURL("blob:chrome-extension://some-extension-id/some-guid"))); | 784 EXPECT_FALSE(policy->CanCommitURL( |
799 EXPECT_FALSE(policy->CanCommitURL( | 785 main_frame->GetProcess()->GetID(), |
800 main_frame->GetProcess()->GetID(), | 786 GURL("blob:chrome-extension://some-extension-id/some-guid"))); |
801 GURL("blob:chrome-extension://some-extension-id/some-guid"))); | 787 EXPECT_TRUE(policy->CanCommitURL( |
802 EXPECT_TRUE(policy->CanCommitURL( | 788 extension_frame->GetProcess()->GetID(), |
803 extension_frame->GetProcess()->GetID(), | 789 GURL("chrome-extension://some-extension-id/resource.html"))); |
804 GURL("chrome-extension://some-extension-id/resource.html"))); | 790 EXPECT_FALSE(policy->CanCommitURL( |
805 EXPECT_FALSE(policy->CanCommitURL( | 791 main_frame->GetProcess()->GetID(), |
806 main_frame->GetProcess()->GetID(), | 792 GURL("chrome-extension://some-extension-id/resource.html"))); |
807 GURL("chrome-extension://some-extension-id/resource.html"))); | 793 EXPECT_TRUE(policy->CanCommitURL( |
808 EXPECT_TRUE(policy->CanCommitURL( | 794 extension_frame->GetProcess()->GetID(), |
809 extension_frame->GetProcess()->GetID(), | 795 GURL("filesystem:chrome-extension://some-extension-id/some-path"))); |
810 GURL("filesystem:chrome-extension://some-extension-id/some-path"))); | 796 EXPECT_FALSE(policy->CanCommitURL( |
811 EXPECT_FALSE(policy->CanCommitURL( | 797 main_frame->GetProcess()->GetID(), |
812 main_frame->GetProcess()->GetID(), | 798 GURL("filesystem:chrome-extension://some-extension-id/some-path"))); |
813 GURL("filesystem:chrome-extension://some-extension-id/some-path"))); | |
814 } | |
815 | 799 |
816 // Open a new about:blank popup from main frame. This should stay in the web | 800 // Open a new about:blank popup from main frame. This should stay in the web |
817 // process. | 801 // process. |
818 content::WebContents* popup = | 802 content::WebContents* popup = |
819 OpenPopup(main_frame, GURL(url::kAboutBlankURL)); | 803 OpenPopup(main_frame, GURL(url::kAboutBlankURL)); |
820 EXPECT_NE(popup, tab); | 804 EXPECT_NE(popup, tab); |
821 ASSERT_EQ(2, browser()->tab_strip_model()->count()); | 805 ASSERT_EQ(2, browser()->tab_strip_model()->count()); |
822 EXPECT_EQ(IfExtensionsIsolated(1, 0), | 806 EXPECT_EQ(1u, pm->GetRenderFrameHostsForExtension(extension->id()).size()); |
823 pm->GetRenderFrameHostsForExtension(extension->id()).size()); | 807 EXPECT_EQ(1u, pm->GetAllFrames().size()); |
824 EXPECT_EQ(IfExtensionsIsolated(1, 0), pm->GetAllFrames().size()); | |
825 | 808 |
826 // Create valid blob and filesystem URLs in the extension's origin. | 809 // Create valid blob and filesystem URLs in the extension's origin. |
827 url::Origin extension_origin(extension_frame->GetLastCommittedOrigin()); | 810 url::Origin extension_origin(extension_frame->GetLastCommittedOrigin()); |
828 GURL blob_url(CreateBlobURL(extension_frame, "foo")); | 811 GURL blob_url(CreateBlobURL(extension_frame, "foo")); |
829 EXPECT_EQ(extension_origin, url::Origin(blob_url)); | 812 EXPECT_EQ(extension_origin, url::Origin(blob_url)); |
830 GURL filesystem_url(CreateFileSystemURL(extension_frame, "foo")); | 813 GURL filesystem_url(CreateFileSystemURL(extension_frame, "foo")); |
831 EXPECT_EQ(extension_origin, url::Origin(filesystem_url)); | 814 EXPECT_EQ(extension_origin, url::Origin(filesystem_url)); |
832 | 815 |
833 // Navigate the popup to each nested URL with extension origin. | 816 // Navigate the popup to each nested URL with extension origin. |
834 GURL nested_urls[] = {blob_url, filesystem_url}; | 817 GURL nested_urls[] = {blob_url, filesystem_url}; |
835 for (size_t i = 0; i < arraysize(nested_urls); i++) { | 818 for (size_t i = 0; i < arraysize(nested_urls); i++) { |
836 content::TestNavigationObserver observer(popup); | 819 content::TestNavigationObserver observer(popup); |
837 EXPECT_TRUE(ExecuteScript( | 820 EXPECT_TRUE(ExecuteScript( |
838 popup, "location.href = '" + nested_urls[i].spec() + "';")); | 821 popup, "location.href = '" + nested_urls[i].spec() + "';")); |
839 observer.Wait(); | 822 observer.Wait(); |
840 | 823 |
841 // This is a top-level navigation that should be blocked since it | 824 // This is a top-level navigation that should be blocked since it |
842 // originates from a non-extension process. Ensure that the error page | 825 // originates from a non-extension process. Ensure that the error page |
843 // doesn't commit an extension URL or origin. | 826 // doesn't commit an extension URL or origin. |
844 EXPECT_NE(nested_urls[i], popup->GetLastCommittedURL()); | 827 EXPECT_NE(nested_urls[i], popup->GetLastCommittedURL()); |
845 EXPECT_FALSE(extension_origin.IsSameOriginWith( | 828 EXPECT_FALSE(extension_origin.IsSameOriginWith( |
846 popup->GetMainFrame()->GetLastCommittedOrigin())); | 829 popup->GetMainFrame()->GetLastCommittedOrigin())); |
847 EXPECT_NE("foo", GetTextContent(popup->GetMainFrame())); | 830 EXPECT_NE("foo", GetTextContent(popup->GetMainFrame())); |
848 | 831 |
849 EXPECT_EQ(IfExtensionsIsolated(1, 0), | 832 EXPECT_EQ(1u, pm->GetRenderFrameHostsForExtension(extension->id()).size()); |
850 pm->GetRenderFrameHostsForExtension(extension->id()).size()); | 833 EXPECT_EQ(1u, pm->GetAllFrames().size()); |
851 EXPECT_EQ(IfExtensionsIsolated(1, 0), pm->GetAllFrames().size()); | |
852 } | 834 } |
853 | 835 |
854 // Navigate second subframe to each nested URL from the main frame (i.e., | 836 // Navigate second subframe to each nested URL from the main frame (i.e., |
855 // from non-extension process). This should be blocked in | 837 // from non-extension process). This should be blocked. |
856 // --isolate-extensions, but allowed without --isolate-extensions due to | |
857 // unblessed extension frames. | |
858 // | 838 // |
859 // TODO(alexmos): This is also temporarily allowed under PlzNavigate, because | 839 // TODO(alexmos): This is also temporarily allowed under PlzNavigate, because |
860 // currently this particular blocking happens in | 840 // currently this particular blocking happens in |
861 // ChromeContentBrowserClientExtensionsPart::ShouldAllowOpenURL, which isn't | 841 // ChromeContentBrowserClientExtensionsPart::ShouldAllowOpenURL, which isn't |
862 // triggered below under PlzNavigate (since there'll be no transfer). Once | 842 // triggered below under PlzNavigate (since there'll be no transfer). Once |
863 // the blob/filesystem URL checks in ExtensionNavigationThrottle are updated | 843 // the blob/filesystem URL checks in ExtensionNavigationThrottle are updated |
864 // to apply to all frames and not just main frames, the PlzNavigate exception | 844 // to apply to all frames and not just main frames, the PlzNavigate exception |
865 // below can be removed. See https://crbug.com/661324. | 845 // below can be removed. See https://crbug.com/661324. |
866 for (size_t i = 0; i < arraysize(nested_urls); i++) { | 846 for (size_t i = 0; i < arraysize(nested_urls); i++) { |
867 EXPECT_TRUE(content::NavigateIframeToURL(tab, "frame2", nested_urls[i])); | 847 EXPECT_TRUE(content::NavigateIframeToURL(tab, "frame2", nested_urls[i])); |
868 content::RenderFrameHost* second_frame = ChildFrameAt(main_frame, 1); | 848 content::RenderFrameHost* second_frame = ChildFrameAt(main_frame, 1); |
869 if (IsIsolateExtensionsEnabled() && | 849 if (!content::IsBrowserSideNavigationEnabled()) { |
870 !content::IsBrowserSideNavigationEnabled()) { | |
871 EXPECT_NE(nested_urls[i], second_frame->GetLastCommittedURL()); | 850 EXPECT_NE(nested_urls[i], second_frame->GetLastCommittedURL()); |
872 EXPECT_FALSE(extension_origin.IsSameOriginWith( | 851 EXPECT_FALSE(extension_origin.IsSameOriginWith( |
873 second_frame->GetLastCommittedOrigin())); | 852 second_frame->GetLastCommittedOrigin())); |
874 EXPECT_NE("foo", GetTextContent(second_frame)); | 853 EXPECT_NE("foo", GetTextContent(second_frame)); |
875 EXPECT_EQ(IfExtensionsIsolated(1, 0), | 854 EXPECT_EQ(1u, |
876 pm->GetRenderFrameHostsForExtension(extension->id()).size()); | 855 pm->GetRenderFrameHostsForExtension(extension->id()).size()); |
877 EXPECT_EQ(IfExtensionsIsolated(1, 0), pm->GetAllFrames().size()); | 856 EXPECT_EQ(1u, pm->GetAllFrames().size()); |
878 } else { | 857 } else { |
879 EXPECT_EQ(nested_urls[i], second_frame->GetLastCommittedURL()); | 858 EXPECT_EQ(nested_urls[i], second_frame->GetLastCommittedURL()); |
880 EXPECT_EQ(extension_origin, second_frame->GetLastCommittedOrigin()); | 859 EXPECT_EQ(extension_origin, second_frame->GetLastCommittedOrigin()); |
881 EXPECT_EQ("foo", GetTextContent(second_frame)); | 860 EXPECT_EQ("foo", GetTextContent(second_frame)); |
882 EXPECT_EQ(IfExtensionsIsolated(2, 0), | 861 EXPECT_EQ(2u, |
883 pm->GetRenderFrameHostsForExtension(extension->id()).size()); | 862 pm->GetRenderFrameHostsForExtension(extension->id()).size()); |
884 EXPECT_EQ(IfExtensionsIsolated(2, 0), pm->GetAllFrames().size()); | 863 EXPECT_EQ(2u, pm->GetAllFrames().size()); |
885 } | 864 } |
886 EXPECT_TRUE( | 865 EXPECT_TRUE( |
887 content::NavigateIframeToURL(tab, "frame2", GURL(url::kAboutBlankURL))); | 866 content::NavigateIframeToURL(tab, "frame2", GURL(url::kAboutBlankURL))); |
888 } | 867 } |
889 } | 868 } |
890 | 869 |
891 // Test that navigations to blob: and filesystem: URLs with extension origins | 870 // Test that navigations to blob: and filesystem: URLs with extension origins |
892 // are allowed when initiated from extension processes. See | 871 // are allowed when initiated from extension processes. See |
893 // https://crbug.com/645028 and https://crbug.com/644426. | 872 // https://crbug.com/645028 and https://crbug.com/644426. |
894 IN_PROC_BROWSER_TEST_F(ProcessManagerBrowserTest, | 873 IN_PROC_BROWSER_TEST_F(ProcessManagerBrowserTest, |
(...skipping 270 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1165 | 1144 |
1166 // Verify that postMessage to window.opener works. | 1145 // Verify that postMessage to window.opener works. |
1167 VerifyPostMessageToOpener(popup->GetMainFrame(), main_frame); | 1146 VerifyPostMessageToOpener(popup->GetMainFrame(), main_frame); |
1168 } | 1147 } |
1169 | 1148 |
1170 // Verify that a web popup created via window.open from an extension subframe | 1149 // Verify that a web popup created via window.open from an extension subframe |
1171 // can communicate with the extension page via window.opener. Similar to the | 1150 // can communicate with the extension page via window.opener. Similar to the |
1172 // test above, but for subframes. See https://crbug.com/590068. | 1151 // test above, but for subframes. See https://crbug.com/590068. |
1173 IN_PROC_BROWSER_TEST_F(ProcessManagerBrowserTest, | 1152 IN_PROC_BROWSER_TEST_F(ProcessManagerBrowserTest, |
1174 WebPopupFromExtensionSubframeHasValidOpener) { | 1153 WebPopupFromExtensionSubframeHasValidOpener) { |
1175 // This test only makes sense if OOPIFs are enabled for extension subframes. | |
1176 if (!IsIsolateExtensionsEnabled()) | |
1177 return; | |
1178 | |
1179 // Create a simple extension without a background page. | 1154 // Create a simple extension without a background page. |
1180 const Extension* extension = CreateExtension("Extension", false); | 1155 const Extension* extension = CreateExtension("Extension", false); |
1181 embedded_test_server()->ServeFilesFromDirectory(extension->path()); | 1156 embedded_test_server()->ServeFilesFromDirectory(extension->path()); |
1182 ASSERT_TRUE(embedded_test_server()->Start()); | 1157 ASSERT_TRUE(embedded_test_server()->Start()); |
1183 | 1158 |
1184 // Navigate main tab to a web page with a blank iframe. There should be no | 1159 // Navigate main tab to a web page with a blank iframe. There should be no |
1185 // extension frames yet. | 1160 // extension frames yet. |
1186 NavigateToURL(embedded_test_server()->GetURL("/blank_iframe.html")); | 1161 NavigateToURL(embedded_test_server()->GetURL("/blank_iframe.html")); |
1187 ProcessManager* pm = ProcessManager::Get(profile()); | 1162 ProcessManager* pm = ProcessManager::Get(profile()); |
1188 EXPECT_EQ(0u, pm->GetAllFrames().size()); | 1163 EXPECT_EQ(0u, pm->GetAllFrames().size()); |
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1265 GURL b_url(embedded_test_server()->GetURL("b.com", "/empty.html")); | 1240 GURL b_url(embedded_test_server()->GetURL("b.com", "/empty.html")); |
1266 EXPECT_TRUE(content::NavigateIframeToURL(tab, "frame0", b_url)); | 1241 EXPECT_TRUE(content::NavigateIframeToURL(tab, "frame0", b_url)); |
1267 { | 1242 { |
1268 content::RenderFrameHost* subframe = ChildFrameAt(main_frame, 0); | 1243 content::RenderFrameHost* subframe = ChildFrameAt(main_frame, 0); |
1269 EXPECT_EQ(subframe->GetProcess(), main_frame->GetProcess()); | 1244 EXPECT_EQ(subframe->GetProcess(), main_frame->GetProcess()); |
1270 EXPECT_EQ(subframe->GetSiteInstance(), main_frame->GetSiteInstance()); | 1245 EXPECT_EQ(subframe->GetSiteInstance(), main_frame->GetSiteInstance()); |
1271 } | 1246 } |
1272 } | 1247 } |
1273 | 1248 |
1274 } // namespace extensions | 1249 } // namespace extensions |
OLD | NEW |