Plumb WebTriggeringEventInfo through LoadURLExternally
This code path is used for e.g. shift-clicks coming from subframes
(strangely). By plumbing it into LoadURLExternally / OpenURL, we can
use this information in the popup blocker.
This patch makes the additional refactor to split LoadURLExternally
into two, LoadURLExternally and DownloadURL.
Bug: 733330
Change-Id: I94476ecbf3f55ef26664d7c6a294e84fce7bba32
Reviewed-on: https://chromium-review.googlesource.com/565681
Reviewed-by: David Trainor <[email protected]>
Reviewed-by: Nick Carter <[email protected]>
Reviewed-by: Daniel Cheng <[email protected]>
Commit-Queue: Charlie Harrison <[email protected]>
Cr-Commit-Position: refs/heads/master@{#487251}
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(