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

Side by Side Diff: content/browser/frame_host/navigation_controller_impl.cc

Issue 562603002: Move PageTransition from //content/public/common to //ui/base (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase Created 6 years, 3 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
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/browser/frame_host/navigation_controller_impl.h" 5 #include "content/browser/frame_host/navigation_controller_impl.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/command_line.h" 8 #include "base/command_line.h"
9 #include "base/debug/trace_event.h" 9 #include "base/debug/trace_event.h"
10 #include "base/logging.h" 10 #include "base/logging.h"
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
88 } 88 }
89 89
90 // Configure all the NavigationEntries in entries for restore. This resets 90 // Configure all the NavigationEntries in entries for restore. This resets
91 // the transition type to reload and makes sure the content state isn't empty. 91 // the transition type to reload and makes sure the content state isn't empty.
92 void ConfigureEntriesForRestore( 92 void ConfigureEntriesForRestore(
93 std::vector<linked_ptr<NavigationEntryImpl> >* entries, 93 std::vector<linked_ptr<NavigationEntryImpl> >* entries,
94 NavigationController::RestoreType type) { 94 NavigationController::RestoreType type) {
95 for (size_t i = 0; i < entries->size(); ++i) { 95 for (size_t i = 0; i < entries->size(); ++i) {
96 // Use a transition type of reload so that we don't incorrectly increase 96 // Use a transition type of reload so that we don't incorrectly increase
97 // the typed count. 97 // the typed count.
98 (*entries)[i]->SetTransitionType(PAGE_TRANSITION_RELOAD); 98 (*entries)[i]->SetTransitionType(ui::PAGE_TRANSITION_RELOAD);
99 (*entries)[i]->set_restore_type(ControllerRestoreTypeToEntryType(type)); 99 (*entries)[i]->set_restore_type(ControllerRestoreTypeToEntryType(type));
100 // NOTE(darin): This code is only needed for backwards compat. 100 // NOTE(darin): This code is only needed for backwards compat.
101 SetPageStateIfEmpty((*entries)[i].get()); 101 SetPageStateIfEmpty((*entries)[i].get());
102 } 102 }
103 } 103 }
104 104
105 // There are two general cases where a navigation is in page: 105 // There are two general cases where a navigation is in page:
106 // 1. A fragment navigation, in which the url is kept the same except for the 106 // 1. A fragment navigation, in which the url is kept the same except for the
107 // reference fragment. 107 // reference fragment.
108 // 2. A history API navigation (pushState and replaceState). This case is 108 // 2. A history API navigation (pushState and replaceState). This case is
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
152 kMaxEntryCountForTestingNotSet; 152 kMaxEntryCountForTestingNotSet;
153 153
154 // Should Reload check for post data? The default is true, but is set to false 154 // Should Reload check for post data? The default is true, but is set to false
155 // when testing. 155 // when testing.
156 static bool g_check_for_repost = true; 156 static bool g_check_for_repost = true;
157 157
158 // static 158 // static
159 NavigationEntry* NavigationController::CreateNavigationEntry( 159 NavigationEntry* NavigationController::CreateNavigationEntry(
160 const GURL& url, 160 const GURL& url,
161 const Referrer& referrer, 161 const Referrer& referrer,
162 PageTransition transition, 162 ui::PageTransition transition,
163 bool is_renderer_initiated, 163 bool is_renderer_initiated,
164 const std::string& extra_headers, 164 const std::string& extra_headers,
165 BrowserContext* browser_context) { 165 BrowserContext* browser_context) {
166 // Allow the browser URL handler to rewrite the URL. This will, for example, 166 // Allow the browser URL handler to rewrite the URL. This will, for example,
167 // remove "view-source:" from the beginning of the URL to get the URL that 167 // remove "view-source:" from the beginning of the URL to get the URL that
168 // will actually be loaded. This real URL won't be shown to the user, just 168 // will actually be loaded. This real URL won't be shown to the user, just
169 // used internally. 169 // used internally.
170 GURL loaded_url(url); 170 GURL loaded_url(url);
171 bool reverse_on_redirect = false; 171 bool reverse_on_redirect = false;
172 BrowserURLHandlerImpl::GetInstance()->RewriteURLIfNecessary( 172 BrowserURLHandlerImpl::GetInstance()->RewriteURLIfNecessary(
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after
281 ReloadType reload_type) { 281 ReloadType reload_type) {
282 if (transient_entry_index_ != -1) { 282 if (transient_entry_index_ != -1) {
283 // If an interstitial is showing, treat a reload as a navigation to the 283 // If an interstitial is showing, treat a reload as a navigation to the
284 // transient entry's URL. 284 // transient entry's URL.
285 NavigationEntryImpl* transient_entry = 285 NavigationEntryImpl* transient_entry =
286 NavigationEntryImpl::FromNavigationEntry(GetTransientEntry()); 286 NavigationEntryImpl::FromNavigationEntry(GetTransientEntry());
287 if (!transient_entry) 287 if (!transient_entry)
288 return; 288 return;
289 LoadURL(transient_entry->GetURL(), 289 LoadURL(transient_entry->GetURL(),
290 Referrer(), 290 Referrer(),
291 PAGE_TRANSITION_RELOAD, 291 ui::PAGE_TRANSITION_RELOAD,
292 transient_entry->extra_headers()); 292 transient_entry->extra_headers());
293 return; 293 return;
294 } 294 }
295 295
296 NavigationEntryImpl* entry = NULL; 296 NavigationEntryImpl* entry = NULL;
297 int current_index = -1; 297 int current_index = -1;
298 298
299 // If we are reloading the initial navigation, just use the current 299 // If we are reloading the initial navigation, just use the current
300 // pending entry. Otherwise look up the current entry. 300 // pending entry. Otherwise look up the current entry.
301 if (IsInitialNavigation() && pending_entry_) { 301 if (IsInitialNavigation() && pending_entry_) {
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
369 } else { 369 } else {
370 pending_entry_ = entry; 370 pending_entry_ = entry;
371 pending_entry_index_ = current_index; 371 pending_entry_index_ = current_index;
372 372
373 // The title of the page being reloaded might have been removed in the 373 // The title of the page being reloaded might have been removed in the
374 // meanwhile, so we need to revert to the default title upon reload and 374 // meanwhile, so we need to revert to the default title upon reload and
375 // invalidate the previously cached title (SetTitle will do both). 375 // invalidate the previously cached title (SetTitle will do both).
376 // See Chromium issue 96041. 376 // See Chromium issue 96041.
377 pending_entry_->SetTitle(base::string16()); 377 pending_entry_->SetTitle(base::string16());
378 378
379 pending_entry_->SetTransitionType(PAGE_TRANSITION_RELOAD); 379 pending_entry_->SetTransitionType(ui::PAGE_TRANSITION_RELOAD);
380 } 380 }
381 381
382 NavigateToPendingEntry(reload_type); 382 NavigateToPendingEntry(reload_type);
383 } 383 }
384 } 384 }
385 385
386 void NavigationControllerImpl::CancelPendingReload() { 386 void NavigationControllerImpl::CancelPendingReload() {
387 DCHECK(pending_reload_ != NO_RELOAD); 387 DCHECK(pending_reload_ != NO_RELOAD);
388 pending_reload_ = NO_RELOAD; 388 pending_reload_ = NO_RELOAD;
389 } 389 }
(...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after
545 return; 545 return;
546 } 546 }
547 547
548 // Base the navigation on where we are now... 548 // Base the navigation on where we are now...
549 int current_index = GetCurrentEntryIndex(); 549 int current_index = GetCurrentEntryIndex();
550 550
551 DiscardNonCommittedEntries(); 551 DiscardNonCommittedEntries();
552 552
553 pending_entry_index_ = current_index - 1; 553 pending_entry_index_ = current_index - 1;
554 entries_[pending_entry_index_]->SetTransitionType( 554 entries_[pending_entry_index_]->SetTransitionType(
555 PageTransitionFromInt( 555 ui::PageTransitionFromInt(
556 entries_[pending_entry_index_]->GetTransitionType() | 556 entries_[pending_entry_index_]->GetTransitionType() |
557 PAGE_TRANSITION_FORWARD_BACK)); 557 ui::PAGE_TRANSITION_FORWARD_BACK));
558 NavigateToPendingEntry(NO_RELOAD); 558 NavigateToPendingEntry(NO_RELOAD);
559 } 559 }
560 560
561 void NavigationControllerImpl::GoForward() { 561 void NavigationControllerImpl::GoForward() {
562 if (!CanGoForward()) { 562 if (!CanGoForward()) {
563 NOTREACHED(); 563 NOTREACHED();
564 return; 564 return;
565 } 565 }
566 566
567 bool transient = (transient_entry_index_ != -1); 567 bool transient = (transient_entry_index_ != -1);
568 568
569 // Base the navigation on where we are now... 569 // Base the navigation on where we are now...
570 int current_index = GetCurrentEntryIndex(); 570 int current_index = GetCurrentEntryIndex();
571 571
572 DiscardNonCommittedEntries(); 572 DiscardNonCommittedEntries();
573 573
574 pending_entry_index_ = current_index; 574 pending_entry_index_ = current_index;
575 // If there was a transient entry, we removed it making the current index 575 // If there was a transient entry, we removed it making the current index
576 // the next page. 576 // the next page.
577 if (!transient) 577 if (!transient)
578 pending_entry_index_++; 578 pending_entry_index_++;
579 579
580 entries_[pending_entry_index_]->SetTransitionType( 580 entries_[pending_entry_index_]->SetTransitionType(
581 PageTransitionFromInt( 581 ui::PageTransitionFromInt(
582 entries_[pending_entry_index_]->GetTransitionType() | 582 entries_[pending_entry_index_]->GetTransitionType() |
583 PAGE_TRANSITION_FORWARD_BACK)); 583 ui::PAGE_TRANSITION_FORWARD_BACK));
584 NavigateToPendingEntry(NO_RELOAD); 584 NavigateToPendingEntry(NO_RELOAD);
585 } 585 }
586 586
587 void NavigationControllerImpl::GoToIndex(int index) { 587 void NavigationControllerImpl::GoToIndex(int index) {
588 if (index < 0 || index >= static_cast<int>(entries_.size())) { 588 if (index < 0 || index >= static_cast<int>(entries_.size())) {
589 NOTREACHED(); 589 NOTREACHED();
590 return; 590 return;
591 } 591 }
592 592
593 if (transient_entry_index_ != -1) { 593 if (transient_entry_index_ != -1) {
594 if (index == transient_entry_index_) { 594 if (index == transient_entry_index_) {
595 // Nothing to do when navigating to the transient. 595 // Nothing to do when navigating to the transient.
596 return; 596 return;
597 } 597 }
598 if (index > transient_entry_index_) { 598 if (index > transient_entry_index_) {
599 // Removing the transient is goint to shift all entries by 1. 599 // Removing the transient is goint to shift all entries by 1.
600 index--; 600 index--;
601 } 601 }
602 } 602 }
603 603
604 DiscardNonCommittedEntries(); 604 DiscardNonCommittedEntries();
605 605
606 pending_entry_index_ = index; 606 pending_entry_index_ = index;
607 entries_[pending_entry_index_]->SetTransitionType( 607 entries_[pending_entry_index_]->SetTransitionType(
608 PageTransitionFromInt( 608 ui::PageTransitionFromInt(
609 entries_[pending_entry_index_]->GetTransitionType() | 609 entries_[pending_entry_index_]->GetTransitionType() |
610 PAGE_TRANSITION_FORWARD_BACK)); 610 ui::PAGE_TRANSITION_FORWARD_BACK));
611 NavigateToPendingEntry(NO_RELOAD); 611 NavigateToPendingEntry(NO_RELOAD);
612 } 612 }
613 613
614 void NavigationControllerImpl::GoToOffset(int offset) { 614 void NavigationControllerImpl::GoToOffset(int offset) {
615 if (!CanGoToOffset(offset)) 615 if (!CanGoToOffset(offset))
616 return; 616 return;
617 617
618 GoToIndex(GetIndexForOffset(offset)); 618 GoToIndex(GetIndexForOffset(offset));
619 } 619 }
620 620
(...skipping 11 matching lines...) Expand all
632 GURL new_virtual_url(new_url); 632 GURL new_virtual_url(new_url);
633 if (BrowserURLHandlerImpl::GetInstance()->ReverseURLRewrite( 633 if (BrowserURLHandlerImpl::GetInstance()->ReverseURLRewrite(
634 &new_virtual_url, entry->GetVirtualURL(), browser_context_)) { 634 &new_virtual_url, entry->GetVirtualURL(), browser_context_)) {
635 entry->SetVirtualURL(new_virtual_url); 635 entry->SetVirtualURL(new_virtual_url);
636 } 636 }
637 } 637 }
638 638
639 void NavigationControllerImpl::LoadURL( 639 void NavigationControllerImpl::LoadURL(
640 const GURL& url, 640 const GURL& url,
641 const Referrer& referrer, 641 const Referrer& referrer,
642 PageTransition transition, 642 ui::PageTransition transition,
643 const std::string& extra_headers) { 643 const std::string& extra_headers) {
644 LoadURLParams params(url); 644 LoadURLParams params(url);
645 params.referrer = referrer; 645 params.referrer = referrer;
646 params.transition_type = transition; 646 params.transition_type = transition;
647 params.extra_headers = extra_headers; 647 params.extra_headers = extra_headers;
648 LoadURLWithParams(params); 648 LoadURLWithParams(params);
649 } 649 }
650 650
651 void NavigationControllerImpl::LoadURLWithParams(const LoadURLParams& params) { 651 void NavigationControllerImpl::LoadURLWithParams(const LoadURLParams& params) {
652 TRACE_EVENT1("browser,navigation", 652 TRACE_EVENT1("browser,navigation",
(...skipping 200 matching lines...) Expand 10 before | Expand all | Expand 10 after
853 } 853 }
854 UMA_HISTOGRAM_COUNTS("Navigation.RedirectChainSize", redirect_chain_size); 854 UMA_HISTOGRAM_COUNTS("Navigation.RedirectChainSize", redirect_chain_size);
855 855
856 // Once it is committed, we no longer need to track several pieces of state on 856 // Once it is committed, we no longer need to track several pieces of state on
857 // the entry. 857 // the entry.
858 active_entry->ResetForCommit(); 858 active_entry->ResetForCommit();
859 859
860 // The active entry's SiteInstance should match our SiteInstance. 860 // The active entry's SiteInstance should match our SiteInstance.
861 // TODO(creis): This check won't pass for subframes until we create entries 861 // TODO(creis): This check won't pass for subframes until we create entries
862 // for subframe navigations. 862 // for subframe navigations.
863 if (PageTransitionIsMainFrame(params.transition)) 863 if (ui::PageTransitionIsMainFrame(params.transition))
864 CHECK(active_entry->site_instance() == rfh->GetSiteInstance()); 864 CHECK(active_entry->site_instance() == rfh->GetSiteInstance());
865 865
866 // Remember the bindings the renderer process has at this point, so that 866 // Remember the bindings the renderer process has at this point, so that
867 // we do not grant this entry additional bindings if we come back to it. 867 // we do not grant this entry additional bindings if we come back to it.
868 active_entry->SetBindings( 868 active_entry->SetBindings(
869 static_cast<RenderFrameHostImpl*>(rfh)->GetEnabledBindings()); 869 static_cast<RenderFrameHostImpl*>(rfh)->GetEnabledBindings());
870 870
871 // Now prep the rest of the details for the notification and broadcast. 871 // Now prep the rest of the details for the notification and broadcast.
872 details->entry = active_entry; 872 details->entry = active_entry;
873 details->is_main_frame = 873 details->is_main_frame =
874 PageTransitionIsMainFrame(params.transition); 874 ui::PageTransitionIsMainFrame(params.transition);
875 details->serialized_security_info = params.security_info; 875 details->serialized_security_info = params.security_info;
876 details->http_status_code = params.http_status_code; 876 details->http_status_code = params.http_status_code;
877 NotifyNavigationEntryCommitted(details); 877 NotifyNavigationEntryCommitted(details);
878 878
879 return true; 879 return true;
880 } 880 }
881 881
882 NavigationType NavigationControllerImpl::ClassifyNavigation( 882 NavigationType NavigationControllerImpl::ClassifyNavigation(
883 RenderFrameHost* rfh, 883 RenderFrameHost* rfh,
884 const FrameHostMsg_DidCommitProvisionalLoad_Params& params) const { 884 const FrameHostMsg_DidCommitProvisionalLoad_Params& params) const {
(...skipping 26 matching lines...) Expand all
911 // 911 //
912 // In these cases, there's nothing we can do with them, so ignore. 912 // In these cases, there's nothing we can do with them, so ignore.
913 return NAVIGATION_TYPE_NAV_IGNORE; 913 return NAVIGATION_TYPE_NAV_IGNORE;
914 } 914 }
915 915
916 if (params.page_id > delegate_->GetMaxPageIDForSiteInstance( 916 if (params.page_id > delegate_->GetMaxPageIDForSiteInstance(
917 rfh->GetSiteInstance())) { 917 rfh->GetSiteInstance())) {
918 // Greater page IDs than we've ever seen before are new pages. We may or may 918 // Greater page IDs than we've ever seen before are new pages. We may or may
919 // not have a pending entry for the page, and this may or may not be the 919 // not have a pending entry for the page, and this may or may not be the
920 // main frame. 920 // main frame.
921 if (PageTransitionIsMainFrame(params.transition)) 921 if (ui::PageTransitionIsMainFrame(params.transition))
922 return NAVIGATION_TYPE_NEW_PAGE; 922 return NAVIGATION_TYPE_NEW_PAGE;
923 923
924 // When this is a new subframe navigation, we should have a committed page 924 // When this is a new subframe navigation, we should have a committed page
925 // for which it's a suframe in. This may not be the case when an iframe is 925 // for which it's a suframe in. This may not be the case when an iframe is
926 // navigated on a popup navigated to about:blank (the iframe would be 926 // navigated on a popup navigated to about:blank (the iframe would be
927 // written into the popup by script on the main page). For these cases, 927 // written into the popup by script on the main page). For these cases,
928 // there isn't any navigation stuff we can do, so just ignore it. 928 // there isn't any navigation stuff we can do, so just ignore it.
929 if (!GetLastCommittedEntry()) 929 if (!GetLastCommittedEntry())
930 return NAVIGATION_TYPE_NAV_IGNORE; 930 return NAVIGATION_TYPE_NAV_IGNORE;
931 931
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
976 temp.append("x"); 976 temp.append("x");
977 temp.append(","); 977 temp.append(",");
978 } 978 }
979 GURL url(temp); 979 GURL url(temp);
980 static_cast<RenderFrameHostImpl*>(rfh)->render_view_host()->Send( 980 static_cast<RenderFrameHostImpl*>(rfh)->render_view_host()->Send(
981 new ViewMsg_TempCrashWithData(url)); 981 new ViewMsg_TempCrashWithData(url));
982 return NAVIGATION_TYPE_NAV_IGNORE; 982 return NAVIGATION_TYPE_NAV_IGNORE;
983 } 983 }
984 NavigationEntryImpl* existing_entry = entries_[existing_entry_index].get(); 984 NavigationEntryImpl* existing_entry = entries_[existing_entry_index].get();
985 985
986 if (!PageTransitionIsMainFrame(params.transition)) { 986 if (!ui::PageTransitionIsMainFrame(params.transition)) {
987 // All manual subframes would get new IDs and were handled above, so we 987 // All manual subframes would get new IDs and were handled above, so we
988 // know this is auto. Since the current page was found in the navigation 988 // know this is auto. Since the current page was found in the navigation
989 // entry list, we're guaranteed to have a last committed entry. 989 // entry list, we're guaranteed to have a last committed entry.
990 DCHECK(GetLastCommittedEntry()); 990 DCHECK(GetLastCommittedEntry());
991 return NAVIGATION_TYPE_AUTO_SUBFRAME; 991 return NAVIGATION_TYPE_AUTO_SUBFRAME;
992 } 992 }
993 993
994 // Anything below here we know is a main frame navigation. 994 // Anything below here we know is a main frame navigation.
995 if (pending_entry_ && 995 if (pending_entry_ &&
996 !pending_entry_->is_renderer_initiated() && 996 !pending_entry_->is_renderer_initiated() &&
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
1091 last_committed_entry_index_ = -1; 1091 last_committed_entry_index_ = -1;
1092 } 1092 }
1093 1093
1094 InsertOrReplaceEntry(new_entry, replace_entry); 1094 InsertOrReplaceEntry(new_entry, replace_entry);
1095 } 1095 }
1096 1096
1097 void NavigationControllerImpl::RendererDidNavigateToExistingPage( 1097 void NavigationControllerImpl::RendererDidNavigateToExistingPage(
1098 RenderFrameHost* rfh, 1098 RenderFrameHost* rfh,
1099 const FrameHostMsg_DidCommitProvisionalLoad_Params& params) { 1099 const FrameHostMsg_DidCommitProvisionalLoad_Params& params) {
1100 // We should only get here for main frame navigations. 1100 // We should only get here for main frame navigations.
1101 DCHECK(PageTransitionIsMainFrame(params.transition)); 1101 DCHECK(ui::PageTransitionIsMainFrame(params.transition));
1102 1102
1103 // This is a back/forward navigation. The existing page for the ID is 1103 // This is a back/forward navigation. The existing page for the ID is
1104 // guaranteed to exist by ClassifyNavigation, and we just need to update it 1104 // guaranteed to exist by ClassifyNavigation, and we just need to update it
1105 // with new information from the renderer. 1105 // with new information from the renderer.
1106 int entry_index = GetEntryIndexWithPageID(rfh->GetSiteInstance(), 1106 int entry_index = GetEntryIndexWithPageID(rfh->GetSiteInstance(),
1107 params.page_id); 1107 params.page_id);
1108 DCHECK(entry_index >= 0 && 1108 DCHECK(entry_index >= 0 &&
1109 entry_index < static_cast<int>(entries_.size())); 1109 entry_index < static_cast<int>(entries_.size()));
1110 NavigationEntryImpl* entry = entries_[entry_index].get(); 1110 NavigationEntryImpl* entry = entries_[entry_index].get();
1111 1111
1112 // The URL may have changed due to redirects. 1112 // The URL may have changed due to redirects.
1113 entry->SetURL(params.url); 1113 entry->SetURL(params.url);
1114 entry->SetReferrer(params.referrer); 1114 entry->SetReferrer(params.referrer);
1115 if (entry->update_virtual_url_with_url()) 1115 if (entry->update_virtual_url_with_url())
1116 UpdateVirtualURLToURL(entry, params.url); 1116 UpdateVirtualURLToURL(entry, params.url);
1117 1117
1118 // The redirected to page should not inherit the favicon from the previous 1118 // The redirected to page should not inherit the favicon from the previous
1119 // page. 1119 // page.
1120 if (PageTransitionIsRedirect(params.transition)) 1120 if (ui::PageTransitionIsRedirect(params.transition))
1121 entry->GetFavicon() = FaviconStatus(); 1121 entry->GetFavicon() = FaviconStatus();
1122 1122
1123 // The site instance will normally be the same except during session restore, 1123 // The site instance will normally be the same except during session restore,
1124 // when no site instance will be assigned. 1124 // when no site instance will be assigned.
1125 DCHECK(entry->site_instance() == NULL || 1125 DCHECK(entry->site_instance() == NULL ||
1126 entry->site_instance() == rfh->GetSiteInstance()); 1126 entry->site_instance() == rfh->GetSiteInstance());
1127 entry->set_site_instance( 1127 entry->set_site_instance(
1128 static_cast<SiteInstanceImpl*>(rfh->GetSiteInstance())); 1128 static_cast<SiteInstanceImpl*>(rfh->GetSiteInstance()));
1129 1129
1130 entry->SetHasPostData(params.is_post); 1130 entry->SetHasPostData(params.is_post);
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
1171 existing_entry->SetHasPostData(params.is_post); 1171 existing_entry->SetHasPostData(params.is_post);
1172 existing_entry->SetPostID(params.post_id); 1172 existing_entry->SetPostID(params.post_id);
1173 1173
1174 DiscardNonCommittedEntries(); 1174 DiscardNonCommittedEntries();
1175 } 1175 }
1176 1176
1177 void NavigationControllerImpl::RendererDidNavigateInPage( 1177 void NavigationControllerImpl::RendererDidNavigateInPage(
1178 RenderFrameHost* rfh, 1178 RenderFrameHost* rfh,
1179 const FrameHostMsg_DidCommitProvisionalLoad_Params& params, 1179 const FrameHostMsg_DidCommitProvisionalLoad_Params& params,
1180 bool* did_replace_entry) { 1180 bool* did_replace_entry) {
1181 DCHECK(PageTransitionIsMainFrame(params.transition)) << 1181 DCHECK(ui::PageTransitionIsMainFrame(params.transition)) <<
1182 "WebKit should only tell us about in-page navs for the main frame."; 1182 "WebKit should only tell us about in-page navs for the main frame.";
1183 // We're guaranteed to have an entry for this one. 1183 // We're guaranteed to have an entry for this one.
1184 NavigationEntryImpl* existing_entry = GetEntryWithPageID( 1184 NavigationEntryImpl* existing_entry = GetEntryWithPageID(
1185 rfh->GetSiteInstance(), params.page_id); 1185 rfh->GetSiteInstance(), params.page_id);
1186 1186
1187 // Reference fragment navigation. We're guaranteed to have the last_committed 1187 // Reference fragment navigation. We're guaranteed to have the last_committed
1188 // entry and it will be the same page as the new navigation (minus the 1188 // entry and it will be the same page as the new navigation (minus the
1189 // reference fragments, of course). We'll update the URL of the existing 1189 // reference fragments, of course). We'll update the URL of the existing
1190 // entry without pruning the forward history. 1190 // entry without pruning the forward history.
1191 existing_entry->SetURL(params.url); 1191 existing_entry->SetURL(params.url);
(...skipping 10 matching lines...) Expand all
1202 1202
1203 // If a transient entry was removed, the indices might have changed, so we 1203 // If a transient entry was removed, the indices might have changed, so we
1204 // have to query the entry index again. 1204 // have to query the entry index again.
1205 last_committed_entry_index_ = 1205 last_committed_entry_index_ =
1206 GetEntryIndexWithPageID(rfh->GetSiteInstance(), params.page_id); 1206 GetEntryIndexWithPageID(rfh->GetSiteInstance(), params.page_id);
1207 } 1207 }
1208 1208
1209 void NavigationControllerImpl::RendererDidNavigateNewSubframe( 1209 void NavigationControllerImpl::RendererDidNavigateNewSubframe(
1210 RenderFrameHost* rfh, 1210 RenderFrameHost* rfh,
1211 const FrameHostMsg_DidCommitProvisionalLoad_Params& params) { 1211 const FrameHostMsg_DidCommitProvisionalLoad_Params& params) {
1212 if (PageTransitionCoreTypeIs(params.transition, 1212 if (ui::PageTransitionCoreTypeIs(params.transition,
1213 PAGE_TRANSITION_AUTO_SUBFRAME)) { 1213 ui::PAGE_TRANSITION_AUTO_SUBFRAME)) {
1214 // This is not user-initiated. Ignore. 1214 // This is not user-initiated. Ignore.
1215 DiscardNonCommittedEntriesInternal(); 1215 DiscardNonCommittedEntriesInternal();
1216 return; 1216 return;
1217 } 1217 }
1218 1218
1219 // Manual subframe navigations just get the current entry cloned so the user 1219 // Manual subframe navigations just get the current entry cloned so the user
1220 // can go back or forward to it. The actual subframe information will be 1220 // can go back or forward to it. The actual subframe information will be
1221 // stored in the page state for each of those entries. This happens out of 1221 // stored in the page state for each of those entries. This happens out of
1222 // band with the actual navigations. 1222 // band with the actual navigations.
1223 DCHECK(GetLastCommittedEntry()) << "ClassifyNavigation should guarantee " 1223 DCHECK(GetLastCommittedEntry()) << "ClassifyNavigation should guarantee "
(...skipping 310 matching lines...) Expand 10 before | Expand all | Expand 10 after
1534 NavigationEntry* NavigationControllerImpl::GetPendingEntry() const { 1534 NavigationEntry* NavigationControllerImpl::GetPendingEntry() const {
1535 return pending_entry_; 1535 return pending_entry_;
1536 } 1536 }
1537 1537
1538 int NavigationControllerImpl::GetPendingEntryIndex() const { 1538 int NavigationControllerImpl::GetPendingEntryIndex() const {
1539 return pending_entry_index_; 1539 return pending_entry_index_;
1540 } 1540 }
1541 1541
1542 void NavigationControllerImpl::InsertOrReplaceEntry(NavigationEntryImpl* entry, 1542 void NavigationControllerImpl::InsertOrReplaceEntry(NavigationEntryImpl* entry,
1543 bool replace) { 1543 bool replace) {
1544 DCHECK(entry->GetTransitionType() != PAGE_TRANSITION_AUTO_SUBFRAME); 1544 DCHECK(entry->GetTransitionType() != ui::PAGE_TRANSITION_AUTO_SUBFRAME);
1545 1545
1546 // Copy the pending entry's unique ID to the committed entry. 1546 // Copy the pending entry's unique ID to the committed entry.
1547 // I don't know if pending_entry_index_ can be other than -1 here. 1547 // I don't know if pending_entry_index_ can be other than -1 here.
1548 const NavigationEntryImpl* const pending_entry = 1548 const NavigationEntryImpl* const pending_entry =
1549 (pending_entry_index_ == -1) ? 1549 (pending_entry_index_ == -1) ?
1550 pending_entry_ : entries_[pending_entry_index_].get(); 1550 pending_entry_ : entries_[pending_entry_index_].get();
1551 if (pending_entry) 1551 if (pending_entry)
1552 entry->set_unique_id(pending_entry->GetUniqueID()); 1552 entry->set_unique_id(pending_entry->GetUniqueID());
1553 1553
1554 DiscardNonCommittedEntriesInternal(); 1554 DiscardNonCommittedEntriesInternal();
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
1599 // a session history navigation to the last committed page, RenderViewHost 1599 // a session history navigation to the last committed page, RenderViewHost
1600 // will force the throbber to start, but WebKit will essentially ignore the 1600 // will force the throbber to start, but WebKit will essentially ignore the
1601 // navigation, and won't send a message to stop the throbber. To prevent this 1601 // navigation, and won't send a message to stop the throbber. To prevent this
1602 // from happening, we drop the navigation here and stop the slow-to-commit 1602 // from happening, we drop the navigation here and stop the slow-to-commit
1603 // page from loading (which would normally happen during the navigation). 1603 // page from loading (which would normally happen during the navigation).
1604 if (pending_entry_index_ != -1 && 1604 if (pending_entry_index_ != -1 &&
1605 pending_entry_index_ == last_committed_entry_index_ && 1605 pending_entry_index_ == last_committed_entry_index_ &&
1606 (entries_[pending_entry_index_]->restore_type() == 1606 (entries_[pending_entry_index_]->restore_type() ==
1607 NavigationEntryImpl::RESTORE_NONE) && 1607 NavigationEntryImpl::RESTORE_NONE) &&
1608 (entries_[pending_entry_index_]->GetTransitionType() & 1608 (entries_[pending_entry_index_]->GetTransitionType() &
1609 PAGE_TRANSITION_FORWARD_BACK)) { 1609 ui::PAGE_TRANSITION_FORWARD_BACK)) {
1610 delegate_->Stop(); 1610 delegate_->Stop();
1611 1611
1612 // If an interstitial page is showing, we want to close it to get back 1612 // If an interstitial page is showing, we want to close it to get back
1613 // to what was showing before. 1613 // to what was showing before.
1614 if (delegate_->GetInterstitialPage()) 1614 if (delegate_->GetInterstitialPage())
1615 delegate_->GetInterstitialPage()->DontProceed(); 1615 delegate_->GetInterstitialPage()->DontProceed();
1616 1616
1617 DiscardNonCommittedEntries(); 1617 DiscardNonCommittedEntries();
1618 return; 1618 return;
1619 } 1619 }
(...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after
1788 } 1788 }
1789 } 1789 }
1790 } 1790 }
1791 1791
1792 void NavigationControllerImpl::SetGetTimestampCallbackForTest( 1792 void NavigationControllerImpl::SetGetTimestampCallbackForTest(
1793 const base::Callback<base::Time()>& get_timestamp_callback) { 1793 const base::Callback<base::Time()>& get_timestamp_callback) {
1794 get_timestamp_callback_ = get_timestamp_callback; 1794 get_timestamp_callback_ = get_timestamp_callback;
1795 } 1795 }
1796 1796
1797 } // namespace content 1797 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698