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

Side by Side Diff: chrome/browser/extensions/process_manager_browsertest.cc

Issue 2850793005: Remove command line/field trial support and configs for Isolate Extensions. (Closed)
Patch Set: Remove more cases of "isolate.*extension" Created 3 years, 7 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
OLDNEW
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
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
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
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698