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

Side by Side Diff: content/renderer/render_frame_impl.cc

Issue 694963003: Revert of Clean up the page state saving mechanism. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 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
« no previous file with comments | « content/public/test/render_view_test.cc ('k') | content/renderer/render_view_browsertest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 "content/renderer/render_frame_impl.h" 5 #include "content/renderer/render_frame_impl.h"
6 6
7 #include <map> 7 #include <map>
8 #include <string> 8 #include <string>
9 9
10 #include "base/auto_reset.h" 10 #include "base/auto_reset.h"
(...skipping 1080 matching lines...) Expand 10 before | Expand all | Expand 10 after
1091 CommandLine::ForCurrentProcess()->HasSwitch(switches::kSitePerProcess); 1091 CommandLine::ForCurrentProcess()->HasSwitch(switches::kSitePerProcess);
1092 bool is_main_frame = !frame_->parent(); 1092 bool is_main_frame = !frame_->parent();
1093 1093
1094 // Only run unload if we're not swapped out yet, but send the ack either way. 1094 // Only run unload if we're not swapped out yet, but send the ack either way.
1095 if (!is_swapped_out_ || !render_view_->is_swapped_out_) { 1095 if (!is_swapped_out_ || !render_view_->is_swapped_out_) {
1096 // Swap this RenderFrame out so the frame can navigate to a page rendered by 1096 // Swap this RenderFrame out so the frame can navigate to a page rendered by
1097 // a different process. This involves running the unload handler and 1097 // a different process. This involves running the unload handler and
1098 // clearing the page. We also allow this process to exit if there are no 1098 // clearing the page. We also allow this process to exit if there are no
1099 // other active RenderFrames in it. 1099 // other active RenderFrames in it.
1100 1100
1101 // Send any pending page state messages before we get swapped out. 1101 // Send an UpdateState message before we get swapped out.
1102 render_view_->FlushPageState(); 1102 render_view_->SyncNavigationState();
1103 1103
1104 // If we need a proxy to replace this, create it now so its routing id is 1104 // If we need a proxy to replace this, create it now so its routing id is
1105 // registered for receiving IPC messages. 1105 // registered for receiving IPC messages.
1106 if (proxy_routing_id != MSG_ROUTING_NONE) { 1106 if (proxy_routing_id != MSG_ROUTING_NONE) {
1107 proxy = RenderFrameProxy::CreateProxyToReplaceFrame(this, 1107 proxy = RenderFrameProxy::CreateProxyToReplaceFrame(this,
1108 proxy_routing_id); 1108 proxy_routing_id);
1109 } 1109 }
1110 1110
1111 // Synchronously run the unload handler before sending the ACK. 1111 // Synchronously run the unload handler before sending the ACK.
1112 // TODO(creis): Call dispatchUnloadEvent unconditionally here to support 1112 // TODO(creis): Call dispatchUnloadEvent unconditionally here to support
(...skipping 1133 matching lines...) Expand 10 before | Expand all | Expand 10 after
2246 2246
2247 if (proxy_routing_id_ != MSG_ROUTING_NONE) { 2247 if (proxy_routing_id_ != MSG_ROUTING_NONE) {
2248 RenderFrameProxy* proxy = 2248 RenderFrameProxy* proxy =
2249 RenderFrameProxy::FromRoutingID(proxy_routing_id_); 2249 RenderFrameProxy::FromRoutingID(proxy_routing_id_);
2250 CHECK(proxy); 2250 CHECK(proxy);
2251 proxy->web_frame()->swap(frame_); 2251 proxy->web_frame()->swap(frame_);
2252 proxy_routing_id_ = MSG_ROUTING_NONE; 2252 proxy_routing_id_ = MSG_ROUTING_NONE;
2253 } 2253 }
2254 2254
2255 // When we perform a new navigation, we need to update the last committed 2255 // When we perform a new navigation, we need to update the last committed
2256 // session history entry with any dirty page state for the page we are 2256 // session history entry with state for the page we are leaving. Do this
2257 // leaving. Do this before updating the HistoryController state. 2257 // before updating the HistoryController state.
2258 render_view_->FlushPageState(); 2258 render_view_->UpdateSessionHistory(frame);
2259 2259
2260 render_view_->history_controller()->UpdateForCommit(this, item, commit_type, 2260 render_view_->history_controller()->UpdateForCommit(this, item, commit_type,
2261 navigation_state->was_within_same_page()); 2261 navigation_state->was_within_same_page());
2262 2262
2263 InternalDocumentStateData* internal_data = 2263 InternalDocumentStateData* internal_data =
2264 InternalDocumentStateData::FromDocumentState(document_state); 2264 InternalDocumentStateData::FromDocumentState(document_state);
2265 2265
2266 if (document_state->commit_load_time().is_null()) 2266 if (document_state->commit_load_time().is_null())
2267 document_state->set_commit_load_time(Time::Now()); 2267 document_state->set_commit_load_time(Time::Now());
2268 2268
2269 if (internal_data->must_reset_scroll_and_scale_state()) { 2269 if (internal_data->must_reset_scroll_and_scale_state()) {
2270 render_view_->webview()->resetScrollAndScaleState(); 2270 render_view_->webview()->resetScrollAndScaleState();
2271 internal_data->set_must_reset_scroll_and_scale_state(false); 2271 internal_data->set_must_reset_scroll_and_scale_state(false);
2272 } 2272 }
2273 internal_data->set_use_error_page(false); 2273 internal_data->set_use_error_page(false);
2274 2274
2275 bool is_new_navigation = commit_type == blink::WebStandardCommit; 2275 bool is_new_navigation = commit_type == blink::WebStandardCommit;
2276 if (is_new_navigation) { 2276 if (is_new_navigation) {
2277 // We bump our Page ID to correspond with the new session history entry. 2277 // We bump our Page ID to correspond with the new session history entry.
2278 render_view_->page_id_ = render_view_->next_page_id_++; 2278 render_view_->page_id_ = render_view_->next_page_id_++;
2279 2279
2280 // Don't update history_page_ids_ (etc) for kSwappedOutURL, since we don't 2280 // Don't update history_page_ids_ (etc) for kSwappedOutURL, since
2281 // want to forget the entry that was there, and since we will never come 2281 // we don't want to forget the entry that was there, and since we will
2282 // back to kSwappedOutURL. Note that we have to call FlushPageState and 2282 // never come back to kSwappedOutURL. Note that we have to call
2283 // update page_id_ even in this case, so that the current entry gets a state 2283 // UpdateSessionHistory and update page_id_ even in this case, so that
2284 // update and so that we don't send a state update to the wrong entry when 2284 // the current entry gets a state update and so that we don't send a
2285 // we swap back in. 2285 // state update to the wrong entry when we swap back in.
2286 if (GetLoadingUrl() != GURL(kSwappedOutURL)) { 2286 if (GetLoadingUrl() != GURL(kSwappedOutURL)) {
2287 // Advance our offset in session history, applying the length limit. 2287 // Advance our offset in session history, applying the length limit.
2288 // There is now no forward history. 2288 // There is now no forward history.
2289 render_view_->history_list_offset_++; 2289 render_view_->history_list_offset_++;
2290 if (render_view_->history_list_offset_ >= kMaxSessionHistoryEntries) 2290 if (render_view_->history_list_offset_ >= kMaxSessionHistoryEntries)
2291 render_view_->history_list_offset_ = kMaxSessionHistoryEntries - 1; 2291 render_view_->history_list_offset_ = kMaxSessionHistoryEntries - 1;
2292 render_view_->history_list_length_ = 2292 render_view_->history_list_length_ =
2293 render_view_->history_list_offset_ + 1; 2293 render_view_->history_list_offset_ + 1;
2294 render_view_->history_page_ids_.resize( 2294 render_view_->history_page_ids_.resize(
2295 render_view_->history_list_length_, -1); 2295 render_view_->history_list_length_, -1);
2296 render_view_->history_page_ids_[render_view_->history_list_offset_] = 2296 render_view_->history_page_ids_[render_view_->history_list_offset_] =
2297 render_view_->page_id_; 2297 render_view_->page_id_;
2298 } 2298 }
2299 } else { 2299 } else {
2300 // Inspect the navigation_state on this frame to see if the navigation 2300 // Inspect the navigation_state on this frame to see if the navigation
2301 // corresponds to a session history navigation... Note: |frame| may or 2301 // corresponds to a session history navigation... Note: |frame| may or
2302 // may not be the toplevel frame, but for the case of capturing session 2302 // may not be the toplevel frame, but for the case of capturing session
2303 // history, the first committed frame suffices. We keep track of whether 2303 // history, the first committed frame suffices. We keep track of whether
2304 // we've seen this commit before so that only capture session history once 2304 // we've seen this commit before so that only capture session history once
2305 // per navigation. 2305 // per navigation.
2306 // 2306 //
2307 // Note that we need to check if the page ID changed. In the case of a 2307 // Note that we need to check if the page ID changed. In the case of a
2308 // reload, the page ID doesn't change, and FlushPageState gets the previous 2308 // reload, the page ID doesn't change, and UpdateSessionHistory gets the
2309 // URL and the current page ID, which would be wrong. 2309 // previous URL and the current page ID, which would be wrong.
2310 if (navigation_state->pending_page_id() != -1 && 2310 if (navigation_state->pending_page_id() != -1 &&
2311 navigation_state->pending_page_id() != render_view_->page_id_ && 2311 navigation_state->pending_page_id() != render_view_->page_id_ &&
2312 !navigation_state->request_committed()) { 2312 !navigation_state->request_committed()) {
2313 // This is a successful session history navigation! 2313 // This is a successful session history navigation!
2314 render_view_->page_id_ = navigation_state->pending_page_id(); 2314 render_view_->page_id_ = navigation_state->pending_page_id();
2315 2315
2316 render_view_->history_list_offset_ = 2316 render_view_->history_list_offset_ =
2317 navigation_state->pending_history_list_offset(); 2317 navigation_state->pending_history_list_offset();
2318 2318
2319 // If the history list is valid, our list of page IDs should be correct. 2319 // If the history list is valid, our list of page IDs should be correct.
(...skipping 1827 matching lines...) Expand 10 before | Expand all | Expand 10 after
4147 4147
4148 #if defined(ENABLE_BROWSER_CDMS) 4148 #if defined(ENABLE_BROWSER_CDMS)
4149 RendererCdmManager* RenderFrameImpl::GetCdmManager() { 4149 RendererCdmManager* RenderFrameImpl::GetCdmManager() {
4150 if (!cdm_manager_) 4150 if (!cdm_manager_)
4151 cdm_manager_ = new RendererCdmManager(this); 4151 cdm_manager_ = new RendererCdmManager(this);
4152 return cdm_manager_; 4152 return cdm_manager_;
4153 } 4153 }
4154 #endif // defined(ENABLE_BROWSER_CDMS) 4154 #endif // defined(ENABLE_BROWSER_CDMS)
4155 4155
4156 } // namespace content 4156 } // namespace content
OLDNEW
« no previous file with comments | « content/public/test/render_view_test.cc ('k') | content/renderer/render_view_browsertest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698