| Index: content/renderer/render_frame_impl.cc
|
| diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc
|
| index f8c5afa3813259675d63cc3326165b50e68b20ef..e98e8297cb4a00f44912245e986f109b2843803d 100644
|
| --- a/content/renderer/render_frame_impl.cc
|
| +++ b/content/renderer/render_frame_impl.cc
|
| @@ -4826,10 +4826,11 @@ void RenderFrameImpl::NavigateInternal(
|
| pending_navigation_params_->common_params.navigation_start =
|
| SanitizeNavigationTiming(load_type, common_params.navigation_start,
|
| renderer_navigation_start);
|
| - // Perform a navigation to a data url if needed.
|
| - if (!common_params.base_url_for_data_url.is_empty() ||
|
| - (browser_side_navigation &&
|
| - common_params.url.SchemeIs(url::kDataScheme))) {
|
| + if (!common_params.data_url_with_base_url.is_empty()) {
|
| + LoadDataWithBaseURL(common_params, frame_);
|
| + } else if (browser_side_navigation &&
|
| + common_params.url.SchemeIs(url::kDataScheme)) {
|
| + // Perform a navigation to a data url if needed.
|
| LoadDataURL(common_params, frame_);
|
| } else {
|
| // Load the request.
|
| @@ -5074,13 +5075,30 @@ void RenderFrameImpl::LoadDataURL(const CommonNavigationParams& params,
|
| // A loadData request with a specified base URL.
|
| std::string mime_type, charset, data;
|
| if (net::DataURL::Parse(params.url, &mime_type, &charset, &data)) {
|
| - const GURL base_url = params.base_url_for_data_url.is_empty() ?
|
| - params.url : params.base_url_for_data_url;
|
| + const GURL base_url;
|
| + frame->loadData(WebData(data.c_str(), data.length()),
|
| + WebString::fromUTF8(mime_type),
|
| + WebString::fromUTF8(charset),
|
| + GURL(), // base_url
|
| + GURL(), // history_url
|
| + false);
|
| + } else {
|
| + CHECK(false) << "Invalid URL passed: "
|
| + << params.url.possibly_invalid_spec();
|
| + }
|
| +}
|
| +
|
| +void RenderFrameImpl::LoadDataWithBaseURL(const CommonNavigationParams& params,
|
| + WebFrame* frame) {
|
| + std::string mime_type, charset, data;
|
| + if (net::DataURL::Parse(params.data_url_with_base_url, &mime_type, &charset,
|
| + &data)) {
|
| frame->loadData(
|
| WebData(data.c_str(), data.length()),
|
| WebString::fromUTF8(mime_type),
|
| WebString::fromUTF8(charset),
|
| - base_url,
|
| + params.url, // base_url
|
| + // Needed to not identify only changing history url as reload.
|
| params.history_url_for_data_url,
|
| false);
|
| } else {
|
| @@ -5146,6 +5164,7 @@ bool RenderFrameImpl::ShouldDisplayErrorPageForFailedLoad(
|
|
|
| GURL RenderFrameImpl::GetLoadingUrl() const {
|
| WebDataSource* ds = frame_->dataSource();
|
| +
|
| if (ds->hasUnreachableURL())
|
| return ds->unreachableURL();
|
|
|
|
|