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

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: const ref 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 |frame_unique_name| is set to the correct frame, so that we
1908 // can match subframe FrameNavigationEntries to newly created frames after
1909 // back/forward and restore.
1910 IN_PROC_BROWSER_TEST_F(NavigationControllerBrowserTest,
1911 FrameNavigationEntry_FrameUniqueName) {
1912 const NavigationControllerImpl& controller =
1913 static_cast<const NavigationControllerImpl&>(
1914 shell()->web_contents()->GetController());
1915
1916 // 1. Navigate the main frame.
1917 GURL url(embedded_test_server()->GetURL(
1918 "/navigation_controller/page_with_links.html"));
1919 NavigateToURL(shell(), url);
1920 FrameTreeNode* root = static_cast<WebContentsImpl*>(shell()->web_contents())
1921 ->GetFrameTree()
1922 ->root();
1923 SiteInstance* main_site_instance =
1924 root->current_frame_host()->GetSiteInstance();
1925
1926 // The main frame defaults to an empty name.
1927 FrameNavigationEntry* frame_entry =
1928 controller.GetLastCommittedEntry()->GetFrameEntry(root);
1929 EXPECT_EQ("", frame_entry->frame_unique_name());
1930
1931 // Test subframe unique names only if enabled, e.g. in --site-per-process.
1932 if (!SiteIsolationPolicy::UseSubframeNavigationEntries())
1933 return;
1934
1935 // 2. Add an unnamed subframe, which does an AUTO_SUBFRAME navigation.
1936 {
1937 LoadCommittedCapturer capturer(shell()->web_contents());
1938 std::string script = "var iframe = document.createElement('iframe');"
1939 "iframe.src = '" + url.spec() + "';"
1940 "document.body.appendChild(iframe);";
1941 EXPECT_TRUE(content::ExecuteScript(root->current_frame_host(), script));
1942 capturer.Wait();
1943 EXPECT_EQ(ui::PAGE_TRANSITION_AUTO_SUBFRAME, capturer.transition_type());
1944 }
1945
1946 // The root FrameNavigationEntry hasn't changed.
1947 EXPECT_EQ(frame_entry,
1948 controller.GetLastCommittedEntry()->GetFrameEntry(root));
1949
1950 // The subframe should have a generated name.
1951 FrameTreeNode* subframe = root->child_at(0);
1952 EXPECT_EQ(main_site_instance,
1953 subframe->current_frame_host()->GetSiteInstance());
1954 FrameNavigationEntry* subframe_entry =
1955 controller.GetLastCommittedEntry()->GetFrameEntry(subframe);
1956 std::string unnamed_subframe_name = "<!--framePath //<!--frame0-->-->";
1957 EXPECT_EQ(unnamed_subframe_name, subframe_entry->frame_unique_name());
1958
1959 // 3. Add a named subframe.
1960 {
1961 LoadCommittedCapturer capturer(shell()->web_contents());
1962 std::string script = "var iframe = document.createElement('iframe');"
1963 "iframe.src = '" + url.spec() + "';"
1964 "iframe.name = 'foo';"
1965 "document.body.appendChild(iframe);";
1966 EXPECT_TRUE(content::ExecuteScript(root->current_frame_host(), script));
1967 capturer.Wait();
1968 EXPECT_EQ(ui::PAGE_TRANSITION_AUTO_SUBFRAME, capturer.transition_type());
1969 }
1970
1971 // The new subframe should have the specified name.
1972 EXPECT_EQ(frame_entry,
1973 controller.GetLastCommittedEntry()->GetFrameEntry(root));
1974 FrameTreeNode* foo_subframe = root->child_at(1);
1975 EXPECT_EQ(main_site_instance,
1976 foo_subframe->current_frame_host()->GetSiteInstance());
1977 FrameNavigationEntry* foo_subframe_entry =
1978 controller.GetLastCommittedEntry()->GetFrameEntry(foo_subframe);
1979 std::string named_subframe_name = "foo";
1980 EXPECT_EQ(named_subframe_name, foo_subframe_entry->frame_unique_name());
1981
1982 // 4. Navigating in the subframes cross-process shouldn't change their names.
1983 // TODO(creis): Fix the unnamed case in https://crbug.com/502317.
1984 GURL bar_url(embedded_test_server()->GetURL(
1985 "bar.com", "/navigation_controller/simple_page_1.html"));
1986 NavigateFrameToURL(foo_subframe, bar_url);
1987 EXPECT_TRUE(WaitForLoadStop(shell()->web_contents()));
1988 EXPECT_NE(main_site_instance,
1989 foo_subframe->current_frame_host()->GetSiteInstance());
1990 foo_subframe_entry =
1991 controller.GetLastCommittedEntry()->GetFrameEntry(foo_subframe);
1992 EXPECT_EQ(named_subframe_name, foo_subframe_entry->frame_unique_name());
1993 }
1994
1907 // Verifies that item sequence numbers and document sequence numbers update 1995 // Verifies that item sequence numbers and document sequence numbers update
1908 // properly for main frames and subframes. 1996 // properly for main frames and subframes.
1909 IN_PROC_BROWSER_TEST_F(NavigationControllerBrowserTest, 1997 IN_PROC_BROWSER_TEST_F(NavigationControllerBrowserTest,
1910 FrameNavigationEntry_SequenceNumbers) { 1998 FrameNavigationEntry_SequenceNumbers) {
1911 const NavigationControllerImpl& controller = 1999 const NavigationControllerImpl& controller =
1912 static_cast<const NavigationControllerImpl&>( 2000 static_cast<const NavigationControllerImpl&>(
1913 shell()->web_contents()->GetController()); 2001 shell()->web_contents()->GetController());
1914 2002
1915 // 1. Navigate the main frame. 2003 // 1. Navigate the main frame.
1916 GURL url(embedded_test_server()->GetURL( 2004 GURL url(embedded_test_server()->GetURL(
(...skipping 22 matching lines...) Expand all
1939 EXPECT_NE(isn_1, isn_2); 2027 EXPECT_NE(isn_1, isn_2);
1940 EXPECT_EQ(dsn_1, dsn_2); 2028 EXPECT_EQ(dsn_1, dsn_2);
1941 2029
1942 // Test subframe sequence numbers only if enabled, e.g. in --site-per-process. 2030 // Test subframe sequence numbers only if enabled, e.g. in --site-per-process.
1943 if (!SiteIsolationPolicy::UseSubframeNavigationEntries()) 2031 if (!SiteIsolationPolicy::UseSubframeNavigationEntries())
1944 return; 2032 return;
1945 2033
1946 // 3. Add a subframe, which does an AUTO_SUBFRAME navigation. 2034 // 3. Add a subframe, which does an AUTO_SUBFRAME navigation.
1947 { 2035 {
1948 LoadCommittedCapturer capturer(shell()->web_contents()); 2036 LoadCommittedCapturer capturer(shell()->web_contents());
1949 std::string script = "var iframe = document.createElement('iframe');" 2037 std::string add_script = "var iframe = document.createElement('iframe');"
1950 "iframe.src = '" + url.spec() + "';" 2038 "iframe.src = '" + url.spec() + "';"
1951 "document.body.appendChild(iframe);"; 2039 "document.body.appendChild(iframe);";
1952 EXPECT_TRUE(content::ExecuteScript(root->current_frame_host(), script)); 2040 EXPECT_TRUE(content::ExecuteScript(root->current_frame_host(), add_script));
1953 capturer.Wait(); 2041 capturer.Wait();
1954 EXPECT_EQ(ui::PAGE_TRANSITION_AUTO_SUBFRAME, capturer.transition_type()); 2042 EXPECT_EQ(ui::PAGE_TRANSITION_AUTO_SUBFRAME, capturer.transition_type());
1955 } 2043 }
1956 2044
1957 // The root FrameNavigationEntry hasn't changed. 2045 // The root FrameNavigationEntry hasn't changed.
1958 EXPECT_EQ(frame_entry, 2046 EXPECT_EQ(frame_entry,
1959 controller.GetLastCommittedEntry()->GetFrameEntry(root)); 2047 controller.GetLastCommittedEntry()->GetFrameEntry(root));
1960 2048
1961 // We should have a unique ISN and DSN for the subframe entry. 2049 // We should have a unique ISN and DSN for the subframe entry.
1962 FrameTreeNode* subframe = root->child_at(0); 2050 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); 2469 EXPECT_EQ(original_url, capturer.all_params()[1].url);
2382 EXPECT_EQ(original_url, shell()->web_contents()->GetLastCommittedURL()); 2470 EXPECT_EQ(original_url, shell()->web_contents()->GetLastCommittedURL());
2383 } 2471 }
2384 2472
2385 // Make sure the renderer is still alive. 2473 // Make sure the renderer is still alive.
2386 EXPECT_TRUE( 2474 EXPECT_TRUE(
2387 ExecuteScript(shell()->web_contents(), "console.log('Success');")); 2475 ExecuteScript(shell()->web_contents(), "console.log('Success');"));
2388 } 2476 }
2389 2477
2390 } // namespace content 2478 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/frame_host/navigation_controller_impl.cc ('k') | content/browser/frame_host/navigation_entry_impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698