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 905 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
916 | 916 |
917 // Remember the bindings the renderer process has at this point, so that | 917 // Remember the bindings the renderer process has at this point, so that |
918 // we do not grant this entry additional bindings if we come back to it. | 918 // we do not grant this entry additional bindings if we come back to it. |
919 active_entry->SetBindings(rfh->GetEnabledBindings()); | 919 active_entry->SetBindings(rfh->GetEnabledBindings()); |
920 | 920 |
921 // Now prep the rest of the details for the notification and broadcast. | 921 // Now prep the rest of the details for the notification and broadcast. |
922 details->entry = active_entry; | 922 details->entry = active_entry; |
923 details->is_main_frame = !rfh->GetParent(); | 923 details->is_main_frame = !rfh->GetParent(); |
924 details->http_status_code = params.http_status_code; | 924 details->http_status_code = params.http_status_code; |
925 | 925 |
926 // Deserialize the security info and kill the renderer if | |
927 // deserialization fails. The navigation will continue with default | |
928 // SSLStatus values. | |
929 if (!DeserializeSecurityInfo(params.security_info, &details->ssl_status)) { | |
930 bad_message::ReceivedBadMessage( | |
931 rfh->GetProcess(), | |
932 bad_message::WC_RENDERER_DID_NAVIGATE_BAD_SECURITY_INFO); | |
933 } | |
934 | |
935 NotifyNavigationEntryCommitted(details); | 926 NotifyNavigationEntryCommitted(details); |
936 | 927 |
937 // Update the nav_entry_id for each RenderFrameHost in the tree, so that each | 928 // Update the nav_entry_id for each RenderFrameHost in the tree, so that each |
938 // one knows the latest NavigationEntry it is showing (whether it has | 929 // one knows the latest NavigationEntry it is showing (whether it has |
939 // committed anything in this navigation or not). This allows things like | 930 // committed anything in this navigation or not). This allows things like |
940 // state and title updates from RenderFrames to apply to the latest relevant | 931 // state and title updates from RenderFrames to apply to the latest relevant |
941 // NavigationEntry. | 932 // NavigationEntry. |
942 int nav_entry_id = active_entry->GetUniqueID(); | 933 int nav_entry_id = active_entry->GetUniqueID(); |
943 for (FrameTreeNode* node : delegate_->GetFrameTree()->Nodes()) | 934 for (FrameTreeNode* node : delegate_->GetFrameTree()->Nodes()) |
944 node->current_frame_host()->set_nav_entry_id(nav_entry_id); | 935 node->current_frame_host()->set_nav_entry_id(nav_entry_id); |
(...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1100 NavigationHandleImpl* handle = rfh->navigation_handle(); | 1091 NavigationHandleImpl* handle = rfh->navigation_handle(); |
1101 DCHECK(handle); | 1092 DCHECK(handle); |
1102 | 1093 |
1103 if (!new_entry && | 1094 if (!new_entry && |
1104 PendingEntryMatchesHandle(handle) && pending_entry_index_ == -1 && | 1095 PendingEntryMatchesHandle(handle) && pending_entry_index_ == -1 && |
1105 (!pending_entry_->site_instance() || | 1096 (!pending_entry_->site_instance() || |
1106 pending_entry_->site_instance() == rfh->GetSiteInstance())) { | 1097 pending_entry_->site_instance() == rfh->GetSiteInstance())) { |
1107 new_entry = pending_entry_->Clone(); | 1098 new_entry = pending_entry_->Clone(); |
1108 | 1099 |
1109 update_virtual_url = new_entry->update_virtual_url_with_url(); | 1100 update_virtual_url = new_entry->update_virtual_url_with_url(); |
| 1101 new_entry->GetSSL() = handle->ssl_status(); |
1110 } | 1102 } |
1111 | 1103 |
1112 // For non-in-page commits with no matching pending entry, create a new entry. | 1104 // For non-in-page commits with no matching pending entry, create a new entry. |
1113 if (!new_entry) { | 1105 if (!new_entry) { |
1114 new_entry = base::WrapUnique(new NavigationEntryImpl); | 1106 new_entry = base::WrapUnique(new NavigationEntryImpl); |
1115 | 1107 |
1116 // Find out whether the new entry needs to update its virtual URL on URL | 1108 // Find out whether the new entry needs to update its virtual URL on URL |
1117 // change and set up the entry accordingly. This is needed to correctly | 1109 // change and set up the entry accordingly. This is needed to correctly |
1118 // update the virtual URL when replaceState is called after a pushState. | 1110 // update the virtual URL when replaceState is called after a pushState. |
1119 GURL url = params.url; | 1111 GURL url = params.url; |
1120 bool needs_update = false; | 1112 bool needs_update = false; |
1121 BrowserURLHandlerImpl::GetInstance()->RewriteURLIfNecessary( | 1113 BrowserURLHandlerImpl::GetInstance()->RewriteURLIfNecessary( |
1122 &url, browser_context_, &needs_update); | 1114 &url, browser_context_, &needs_update); |
1123 new_entry->set_update_virtual_url_with_url(needs_update); | 1115 new_entry->set_update_virtual_url_with_url(needs_update); |
1124 | 1116 |
1125 // When navigating to a new page, give the browser URL handler a chance to | 1117 // When navigating to a new page, give the browser URL handler a chance to |
1126 // update the virtual URL based on the new URL. For example, this is needed | 1118 // update the virtual URL based on the new URL. For example, this is needed |
1127 // to show chrome://bookmarks/#1 when the bookmarks webui extension changes | 1119 // to show chrome://bookmarks/#1 when the bookmarks webui extension changes |
1128 // the URL. | 1120 // the URL. |
1129 update_virtual_url = needs_update; | 1121 update_virtual_url = needs_update; |
| 1122 new_entry->GetSSL() = handle->ssl_status(); |
1130 } | 1123 } |
1131 | 1124 |
1132 // Don't use the page type from the pending entry. Some interstitial page | 1125 // Don't use the page type from the pending entry. Some interstitial page |
1133 // may have set the type to interstitial. Once we commit, however, the page | 1126 // may have set the type to interstitial. Once we commit, however, the page |
1134 // type must always be normal or error. | 1127 // type must always be normal or error. |
1135 new_entry->set_page_type(params.url_is_unreachable ? PAGE_TYPE_ERROR | 1128 new_entry->set_page_type(params.url_is_unreachable ? PAGE_TYPE_ERROR |
1136 : PAGE_TYPE_NORMAL); | 1129 : PAGE_TYPE_NORMAL); |
1137 new_entry->SetURL(params.url); | 1130 new_entry->SetURL(params.url); |
1138 if (update_virtual_url) | 1131 if (update_virtual_url) |
1139 UpdateVirtualURLToURL(new_entry.get(), params.url); | 1132 UpdateVirtualURLToURL(new_entry.get(), params.url); |
(...skipping 968 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2108 } | 2101 } |
2109 } | 2102 } |
2110 } | 2103 } |
2111 | 2104 |
2112 void NavigationControllerImpl::SetGetTimestampCallbackForTest( | 2105 void NavigationControllerImpl::SetGetTimestampCallbackForTest( |
2113 const base::Callback<base::Time()>& get_timestamp_callback) { | 2106 const base::Callback<base::Time()>& get_timestamp_callback) { |
2114 get_timestamp_callback_ = get_timestamp_callback; | 2107 get_timestamp_callback_ = get_timestamp_callback; |
2115 } | 2108 } |
2116 | 2109 |
2117 } // namespace content | 2110 } // namespace content |
OLD | NEW |