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

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

Issue 2584513003: PlzNavigate: identify same-page browser-initiated navigation. (Closed)
Patch Set: Adding a DCHECK to probably make a lot of tests fail. Created 3 years, 11 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/navigator_impl.h" 5 #include "content/browser/frame_host/navigator_impl.h"
6 6
7 #include <utility> 7 #include <utility>
8 8
9 #include "base/logging.h" 9 #include "base/logging.h"
10 #include "base/metrics/histogram_macros.h" 10 #include "base/metrics/histogram_macros.h"
(...skipping 28 matching lines...) Expand all
39 #include "content/public/browser/page_navigator.h" 39 #include "content/public/browser/page_navigator.h"
40 #include "content/public/browser/render_view_host.h" 40 #include "content/public/browser/render_view_host.h"
41 #include "content/public/browser/stream_handle.h" 41 #include "content/public/browser/stream_handle.h"
42 #include "content/public/browser/user_metrics.h" 42 #include "content/public/browser/user_metrics.h"
43 #include "content/public/common/bindings_policy.h" 43 #include "content/public/common/bindings_policy.h"
44 #include "content/public/common/browser_side_navigation_policy.h" 44 #include "content/public/common/browser_side_navigation_policy.h"
45 #include "content/public/common/content_client.h" 45 #include "content/public/common/content_client.h"
46 #include "content/public/common/content_constants.h" 46 #include "content/public/common/content_constants.h"
47 #include "content/public/common/resource_response.h" 47 #include "content/public/common/resource_response.h"
48 #include "net/base/net_errors.h" 48 #include "net/base/net_errors.h"
49 #include "net/base/url_util.h"
49 #include "url/gurl.h" 50 #include "url/gurl.h"
50 51
51 namespace content { 52 namespace content {
52 53
53 namespace { 54 namespace {
54 55
55 FrameMsg_Navigate_Type::Value GetNavigationType( 56 FrameMsg_Navigate_Type::Value GetNavigationType(
56 BrowserContext* browser_context, 57 BrowserContext* browser_context,
57 const NavigationEntryImpl& entry, 58 const NavigationEntryImpl& entry,
58 ReloadType reload_type) { 59 ReloadType reload_type) {
(...skipping 336 matching lines...) Expand 10 before | Expand all | Expand 10 after
395 dest_render_frame_host->set_is_loading(true); 396 dest_render_frame_host->set_is_loading(true);
396 397
397 // A session history navigation should have been accompanied by state. 398 // A session history navigation should have been accompanied by state.
398 // TODO(creis): This is known to be failing in UseSubframeNavigationEntries 399 // TODO(creis): This is known to be failing in UseSubframeNavigationEntries
399 // in https://crbug.com/568703, when the PageState on a FrameNavigationEntry 400 // in https://crbug.com/568703, when the PageState on a FrameNavigationEntry
400 // is unexpectedly empty. Until the cause is found, keep this as a DCHECK 401 // is unexpectedly empty. Until the cause is found, keep this as a DCHECK
401 // and load the URL without PageState. 402 // and load the URL without PageState.
402 if (is_pending_entry && controller_->GetPendingEntryIndex() != -1) 403 if (is_pending_entry && controller_->GetPendingEntryIndex() != -1)
403 DCHECK(frame_entry.page_state().IsValid()); 404 DCHECK(frame_entry.page_state().IsValid());
404 405
406 bool is_history_navigation = frame_entry.page_state().IsValid();
407 bool is_same_document_fragment_change =
408 net::IsFragmentAddedOrUpdated(frame_tree_node->current_url(),
409 dest_url) &&
410 !is_history_navigation;
411
405 // Navigate in the desired RenderFrameHost. 412 // Navigate in the desired RenderFrameHost.
406 // We can skip this step in the rare case that this is a transfer navigation 413 // We can skip this step in the rare case that this is a transfer navigation
407 // which began in the chosen RenderFrameHost, since the request has already 414 // which began in the chosen RenderFrameHost, since the request has already
408 // been issued. In that case, simply resume the response. 415 // been issued. In that case, simply resume the response.
409 bool is_transfer_to_same = 416 bool is_transfer_to_same =
410 is_transfer && 417 is_transfer &&
411 entry.transferred_global_request_id().child_id == 418 entry.transferred_global_request_id().child_id ==
412 dest_render_frame_host->GetProcess()->GetID(); 419 dest_render_frame_host->GetProcess()->GetID();
413 if (!is_transfer_to_same) { 420 if (!is_transfer_to_same) {
414 navigation_data_.reset(new NavigationMetricsData( 421 navigation_data_.reset(new NavigationMetricsData(
415 navigation_start, dest_url, entry.restore_type())); 422 navigation_start, dest_url, entry.restore_type()));
416 // Create the navigation parameters. 423 // Create the navigation parameters.
417 FrameMsg_Navigate_Type::Value navigation_type = GetNavigationType( 424 FrameMsg_Navigate_Type::Value navigation_type = GetNavigationType(
418 controller_->GetBrowserContext(), entry, reload_type); 425 controller_->GetBrowserContext(), entry, reload_type);
419 dest_render_frame_host->Navigate( 426 dest_render_frame_host->Navigate(
420 entry.ConstructCommonNavigationParams( 427 entry.ConstructCommonNavigationParams(
421 frame_entry, post_body, dest_url, dest_referrer, navigation_type, 428 frame_entry, post_body, dest_url, dest_referrer, navigation_type,
422 previews_state, navigation_start), 429 previews_state, navigation_start),
423 entry.ConstructStartNavigationParams(), 430 entry.ConstructStartNavigationParams(),
424 entry.ConstructRequestNavigationParams( 431 entry.ConstructRequestNavigationParams(
425 frame_entry, is_same_document_history_load, 432 frame_entry, is_same_document_fragment_change,
426 is_history_navigation_in_new_child, 433 is_same_document_history_load, is_history_navigation_in_new_child,
427 entry.GetSubframeUniqueNames(frame_tree_node), 434 entry.GetSubframeUniqueNames(frame_tree_node),
428 frame_tree_node->has_committed_real_load(), 435 frame_tree_node->has_committed_real_load(),
429 controller_->GetPendingEntryIndex() == -1, 436 controller_->GetPendingEntryIndex() == -1,
430 controller_->GetIndexOfEntry(&entry), 437 controller_->GetIndexOfEntry(&entry),
431 controller_->GetLastCommittedEntryIndex(), 438 controller_->GetLastCommittedEntryIndex(),
432 controller_->GetEntryCount())); 439 controller_->GetEntryCount()));
433 } else { 440 } else {
434 dest_render_frame_host->navigation_handle()->set_is_transferring(false); 441 dest_render_frame_host->navigation_handle()->set_is_transferring(false);
435 } 442 }
436 } 443 }
(...skipping 828 matching lines...) Expand 10 before | Expand all | Expand 10 after
1265 if (navigation_handle) 1272 if (navigation_handle)
1266 navigation_handle->update_entry_id_for_transfer(entry->GetUniqueID()); 1273 navigation_handle->update_entry_id_for_transfer(entry->GetUniqueID());
1267 1274
1268 controller_->SetPendingEntry(std::move(entry)); 1275 controller_->SetPendingEntry(std::move(entry));
1269 if (delegate_) 1276 if (delegate_)
1270 delegate_->NotifyChangedNavigationState(content::INVALIDATE_TYPE_URL); 1277 delegate_->NotifyChangedNavigationState(content::INVALIDATE_TYPE_URL);
1271 } 1278 }
1272 } 1279 }
1273 1280
1274 } // namespace content 1281 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698