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

Side by Side Diff: content/browser/site_per_process_browsertest.cc

Issue 1309043003: Handle frame openers in the same FrameTree when navigating subframes. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@opener-cycle-detection
Patch Set: Cleanup Created 5 years, 4 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 (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 <algorithm> 7 #include <algorithm>
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/command_line.h" 10 #include "base/command_line.h"
(...skipping 2976 matching lines...) Expand 10 before | Expand all | Expand 10 after
2987 2987
2988 success = false; 2988 success = false;
2989 EXPECT_TRUE(ExecuteScriptAndExtractBool( 2989 EXPECT_TRUE(ExecuteScriptAndExtractBool(
2990 popup_root->child_at(1)->current_frame_host(), 2990 popup_root->child_at(1)->current_frame_host(),
2991 "window.domAutomationController.send(" 2991 "window.domAutomationController.send("
2992 " window.opener === window.opener.parent.frames['frame1']);", 2992 " window.opener === window.opener.parent.frames['frame1']);",
2993 &success)); 2993 &success));
2994 EXPECT_TRUE(success); 2994 EXPECT_TRUE(success);
2995 } 2995 }
2996 2996
2997 // Check that when a subframe navigates to a new SiteInstance, the new
2998 // SiteInstance will get a proxy for the opener of subframe's parent. I.e.,
2999 // accessing parent.opener from the subframe should still work after a
3000 // cross-process navigation.
3001 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest,
3002 NavigatingSubframePreservesOpenerInParent) {
3003 GURL main_url =
3004 embedded_test_server()->GetURL("foo.com", "/post_message.html");
3005 EXPECT_TRUE(NavigateToURL(shell(), main_url));
3006
3007 FrameTreeNode* root = static_cast<WebContentsImpl*>(shell()->web_contents())
3008 ->GetFrameTree()
3009 ->root();
3010
3011 // Open a popup with a cross-site page that has a subframe.
3012 GURL popup_url(
3013 embedded_test_server()->GetURL("bar.com", "/frame_tree/2-4.html"));
Charlie Reis 2015/08/31 20:49:43 Anything specific about this page, or can we use t
alexmos 2015/09/01 22:12:28 Done - converted to use cross_site_iframe_factory.
3014 Shell* popup_shell = OpenPopup(shell()->web_contents(), popup_url, "popup");
3015 EXPECT_TRUE(popup_shell);
3016 FrameTreeNode* popup_root =
3017 static_cast<WebContentsImpl*>(popup_shell->web_contents())
3018 ->GetFrameTree()
3019 ->root();
3020 EXPECT_EQ(1U, popup_root->child_count());
3021
3022 // Check that the popup's opener is correct in the browser process.
3023 EXPECT_EQ(root, popup_root->opener());
3024
3025 // Navigate popup's subframe to another site.
3026 GURL frame_url(
3027 embedded_test_server()->GetURL("baz.com", "/post_message.html"));
3028 NavigateFrameToURL(popup_root->child_at(0), frame_url);
3029 EXPECT_TRUE(
3030 WaitForRenderFrameReady(popup_root->child_at(0)->current_frame_host()));
3031
3032 // Check that the new subframe process still sees correct opener for its
3033 // parent by sending a postMessage to subframe's parent.opener.
3034 bool success = false;
3035 EXPECT_TRUE(ExecuteScriptAndExtractBool(
3036 popup_root->child_at(0)->current_frame_host(),
3037 "window.domAutomationController.send(!!parent.opener);", &success));
3038 EXPECT_TRUE(success);
3039
3040 base::string16 expected_title = base::ASCIIToUTF16("msg");
3041 TitleWatcher title_watcher(shell()->web_contents(), expected_title);
3042 EXPECT_TRUE(ExecuteScriptAndExtractBool(
3043 popup_root->child_at(0)->current_frame_host(),
3044 "window.domAutomationController.send(postToOpenerOfParent('msg','*'));",
3045 &success));
3046 EXPECT_TRUE(success);
3047 EXPECT_EQ(expected_title, title_watcher.WaitAndGetTitle());
3048 }
3049
2997 } // namespace content 3050 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698