Chromium Code Reviews| 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 /* | 5 /* |
| 6 * Copyright (C) 2006, 2007, 2008, 2009 Apple Inc. All rights reserved. | 6 * Copyright (C) 2006, 2007, 2008, 2009 Apple Inc. All rights reserved. |
| 7 * Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies) | 7 * Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies) |
| 8 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. | 8 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. |
| 9 * (http://www.torchmobile.com/) | 9 * (http://www.torchmobile.com/) |
| 10 * | 10 * |
| (...skipping 686 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 697 frame_tree_node_id = node->frame_tree_node_id(); | 697 frame_tree_node_id = node->frame_tree_node_id(); |
| 698 | 698 |
| 699 // In --site-per-process, create an identical NavigationEntry with a | 699 // In --site-per-process, create an identical NavigationEntry with a |
| 700 // new FrameNavigationEntry for the target subframe. | 700 // new FrameNavigationEntry for the target subframe. |
| 701 if (SiteIsolationPolicy::UseSubframeNavigationEntries()) { | 701 if (SiteIsolationPolicy::UseSubframeNavigationEntries()) { |
| 702 entry = GetLastCommittedEntry()->Clone(); | 702 entry = GetLastCommittedEntry()->Clone(); |
| 703 entry->SetPageID(-1); | 703 entry->SetPageID(-1); |
| 704 entry->AddOrUpdateFrameEntry( | 704 entry->AddOrUpdateFrameEntry( |
| 705 node, -1, -1, nullptr, | 705 node, -1, -1, nullptr, |
| 706 static_cast<SiteInstanceImpl*>(params.source_site_instance.get()), | 706 static_cast<SiteInstanceImpl*>(params.source_site_instance.get()), |
| 707 params.url, params.referrer, PageState(), "GET", -1); | 707 params.redirect_chain, params.url, params.referrer, PageState(), |
| 708 "GET", -1); | |
| 708 } | 709 } |
| 709 } | 710 } |
| 710 } | 711 } |
| 711 | 712 |
| 712 // Otherwise, create a pending entry for the main frame. | 713 // Otherwise, create a pending entry for the main frame. |
| 713 if (!entry) { | 714 if (!entry) { |
| 714 entry = NavigationEntryImpl::FromNavigationEntry(CreateNavigationEntry( | 715 entry = NavigationEntryImpl::FromNavigationEntry(CreateNavigationEntry( |
| 715 params.url, params.referrer, params.transition_type, | 716 params.url, params.referrer, params.transition_type, |
| 716 params.is_renderer_initiated, params.extra_headers, browser_context_)); | 717 params.is_renderer_initiated, params.extra_headers, browser_context_)); |
| 717 entry->set_source_site_instance( | 718 entry->set_source_site_instance( |
| 718 static_cast<SiteInstanceImpl*>(params.source_site_instance.get())); | 719 static_cast<SiteInstanceImpl*>(params.source_site_instance.get())); |
| 720 if (params.redirect_chain.size() > 0) | |
| 721 entry->SetMainFrameRedirectChain(params.redirect_chain); | |
|
arthursonzogni
2016/09/27 12:56:20
I don't know the reasons why the main frame redire
Charlie Reis
2016/09/28 04:13:17
Let's remove the size check. Originally, calling
arthursonzogni
2016/09/28 16:36:14
Done.
| |
| 719 } | 722 } |
| 720 | 723 |
| 721 // Set the FTN ID (only used in non-site-per-process, for tests). | 724 // Set the FTN ID (only used in non-site-per-process, for tests). |
| 722 entry->set_frame_tree_node_id(frame_tree_node_id); | 725 entry->set_frame_tree_node_id(frame_tree_node_id); |
| 723 if (params.redirect_chain.size() > 0) | |
| 724 entry->SetRedirectChain(params.redirect_chain); | |
| 725 // Don't allow an entry replacement if there is no entry to replace. | 726 // Don't allow an entry replacement if there is no entry to replace. |
| 726 // http://crbug.com/457149 | 727 // http://crbug.com/457149 |
| 727 if (params.should_replace_current_entry && entries_.size() > 0) | 728 if (params.should_replace_current_entry && entries_.size() > 0) |
| 728 entry->set_should_replace_entry(true); | 729 entry->set_should_replace_entry(true); |
| 729 entry->set_should_clear_history_list(params.should_clear_history_list); | 730 entry->set_should_clear_history_list(params.should_clear_history_list); |
| 730 entry->SetIsOverridingUserAgent(override); | 731 entry->SetIsOverridingUserAgent(override); |
| 731 entry->set_transferred_global_request_id( | 732 entry->set_transferred_global_request_id( |
| 732 params.transferred_global_request_id); | 733 params.transferred_global_request_id); |
| 733 | 734 |
| 734 #if defined(OS_ANDROID) | 735 #if defined(OS_ANDROID) |
| (...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 863 base::debug::DumpWithoutCrashing(); | 864 base::debug::DumpWithoutCrashing(); |
| 864 NOTREACHED() << "Shouldn't see an empty PageState at commit."; | 865 NOTREACHED() << "Shouldn't see an empty PageState at commit."; |
| 865 } | 866 } |
| 866 NavigationEntryImpl* active_entry = GetLastCommittedEntry(); | 867 NavigationEntryImpl* active_entry = GetLastCommittedEntry(); |
| 867 active_entry->SetTimestamp(timestamp); | 868 active_entry->SetTimestamp(timestamp); |
| 868 active_entry->SetHttpStatusCode(params.http_status_code); | 869 active_entry->SetHttpStatusCode(params.http_status_code); |
| 869 | 870 |
| 870 FrameNavigationEntry* frame_entry = | 871 FrameNavigationEntry* frame_entry = |
| 871 active_entry->GetFrameEntry(rfh->frame_tree_node()); | 872 active_entry->GetFrameEntry(rfh->frame_tree_node()); |
| 872 if (SiteIsolationPolicy::UseSubframeNavigationEntries()) { | 873 if (SiteIsolationPolicy::UseSubframeNavigationEntries()) { |
| 873 // Update the frame-specific PageState. | 874 // Update the frame-specific PageState and RedirectChain |
| 874 // We may not find a frame_entry in some cases; ignore the PageState if so. | 875 // We may not find a frame_entry in some cases; ignore the PageState if so. |
| 875 // TODO(creis): Remove the "if" once https://crbug.com/522193 is fixed. | 876 // TODO(creis): Remove the "if" once https://crbug.com/522193 is fixed. |
| 876 if (frame_entry) | 877 if (frame_entry) { |
| 877 frame_entry->SetPageState(params.page_state); | 878 frame_entry->SetPageState(params.page_state); |
| 879 frame_entry->set_redirect_chain(params.redirects); | |
| 880 } | |
| 878 } else { | 881 } else { |
| 879 active_entry->SetPageState(params.page_state); | 882 active_entry->SetPageState(params.page_state); |
| 883 active_entry->SetMainFrameRedirectChain(params.redirects); | |
| 880 } | 884 } |
| 881 active_entry->SetRedirectChain(params.redirects); | |
| 882 | 885 |
| 883 // Use histogram to track memory impact of redirect chain because it's now | 886 // Use histogram to track memory impact of redirect chain because it's now |
| 884 // not cleared for committed entries. | 887 // not cleared for committed entries. |
| 885 size_t redirect_chain_size = 0; | 888 size_t redirect_chain_size = 0; |
| 886 for (size_t i = 0; i < params.redirects.size(); ++i) { | 889 for (size_t i = 0; i < params.redirects.size(); ++i) { |
| 887 redirect_chain_size += params.redirects[i].spec().length(); | 890 redirect_chain_size += params.redirects[i].spec().length(); |
| 888 } | 891 } |
| 889 UMA_HISTOGRAM_COUNTS("Navigation.RedirectChainSize", redirect_chain_size); | 892 UMA_HISTOGRAM_COUNTS("Navigation.RedirectChainSize", redirect_chain_size); |
| 890 | 893 |
| 891 // Once it is committed, we no longer need to track several pieces of state on | 894 // Once it is committed, we no longer need to track several pieces of state on |
| (...skipping 311 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1203 // The site instance will normally be the same except during session restore, | 1206 // The site instance will normally be the same except during session restore, |
| 1204 // when no site instance will be assigned. | 1207 // when no site instance will be assigned. |
| 1205 DCHECK(entry->site_instance() == nullptr || | 1208 DCHECK(entry->site_instance() == nullptr || |
| 1206 entry->site_instance() == rfh->GetSiteInstance()); | 1209 entry->site_instance() == rfh->GetSiteInstance()); |
| 1207 | 1210 |
| 1208 // Update the existing FrameNavigationEntry to ensure all of its members | 1211 // Update the existing FrameNavigationEntry to ensure all of its members |
| 1209 // reflect the parameters coming from the renderer process. | 1212 // reflect the parameters coming from the renderer process. |
| 1210 entry->AddOrUpdateFrameEntry( | 1213 entry->AddOrUpdateFrameEntry( |
| 1211 rfh->frame_tree_node(), params.item_sequence_number, | 1214 rfh->frame_tree_node(), params.item_sequence_number, |
| 1212 params.document_sequence_number, rfh->GetSiteInstance(), nullptr, | 1215 params.document_sequence_number, rfh->GetSiteInstance(), nullptr, |
| 1213 params.url, params.referrer, params.page_state, params.method, | 1216 params.redirects, params.url, params.referrer, params.page_state, |
| 1214 params.post_id); | 1217 params.method, params.post_id); |
|
arthursonzogni
2016/09/27 12:56:20
I want to warn that previously, params.redirects w
Charlie Reis
2016/09/28 04:13:17
This case and the SamePage one were covered by the
arthursonzogni
2016/09/28 16:36:14
I'm glad that it fix a new bug! Thanks for the rep
| |
| 1215 | 1218 |
| 1216 // The redirected to page should not inherit the favicon from the previous | 1219 // The redirected to page should not inherit the favicon from the previous |
| 1217 // page. | 1220 // page. |
| 1218 if (ui::PageTransitionIsRedirect(params.transition) && !is_in_page) | 1221 if (ui::PageTransitionIsRedirect(params.transition) && !is_in_page) |
| 1219 entry->GetFavicon() = FaviconStatus(); | 1222 entry->GetFavicon() = FaviconStatus(); |
| 1220 | 1223 |
| 1221 // The entry we found in the list might be pending if the user hit | 1224 // The entry we found in the list might be pending if the user hit |
| 1222 // back/forward/reload. This load should commit it (since it's already in the | 1225 // back/forward/reload. This load should commit it (since it's already in the |
| 1223 // list, we can just discard the pending pointer). We should also discard the | 1226 // list, we can just discard the pending pointer). We should also discard the |
| 1224 // pending entry if it corresponds to a different navigation, since that one | 1227 // pending entry if it corresponds to a different navigation, since that one |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1261 // If a user presses enter in the omnibox and the server redirects, the URL | 1264 // If a user presses enter in the omnibox and the server redirects, the URL |
| 1262 // might change (but it's still considered a SAME_PAGE navigation). So we must | 1265 // might change (but it's still considered a SAME_PAGE navigation). So we must |
| 1263 // update the SSL status. | 1266 // update the SSL status. |
| 1264 existing_entry->GetSSL() = rfh->navigation_handle()->ssl_status(); | 1267 existing_entry->GetSSL() = rfh->navigation_handle()->ssl_status(); |
| 1265 | 1268 |
| 1266 // Update the existing FrameNavigationEntry to ensure all of its members | 1269 // Update the existing FrameNavigationEntry to ensure all of its members |
| 1267 // reflect the parameters coming from the renderer process. | 1270 // reflect the parameters coming from the renderer process. |
| 1268 existing_entry->AddOrUpdateFrameEntry( | 1271 existing_entry->AddOrUpdateFrameEntry( |
| 1269 rfh->frame_tree_node(), params.item_sequence_number, | 1272 rfh->frame_tree_node(), params.item_sequence_number, |
| 1270 params.document_sequence_number, rfh->GetSiteInstance(), nullptr, | 1273 params.document_sequence_number, rfh->GetSiteInstance(), nullptr, |
| 1271 params.url, params.referrer, params.page_state, params.method, | 1274 params.redirects, params.url, params.referrer, params.page_state, |
| 1272 params.post_id); | 1275 params.method, params.post_id); |
| 1273 | 1276 |
| 1274 DiscardNonCommittedEntries(); | 1277 DiscardNonCommittedEntries(); |
| 1275 } | 1278 } |
| 1276 | 1279 |
| 1277 void NavigationControllerImpl::RendererDidNavigateNewSubframe( | 1280 void NavigationControllerImpl::RendererDidNavigateNewSubframe( |
| 1278 RenderFrameHostImpl* rfh, | 1281 RenderFrameHostImpl* rfh, |
| 1279 const FrameHostMsg_DidCommitProvisionalLoad_Params& params, | 1282 const FrameHostMsg_DidCommitProvisionalLoad_Params& params, |
| 1280 bool is_in_page, | 1283 bool is_in_page, |
| 1281 bool replace_entry) { | 1284 bool replace_entry) { |
| 1282 DCHECK(ui::PageTransitionCoreTypeIs(params.transition, | 1285 DCHECK(ui::PageTransitionCoreTypeIs(params.transition, |
| (...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1360 } | 1363 } |
| 1361 } | 1364 } |
| 1362 | 1365 |
| 1363 if (SiteIsolationPolicy::UseSubframeNavigationEntries()) { | 1366 if (SiteIsolationPolicy::UseSubframeNavigationEntries()) { |
| 1364 // This may be a "new auto" case where we add a new FrameNavigationEntry, or | 1367 // This may be a "new auto" case where we add a new FrameNavigationEntry, or |
| 1365 // it may be a "history auto" case where we update an existing one. | 1368 // it may be a "history auto" case where we update an existing one. |
| 1366 NavigationEntryImpl* last_committed = GetLastCommittedEntry(); | 1369 NavigationEntryImpl* last_committed = GetLastCommittedEntry(); |
| 1367 last_committed->AddOrUpdateFrameEntry( | 1370 last_committed->AddOrUpdateFrameEntry( |
| 1368 rfh->frame_tree_node(), params.item_sequence_number, | 1371 rfh->frame_tree_node(), params.item_sequence_number, |
| 1369 params.document_sequence_number, rfh->GetSiteInstance(), nullptr, | 1372 params.document_sequence_number, rfh->GetSiteInstance(), nullptr, |
| 1370 params.url, params.referrer, params.page_state, params.method, | 1373 params.redirects, params.url, params.referrer, params.page_state, |
| 1371 params.post_id); | 1374 params.method, params.post_id); |
| 1372 } | 1375 } |
| 1373 | 1376 |
| 1374 return send_commit_notification; | 1377 return send_commit_notification; |
| 1375 } | 1378 } |
| 1376 | 1379 |
| 1377 int NavigationControllerImpl::GetIndexOfEntry( | 1380 int NavigationControllerImpl::GetIndexOfEntry( |
| 1378 const NavigationEntryImpl* entry) const { | 1381 const NavigationEntryImpl* entry) const { |
| 1379 for (size_t i = 0; i < entries_.size(); ++i) { | 1382 for (size_t i = 0; i < entries_.size(); ++i) { |
| 1380 if (entries_[i].get() == entry) | 1383 if (entries_[i].get() == entry) |
| 1381 return i; | 1384 return i; |
| (...skipping 722 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2104 } | 2107 } |
| 2105 } | 2108 } |
| 2106 } | 2109 } |
| 2107 | 2110 |
| 2108 void NavigationControllerImpl::SetGetTimestampCallbackForTest( | 2111 void NavigationControllerImpl::SetGetTimestampCallbackForTest( |
| 2109 const base::Callback<base::Time()>& get_timestamp_callback) { | 2112 const base::Callback<base::Time()>& get_timestamp_callback) { |
| 2110 get_timestamp_callback_ = get_timestamp_callback; | 2113 get_timestamp_callback_ = get_timestamp_callback; |
| 2111 } | 2114 } |
| 2112 | 2115 |
| 2113 } // namespace content | 2116 } // namespace content |
| OLD | NEW |