| OLD | NEW |
| 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 "base/basictypes.h" | 5 #include "base/basictypes.h" |
| 6 #include "base/bind.h" | 6 #include "base/bind.h" |
| 7 #include "base/command_line.h" | 7 #include "base/command_line.h" |
| 8 #include "base/files/file_util.h" | 8 #include "base/files/file_util.h" |
| 9 #include "base/memory/scoped_ptr.h" | 9 #include "base/memory/scoped_ptr.h" |
| 10 #include "base/stl_util.h" | 10 #include "base/stl_util.h" |
| (...skipping 14 matching lines...) Expand all Loading... |
| 25 #include "content/common/view_messages.h" | 25 #include "content/common/view_messages.h" |
| 26 #include "content/public/browser/navigation_details.h" | 26 #include "content/public/browser/navigation_details.h" |
| 27 #include "content/public/browser/notification_registrar.h" | 27 #include "content/public/browser/notification_registrar.h" |
| 28 #include "content/public/browser/notification_types.h" | 28 #include "content/public/browser/notification_types.h" |
| 29 #include "content/public/browser/render_view_host.h" | 29 #include "content/public/browser/render_view_host.h" |
| 30 #include "content/public/browser/web_contents_delegate.h" | 30 #include "content/public/browser/web_contents_delegate.h" |
| 31 #include "content/public/browser/web_contents_observer.h" | 31 #include "content/public/browser/web_contents_observer.h" |
| 32 #include "content/public/common/content_switches.h" | 32 #include "content/public/common/content_switches.h" |
| 33 #include "content/public/common/page_state.h" | 33 #include "content/public/common/page_state.h" |
| 34 #include "content/public/common/page_type.h" | 34 #include "content/public/common/page_type.h" |
| 35 #include "content/public/common/site_isolation_policy.h" |
| 35 #include "content/public/common/url_constants.h" | 36 #include "content/public/common/url_constants.h" |
| 36 #include "content/public/test/mock_render_process_host.h" | 37 #include "content/public/test/mock_render_process_host.h" |
| 37 #include "content/public/test/test_notification_tracker.h" | 38 #include "content/public/test/test_notification_tracker.h" |
| 38 #include "content/public/test/test_utils.h" | 39 #include "content/public/test/test_utils.h" |
| 39 #include "content/test/test_render_frame_host.h" | 40 #include "content/test/test_render_frame_host.h" |
| 40 #include "content/test/test_render_view_host.h" | 41 #include "content/test/test_render_view_host.h" |
| 41 #include "content/test/test_web_contents.h" | 42 #include "content/test/test_web_contents.h" |
| 42 #include "net/base/net_util.h" | 43 #include "net/base/net_util.h" |
| 43 #include "skia/ext/platform_canvas.h" | 44 #include "skia/ext/platform_canvas.h" |
| 44 #include "testing/gtest/include/gtest/gtest.h" | 45 #include "testing/gtest/include/gtest/gtest.h" |
| (...skipping 2031 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2076 NavigationEntryImpl* entry = controller.GetLastCommittedEntry(); | 2077 NavigationEntryImpl* entry = controller.GetLastCommittedEntry(); |
| 2077 EXPECT_EQ(2, controller.GetEntryCount()); | 2078 EXPECT_EQ(2, controller.GetEntryCount()); |
| 2078 EXPECT_EQ(entry, details.entry); | 2079 EXPECT_EQ(entry, details.entry); |
| 2079 | 2080 |
| 2080 // New entry should refer to the new page, but the old URL (entries only | 2081 // New entry should refer to the new page, but the old URL (entries only |
| 2081 // reflect the toplevel URL). | 2082 // reflect the toplevel URL). |
| 2082 EXPECT_EQ(url1, entry->GetURL()); | 2083 EXPECT_EQ(url1, entry->GetURL()); |
| 2083 EXPECT_EQ(params.page_id, entry->GetPageID()); | 2084 EXPECT_EQ(params.page_id, entry->GetPageID()); |
| 2084 | 2085 |
| 2085 // Verify subframe entries if we're in --site-per-process mode. | 2086 // Verify subframe entries if we're in --site-per-process mode. |
| 2086 if (base::CommandLine::ForCurrentProcess()->HasSwitch( | 2087 if (SiteIsolationPolicy::AreAllSitesIsolatedForTesting()) { |
| 2087 switches::kSitePerProcess)) { | |
| 2088 // The entry should have a subframe FrameNavigationEntry. | 2088 // The entry should have a subframe FrameNavigationEntry. |
| 2089 ASSERT_EQ(1U, entry->root_node()->children.size()); | 2089 ASSERT_EQ(1U, entry->root_node()->children.size()); |
| 2090 EXPECT_EQ(url2, entry->root_node()->children[0]->frame_entry->url()); | 2090 EXPECT_EQ(url2, entry->root_node()->children[0]->frame_entry->url()); |
| 2091 } else { | 2091 } else { |
| 2092 // There are no subframe FrameNavigationEntries by default. | 2092 // There are no subframe FrameNavigationEntries by default. |
| 2093 EXPECT_EQ(0U, entry->root_node()->children.size()); | 2093 EXPECT_EQ(0U, entry->root_node()->children.size()); |
| 2094 } | 2094 } |
| 2095 } | 2095 } |
| 2096 | 2096 |
| 2097 // Auto subframes are ones the page loads automatically like ads. They should | 2097 // Auto subframes are ones the page loads automatically like ads. They should |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2134 | 2134 |
| 2135 // There should still be only one entry. | 2135 // There should still be only one entry. |
| 2136 EXPECT_EQ(1, controller.GetEntryCount()); | 2136 EXPECT_EQ(1, controller.GetEntryCount()); |
| 2137 NavigationEntryImpl* entry = controller.GetLastCommittedEntry(); | 2137 NavigationEntryImpl* entry = controller.GetLastCommittedEntry(); |
| 2138 EXPECT_EQ(url1, entry->GetURL()); | 2138 EXPECT_EQ(url1, entry->GetURL()); |
| 2139 EXPECT_EQ(1, entry->GetPageID()); | 2139 EXPECT_EQ(1, entry->GetPageID()); |
| 2140 FrameNavigationEntry* root_entry = entry->root_node()->frame_entry.get(); | 2140 FrameNavigationEntry* root_entry = entry->root_node()->frame_entry.get(); |
| 2141 EXPECT_EQ(url1, root_entry->url()); | 2141 EXPECT_EQ(url1, root_entry->url()); |
| 2142 | 2142 |
| 2143 // Verify subframe entries if we're in --site-per-process mode. | 2143 // Verify subframe entries if we're in --site-per-process mode. |
| 2144 if (base::CommandLine::ForCurrentProcess()->HasSwitch( | 2144 if (SiteIsolationPolicy::AreAllSitesIsolatedForTesting()) { |
| 2145 switches::kSitePerProcess)) { | |
| 2146 // The entry should now have a subframe FrameNavigationEntry. | 2145 // The entry should now have a subframe FrameNavigationEntry. |
| 2147 ASSERT_EQ(1U, entry->root_node()->children.size()); | 2146 ASSERT_EQ(1U, entry->root_node()->children.size()); |
| 2148 FrameNavigationEntry* frame_entry = | 2147 FrameNavigationEntry* frame_entry = |
| 2149 entry->root_node()->children[0]->frame_entry.get(); | 2148 entry->root_node()->children[0]->frame_entry.get(); |
| 2150 EXPECT_EQ(url2, frame_entry->url()); | 2149 EXPECT_EQ(url2, frame_entry->url()); |
| 2151 } else { | 2150 } else { |
| 2152 // There are no subframe FrameNavigationEntries by default. | 2151 // There are no subframe FrameNavigationEntries by default. |
| 2153 EXPECT_EQ(0U, entry->root_node()->children.size()); | 2152 EXPECT_EQ(0U, entry->root_node()->children.size()); |
| 2154 } | 2153 } |
| 2155 | 2154 |
| (...skipping 24 matching lines...) Expand all Loading... |
| 2180 | 2179 |
| 2181 // There should still be only one entry, mostly unchanged. | 2180 // There should still be only one entry, mostly unchanged. |
| 2182 EXPECT_EQ(1, controller.GetEntryCount()); | 2181 EXPECT_EQ(1, controller.GetEntryCount()); |
| 2183 EXPECT_EQ(entry, controller.GetLastCommittedEntry()); | 2182 EXPECT_EQ(entry, controller.GetLastCommittedEntry()); |
| 2184 EXPECT_EQ(url1, entry->GetURL()); | 2183 EXPECT_EQ(url1, entry->GetURL()); |
| 2185 EXPECT_EQ(1, entry->GetPageID()); | 2184 EXPECT_EQ(1, entry->GetPageID()); |
| 2186 EXPECT_EQ(root_entry, entry->root_node()->frame_entry.get()); | 2185 EXPECT_EQ(root_entry, entry->root_node()->frame_entry.get()); |
| 2187 EXPECT_EQ(url1, root_entry->url()); | 2186 EXPECT_EQ(url1, root_entry->url()); |
| 2188 | 2187 |
| 2189 // Verify subframe entries if we're in --site-per-process mode. | 2188 // Verify subframe entries if we're in --site-per-process mode. |
| 2190 if (base::CommandLine::ForCurrentProcess()->HasSwitch( | 2189 if (SiteIsolationPolicy::AreAllSitesIsolatedForTesting()) { |
| 2191 switches::kSitePerProcess)) { | |
| 2192 // The entry should now have 2 subframe FrameNavigationEntries. | 2190 // The entry should now have 2 subframe FrameNavigationEntries. |
| 2193 ASSERT_EQ(2U, entry->root_node()->children.size()); | 2191 ASSERT_EQ(2U, entry->root_node()->children.size()); |
| 2194 FrameNavigationEntry* new_frame_entry = | 2192 FrameNavigationEntry* new_frame_entry = |
| 2195 entry->root_node()->children[1]->frame_entry.get(); | 2193 entry->root_node()->children[1]->frame_entry.get(); |
| 2196 EXPECT_EQ(url3, new_frame_entry->url()); | 2194 EXPECT_EQ(url3, new_frame_entry->url()); |
| 2197 } else { | 2195 } else { |
| 2198 // There are no subframe FrameNavigationEntries by default. | 2196 // There are no subframe FrameNavigationEntries by default. |
| 2199 EXPECT_EQ(0U, entry->root_node()->children.size()); | 2197 EXPECT_EQ(0U, entry->root_node()->children.size()); |
| 2200 } | 2198 } |
| 2201 | 2199 |
| (...skipping 28 matching lines...) Expand all Loading... |
| 2230 | 2228 |
| 2231 // There should still be only one entry, mostly unchanged. | 2229 // There should still be only one entry, mostly unchanged. |
| 2232 EXPECT_EQ(1, controller.GetEntryCount()); | 2230 EXPECT_EQ(1, controller.GetEntryCount()); |
| 2233 EXPECT_EQ(entry, controller.GetLastCommittedEntry()); | 2231 EXPECT_EQ(entry, controller.GetLastCommittedEntry()); |
| 2234 EXPECT_EQ(url1, entry->GetURL()); | 2232 EXPECT_EQ(url1, entry->GetURL()); |
| 2235 EXPECT_EQ(1, entry->GetPageID()); | 2233 EXPECT_EQ(1, entry->GetPageID()); |
| 2236 EXPECT_EQ(root_entry, entry->root_node()->frame_entry.get()); | 2234 EXPECT_EQ(root_entry, entry->root_node()->frame_entry.get()); |
| 2237 EXPECT_EQ(url1, root_entry->url()); | 2235 EXPECT_EQ(url1, root_entry->url()); |
| 2238 | 2236 |
| 2239 // Verify subframe entries if we're in --site-per-process mode. | 2237 // Verify subframe entries if we're in --site-per-process mode. |
| 2240 if (base::CommandLine::ForCurrentProcess()->HasSwitch( | 2238 if (SiteIsolationPolicy::AreAllSitesIsolatedForTesting()) { |
| 2241 switches::kSitePerProcess)) { | |
| 2242 // The entry should now have a nested FrameNavigationEntry. | 2239 // The entry should now have a nested FrameNavigationEntry. |
| 2243 EXPECT_EQ(2U, entry->root_node()->children.size()); | 2240 EXPECT_EQ(2U, entry->root_node()->children.size()); |
| 2244 ASSERT_EQ(1U, entry->root_node()->children[0]->children.size()); | 2241 ASSERT_EQ(1U, entry->root_node()->children[0]->children.size()); |
| 2245 FrameNavigationEntry* new_frame_entry = | 2242 FrameNavigationEntry* new_frame_entry = |
| 2246 entry->root_node()->children[0]->children[0]->frame_entry.get(); | 2243 entry->root_node()->children[0]->children[0]->frame_entry.get(); |
| 2247 EXPECT_EQ(url4, new_frame_entry->url()); | 2244 EXPECT_EQ(url4, new_frame_entry->url()); |
| 2248 } else { | 2245 } else { |
| 2249 // There are no subframe FrameNavigationEntries by default. | 2246 // There are no subframe FrameNavigationEntries by default. |
| 2250 EXPECT_EQ(0U, entry->root_node()->children.size()); | 2247 EXPECT_EQ(0U, entry->root_node()->children.size()); |
| 2251 } | 2248 } |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2304 | 2301 |
| 2305 // This should generate a new entry. | 2302 // This should generate a new entry. |
| 2306 LoadCommittedDetails details; | 2303 LoadCommittedDetails details; |
| 2307 EXPECT_TRUE(controller.RendererDidNavigate(subframe, params, &details)); | 2304 EXPECT_TRUE(controller.RendererDidNavigate(subframe, params, &details)); |
| 2308 NavigationEntryImpl* entry2 = controller.GetLastCommittedEntry(); | 2305 NavigationEntryImpl* entry2 = controller.GetLastCommittedEntry(); |
| 2309 EXPECT_EQ(1U, navigation_entry_committed_counter_); | 2306 EXPECT_EQ(1U, navigation_entry_committed_counter_); |
| 2310 navigation_entry_committed_counter_ = 0; | 2307 navigation_entry_committed_counter_ = 0; |
| 2311 EXPECT_EQ(2, controller.GetEntryCount()); | 2308 EXPECT_EQ(2, controller.GetEntryCount()); |
| 2312 | 2309 |
| 2313 // Verify subframe entries if we're in --site-per-process mode. | 2310 // Verify subframe entries if we're in --site-per-process mode. |
| 2314 if (base::CommandLine::ForCurrentProcess()->HasSwitch( | 2311 if (SiteIsolationPolicy::AreAllSitesIsolatedForTesting()) { |
| 2315 switches::kSitePerProcess)) { | |
| 2316 // The entry should have a subframe FrameNavigationEntry. | 2312 // The entry should have a subframe FrameNavigationEntry. |
| 2317 ASSERT_EQ(1U, entry2->root_node()->children.size()); | 2313 ASSERT_EQ(1U, entry2->root_node()->children.size()); |
| 2318 EXPECT_EQ(url2, entry2->root_node()->children[0]->frame_entry->url()); | 2314 EXPECT_EQ(url2, entry2->root_node()->children[0]->frame_entry->url()); |
| 2319 } else { | 2315 } else { |
| 2320 // There are no subframe FrameNavigationEntries by default. | 2316 // There are no subframe FrameNavigationEntries by default. |
| 2321 EXPECT_EQ(0U, entry2->root_node()->children.size()); | 2317 EXPECT_EQ(0U, entry2->root_node()->children.size()); |
| 2322 } | 2318 } |
| 2323 | 2319 |
| 2324 // Second manual subframe navigation should also make a new entry. | 2320 // Second manual subframe navigation should also make a new entry. |
| 2325 const GURL url3("http://foo3"); | 2321 const GURL url3("http://foo3"); |
| 2326 params.page_id = 3; | 2322 params.page_id = 3; |
| 2327 params.nav_entry_id = 0; | 2323 params.nav_entry_id = 0; |
| 2328 params.did_create_new_entry = true; | 2324 params.did_create_new_entry = true; |
| 2329 params.url = url3; | 2325 params.url = url3; |
| 2330 params.transition = ui::PAGE_TRANSITION_MANUAL_SUBFRAME; | 2326 params.transition = ui::PAGE_TRANSITION_MANUAL_SUBFRAME; |
| 2331 EXPECT_TRUE(controller.RendererDidNavigate(subframe, params, &details)); | 2327 EXPECT_TRUE(controller.RendererDidNavigate(subframe, params, &details)); |
| 2332 EXPECT_EQ(1U, navigation_entry_committed_counter_); | 2328 EXPECT_EQ(1U, navigation_entry_committed_counter_); |
| 2333 navigation_entry_committed_counter_ = 0; | 2329 navigation_entry_committed_counter_ = 0; |
| 2334 NavigationEntryImpl* entry3 = controller.GetLastCommittedEntry(); | 2330 NavigationEntryImpl* entry3 = controller.GetLastCommittedEntry(); |
| 2335 EXPECT_EQ(3, controller.GetEntryCount()); | 2331 EXPECT_EQ(3, controller.GetEntryCount()); |
| 2336 EXPECT_EQ(2, controller.GetCurrentEntryIndex()); | 2332 EXPECT_EQ(2, controller.GetCurrentEntryIndex()); |
| 2337 | 2333 |
| 2338 // Verify subframe entries if we're in --site-per-process mode. | 2334 // Verify subframe entries if we're in --site-per-process mode. |
| 2339 if (base::CommandLine::ForCurrentProcess()->HasSwitch( | 2335 if (SiteIsolationPolicy::AreAllSitesIsolatedForTesting()) { |
| 2340 switches::kSitePerProcess)) { | |
| 2341 // The entry should have a subframe FrameNavigationEntry. | 2336 // The entry should have a subframe FrameNavigationEntry. |
| 2342 ASSERT_EQ(1U, entry3->root_node()->children.size()); | 2337 ASSERT_EQ(1U, entry3->root_node()->children.size()); |
| 2343 EXPECT_EQ(url3, entry3->root_node()->children[0]->frame_entry->url()); | 2338 EXPECT_EQ(url3, entry3->root_node()->children[0]->frame_entry->url()); |
| 2344 } else { | 2339 } else { |
| 2345 // There are no subframe FrameNavigationEntries by default. | 2340 // There are no subframe FrameNavigationEntries by default. |
| 2346 EXPECT_EQ(0U, entry3->root_node()->children.size()); | 2341 EXPECT_EQ(0U, entry3->root_node()->children.size()); |
| 2347 } | 2342 } |
| 2348 | 2343 |
| 2349 // Go back one. | 2344 // Go back one. |
| 2350 controller.GoBack(); | 2345 controller.GoBack(); |
| (...skipping 2652 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5003 // means that occasionally a navigation conflict will end up with one entry | 4998 // means that occasionally a navigation conflict will end up with one entry |
| 5004 // bubbling to the end of the entry list, but that's the least-bad option. | 4999 // bubbling to the end of the entry list, but that's the least-bad option. |
| 5005 EXPECT_EQ(3, controller.GetEntryCount()); | 5000 EXPECT_EQ(3, controller.GetEntryCount()); |
| 5006 EXPECT_EQ(2, controller.GetCurrentEntryIndex()); | 5001 EXPECT_EQ(2, controller.GetCurrentEntryIndex()); |
| 5007 EXPECT_EQ(url_a, controller.GetEntryAtIndex(0)->GetURL()); | 5002 EXPECT_EQ(url_a, controller.GetEntryAtIndex(0)->GetURL()); |
| 5008 EXPECT_EQ(url_c, controller.GetEntryAtIndex(1)->GetURL()); | 5003 EXPECT_EQ(url_c, controller.GetEntryAtIndex(1)->GetURL()); |
| 5009 EXPECT_EQ(url_b, controller.GetEntryAtIndex(2)->GetURL()); | 5004 EXPECT_EQ(url_b, controller.GetEntryAtIndex(2)->GetURL()); |
| 5010 } | 5005 } |
| 5011 | 5006 |
| 5012 } // namespace content | 5007 } // namespace content |
| OLD | NEW |