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

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

Issue 743773003: OOPIF: Data URLs are now rendered in the renderer that initiated the navigation. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fixing android compile Created 6 years 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 "base/command_line.h" 7 #include "base/command_line.h"
8 #include "base/strings/stringprintf.h" 8 #include "base/strings/stringprintf.h"
9 #include "base/strings/utf_string_conversions.h"
9 #include "content/browser/frame_host/cross_process_frame_connector.h" 10 #include "content/browser/frame_host/cross_process_frame_connector.h"
10 #include "content/browser/frame_host/frame_tree.h" 11 #include "content/browser/frame_host/frame_tree.h"
11 #include "content/browser/frame_host/navigator.h" 12 #include "content/browser/frame_host/navigator.h"
12 #include "content/browser/frame_host/render_frame_proxy_host.h" 13 #include "content/browser/frame_host/render_frame_proxy_host.h"
13 #include "content/browser/frame_host/render_widget_host_view_child_frame.h" 14 #include "content/browser/frame_host/render_widget_host_view_child_frame.h"
14 #include "content/browser/renderer_host/render_view_host_impl.h" 15 #include "content/browser/renderer_host/render_view_host_impl.h"
15 #include "content/browser/web_contents/web_contents_impl.h" 16 #include "content/browser/web_contents/web_contents_impl.h"
16 #include "content/public/browser/notification_observer.h" 17 #include "content/public/browser/notification_observer.h"
17 #include "content/public/browser/notification_service.h" 18 #include "content/public/browser/notification_service.h"
18 #include "content/public/browser/notification_types.h" 19 #include "content/public/browser/notification_types.h"
(...skipping 205 matching lines...) Expand 10 before | Expand all | Expand 10 after
224 // for commit. 225 // for commit.
225 std::string script = base::StringPrintf( 226 std::string script = base::StringPrintf(
226 "setTimeout(\"" 227 "setTimeout(\""
227 "var iframes = document.getElementById('%s');iframes.src='%s';" 228 "var iframes = document.getElementById('%s');iframes.src='%s';"
228 "\",0)", 229 "\",0)",
229 iframe_id.c_str(), url.spec().c_str()); 230 iframe_id.c_str(), url.spec().c_str());
230 WindowedNotificationObserver load_observer( 231 WindowedNotificationObserver load_observer(
231 NOTIFICATION_NAV_ENTRY_COMMITTED, 232 NOTIFICATION_NAV_ENTRY_COMMITTED,
232 Source<NavigationController>( 233 Source<NavigationController>(
233 &window->web_contents()->GetController())); 234 &window->web_contents()->GetController()));
234 bool result = ExecuteScript(window->web_contents(), script); 235 if (!ExecuteScript(window->web_contents(), script))
236 return false;
235 load_observer.Wait(); 237 load_observer.Wait();
236 return result; 238
239 return true;
237 } 240 }
238 241
239 void SitePerProcessBrowserTest::SetUpCommandLine(CommandLine* command_line) { 242 void SitePerProcessBrowserTest::SetUpCommandLine(CommandLine* command_line) {
240 command_line->AppendSwitch(switches::kSitePerProcess); 243 command_line->AppendSwitch(switches::kSitePerProcess);
241 }; 244 };
242 245
243 void SitePerProcessBrowserTest::SetUpOnMainThread() { 246 void SitePerProcessBrowserTest::SetUpOnMainThread() {
244 host_resolver()->AddRule("*", "127.0.0.1"); 247 host_resolver()->AddRule("*", "127.0.0.1");
245 ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady()); 248 ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady());
246 SetupCrossSiteRedirector(embedded_test_server()); 249 SetupCrossSiteRedirector(embedded_test_server());
(...skipping 614 matching lines...) Expand 10 before | Expand all | Expand 10 after
861 "window.domAutomationController.send(location.ancestorOrigins[0]);", 864 "window.domAutomationController.send(location.ancestorOrigins[0]);",
862 &result)); 865 &result));
863 EXPECT_EQ(result + "/", foo_url.GetOrigin().spec()); 866 EXPECT_EQ(result + "/", foo_url.GetOrigin().spec());
864 EXPECT_TRUE(ExecuteScriptAndExtractString( 867 EXPECT_TRUE(ExecuteScriptAndExtractString(
865 bottom_child->current_frame_host(), 868 bottom_child->current_frame_host(),
866 "window.domAutomationController.send(location.ancestorOrigins[1]);", 869 "window.domAutomationController.send(location.ancestorOrigins[1]);",
867 &result)); 870 &result));
868 EXPECT_EQ(result + "/", main_url.GetOrigin().spec()); 871 EXPECT_EQ(result + "/", main_url.GetOrigin().spec());
869 } 872 }
870 873
874 // TODO(lfg): Merge the test below with NavigateRemoteFrame test.
875 // TODO(lfg): Disabled because this triggers http://crbug.com/433012, and since
876 // the renderer process crashes, it causes the title watcher to never return.
877 // Alternatively, this could also be fixed if we could use NavigateIframeToURL
878 // and classified the navigation as MANUAL_SUBFRAME (http://crbug.com/441863) or
879 // if we waited for DidStopLoading (currently broken -- see comment in
880 // NavigateIframeToURL).
881 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest,
882 DISABLED_NavigateRemoteToDataURL) {
883 GURL main_url(embedded_test_server()->GetURL("/site_per_process_main.html"));
884 NavigateToURL(shell(), main_url);
885
886 // It is safe to obtain the root frame tree node here, as it doesn't change.
887 FrameTreeNode* root = static_cast<WebContentsImpl*>(shell()->web_contents())
888 ->GetFrameTree()
889 ->root();
890
891 SitePerProcessWebContentsObserver observer(shell()->web_contents());
892
893 // Load cross-site page into iframe.
894 GURL url = embedded_test_server()->GetURL("foo.com", "/title1.html");
895 NavigateFrameToURL(root->child_at(0), url);
896 EXPECT_TRUE(observer.navigation_succeeded());
897 EXPECT_EQ(url, observer.navigation_url());
898
899 // Ensure that we have created a new process for the subframe.
900 EXPECT_NE(shell()->web_contents()->GetSiteInstance(),
901 root->child_at(0)->current_frame_host()->GetSiteInstance());
902
903 // Navigate iframe to a data URL. The navigation happens from a script in the
904 // parent frame, so the data URL should be committed in the same SiteInstance
905 // as the parent frame.
906 GURL data_url("data:text/html,dataurl");
907 std::string script = base::StringPrintf(
908 "setTimeout(function() {"
909 "var iframe = document.getElementById('test');"
910 "iframe.onload = function() { document.title = 'LOADED'; };"
911 "iframe.src=\"%s\";"
912 "},0);",
913 data_url.spec().c_str());
914 base::string16 passed_string(base::UTF8ToUTF16("LOADED"));
915 TitleWatcher title_watcher(shell()->web_contents(), passed_string);
916 EXPECT_TRUE(ExecuteScript(shell()->web_contents(), script));
917 EXPECT_EQ(title_watcher.WaitAndGetTitle(), passed_string);
918 EXPECT_TRUE(observer.navigation_succeeded());
919 EXPECT_EQ(data_url, observer.navigation_url());
920
921 // Ensure that we have navigated using the top level process.
922 EXPECT_EQ(shell()->web_contents()->GetSiteInstance(),
923 root->child_at(0)->current_frame_host()->GetSiteInstance());
924 }
925
926 // TODO(lfg): Merge the test below with NavigateRemoteFrame test.
927 // Disabled due to the same reason as NavigateRemoteToDataURL.
928 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest,
929 DISABLED_NavigateRemoteToBlankURL) {
930 GURL main_url(embedded_test_server()->GetURL("/site_per_process_main.html"));
931 NavigateToURL(shell(), main_url);
932
933 // It is safe to obtain the root frame tree node here, as it doesn't change.
934 FrameTreeNode* root = static_cast<WebContentsImpl*>(shell()->web_contents())
935 ->GetFrameTree()
936 ->root();
937
938 SitePerProcessWebContentsObserver observer(shell()->web_contents());
939
940 // Load cross-site page into iframe.
941 GURL url = embedded_test_server()->GetURL("foo.com", "/title1.html");
942 NavigateFrameToURL(root->child_at(0), url);
943 EXPECT_TRUE(observer.navigation_succeeded());
944 EXPECT_EQ(url, observer.navigation_url());
945
946 // Ensure that we have created a new process for the subframe.
947 EXPECT_NE(shell()->web_contents()->GetSiteInstance(),
948 root->child_at(0)->current_frame_host()->GetSiteInstance());
949
950 // Navigate iframe to about:blank. The navigation happens from a script in the
951 // parent frame, so it should be committed in the same SiteInstance as the
952 // parent frame.
953 GURL about_blank_url("about:blank");
954 std::string script = base::StringPrintf(
955 "setTimeout(function() {"
956 "var iframe = document.getElementById('test');"
957 "iframe.onload = function() { document.title = 'LOADED'; };"
958 "iframe.src=\"%s\";"
959 "},0);",
960 about_blank_url.spec().c_str());
961 base::string16 passed_string(base::UTF8ToUTF16("LOADED"));
962 TitleWatcher title_watcher(shell()->web_contents(), passed_string);
963 EXPECT_TRUE(ExecuteScript(shell()->web_contents(), script));
964 EXPECT_EQ(title_watcher.WaitAndGetTitle(), passed_string);
965 EXPECT_TRUE(observer.navigation_succeeded());
966 EXPECT_EQ(about_blank_url, observer.navigation_url());
967
968 // Ensure that we have navigated using the top level process.
969 EXPECT_EQ(shell()->web_contents()->GetSiteInstance(),
970 root->child_at(0)->current_frame_host()->GetSiteInstance());
971 }
972
871 } // namespace content 973 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/security_exploit_browsertest.cc ('k') | content/public/browser/navigation_controller.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698