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(); |