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

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

Issue 7491096: Fix regression with back-button not working on prerendered and instant pages. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 9 years, 4 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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_view.h" 5 #include "content/renderer/render_view.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <cmath> 8 #include <cmath>
9 #include <string> 9 #include <string>
10 #include <vector> 10 #include <vector>
(...skipping 685 matching lines...) Expand 10 before | Expand all | Expand 10 after
696 IPC_MESSAGE_HANDLER(ViewMsg_ContextMenuClosed, OnContextMenuClosed) 696 IPC_MESSAGE_HANDLER(ViewMsg_ContextMenuClosed, OnContextMenuClosed)
697 // TODO(viettrungluu): Move to a separate message filter. 697 // TODO(viettrungluu): Move to a separate message filter.
698 #if defined(ENABLE_FLAPPER_HACKS) 698 #if defined(ENABLE_FLAPPER_HACKS)
699 IPC_MESSAGE_HANDLER(PepperMsg_ConnectTcpACK, OnConnectTcpACK) 699 IPC_MESSAGE_HANDLER(PepperMsg_ConnectTcpACK, OnConnectTcpACK)
700 #endif 700 #endif
701 #if defined(OS_MACOSX) 701 #if defined(OS_MACOSX)
702 IPC_MESSAGE_HANDLER(ViewMsg_SetInLiveResize, OnSetInLiveResize) 702 IPC_MESSAGE_HANDLER(ViewMsg_SetInLiveResize, OnSetInLiveResize)
703 #endif 703 #endif
704 IPC_MESSAGE_HANDLER(ViewMsg_UpdateRemoteAccessClientFirewallTraversal, 704 IPC_MESSAGE_HANDLER(ViewMsg_UpdateRemoteAccessClientFirewallTraversal,
705 OnUpdateRemoteAccessClientFirewallTraversal) 705 OnUpdateRemoteAccessClientFirewallTraversal)
706 IPC_MESSAGE_HANDLER(ViewMsg_OffsetAndPruneHistory,
707 OnOffsetAndPruneHistory)
706 // Have the super handle all other messages. 708 // Have the super handle all other messages.
707 IPC_MESSAGE_UNHANDLED(handled = RenderWidget::OnMessageReceived(message)) 709 IPC_MESSAGE_UNHANDLED(handled = RenderWidget::OnMessageReceived(message))
708 IPC_END_MESSAGE_MAP() 710 IPC_END_MESSAGE_MAP()
709 return handled; 711 return handled;
710 } 712 }
711 713
712 void RenderView::OnNavigate(const ViewMsg_Navigate_Params& params) { 714 void RenderView::OnNavigate(const ViewMsg_Navigate_Params& params) {
713 if (!webview()) 715 if (!webview())
714 return; 716 return;
715 717
718 LOG(ERROR) << "OnNavigate."
719 << " rv=" << this
720 << " url=" << params.url.spec()
721 << " history_list_offset_=" << history_list_offset_
722 << " history_list_length_=" << history_list_length_
723 << " params.current_history_list_offset="
724 << params.current_history_list_offset
725 << " params.current_history_list_length="
726 << params.current_history_list_length;
727
716 bool is_reload = 728 bool is_reload =
717 params.navigation_type == ViewMsg_Navigate_Type::RELOAD || 729 params.navigation_type == ViewMsg_Navigate_Type::RELOAD ||
718 params.navigation_type == ViewMsg_Navigate_Type::RELOAD_IGNORING_CACHE; 730 params.navigation_type == ViewMsg_Navigate_Type::RELOAD_IGNORING_CACHE;
719 731
720 // If this is a stale back/forward (due to a recent navigation the browser 732 // If this is a stale back/forward (due to a recent navigation the browser
721 // didn't know about), ignore it. 733 // didn't know about), ignore it.
722 if (IsBackForwardToStaleEntry(params, is_reload)) 734 if (IsBackForwardToStaleEntry(params, is_reload))
723 return; 735 return;
724 736
725 // Swap this renderer back in if necessary. 737 // Swap this renderer back in if necessary.
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after
838 850
839 // Note: if the history_list_length_ is 0 for a back/forward, we must be 851 // Note: if the history_list_length_ is 0 for a back/forward, we must be
840 // restoring from a previous session. We'll update our state in OnNavigate. 852 // restoring from a previous session. We'll update our state in OnNavigate.
841 if (!is_back_forward || history_list_length_ <= 0) 853 if (!is_back_forward || history_list_length_ <= 0)
842 return false; 854 return false;
843 855
844 DCHECK_EQ(static_cast<int>(history_page_ids_.size()), history_list_length_); 856 DCHECK_EQ(static_cast<int>(history_page_ids_.size()), history_list_length_);
845 857
846 // Check for whether the forward history has been cropped due to a recent 858 // Check for whether the forward history has been cropped due to a recent
847 // navigation the browser didn't know about. 859 // navigation the browser didn't know about.
848 if (params.pending_history_list_offset >= history_list_length_) 860 if (params.pending_history_list_offset >= history_list_length_) {
861 LOG(ERROR) << "History Length is cropped."
862 << " rv=" << this
863 << " pending=" << params.pending_history_list_offset
864 << " stored=" << history_list_length_;
849 return true; 865 return true;
866 }
850 867
851 // Check for whether this entry has been replaced with a new one. 868 // Check for whether this entry has been replaced with a new one.
852 int expected_page_id = 869 int expected_page_id =
853 history_page_ids_[params.pending_history_list_offset]; 870 history_page_ids_[params.pending_history_list_offset];
854 if (expected_page_id > 0 && params.page_id != expected_page_id) 871 if (expected_page_id > 0 && params.page_id != expected_page_id) {
872 LOG(ERROR) << "Mismatched page id";
855 return true; 873 return true;
874 }
856 875
857 return false; 876 return false;
858 } 877 }
859 878
860 // Stop loading the current page 879 // Stop loading the current page
861 void RenderView::OnStop() { 880 void RenderView::OnStop() {
862 if (webview()) { 881 if (webview()) {
863 WebFrame* main_frame = webview()->mainFrame(); 882 WebFrame* main_frame = webview()->mainFrame();
864 // Stop the alt error page fetcher. If we let it continue it may complete 883 // Stop the alt error page fetcher. If we let it continue it may complete
865 // and cause RenderViewHostManager to swap to this RenderView, even though 884 // and cause RenderViewHostManager to swap to this RenderView, even though
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after
1010 void RenderView::OnScrollFocusedEditableNodeIntoView() { 1029 void RenderView::OnScrollFocusedEditableNodeIntoView() {
1011 WebKit::WebNode node = GetFocusedNode(); 1030 WebKit::WebNode node = GetFocusedNode();
1012 if (!node.isNull()) { 1031 if (!node.isNull()) {
1013 if (IsEditableNode(node)) 1032 if (IsEditableNode(node))
1014 // TODO(varunjain): Change webkit API to scroll a particular node into 1033 // TODO(varunjain): Change webkit API to scroll a particular node into
1015 // view and use that API here instead. 1034 // view and use that API here instead.
1016 webview()->scrollFocusedNodeIntoView(); 1035 webview()->scrollFocusedNodeIntoView();
1017 } 1036 }
1018 } 1037 }
1019 1038
1039 void RenderView::OnOffsetAndPruneHistory(int offset) {
1040 LOG(ERROR) << "OnOffsetAndPruneHistory."
1041 << " offset=" << offset;
1042 int current_page_id = -1;
1043 if (history_list_offset_ >= 0) {
1044 current_page_id = history_page_ids_[history_list_offset_];
1045 }
1046
1047 // We may have multiple things in the list? Or just one?
1048 history_list_offset_ = offset;
1049 history_list_length_ = offset + 1;
1050 if (history_list_length_ >= 0)
1051 history_page_ids_.resize(history_list_length_, -1);
1052 history_page_ids_[history_list_offset_] = current_page_id;
1053 }
1054
1020 /////////////////////////////////////////////////////////////////////////////// 1055 ///////////////////////////////////////////////////////////////////////////////
1021 1056
1022 // Tell the embedding application that the URL of the active page has changed 1057 // Tell the embedding application that the URL of the active page has changed
1023 void RenderView::UpdateURL(WebFrame* frame) { 1058 void RenderView::UpdateURL(WebFrame* frame) {
1024 WebDataSource* ds = frame->dataSource(); 1059 WebDataSource* ds = frame->dataSource();
1025 DCHECK(ds); 1060 DCHECK(ds);
1026 1061
1027 const WebURLRequest& request = ds->request(); 1062 const WebURLRequest& request = ds->request();
1028 const WebURLRequest& original_request = ds->originalRequest(); 1063 const WebURLRequest& original_request = ds->originalRequest();
1029 const WebURLResponse& response = ds->response(); 1064 const WebURLResponse& response = ds->response();
(...skipping 193 matching lines...) Expand 10 before | Expand all | Expand 10 after
1223 // we are navigating away from. Otherwise, this is the first navigation, so 1258 // we are navigating away from. Otherwise, this is the first navigation, so
1224 // there is no past session history to record. 1259 // there is no past session history to record.
1225 if (page_id_ == -1) 1260 if (page_id_ == -1)
1226 return; 1261 return;
1227 1262
1228 const WebHistoryItem& item = 1263 const WebHistoryItem& item =
1229 webview()->mainFrame()->previousHistoryItem(); 1264 webview()->mainFrame()->previousHistoryItem();
1230 if (item.isNull()) 1265 if (item.isNull())
1231 return; 1266 return;
1232 1267
1268 LOG(ERROR) << "Updating session history."
1269 << " rv=" << this
1270 << " page_id_=" << page_id_;
1233 Send(new ViewHostMsg_UpdateState( 1271 Send(new ViewHostMsg_UpdateState(
1234 routing_id_, page_id_, webkit_glue::HistoryItemToString(item))); 1272 routing_id_, page_id_, webkit_glue::HistoryItemToString(item)));
1235 } 1273 }
1236 1274
1237 void RenderView::OpenURL( 1275 void RenderView::OpenURL(
1238 const GURL& url, const GURL& referrer, WebNavigationPolicy policy) { 1276 const GURL& url, const GURL& referrer, WebNavigationPolicy policy) {
1239 Send(new ViewHostMsg_OpenURL( 1277 Send(new ViewHostMsg_OpenURL(
1240 routing_id_, url, referrer, NavigationPolicyToDisposition(policy))); 1278 routing_id_, url, referrer, NavigationPolicyToDisposition(policy)));
1241 } 1279 }
1242 1280
(...skipping 1243 matching lines...) Expand 10 before | Expand all | Expand 10 after
2486 2524
2487 // We bump our Page ID to correspond with the new session history entry. 2525 // We bump our Page ID to correspond with the new session history entry.
2488 page_id_ = next_page_id_++; 2526 page_id_ = next_page_id_++;
2489 2527
2490 // Advance our offset in session history, applying the length limit. There 2528 // Advance our offset in session history, applying the length limit. There
2491 // is now no forward history. 2529 // is now no forward history.
2492 history_list_offset_++; 2530 history_list_offset_++;
2493 if (history_list_offset_ >= content::kMaxSessionHistoryEntries) 2531 if (history_list_offset_ >= content::kMaxSessionHistoryEntries)
2494 history_list_offset_ = content::kMaxSessionHistoryEntries - 1; 2532 history_list_offset_ = content::kMaxSessionHistoryEntries - 1;
2495 history_list_length_ = history_list_offset_ + 1; 2533 history_list_length_ = history_list_offset_ + 1;
2534 LOG(ERROR) << "didCommitProvisionalLoad."
2535 << " rv=" << this
2536 << " page_id_" << page_id_
2537 << " history_list_length_=" << history_list_length_;
2496 history_page_ids_.resize(history_list_length_, -1); 2538 history_page_ids_.resize(history_list_length_, -1);
2497 history_page_ids_[history_list_offset_] = page_id_; 2539 history_page_ids_[history_list_offset_] = page_id_;
2498 } else { 2540 } else {
2499 // Inspect the navigation_state on this frame to see if the navigation 2541 // Inspect the navigation_state on this frame to see if the navigation
2500 // corresponds to a session history navigation... Note: |frame| may or 2542 // corresponds to a session history navigation... Note: |frame| may or
2501 // may not be the toplevel frame, but for the case of capturing session 2543 // may not be the toplevel frame, but for the case of capturing session
2502 // history, the first committed frame suffices. We keep track of whether 2544 // history, the first committed frame suffices. We keep track of whether
2503 // we've seen this commit before so that only capture session history once 2545 // we've seen this commit before so that only capture session history once
2504 // per navigation. 2546 // per navigation.
2505 // 2547 //
(...skipping 1956 matching lines...) Expand 10 before | Expand all | Expand 10 after
4462 } 4504 }
4463 #endif 4505 #endif
4464 4506
4465 void RenderView::OnContextMenuClosed( 4507 void RenderView::OnContextMenuClosed(
4466 const webkit_glue::CustomContextMenuContext& custom_context) { 4508 const webkit_glue::CustomContextMenuContext& custom_context) {
4467 if (custom_context.is_pepper_menu) 4509 if (custom_context.is_pepper_menu)
4468 pepper_delegate_.OnContextMenuClosed(custom_context); 4510 pepper_delegate_.OnContextMenuClosed(custom_context);
4469 else 4511 else
4470 context_menu_node_.reset(); 4512 context_menu_node_.reset();
4471 } 4513 }
OLDNEW
« content/browser/tab_contents/tab_contents.cc ('K') | « content/renderer/render_view.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698