| Index: content/browser/site_per_process_browsertest.cc
 | 
| diff --git a/content/browser/site_per_process_browsertest.cc b/content/browser/site_per_process_browsertest.cc
 | 
| index 006b70b8bf29cd0438ae69643e851a0c608d46f7..494b5c5040819cad8ee9df1c4df7eabb51fb383a 100644
 | 
| --- a/content/browser/site_per_process_browsertest.cc
 | 
| +++ b/content/browser/site_per_process_browsertest.cc
 | 
| @@ -8764,4 +8764,44 @@ IN_PROC_BROWSER_TEST_F(SitePerProcessFeaturePolicyBrowserTest,
 | 
|        "{\"vibrate\":[\"*\"]}",
 | 
|        root->child_at(0)->current_replication_state().feature_policy_header);
 | 
|  }
 | 
| +
 | 
| +// Ensure that an iframe that navigates cross-site doesn't use the same process
 | 
| +// as its parent. Then when its parent navigates it via the "srcdoc" attribute,
 | 
| +// it must reuse its parent's process.
 | 
| +IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest,
 | 
| +                       IframeSrcdocAfterCrossSiteNavigation) {
 | 
| +  GURL parent_url(embedded_test_server()->GetURL(
 | 
| +      "a.com", "/cross_site_iframe_factory.html?a(b)"));
 | 
| +  GURL child_url(embedded_test_server()->GetURL(
 | 
| +      "b.com", "/cross_site_iframe_factory.html?b()"));
 | 
| +  GURL blank_url(url::kAboutBlankURL);
 | 
| +
 | 
| +  // #1 Navigate to a page with a cross-site iframe.
 | 
| +  EXPECT_TRUE(NavigateToURL(shell(), parent_url));
 | 
| +
 | 
| +  // Ensure that the iframe uses its own process.
 | 
| +  FrameTreeNode* root = web_contents()->GetFrameTree()->root();
 | 
| +  ASSERT_EQ(1u, root->child_count());
 | 
| +  FrameTreeNode* child = root->child_at(0);
 | 
| +  EXPECT_EQ(parent_url, root->current_url());
 | 
| +  EXPECT_EQ(child_url, child->current_url());
 | 
| +  EXPECT_NE(root->current_frame_host()->GetSiteInstance(),
 | 
| +            child->current_frame_host()->GetSiteInstance());
 | 
| +  EXPECT_NE(root->current_frame_host()->GetProcess(),
 | 
| +            child->current_frame_host()->GetProcess());
 | 
| +
 | 
| +  // #2 Navigate the iframe to its srcdoc attribute.
 | 
| +  TestNavigationObserver load_observer(shell()->web_contents());
 | 
| +  EXPECT_TRUE(ExecuteScript(
 | 
| +      root, "document.getElementById('child-0').srcdoc = 'srcdoc content';"));
 | 
| +  load_observer.Wait();
 | 
| +
 | 
| +  // Ensure that the iframe reuses its parent's process.
 | 
| +  EXPECT_EQ(blank_url, child->current_url());
 | 
| +  EXPECT_EQ(root->current_frame_host()->GetSiteInstance(),
 | 
| +            child->current_frame_host()->GetSiteInstance());
 | 
| +  EXPECT_EQ(root->current_frame_host()->GetProcess(),
 | 
| +            child->current_frame_host()->GetProcess());
 | 
| +}
 | 
| +
 | 
|  }  // namespace content
 | 
| 
 |