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

Unified Diff: chrome/renderer/render_view.cc

Issue 1090002: Send session history offset and length parameters in the Navigate message to... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: '' Created 10 years, 9 months 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/renderer/render_view.h ('k') | chrome/test/data/session_history/record_length.html » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/renderer/render_view.cc
===================================================================
--- chrome/renderer/render_view.cc (revision 41858)
+++ chrome/renderer/render_view.cc (working copy)
@@ -306,8 +306,8 @@
devtools_agent_(NULL),
devtools_client_(NULL),
file_chooser_completion_(NULL),
- history_back_list_count_(0),
- history_forward_list_count_(0),
+ history_list_offset_(-1),
+ history_list_length_(0),
has_unload_listener_(false),
decrement_shared_popup_at_destruction_(false),
autofill_query_id_(0),
@@ -559,8 +559,6 @@
IPC_MESSAGE_HANDLER(ViewMsg_InstallMissingPlugin, OnInstallMissingPlugin)
IPC_MESSAGE_HANDLER(ViewMsg_RunFileChooserResponse, OnFileChooserResponse)
IPC_MESSAGE_HANDLER(ViewMsg_EnableViewSourceMode, OnEnableViewSourceMode)
- IPC_MESSAGE_HANDLER(ViewMsg_UpdateBackForwardListCount,
- OnUpdateBackForwardListCount)
IPC_MESSAGE_HANDLER(ViewMsg_GetAllSavableResourceLinksForCurrentPage,
OnGetAllSavableResourceLinksForCurrentPage)
IPC_MESSAGE_HANDLER(
@@ -850,6 +848,9 @@
if (!webview())
return;
+ history_list_offset_ = params.current_history_list_offset;
+ history_list_length_ = params.current_history_list_length;
+
if (devtools_agent_.get())
devtools_agent_->OnNavigate();
@@ -878,7 +879,10 @@
// initiated any load resulting from JS execution.
if (!params.url.SchemeIs(chrome::kJavaScriptScheme)) {
NavigationState* state = NavigationState::CreateBrowserInitiated(
- params.page_id, params.transition, params.request_time);
+ params.page_id,
+ params.pending_history_list_offset,
+ params.transition,
+ params.request_time);
if (params.navigation_type == ViewMsg_Navigate_Params::RESTORE) {
// We're doing a load of a page that was restored from the last session.
// By default this prefers the cache over loading (LOAD_PREFERRING_CACHE)
@@ -958,7 +962,10 @@
return;
pending_navigation_state_.reset(NavigationState::CreateBrowserInitiated(
- new_navigation ? -1 : page_id_, PageTransition::LINK, Time::Now()));
+ new_navigation ? -1 : page_id_,
+ history_list_offset_,
+ PageTransition::LINK,
+ Time::Now()));
pending_navigation_state_->set_security_info(security_info);
webview()->mainFrame()->loadHTMLString(
@@ -1944,38 +1951,17 @@
}
void RenderView::navigateBackForwardSoon(int offset) {
- history_back_list_count_ += offset;
- history_forward_list_count_ -= offset;
-
Send(new ViewHostMsg_GoToEntryAtOffset(routing_id_, offset));
}
int RenderView::historyBackListCount() {
- return history_back_list_count_;
+ return history_list_offset_ < 0 ? 0 : history_list_offset_;
}
int RenderView::historyForwardListCount() {
- return history_forward_list_count_;
+ return history_list_length_ - historyBackListCount() - 1;
}
-void RenderView::didAddHistoryItem() {
- // We don't want to update the history length for the start page
- // navigation.
- WebFrame* main_frame = webview()->mainFrame();
- DCHECK(main_frame != NULL);
-
- WebDataSource* ds = main_frame->dataSource();
- DCHECK(ds != NULL);
-
- NavigationState* navigation_state = NavigationState::FromDataSource(ds);
- DCHECK(navigation_state);
- if (navigation_state->transition_type() == PageTransition::START_PAGE)
- return;
-
- history_back_list_count_++;
- history_forward_list_count_ = 0;
-}
-
void RenderView::didUpdateInspectorSettings() {
Send(new ViewHostMsg_UpdateInspectorSettings(
routing_id_, webview()->inspectorSettings().utf8()));
@@ -2512,6 +2498,7 @@
if (!navigation_state->is_content_initiated()) {
pending_navigation_state_.reset(NavigationState::CreateBrowserInitiated(
navigation_state->pending_page_id(),
+ navigation_state->pending_history_list_offset(),
navigation_state->transition_type(),
navigation_state->request_time()));
}
@@ -2567,6 +2554,15 @@
// We bump our Page ID to correspond with the new session history entry.
page_id_ = next_page_id_++;
+ // Advance our offset in session history, applying the length limit. There
+ // is now no forward history.
+ history_list_offset_++;
brettw 2010/03/18 18:21:17 Optional: did you consider writing this as: hist
+ history_list_length_ = history_list_offset_ + 1;
+ if (history_list_length_ > chrome::kMaxSessionHistoryEntries) {
+ history_list_offset_ = chrome::kMaxSessionHistoryEntries - 1;
+ history_list_length_ = chrome::kMaxSessionHistoryEntries;
+ }
+
MessageLoop::current()->PostDelayedTask(FROM_HERE,
method_factory_.NewRunnableMethod(&RenderView::CapturePageInfo,
page_id_, true),
@@ -2588,6 +2584,8 @@
// This is a successful session history navigation!
UpdateSessionHistory(frame);
page_id_ = navigation_state->pending_page_id();
+
+ history_list_offset_ = navigation_state->pending_history_list_offset();
}
}
@@ -3724,12 +3722,6 @@
browser_window_id_ = window_id;
}
-void RenderView::OnUpdateBackForwardListCount(int back_list_count,
- int forward_list_count) {
- history_back_list_count_ = back_list_count;
- history_forward_list_count_ = forward_list_count;
-}
-
void RenderView::OnGetAccessibilityInfo(
const webkit_glue::WebAccessibility::InParams& in_params,
webkit_glue::WebAccessibility::OutParams* out_params) {
« no previous file with comments | « chrome/renderer/render_view.h ('k') | chrome/test/data/session_history/record_length.html » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698