Reenable framebusting
Change user gesture tracking from per-document to per-frame. This allows
user gesture state to survive navigation.
BUG=624061
CQ_INCLUDE_TRYBOTS=master.tryserver.chromium.linux:linux_site_isolation
Review-Url: https://codereview.chromium.org/2625773002
Cr-Commit-Position: refs/heads/master@{#444920}
diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc
index 11e7198..2d9323883 100644
--- a/content/renderer/render_frame_impl.cc
+++ b/content/renderer/render_frame_impl.cc
@@ -1571,8 +1571,6 @@
IPC_MESSAGE_HANDLER(FrameMsg_EnableViewSourceMode, OnEnableViewSourceMode)
IPC_MESSAGE_HANDLER(FrameMsg_SuppressFurtherDialogs,
OnSuppressFurtherDialogs)
- IPC_MESSAGE_HANDLER(FrameMsg_SetHasReceivedUserGesture,
- OnSetHasReceivedUserGesture)
IPC_MESSAGE_HANDLER(FrameMsg_RunFileChooserResponse, OnFileChooserResponse)
IPC_MESSAGE_HANDLER(FrameMsg_ClearFocusedElement, OnClearFocusedElement)
#if defined(OS_ANDROID)
@@ -3224,6 +3222,10 @@
observer.DidMatchCSS(newly_matching_selectors, stopped_matching_selectors);
}
+void RenderFrameImpl::setHasReceivedUserGesture() {
+ Send(new FrameHostMsg_SetHasReceivedUserGesture(routing_id_));
+}
+
bool RenderFrameImpl::shouldReportDetailedMessageForSource(
const blink::WebString& source) {
return GetContentClient()->renderer()->ShouldReportDetailedMessageForSource(
@@ -5674,11 +5676,6 @@
suppress_further_dialogs_ = true;
}
-void RenderFrameImpl::OnSetHasReceivedUserGesture() {
- DCHECK(frame_);
- frame_->setHasReceivedUserGesture();
-}
-
void RenderFrameImpl::OnFileChooserResponse(
const std::vector<content::FileChooserFileInfo>& files) {
// This could happen if we navigated to a different page before the user
diff --git a/content/renderer/render_frame_impl.h b/content/renderer/render_frame_impl.h
index 53041fd..0325f9e 100644
--- a/content/renderer/render_frame_impl.h
+++ b/content/renderer/render_frame_impl.h
@@ -519,6 +519,7 @@
const blink::WebVector<blink::WebString>& newly_matching_selectors,
const blink::WebVector<blink::WebString>& stopped_matching_selectors)
override;
+ void setHasReceivedUserGesture() override;
bool shouldReportDetailedMessageForSource(
const blink::WebString& source) override;
void didAddMessageToConsole(const blink::WebConsoleMessage& message,
@@ -890,7 +891,6 @@
void OnStopFinding(StopFindAction action);
void OnEnableViewSourceMode();
void OnSuppressFurtherDialogs();
- void OnSetHasReceivedUserGesture();
void OnFileChooserResponse(
const std::vector<content::FileChooserFileInfo>& files);
void OnClearFocusedElement();
diff --git a/content/renderer/render_frame_proxy.cc b/content/renderer/render_frame_proxy.cc
index fe58b65..efae963 100644
--- a/content/renderer/render_frame_proxy.cc
+++ b/content/renderer/render_frame_proxy.cc
@@ -243,6 +243,8 @@
state.has_potentially_trustworthy_unique_origin);
web_frame_->setReplicatedFeaturePolicyHeader(
ToWebParsedFeaturePolicy(state.feature_policy_header));
+ if (state.has_received_user_gesture)
+ web_frame_->setHasReceivedUserGesture();
web_frame_->resetReplicatedContentSecurityPolicy();
for (const auto& header : state.accumulated_csp_headers)
@@ -302,6 +304,8 @@
IPC_MESSAGE_HANDLER(InputMsg_SetFocus, OnSetPageFocus)
IPC_MESSAGE_HANDLER(FrameMsg_SetFocusedFrame, OnSetFocusedFrame)
IPC_MESSAGE_HANDLER(FrameMsg_WillEnterFullscreen, OnWillEnterFullscreen)
+ IPC_MESSAGE_HANDLER(FrameMsg_SetHasReceivedUserGesture,
+ OnSetHasReceivedUserGesture)
IPC_MESSAGE_UNHANDLED(handled = false)
IPC_END_MESSAGE_MAP()
@@ -409,6 +413,10 @@
web_frame_->willEnterFullscreen();
}
+void RenderFrameProxy::OnSetHasReceivedUserGesture() {
+ web_frame_->setHasReceivedUserGesture();
+}
+
void RenderFrameProxy::frameDetached(DetachType type) {
if (type == DetachType::Remove && web_frame_->parent()) {
web_frame_->parent()->removeChild(web_frame_);
@@ -503,10 +511,6 @@
Send(new FrameHostMsg_VisibilityChanged(routing_id_, visible));
}
-void RenderFrameProxy::setHasReceivedUserGesture() {
- Send(new FrameHostMsg_SetHasReceivedUserGesture(routing_id_));
-}
-
void RenderFrameProxy::didChangeOpener(blink::WebFrame* opener) {
// A proxy shouldn't normally be disowning its opener. It is possible to get
// here when a proxy that is being detached clears its opener, in which case
diff --git a/content/renderer/render_frame_proxy.h b/content/renderer/render_frame_proxy.h
index 3de7d667..c821dd07 100644
--- a/content/renderer/render_frame_proxy.h
+++ b/content/renderer/render_frame_proxy.h
@@ -134,7 +134,6 @@
void updateRemoteViewportIntersection(
const blink::WebRect& viewportIntersection) override;
void visibilityChanged(bool visible) override;
- void setHasReceivedUserGesture() override;
void didChangeOpener(blink::WebFrame* opener) override;
void advanceFocus(blink::WebFocusType type,
blink::WebLocalFrame* source) override;
@@ -175,6 +174,7 @@
void OnSetPageFocus(bool is_focused);
void OnSetFocusedFrame();
void OnWillEnterFullscreen();
+ void OnSetHasReceivedUserGesture();
// The routing ID by which this RenderFrameProxy is known.
const int routing_id_;