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

Unified Diff: content/renderer/render_frame_impl.cc

Issue 1446253002: PlzNavigate: inform the WebFrameClient that a form will be submitted (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 1 month 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
Index: content/renderer/render_frame_impl.cc
diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc
index d92ca9a1aadae2f96c094c6df39eba4468ee7b52..78419a841204113ae0eeeb8dfc556141a91f5875 100644
--- a/content/renderer/render_frame_impl.cc
+++ b/content/renderer/render_frame_impl.cc
@@ -2556,24 +2556,30 @@ void RenderFrameImpl::willSendSubmitEvent(blink::WebLocalFrame* frame,
void RenderFrameImpl::willSubmitForm(blink::WebLocalFrame* frame,
const blink::WebFormElement& form) {
DCHECK(!frame_ || frame_ == frame);
- DocumentState* document_state =
- DocumentState::FromDataSource(frame->provisionalDataSource());
- NavigationStateImpl* navigation_state =
- static_cast<NavigationStateImpl*>(document_state->navigation_state());
- InternalDocumentStateData* internal_data =
- InternalDocumentStateData::FromDocumentState(document_state);
+ // With PlzNavigate-enabled, this will be called before a DataSource has been
+ // set-up.
+ // TODO(clamy): make sure the internal state is properly updated at some
+ // point in the navigation.
+ if (!base::CommandLine::ForCurrentProcess()->HasSwitch(
+ switches::kEnableBrowserSideNavigation)) {
+ DocumentState* document_state =
+ DocumentState::FromDataSource(frame->provisionalDataSource());
+ NavigationStateImpl* navigation_state =
+ static_cast<NavigationStateImpl*>(document_state->navigation_state());
+ InternalDocumentStateData* internal_data =
+ InternalDocumentStateData::FromDocumentState(document_state);
+ if (ui::PageTransitionCoreTypeIs(navigation_state->GetTransitionType(),
+ ui::PAGE_TRANSITION_LINK)) {
+ navigation_state->set_transition_type(ui::PAGE_TRANSITION_FORM_SUBMIT);
Nate Chapin 2015/12/08 23:18:38 I think you can check and modify pending_navigatio
clamy 2015/12/11 14:50:06 At that point pending_navigation_params_ should be
+ }
- if (ui::PageTransitionCoreTypeIs(navigation_state->GetTransitionType(),
- ui::PAGE_TRANSITION_LINK)) {
- navigation_state->set_transition_type(ui::PAGE_TRANSITION_FORM_SUBMIT);
+ // Save these to be processed when the ensuing navigation is committed.
+ WebSearchableFormData web_searchable_form_data(form);
+ internal_data->set_searchable_form_url(web_searchable_form_data.url());
+ internal_data->set_searchable_form_encoding(
Nate Chapin 2015/12/08 23:18:38 Can we stash these on one of the navigation params
clamy 2015/12/11 14:50:06 As explained above, we can't use the pending_navig
+ web_searchable_form_data.encoding().utf8());
}
- // Save these to be processed when the ensuing navigation is committed.
- WebSearchableFormData web_searchable_form_data(form);
- internal_data->set_searchable_form_url(web_searchable_form_data.url());
- internal_data->set_searchable_form_encoding(
- web_searchable_form_data.encoding().utf8());
-
FOR_EACH_OBSERVER(RenderFrameObserver, observers_, WillSubmitForm(form));
}
@@ -4555,7 +4561,7 @@ WebNavigationPolicy RenderFrameImpl::decidePolicyForNavigation(
info.urlRequest.checkForBrowserSideNavigation() &&
ShouldMakeNetworkRequestForURL(url)) {
BeginNavigation(&info.urlRequest);
- return blink::WebNavigationPolicyIgnore;
+ return blink::WebNavigationPolicyHandledByClient;
}
return info.defaultPolicy;

Powered by Google App Engine
This is Rietveld 408576698