Index: content/renderer/render_frame_impl.cc |
diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc |
index 91b13ef75ba42395e458b6d8451e0d81e94a39e3..50c57cdaa803bce10ce23f1f35013ee96211d35f 100644 |
--- a/content/renderer/render_frame_impl.cc |
+++ b/content/renderer/render_frame_impl.cc |
@@ -677,6 +677,13 @@ CommonNavigationParams MakeCommonNavigationParams( |
navigation_type = FrameMsg_Navigate_Type::RELOAD; |
} |
+ base::Optional<SourceLocation> source_location; |
+ if (!info.sourceLocation.url.isNull()) { |
+ source_location = SourceLocation(info.sourceLocation.url.latin1(), |
+ info.sourceLocation.lineNumber, |
+ info.sourceLocation.columnNumber); |
+ } |
+ |
const RequestExtraData* extra_data = |
static_cast<RequestExtraData*>(info.urlRequest.getExtraData()); |
DCHECK(extra_data); |
@@ -686,7 +693,7 @@ CommonNavigationParams MakeCommonNavigationParams( |
report_type, GURL(), GURL(), |
static_cast<PreviewsState>(info.urlRequest.getPreviewsState()), |
base::TimeTicks::Now(), info.urlRequest.httpMethod().latin1(), |
- GetRequestBodyForWebURLRequest(info.urlRequest)); |
+ GetRequestBodyForWebURLRequest(info.urlRequest), source_location); |
} |
media::Context3D GetSharedMainThreadContext3D( |
@@ -3417,6 +3424,20 @@ void RenderFrameImpl::didCreateDataSource(blink::WebLocalFrame* frame, |
// UnloadEventStart and UnloadEventEnd are still missing. |
} |
+ // PlzNavigate: update the source location before processing the navigation |
+ // commit. |
+ if (IsBrowserSideNavigationEnabled() && |
+ navigation_state->common_params().source_location.has_value()) { |
+ blink::WebSourceLocation source_location; |
+ source_location.url = WebString::fromLatin1( |
+ navigation_state->common_params().source_location->url); |
+ source_location.lineNumber = |
+ navigation_state->common_params().source_location->line_number; |
+ source_location.columnNumber = |
+ navigation_state->common_params().source_location->column_number; |
+ datasource->setSourceLocation(source_location); |
+ } |
+ |
// Create the serviceworker's per-document network observing object if it |
// does not exist (When navigation happens within a page, the provider already |
// exists). |
@@ -6123,6 +6144,14 @@ void RenderFrameImpl::NavigateInternal( |
// In case LoadRequest failed before didCreateDataSource was called. |
pending_navigation_params_.reset(); |
+ |
+ // PlzNavigate: reset the source location now that the commit checks have been |
+ // processed. |
+ if (IsBrowserSideNavigationEnabled()) { |
+ frame_->dataSource()->resetSourceLocation(); |
+ if (frame_->provisionalDataSource()) |
+ frame_->provisionalDataSource()->resetSourceLocation(); |
+ } |
} |
void RenderFrameImpl::UpdateEncoding(WebFrame* frame, |