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

Side by Side Diff: content/browser/frame_host/render_frame_host_manager_browsertest.cc

Issue 1224363002: OOPIF: Fix window.open to work from frames with remote parent. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Move OpenPopup to content_browser_test_utils_internal.cc, add back two is_active_ checks. Created 5 years, 5 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 <set> 5 #include <set>
6 6
7 #include "base/command_line.h" 7 #include "base/command_line.h"
8 #include "base/json/json_reader.h" 8 #include "base/json/json_reader.h"
9 #include "base/location.h" 9 #include "base/location.h"
10 #include "base/memory/ref_counted.h" 10 #include "base/memory/ref_counted.h"
(...skipping 19 matching lines...) Expand all
30 #include "content/public/common/file_chooser_file_info.h" 30 #include "content/public/common/file_chooser_file_info.h"
31 #include "content/public/common/file_chooser_params.h" 31 #include "content/public/common/file_chooser_params.h"
32 #include "content/public/common/page_state.h" 32 #include "content/public/common/page_state.h"
33 #include "content/public/common/url_constants.h" 33 #include "content/public/common/url_constants.h"
34 #include "content/public/test/browser_test_utils.h" 34 #include "content/public/test/browser_test_utils.h"
35 #include "content/public/test/content_browser_test.h" 35 #include "content/public/test/content_browser_test.h"
36 #include "content/public/test/content_browser_test_utils.h" 36 #include "content/public/test/content_browser_test_utils.h"
37 #include "content/public/test/test_navigation_observer.h" 37 #include "content/public/test/test_navigation_observer.h"
38 #include "content/public/test/test_utils.h" 38 #include "content/public/test/test_utils.h"
39 #include "content/shell/browser/shell.h" 39 #include "content/shell/browser/shell.h"
40 #include "content/test/content_browser_test_utils_internal.h"
40 #include "net/base/net_util.h" 41 #include "net/base/net_util.h"
41 #include "net/dns/mock_host_resolver.h" 42 #include "net/dns/mock_host_resolver.h"
42 #include "net/test/embedded_test_server/embedded_test_server.h" 43 #include "net/test/embedded_test_server/embedded_test_server.h"
43 #include "net/test/spawned_test_server/spawned_test_server.h" 44 #include "net/test/spawned_test_server/spawned_test_server.h"
44 45
45 using base::ASCIIToUTF16; 46 using base::ASCIIToUTF16;
46 47
47 namespace content { 48 namespace content {
48 49
49 namespace { 50 namespace {
50 51
51 const char kOpenUrlViaClickTargetFunc[] = 52 const char kOpenUrlViaClickTargetFunc[] =
52 "(function(url) {\n" 53 "(function(url) {\n"
53 " var lnk = document.createElement(\"a\");\n" 54 " var lnk = document.createElement(\"a\");\n"
54 " lnk.href = url;\n" 55 " lnk.href = url;\n"
55 " lnk.target = \"_blank\";\n" 56 " lnk.target = \"_blank\";\n"
56 " document.body.appendChild(lnk);\n" 57 " document.body.appendChild(lnk);\n"
57 " lnk.click();\n" 58 " lnk.click();\n"
58 "})"; 59 "})";
59 60
60 // Adds a link with given url and target=_blank, and clicks on it. 61 // Adds a link with given url and target=_blank, and clicks on it.
61 void OpenUrlViaClickTarget(const internal::ToRenderFrameHost& adapter, 62 void OpenUrlViaClickTarget(const internal::ToRenderFrameHost& adapter,
62 const GURL& url) { 63 const GURL& url) {
63 EXPECT_TRUE(ExecuteScript(adapter, 64 EXPECT_TRUE(ExecuteScript(adapter,
64 std::string(kOpenUrlViaClickTargetFunc) + "(\"" + url.spec() + "\");")); 65 std::string(kOpenUrlViaClickTargetFunc) + "(\"" + url.spec() + "\");"));
65 } 66 }
66 67
67 Shell* OpenPopup(const internal::ToRenderFrameHost& opener,
68 const std::string& name) {
69 ShellAddedObserver new_shell_observer;
70 bool success = false;
71 EXPECT_TRUE(ExecuteScriptAndExtractBool(
72 opener,
73 "window.domAutomationController.send(!!window.open('', '" + name + "'));",
74 &success));
75 EXPECT_TRUE(success);
76 Shell* new_shell = new_shell_observer.GetShell();
77 return new_shell;
78 }
79
80 } // anonymous namespace 68 } // anonymous namespace
81 69
82 class RenderFrameHostManagerTest : public ContentBrowserTest { 70 class RenderFrameHostManagerTest : public ContentBrowserTest {
83 public: 71 public:
84 RenderFrameHostManagerTest() : foo_com_("foo.com") { 72 RenderFrameHostManagerTest() : foo_com_("foo.com") {
85 replace_host_.SetHostStr(foo_com_); 73 replace_host_.SetHostStr(foo_com_);
86 } 74 }
87 75
88 static bool GetFilePathWithHostAndPortReplacement( 76 static bool GetFilePathWithHostAndPortReplacement(
89 const std::string& original_file_path, 77 const std::string& original_file_path,
(...skipping 481 matching lines...) Expand 10 before | Expand all | Expand 10 after
571 559
572 GURL main_url(embedded_test_server()->GetURL("/title1.html")); 560 GURL main_url(embedded_test_server()->GetURL("/title1.html"));
573 EXPECT_TRUE(NavigateToURL(shell(), main_url)); 561 EXPECT_TRUE(NavigateToURL(shell(), main_url));
574 562
575 // Get the original SiteInstance for later comparison. 563 // Get the original SiteInstance for later comparison.
576 scoped_refptr<SiteInstance> orig_site_instance( 564 scoped_refptr<SiteInstance> orig_site_instance(
577 shell()->web_contents()->GetSiteInstance()); 565 shell()->web_contents()->GetSiteInstance());
578 EXPECT_TRUE(orig_site_instance.get() != NULL); 566 EXPECT_TRUE(orig_site_instance.get() != NULL);
579 567
580 // Open a popup using window.open with a 'foo' window.name. 568 // Open a popup using window.open with a 'foo' window.name.
581 Shell* new_shell = OpenPopup(shell()->web_contents(), "foo"); 569 Shell* new_shell =
570 OpenPopup(shell()->web_contents(), GURL("about:blank"), "foo");
Charlie Reis 2015/07/11 00:12:08 url::kAboutBlankURL (here and below)
571 EXPECT_TRUE(new_shell);
582 572
583 // The window.name for the new popup should be "foo". 573 // The window.name for the new popup should be "foo".
584 std::string name; 574 std::string name;
585 EXPECT_TRUE(ExecuteScriptAndExtractString( 575 EXPECT_TRUE(ExecuteScriptAndExtractString(
586 new_shell->web_contents(), 576 new_shell->web_contents(),
587 "window.domAutomationController.send(window.name);", &name)); 577 "window.domAutomationController.send(window.name);", &name));
588 EXPECT_EQ("foo", name); 578 EXPECT_EQ("foo", name);
589 579
590 // Now navigate the new tab to a different site. 580 // Now navigate the new tab to a different site.
591 GURL foo_url(embedded_test_server()->GetURL("foo.com", "/title2.html")); 581 GURL foo_url(embedded_test_server()->GetURL("foo.com", "/title2.html"));
592 EXPECT_TRUE(NavigateToURL(new_shell, foo_url)); 582 EXPECT_TRUE(NavigateToURL(new_shell, foo_url));
593 scoped_refptr<SiteInstance> new_site_instance( 583 scoped_refptr<SiteInstance> new_site_instance(
594 new_shell->web_contents()->GetSiteInstance()); 584 new_shell->web_contents()->GetSiteInstance());
595 EXPECT_NE(orig_site_instance, new_site_instance); 585 EXPECT_NE(orig_site_instance, new_site_instance);
596 586
597 // window.name should still be "foo". 587 // window.name should still be "foo".
598 name = ""; 588 name = "";
599 EXPECT_TRUE(ExecuteScriptAndExtractString( 589 EXPECT_TRUE(ExecuteScriptAndExtractString(
600 new_shell->web_contents(), 590 new_shell->web_contents(),
601 "window.domAutomationController.send(window.name);", &name)); 591 "window.domAutomationController.send(window.name);", &name));
602 EXPECT_EQ("foo", name); 592 EXPECT_EQ("foo", name);
603 593
604 // Open another popup from the 'foo' popup and navigate it cross-site. 594 // Open another popup from the 'foo' popup and navigate it cross-site.
605 Shell* new_shell2 = OpenPopup(new_shell->web_contents(), "bar"); 595 Shell* new_shell2 =
596 OpenPopup(new_shell->web_contents(), GURL("about:blank"), "bar");
597 EXPECT_TRUE(new_shell2);
606 GURL bar_url(embedded_test_server()->GetURL("bar.com", "/title3.html")); 598 GURL bar_url(embedded_test_server()->GetURL("bar.com", "/title3.html"));
607 EXPECT_TRUE(NavigateToURL(new_shell2, bar_url)); 599 EXPECT_TRUE(NavigateToURL(new_shell2, bar_url));
608 600
609 // Check that the new popup's window.opener has name "foo", which verifies 601 // Check that the new popup's window.opener has name "foo", which verifies
610 // that new swapped-out RenderViews also propagate window.name. This has to 602 // that new swapped-out RenderViews also propagate window.name. This has to
611 // be done via window.open, since window.name isn't readable cross-origin. 603 // be done via window.open, since window.name isn't readable cross-origin.
612 bool success = false; 604 bool success = false;
613 EXPECT_TRUE(ExecuteScriptAndExtractBool( 605 EXPECT_TRUE(ExecuteScriptAndExtractBool(
614 new_shell2->web_contents(), 606 new_shell2->web_contents(),
615 "window.domAutomationController.send(" 607 "window.domAutomationController.send("
(...skipping 1277 matching lines...) Expand 10 before | Expand all | Expand 10 after
1893 1885
1894 FrameTreeNode* root = static_cast<WebContentsImpl*>(shell()->web_contents()) 1886 FrameTreeNode* root = static_cast<WebContentsImpl*>(shell()->web_contents())
1895 ->GetFrameTree() 1887 ->GetFrameTree()
1896 ->root(); 1888 ->root();
1897 1889
1898 scoped_refptr<SiteInstance> orig_site_instance( 1890 scoped_refptr<SiteInstance> orig_site_instance(
1899 shell()->web_contents()->GetSiteInstance()); 1891 shell()->web_contents()->GetSiteInstance());
1900 EXPECT_TRUE(orig_site_instance); 1892 EXPECT_TRUE(orig_site_instance);
1901 1893
1902 // Open a popup and navigate it cross-site. 1894 // Open a popup and navigate it cross-site.
1903 Shell* new_shell = OpenPopup(shell()->web_contents(), "foo"); 1895 Shell* new_shell =
1896 OpenPopup(shell()->web_contents(), GURL("about:blank"), "foo");
1897 EXPECT_TRUE(new_shell);
1904 FrameTreeNode* popup_root = 1898 FrameTreeNode* popup_root =
1905 static_cast<WebContentsImpl*>(new_shell->web_contents()) 1899 static_cast<WebContentsImpl*>(new_shell->web_contents())
1906 ->GetFrameTree() 1900 ->GetFrameTree()
1907 ->root(); 1901 ->root();
1908 1902
1909 GURL cross_site_url = 1903 GURL cross_site_url =
1910 embedded_test_server()->GetURL("foo.com", "/title2.html"); 1904 embedded_test_server()->GetURL("foo.com", "/title2.html");
1911 EXPECT_TRUE(NavigateToURL(new_shell, cross_site_url)); 1905 EXPECT_TRUE(NavigateToURL(new_shell, cross_site_url));
1912 1906
1913 scoped_refptr<SiteInstance> foo_site_instance( 1907 scoped_refptr<SiteInstance> foo_site_instance(
(...skipping 24 matching lines...) Expand all
1938 EXPECT_FALSE(opener_rfph->is_render_frame_proxy_live()); 1932 EXPECT_FALSE(opener_rfph->is_render_frame_proxy_live());
1939 1933
1940 // Re-navigate the popup to the same URL and check that this recreates the 1934 // Re-navigate the popup to the same URL and check that this recreates the
1941 // opener's swapped out RVH and proxy in the foo.com SiteInstance. 1935 // opener's swapped out RVH and proxy in the foo.com SiteInstance.
1942 EXPECT_TRUE(NavigateToURL(new_shell, cross_site_url)); 1936 EXPECT_TRUE(NavigateToURL(new_shell, cross_site_url));
1943 EXPECT_TRUE(opener_rvh->IsRenderViewLive()); 1937 EXPECT_TRUE(opener_rvh->IsRenderViewLive());
1944 EXPECT_TRUE(opener_rfph->is_render_frame_proxy_live()); 1938 EXPECT_TRUE(opener_rfph->is_render_frame_proxy_live());
1945 } 1939 }
1946 1940
1947 } // namespace content 1941 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/frame_host/interstitial_page_impl.cc ('k') | content/browser/renderer_host/render_view_host_delegate.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698