diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc
index 894e553..e29e6f1 100644
--- a/content/renderer/render_frame_impl.cc
+++ b/content/renderer/render_frame_impl.cc
@@ -2616,9 +2616,11 @@
   return nullptr;
 }
 
-void RenderFrameImpl::LoadURLExternally(const blink::WebURLRequest& request,
-                                        blink::WebNavigationPolicy policy) {
-  LoadURLExternally(request, policy, WebString(), false);
+void RenderFrameImpl::LoadURLExternally(
+    const blink::WebURLRequest& request,
+    blink::WebNavigationPolicy policy,
+    blink::WebTriggeringEventInfo triggering_event_info) {
+  LoadURLExternally(request, policy, triggering_event_info, false);
 }
 
 void RenderFrameImpl::LoadErrorPage(int reason) {
@@ -3314,29 +3316,30 @@
       static_cast<int32_t>(source_line), source_name.Utf16()));
 }
 
-void RenderFrameImpl::LoadURLExternally(const blink::WebURLRequest& request,
-                                        blink::WebNavigationPolicy policy,
-                                        const blink::WebString& suggested_name,
-                                        bool should_replace_current_entry) {
-  Referrer referrer(RenderViewImpl::GetReferrerFromRequest(frame_, request));
-  if (policy == blink::kWebNavigationPolicyDownload) {
-    FrameHostMsg_DownloadUrl_Params params;
-    params.render_view_id = render_view_->GetRoutingID();
-    params.render_frame_id = GetRoutingID();
-    params.url = request.Url();
-    params.referrer = referrer;
-    params.initiator_origin = request.RequestorOrigin();
-    params.suggested_name = suggested_name.Utf16();
+void RenderFrameImpl::DownloadURL(const blink::WebURLRequest& request,
+                                  const blink::WebString& suggested_name) {
+  FrameHostMsg_DownloadUrl_Params params;
+  params.render_view_id = render_view_->GetRoutingID();
+  params.render_frame_id = GetRoutingID();
+  params.url = request.Url();
+  params.referrer = RenderViewImpl::GetReferrerFromRequest(frame_, request);
+  params.initiator_origin = request.RequestorOrigin();
+  params.suggested_name = suggested_name.Utf16();
 
-    Send(new FrameHostMsg_DownloadUrl(params));
-  } else {
-    // TODO(csharrison): Plumb triggering_event_info through Blink.
-    OpenURL(request.Url(), IsHttpPost(request),
-            GetRequestBodyForWebURLRequest(request),
-            GetWebURLRequestHeaders(request), referrer, policy,
-            should_replace_current_entry, false,
-            blink::WebTriggeringEventInfo::kUnknown);
-  }
+  Send(new FrameHostMsg_DownloadUrl(params));
+}
+
+void RenderFrameImpl::LoadURLExternally(
+    const blink::WebURLRequest& request,
+    blink::WebNavigationPolicy policy,
+    blink::WebTriggeringEventInfo triggering_event_info,
+    bool should_replace_current_entry) {
+  Referrer referrer(RenderViewImpl::GetReferrerFromRequest(frame_, request));
+  DCHECK_NE(policy, blink::kWebNavigationPolicyDownload);
+  OpenURL(request.Url(), IsHttpPost(request),
+          GetRequestBodyForWebURLRequest(request),
+          GetWebURLRequestHeaders(request), referrer, policy,
+          should_replace_current_entry, false, triggering_event_info);
 }
 
 void RenderFrameImpl::WillSendSubmitEvent(const blink::WebFormElement& form) {
@@ -5524,8 +5527,12 @@
       // need to save information about the navigation here.
       pending_navigation_info_.reset(new PendingNavigationInfo(info));
       return blink::kWebNavigationPolicyHandledByClient;
+    } else if (info.default_policy == blink::kWebNavigationPolicyDownload) {
+      DownloadURL(info.url_request, blink::WebString());
+      return blink::kWebNavigationPolicyIgnore;
     } else {
-      LoadURLExternally(info.url_request, info.default_policy);
+      LoadURLExternally(info.url_request, info.default_policy,
+                        info.triggering_event_info);
       return blink::kWebNavigationPolicyIgnore;
     }
   }
diff --git a/content/renderer/render_frame_impl.h b/content/renderer/render_frame_impl.h
index 351489a5..6f6388c 100644
--- a/content/renderer/render_frame_impl.h
+++ b/content/renderer/render_frame_impl.h
@@ -424,8 +424,10 @@
       const WebPluginInfo& info,
       const blink::WebPluginParams& params,
       std::unique_ptr<PluginInstanceThrottler> throttler) override;
-  void LoadURLExternally(const blink::WebURLRequest& request,
-                         blink::WebNavigationPolicy policy) override;
+  void LoadURLExternally(
+      const blink::WebURLRequest& request,
+      blink::WebNavigationPolicy policy,
+      blink::WebTriggeringEventInfo triggering_event_info) override;
   void ExecuteJavaScript(const base::string16& javascript) override;
   bool IsMainFrame() override;
   bool IsHidden() override;
@@ -543,9 +545,11 @@
                               const blink::WebString& source_name,
                               unsigned source_line,
                               const blink::WebString& stack_trace) override;
+  void DownloadURL(const blink::WebURLRequest& request,
+                   const blink::WebString& suggested_name) override;
   void LoadURLExternally(const blink::WebURLRequest& request,
                          blink::WebNavigationPolicy policy,
-                         const blink::WebString& suggested_name,
+                         blink::WebTriggeringEventInfo triggering_event_info,
                          bool should_replace_current_entry) override;
   void LoadErrorPage(int reason) override;
   blink::WebNavigationPolicy DecidePolicyForNavigation(
