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

Unified Diff: content/renderer/render_frame_impl.cc

Issue 1001043002: Refactor NavigationState to use NavigationParams (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Addressed comments Created 5 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 | « content/renderer/navigation_state_impl.cc ('k') | content/renderer/render_view_browsertest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/renderer/render_frame_impl.cc
diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc
index 7d24ae9b21dbc2737808c9b679995e566d23a335..dc15bec55814613a00bf7e1955d1a18af647976d 100644
--- a/content/renderer/render_frame_impl.cc
+++ b/content/renderer/render_frame_impl.cc
@@ -84,6 +84,7 @@
#include "content/renderer/media/webmediaplayer_ms.h"
#include "content/renderer/memory_benchmarking_extension.h"
#include "content/renderer/mojo/service_registry_js_wrapper.h"
+#include "content/renderer/navigation_state_impl.h"
#include "content/renderer/notification_permission_dispatcher.h"
#include "content/renderer/npapi/plugin_channel_host.h"
#include "content/renderer/pepper/plugin_instance_throttler_impl.h"
@@ -2042,7 +2043,8 @@ void RenderFrameImpl::didAccessInitialDocument(blink::WebLocalFrame* frame) {
if (!frame->parent()) {
DocumentState* document_state =
DocumentState::FromDataSource(frame->dataSource());
- NavigationState* navigation_state = document_state->navigation_state();
+ NavigationStateImpl* navigation_state =
+ static_cast<NavigationStateImpl*>(document_state->navigation_state());
if (!navigation_state->request_committed()) {
Send(new FrameHostMsg_DidAccessInitialDocument(routing_id_));
@@ -2284,11 +2286,12 @@ void RenderFrameImpl::willSubmitForm(blink::WebLocalFrame* frame,
DCHECK(!frame_ || frame_ == frame);
DocumentState* document_state =
DocumentState::FromDataSource(frame->provisionalDataSource());
- NavigationState* navigation_state = document_state->navigation_state();
+ NavigationStateImpl* navigation_state =
+ static_cast<NavigationStateImpl*>(document_state->navigation_state());
InternalDocumentStateData* internal_data =
InternalDocumentStateData::FromDocumentState(document_state);
- if (ui::PageTransitionCoreTypeIs(navigation_state->transition_type(),
+ if (ui::PageTransitionCoreTypeIs(navigation_state->GetTransitionType(),
ui::PAGE_TRANSITION_LINK)) {
navigation_state->set_transition_type(ui::PAGE_TRANSITION_FORM_SUBMIT);
}
@@ -2366,8 +2369,8 @@ void RenderFrameImpl::didStartProvisionalLoad(blink::WebLocalFrame* frame,
// Subframe navigations that don't add session history items must be
// marked with AUTO_SUBFRAME. See also didFailProvisionalLoad for how we
// handle loading of error pages.
- document_state->navigation_state()->set_transition_type(
- ui::PAGE_TRANSITION_AUTO_SUBFRAME);
+ static_cast<NavigationStateImpl*>(document_state->navigation_state())
+ ->set_transition_type(ui::PAGE_TRANSITION_AUTO_SUBFRAME);
}
FOR_EACH_OBSERVER(RenderViewObserver, render_view_->observers(),
@@ -2449,7 +2452,8 @@ void RenderFrameImpl::didFailProvisionalLoad(blink::WebLocalFrame* frame,
frame->enableViewSourceMode(false);
DocumentState* document_state = DocumentState::FromDataSource(ds);
- NavigationState* navigation_state = document_state->navigation_state();
+ NavigationStateImpl* navigation_state =
+ static_cast<NavigationStateImpl*>(document_state->navigation_state());
// If this is a failed back/forward/reload navigation, then we need to do a
// 'replace' load. This is necessary to avoid messing up session history.
@@ -2462,28 +2466,19 @@ void RenderFrameImpl::didFailProvisionalLoad(blink::WebLocalFrame* frame,
// TODO(davidben): This should also take the failed navigation's replacement
// state into account, if a location.replace() failed.
bool replace =
- navigation_state->pending_page_id() != -1 ||
- ui::PageTransitionCoreTypeIs(navigation_state->transition_type(),
- ui::PAGE_TRANSITION_AUTO_SUBFRAME);
+ navigation_state->history_params().page_id != -1 ||
+ ui::PageTransitionCoreTypeIs(navigation_state->GetTransitionType(),
+ ui::PAGE_TRANSITION_AUTO_SUBFRAME);
// If we failed on a browser initiated request, then make sure that our error
// page load is regarded as the same browser initiated request.
- if (!navigation_state->is_content_initiated()) {
+ if (!navigation_state->IsContentInitiated()) {
render_view_->pending_navigation_params_.reset(new NavigationParams(
- CommonNavigationParams(
- error.unreachableURL, Referrer(),
- navigation_state->transition_type(), FrameMsg_Navigate_Type::NORMAL,
- true, base::TimeTicks(),
- FrameMsg_UILoadMetricsReportType::NO_REPORT, GURL(), GURL()),
- StartNavigationParams(false, std::string(),
- std::vector<unsigned char>(), replace, -1, -1),
+ navigation_state->common_params(), navigation_state->start_params(),
CommitNavigationParams(false, base::TimeTicks(), std::vector<GURL>(),
false, std::string(),
document_state->request_time()),
- HistoryNavigationParams(
- PageState(), navigation_state->pending_page_id(),
- navigation_state->pending_history_list_offset(), -1, 0,
- navigation_state->history_list_was_cleared())));
+ navigation_state->history_params()));
}
// Load an error page.
@@ -2500,7 +2495,8 @@ void RenderFrameImpl::didCommitProvisionalLoad(
DCHECK(!frame_ || frame_ == frame);
DocumentState* document_state =
DocumentState::FromDataSource(frame->dataSource());
- NavigationState* navigation_state = document_state->navigation_state();
+ NavigationStateImpl* navigation_state =
+ static_cast<NavigationStateImpl*>(document_state->navigation_state());
if (proxy_routing_id_ != MSG_ROUTING_NONE) {
RenderFrameProxy* proxy =
@@ -2515,8 +2511,8 @@ void RenderFrameImpl::didCommitProvisionalLoad(
// before updating the HistoryController state.
render_view_->UpdateSessionHistory(frame);
- render_view_->history_controller()->UpdateForCommit(this, item, commit_type,
- navigation_state->was_within_same_page());
+ render_view_->history_controller()->UpdateForCommit(
+ this, item, commit_type, navigation_state->WasWithinSamePage());
InternalDocumentStateData* internal_data =
InternalDocumentStateData::FromDocumentState(document_state);
@@ -2541,10 +2537,11 @@ void RenderFrameImpl::didCommitProvisionalLoad(
// UpdateSessionHistory and update page_id_ even in this case, so that
// the current entry gets a state update and so that we don't send a
// state update to the wrong entry when we swap back in.
- DCHECK_IMPLIES(navigation_state->should_replace_current_entry(),
- render_view_->history_list_length_ > 0);
+ DCHECK_IMPLIES(
+ navigation_state->start_params().should_replace_current_entry,
+ render_view_->history_list_length_ > 0);
if (GetLoadingUrl() != GURL(kSwappedOutURL) &&
- !navigation_state->should_replace_current_entry()) {
+ !navigation_state->start_params().should_replace_current_entry) {
// Advance our offset in session history, applying the length limit.
// There is now no forward history.
render_view_->history_list_offset_++;
@@ -2564,14 +2561,14 @@ void RenderFrameImpl::didCommitProvisionalLoad(
// Note that we need to check if the page ID changed. In the case of a
// reload, the page ID doesn't change, and UpdateSessionHistory gets the
// previous URL and the current page ID, which would be wrong.
- if (navigation_state->pending_page_id() != -1 &&
- navigation_state->pending_page_id() != render_view_->page_id_ &&
+ if (navigation_state->history_params().page_id != -1 &&
+ navigation_state->history_params().page_id != render_view_->page_id_ &&
!navigation_state->request_committed()) {
// This is a successful session history navigation!
- render_view_->page_id_ = navigation_state->pending_page_id();
+ render_view_->page_id_ = navigation_state->history_params().page_id;
render_view_->history_list_offset_ =
- navigation_state->pending_history_list_offset();
+ navigation_state->history_params().pending_history_list_offset;
}
}
@@ -2581,10 +2578,10 @@ void RenderFrameImpl::didCommitProvisionalLoad(
FOR_EACH_OBSERVER(RenderViewObserver, render_view_->observers_,
DidCommitProvisionalLoad(frame, is_new_navigation));
- FOR_EACH_OBSERVER(RenderFrameObserver, observers_,
- DidCommitProvisionalLoad(
- is_new_navigation,
- navigation_state->was_within_same_page()));
+ FOR_EACH_OBSERVER(
+ RenderFrameObserver, observers_,
+ DidCommitProvisionalLoad(is_new_navigation,
+ navigation_state->WasWithinSamePage()));
if (!frame->parent()) { // Only for top frames.
RenderThreadImpl* render_thread_impl = RenderThreadImpl::current();
@@ -2798,8 +2795,8 @@ void RenderFrameImpl::didNavigateWithinPage(blink::WebLocalFrame* frame,
DocumentState* document_state =
DocumentState::FromDataSource(frame->dataSource());
- NavigationState* new_state = document_state->navigation_state();
- new_state->set_was_within_same_page(true);
+ static_cast<NavigationStateImpl*>(document_state->navigation_state())
+ ->set_was_within_same_page(true);
didCommitProvisionalLoad(frame, item, commit_type);
}
@@ -3015,8 +3012,9 @@ void RenderFrameImpl::willSendRequest(
DCHECK(document_state);
InternalDocumentStateData* internal_data =
InternalDocumentStateData::FromDocumentState(document_state);
- NavigationState* navigation_state = document_state->navigation_state();
- ui::PageTransition transition_type = navigation_state->transition_type();
+ NavigationStateImpl* navigation_state =
+ static_cast<NavigationStateImpl*>(document_state->navigation_state());
+ ui::PageTransition transition_type = navigation_state->GetTransitionType();
WebDataSource* frame_ds = frame->provisionalDataSource();
if (frame_ds && frame_ds->isClientRedirect()) {
transition_type = ui::PageTransitionFromInt(
@@ -3085,7 +3083,7 @@ void RenderFrameImpl::willSendRequest(
// this navigation later require a request transfer, all state is preserved
// when it is re-created in the new process.
bool should_replace_current_entry = false;
- if (navigation_state->is_content_initiated()) {
+ if (navigation_state->IsContentInitiated()) {
should_replace_current_entry = data_source->replacesCurrentHistoryItem();
} else {
// If the navigation is browser-initiated, the NavigationState contains the
@@ -3094,7 +3092,7 @@ void RenderFrameImpl::willSendRequest(
// TODO(davidben): Avoid this awkward duplication of state. See comment on
// NavigationState::should_replace_current_entry().
should_replace_current_entry =
- navigation_state->should_replace_current_entry();
+ navigation_state->start_params().should_replace_current_entry;
}
int provider_id = kInvalidServiceWorkerProviderId;
@@ -3135,13 +3133,14 @@ void RenderFrameImpl::willSendRequest(
GURL(frame->document().securityOrigin().toString()));
extra_data->set_parent_is_main_frame(parent && !parent->parent());
extra_data->set_parent_render_frame_id(parent_routing_id);
- extra_data->set_allow_download(navigation_state->allow_download());
+ extra_data->set_allow_download(
+ navigation_state->common_params().allow_download);
extra_data->set_transition_type(transition_type);
extra_data->set_should_replace_current_entry(should_replace_current_entry);
extra_data->set_transferred_request_child_id(
- navigation_state->transferred_request_child_id());
+ navigation_state->start_params().transferred_request_child_id);
extra_data->set_transferred_request_request_id(
- navigation_state->transferred_request_request_id());
+ navigation_state->start_params().transferred_request_request_id);
extra_data->set_service_worker_provider_id(provider_id);
extra_data->set_stream_override(stream_override.Pass());
request.setExtraData(extra_data);
@@ -3162,11 +3161,11 @@ void RenderFrameImpl::willSendRequest(
request.setRequestorID(render_view_->GetRoutingID());
request.setHasUserGesture(WebUserGestureIndicator::isProcessingUserGesture());
- if (!navigation_state->extra_headers().empty()) {
+ if (!navigation_state->start_params().extra_headers.empty()) {
for (net::HttpUtil::HeadersIterator i(
- navigation_state->extra_headers().begin(),
- navigation_state->extra_headers().end(), "\n");
- i.GetNext(); ) {
+ navigation_state->start_params().extra_headers.begin(),
+ navigation_state->start_params().extra_headers.end(), "\n");
+ i.GetNext();) {
if (LowerCaseEqualsASCII(i.name(), "referer")) {
WebString referrer = WebSecurityPolicy::generateReferrerHeader(
blink::WebReferrerPolicyDefault,
@@ -3721,7 +3720,8 @@ void RenderFrameImpl::SendDidCommitProvisionalLoad(
const WebURLResponse& response = ds->response();
DocumentState* document_state = DocumentState::FromDataSource(ds);
- NavigationState* navigation_state = document_state->navigation_state();
+ NavigationStateImpl* navigation_state =
+ static_cast<NavigationStateImpl*>(document_state->navigation_state());
InternalDocumentStateData* internal_data =
InternalDocumentStateData::FromDocumentState(document_state);
@@ -3744,7 +3744,7 @@ void RenderFrameImpl::SendDidCommitProvisionalLoad(
WebURLResponseExtraDataImpl* extra_data = GetExtraDataFromResponse(response);
if (extra_data)
params.was_fetched_via_proxy = extra_data->was_fetched_via_proxy();
- params.was_within_same_page = navigation_state->was_within_same_page();
+ params.was_within_same_page = navigation_state->WasWithinSamePage();
params.security_info = response.securityInfo();
// Set the URL to be displayed in the browser UI to the user.
@@ -3816,7 +3816,7 @@ void RenderFrameImpl::SendDidCommitProvisionalLoad(
// Update contents MIME type for main frame.
params.contents_mime_type = ds->response().mimeType().utf8();
- params.transition = navigation_state->transition_type();
+ params.transition = navigation_state->GetTransitionType();
if (!ui::PageTransitionIsMainFrame(params.transition)) {
// If the main frame does a load, it should not be reported as a subframe
// navigation. This can occur in the following case:
@@ -3859,7 +3859,7 @@ void RenderFrameImpl::SendDidCommitProvisionalLoad(
params.original_request_url = GetOriginalRequestURL(ds);
params.history_list_was_cleared =
- navigation_state->history_list_was_cleared();
+ navigation_state->history_params().should_clear_history_list;
params.report_type = static_cast<FrameMsg_UILoadMetricsReportType::Value>(
frame->dataSource()->request().inputPerfMetricReportPolicy());
@@ -3886,7 +3886,7 @@ void RenderFrameImpl::SendDidCommitProvisionalLoad(
else
params.transition = ui::PAGE_TRANSITION_AUTO_SUBFRAME;
- DCHECK(!navigation_state->history_list_was_cleared());
+ DCHECK(!navigation_state->history_params().should_clear_history_list);
params.history_list_was_cleared = false;
params.report_type = FrameMsg_UILoadMetricsReportType::NO_REPORT;
@@ -4052,8 +4052,9 @@ WebNavigationPolicy RenderFrameImpl::DecidePolicyForNavigation(
// A content initiated navigation may have originated from a link-click,
// script, drag-n-drop operation, etc.
- bool is_content_initiated = static_cast<DocumentState*>(info.extraData)->
- navigation_state()->is_content_initiated();
+ DocumentState* document_state = static_cast<DocumentState*>(info.extraData);
+ bool is_content_initiated =
+ document_state->navigation_state()->IsContentInitiated();
// Experimental:
// If --enable-strict-site-isolation is enabled, send all top-level
@@ -4233,8 +4234,9 @@ void RenderFrameImpl::OpenURL(WebFrame* frame,
WebDataSource* ds = frame->provisionalDataSource();
if (ds) {
DocumentState* document_state = DocumentState::FromDataSource(ds);
- NavigationState* navigation_state = document_state->navigation_state();
- if (navigation_state->is_content_initiated()) {
+ NavigationStateImpl* navigation_state =
+ static_cast<NavigationStateImpl*>(document_state->navigation_state());
+ if (navigation_state->IsContentInitiated()) {
params.should_replace_current_entry =
ds->replacesCurrentHistoryItem() &&
render_view_->history_list_length_;
@@ -4245,7 +4247,7 @@ void RenderFrameImpl::OpenURL(WebFrame* frame,
// TODO(davidben): Avoid this awkward duplication of state. See comment on
// NavigationState::should_replace_current_entry().
params.should_replace_current_entry =
- navigation_state->should_replace_current_entry();
+ navigation_state->start_params().should_replace_current_entry;
}
} else {
params.should_replace_current_entry = false;
« no previous file with comments | « content/renderer/navigation_state_impl.cc ('k') | content/renderer/render_view_browsertest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698