| Index: third_party/WebKit/Source/core/loader/FrameLoader.cpp | 
| diff --git a/third_party/WebKit/Source/core/loader/FrameLoader.cpp b/third_party/WebKit/Source/core/loader/FrameLoader.cpp | 
| index 8cd77648a4dd0116286c5cf0df7be66d44d27041..7203ef8a2cfd4b84370797a8c79ef740909036aa 100644 | 
| --- a/third_party/WebKit/Source/core/loader/FrameLoader.cpp | 
| +++ b/third_party/WebKit/Source/core/loader/FrameLoader.cpp | 
| @@ -748,6 +748,17 @@ bool FrameLoader::PrepareRequestForThisFrame(FrameLoadRequest& request) { | 
| return false; | 
| } | 
|  | 
| +  // Block content-initiated, top-frame navigations to data URLs. | 
| +  if (frame_->IsMainFrame() && | 
| +      !request.GetResourceRequest().IsSameDocumentNavigation() && | 
| +      !frame_->Client()->AllowContentInitiatedDataUrlNavigations( | 
| +          request.OriginDocument()->Url()) && | 
| +      !request.OriginDocument()->GetSecurityOrigin()->CanNavigateInTopFrame( | 
| +          url)) { | 
| +    ReportTopLevelNavigationFailed(frame_, url.ElidedString()); | 
| +    return false; | 
| +  } | 
| + | 
| if (!request.Form() && request.FrameName().IsEmpty()) | 
| request.SetFrameName(frame_->GetDocument()->BaseTarget()); | 
| return true; | 
| @@ -987,6 +998,17 @@ void FrameLoader::ReportLocalLoadFailed(LocalFrame* frame, const String& url) { | 
| "Not allowed to load local resource: " + url)); | 
| } | 
|  | 
| +void FrameLoader::ReportTopLevelNavigationFailed(LocalFrame* frame, | 
| +                                                 const String& url) { | 
| +  DCHECK(!url.IsEmpty()); | 
| +  if (!frame) | 
| +    return; | 
| + | 
| +  frame->GetDocument()->AddConsoleMessage(ConsoleMessage::Create( | 
| +      kSecurityMessageSource, kErrorMessageLevel, | 
| +      "Not allowed to top-level navigate to resource: " + url)); | 
| +} | 
| + | 
| void FrameLoader::StopAllLoaders() { | 
| if (frame_->GetDocument()->PageDismissalEventBeingDispatched() != | 
| Document::kNoDismissal) | 
|  |