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

Unified Diff: content/renderer/render_frame_impl.cc

Issue 1449793002: data_with_base_url (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fix tests 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 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();

Powered by Google App Engine
This is Rietveld 408576698