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

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

Issue 1407853005: OOPIF: Add frame_unique_name to FrameNavigationEntry. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Update comments Created 5 years, 1 month 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 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 "base/bind.h" 5 #include "base/bind.h"
6 #include "base/strings/stringprintf.h" 6 #include "base/strings/stringprintf.h"
7 #include "base/strings/utf_string_conversions.h" 7 #include "base/strings/utf_string_conversions.h"
8 #include "content/browser/frame_host/frame_navigation_entry.h" 8 #include "content/browser/frame_host/frame_navigation_entry.h"
9 #include "content/browser/frame_host/frame_tree.h" 9 #include "content/browser/frame_host/frame_tree.h"
10 #include "content/browser/frame_host/navigation_controller_impl.h" 10 #include "content/browser/frame_host/navigation_controller_impl.h"
(...skipping 1886 matching lines...) Expand 10 before | Expand all | Expand 10 after
1897 if (SiteIsolationPolicy::UseSubframeNavigationEntries()) { 1897 if (SiteIsolationPolicy::UseSubframeNavigationEntries()) {
1898 // The entry should have a new FrameNavigationEntries for the subframe. 1898 // The entry should have a new FrameNavigationEntries for the subframe.
1899 ASSERT_EQ(1U, entry3->root_node()->children.size()); 1899 ASSERT_EQ(1U, entry3->root_node()->children.size());
1900 EXPECT_EQ(frame_url3, entry3->root_node()->children[0]->frame_entry->url()); 1900 EXPECT_EQ(frame_url3, entry3->root_node()->children[0]->frame_entry->url());
1901 } else { 1901 } else {
1902 // There are no subframe FrameNavigationEntries by default. 1902 // There are no subframe FrameNavigationEntries by default.
1903 EXPECT_EQ(0U, entry3->root_node()->children.size()); 1903 EXPECT_EQ(0U, entry3->root_node()->children.size());
1904 } 1904 }
1905 } 1905 }
1906 1906
1907 // Verifies that the target is correctly set to the unique name of the frame.
1908 IN_PROC_BROWSER_TEST_F(NavigationControllerBrowserTest,
1909 FrameNavigationEntry_Target) {
1910 const NavigationControllerImpl& controller =
1911 static_cast<const NavigationControllerImpl&>(
1912 shell()->web_contents()->GetController());
1913
1914 // 1. Navigate the main frame.
1915 GURL url(embedded_test_server()->GetURL(
1916 "/navigation_controller/page_with_links.html"));
1917 NavigateToURL(shell(), url);
1918 FrameTreeNode* root = static_cast<WebContentsImpl*>(shell()->web_contents())
1919 ->GetFrameTree()
1920 ->root();
1921 SiteInstance* main_site_instance =
1922 root->current_frame_host()->GetSiteInstance();
1923
1924 // The main frame defaults to an empty target.
1925 FrameNavigationEntry* frame_entry =
1926 controller.GetLastCommittedEntry()->GetFrameEntry(root);
1927 EXPECT_EQ("", frame_entry->target());
1928
1929 // Test subframe targets only if enabled, e.g. in --site-per-process.
1930 if (!SiteIsolationPolicy::UseSubframeNavigationEntries())
1931 return;
1932
1933 // 2. Add an unnamed subframe, which does an AUTO_SUBFRAME navigation.
1934 {
1935 LoadCommittedCapturer capturer(shell()->web_contents());
1936 std::string script = "var iframe = document.createElement('iframe');"
1937 "iframe.src = '" + url.spec() + "';"
1938 "document.body.appendChild(iframe);";
1939 EXPECT_TRUE(content::ExecuteScript(root->current_frame_host(), script));
1940 capturer.Wait();
1941 EXPECT_EQ(ui::PAGE_TRANSITION_AUTO_SUBFRAME, capturer.transition_type());
1942 }
1943
1944 // The root FrameNavigationEntry hasn't changed.
1945 EXPECT_EQ(frame_entry,
1946 controller.GetLastCommittedEntry()->GetFrameEntry(root));
1947
1948 // The subframe should have a generated name for the target.
1949 FrameTreeNode* subframe = root->child_at(0);
1950 EXPECT_EQ(main_site_instance,
1951 subframe->current_frame_host()->GetSiteInstance());
1952 FrameNavigationEntry* subframe_entry =
1953 controller.GetLastCommittedEntry()->GetFrameEntry(subframe);
1954 std::string unnamed_subframe_target = "<!--framePath //<!--frame0-->-->";
1955 EXPECT_EQ(unnamed_subframe_target, subframe_entry->target());
1956
1957 // 3. Add a named subframe.
1958 {
1959 LoadCommittedCapturer capturer(shell()->web_contents());
1960 std::string script = "var iframe = document.createElement('iframe');"
1961 "iframe.src = '" + url.spec() + "';"
1962 "iframe.name = 'foo';"
1963 "document.body.appendChild(iframe);";
1964 EXPECT_TRUE(content::ExecuteScript(root->current_frame_host(), script));
1965 capturer.Wait();
1966 EXPECT_EQ(ui::PAGE_TRANSITION_AUTO_SUBFRAME, capturer.transition_type());
1967 }
1968
1969 // The new subframe should have the specified name for the target.
1970 EXPECT_EQ(frame_entry,
1971 controller.GetLastCommittedEntry()->GetFrameEntry(root));
1972 FrameTreeNode* foo_subframe = root->child_at(1);
1973 EXPECT_EQ(main_site_instance,
1974 foo_subframe->current_frame_host()->GetSiteInstance());
1975 FrameNavigationEntry* foo_subframe_entry =
1976 controller.GetLastCommittedEntry()->GetFrameEntry(foo_subframe);
1977 std::string named_subframe_target = "foo";
1978 EXPECT_EQ(named_subframe_target, foo_subframe_entry->target());
1979
1980 // 4. Navigating in the subframes cross-process shouldn't change their names.
1981 // TODO(creis): Fix the unnamed case in https://crbug.com/502317.
Charlie Reis 2015/11/09 18:17:05 I'm working on the fix here: https://codereview.ch
1982 GURL bar_url(embedded_test_server()->GetURL(
1983 "bar.com", "/navigation_controller/simple_page_1.html"));
1984 NavigateFrameToURL(foo_subframe, bar_url);
1985 EXPECT_TRUE(WaitForLoadStop(shell()->web_contents()));
1986 EXPECT_NE(main_site_instance,
1987 foo_subframe->current_frame_host()->GetSiteInstance());
1988 foo_subframe_entry =
1989 controller.GetLastCommittedEntry()->GetFrameEntry(foo_subframe);
1990 EXPECT_EQ(named_subframe_target, foo_subframe_entry->target());
1991 }
1992
1907 // Verifies that item sequence numbers and document sequence numbers update 1993 // Verifies that item sequence numbers and document sequence numbers update
1908 // properly for main frames and subframes. 1994 // properly for main frames and subframes.
1909 IN_PROC_BROWSER_TEST_F(NavigationControllerBrowserTest, 1995 IN_PROC_BROWSER_TEST_F(NavigationControllerBrowserTest,
1910 FrameNavigationEntry_SequenceNumbers) { 1996 FrameNavigationEntry_SequenceNumbers) {
1911 const NavigationControllerImpl& controller = 1997 const NavigationControllerImpl& controller =
1912 static_cast<const NavigationControllerImpl&>( 1998 static_cast<const NavigationControllerImpl&>(
1913 shell()->web_contents()->GetController()); 1999 shell()->web_contents()->GetController());
1914 2000
1915 // 1. Navigate the main frame. 2001 // 1. Navigate the main frame.
1916 GURL url(embedded_test_server()->GetURL( 2002 GURL url(embedded_test_server()->GetURL(
(...skipping 22 matching lines...) Expand all
1939 EXPECT_NE(isn_1, isn_2); 2025 EXPECT_NE(isn_1, isn_2);
1940 EXPECT_EQ(dsn_1, dsn_2); 2026 EXPECT_EQ(dsn_1, dsn_2);
1941 2027
1942 // Test subframe sequence numbers only if enabled, e.g. in --site-per-process. 2028 // Test subframe sequence numbers only if enabled, e.g. in --site-per-process.
1943 if (!SiteIsolationPolicy::UseSubframeNavigationEntries()) 2029 if (!SiteIsolationPolicy::UseSubframeNavigationEntries())
1944 return; 2030 return;
1945 2031
1946 // 3. Add a subframe, which does an AUTO_SUBFRAME navigation. 2032 // 3. Add a subframe, which does an AUTO_SUBFRAME navigation.
1947 { 2033 {
1948 LoadCommittedCapturer capturer(shell()->web_contents()); 2034 LoadCommittedCapturer capturer(shell()->web_contents());
1949 std::string script = "var iframe = document.createElement('iframe');" 2035 std::string add_script = "var iframe = document.createElement('iframe');"
1950 "iframe.src = '" + url.spec() + "';" 2036 "iframe.src = '" + url.spec() + "';"
1951 "document.body.appendChild(iframe);"; 2037 "document.body.appendChild(iframe);";
1952 EXPECT_TRUE(content::ExecuteScript(root->current_frame_host(), script)); 2038 EXPECT_TRUE(content::ExecuteScript(root->current_frame_host(), add_script));
1953 capturer.Wait(); 2039 capturer.Wait();
1954 EXPECT_EQ(ui::PAGE_TRANSITION_AUTO_SUBFRAME, capturer.transition_type()); 2040 EXPECT_EQ(ui::PAGE_TRANSITION_AUTO_SUBFRAME, capturer.transition_type());
1955 } 2041 }
1956 2042
1957 // The root FrameNavigationEntry hasn't changed. 2043 // The root FrameNavigationEntry hasn't changed.
1958 EXPECT_EQ(frame_entry, 2044 EXPECT_EQ(frame_entry,
1959 controller.GetLastCommittedEntry()->GetFrameEntry(root)); 2045 controller.GetLastCommittedEntry()->GetFrameEntry(root));
1960 2046
1961 // We should have a unique ISN and DSN for the subframe entry. 2047 // We should have a unique ISN and DSN for the subframe entry.
1962 FrameTreeNode* subframe = root->child_at(0); 2048 FrameTreeNode* subframe = root->child_at(0);
(...skipping 418 matching lines...) Expand 10 before | Expand all | Expand 10 after
2381 EXPECT_EQ(original_url, capturer.all_params()[1].url); 2467 EXPECT_EQ(original_url, capturer.all_params()[1].url);
2382 EXPECT_EQ(original_url, shell()->web_contents()->GetLastCommittedURL()); 2468 EXPECT_EQ(original_url, shell()->web_contents()->GetLastCommittedURL());
2383 } 2469 }
2384 2470
2385 // Make sure the renderer is still alive. 2471 // Make sure the renderer is still alive.
2386 EXPECT_TRUE( 2472 EXPECT_TRUE(
2387 ExecuteScript(shell()->web_contents(), "console.log('Success');")); 2473 ExecuteScript(shell()->web_contents(), "console.log('Success');"));
2388 } 2474 }
2389 2475
2390 } // namespace content 2476 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698