Move handling of DraggableRegionsChanged notification from "view" to "frame".
This CL:
- Moves AnnotatedRegionsChanged method from blink::ChromeClient to
blink::LocalFrameClient
- Moves DraggableRegionsChanged method from blink::WebViewClient to
blink::WebFrameClient
- Move DraggableRegionsChanged method from content::RenderViewObserver
to content::RenderFrameObserver
- Moves handling of DraggableRegionsChanged from
extensions::ExtensionHelper (a content::RenderViewObserver) to
extensions::ExtensionFrameHelper (a content::RenderFrameObserver).
- Tweaks AppWindowContentsImpl::OnMessageReceived so that it is aware
which RenderFrameHost sent the ExtensionHostMsg_UpdateDraggableRegions
IPC.
These changes mean that the originating local frame is no longer lost in
the middle of the notification chain (and that hopefully/speculatively
we will no longer crash by trying to look into a wrong, remote frame
as observed in bug https://crbug.com/645472).
BUG=645472
Review-Url: https://codereview.chromium.org/2929493003
Cr-Commit-Position: refs/heads/master@{#479195}
diff --git a/content/public/renderer/render_frame_observer.h b/content/public/renderer/render_frame_observer.h
index ebf4cd4..8bb72a3 100644
--- a/content/public/renderer/render_frame_observer.h
+++ b/content/public/renderer/render_frame_observer.h
@@ -124,6 +124,9 @@
// Called when script in the page calls window.print().
virtual void ScriptedPrint(bool user_initiated) {}
+ // Called when draggable regions change.
+ virtual void DraggableRegionsChanged() {}
+
// IPC::Listener implementation.
bool OnMessageReceived(const IPC::Message& message) override;
diff --git a/content/public/renderer/render_view_observer.h b/content/public/renderer/render_view_observer.h
index be14ae7..c879f8b 100644
--- a/content/public/renderer/render_view_observer.h
+++ b/content/public/renderer/render_view_observer.h
@@ -14,7 +14,6 @@
class GURL;
namespace blink {
-class WebFrame;
class WebGestureEvent;
class WebLocalFrame;
struct WebURLError;
@@ -43,7 +42,6 @@
virtual void DidCommitProvisionalLoad(blink::WebLocalFrame* frame,
bool is_new_navigation) {}
virtual void DidClearWindowObject(blink::WebLocalFrame* frame) {}
- virtual void DraggableRegionsChanged(blink::WebFrame* frame) {}
virtual void DidCommitCompositorFrame() {}
virtual void DidUpdateLayout() {}
diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc
index 7b8dc04..9837f8b0 100644
--- a/content/renderer/render_frame_impl.cc
+++ b/content/renderer/render_frame_impl.cc
@@ -6701,6 +6701,11 @@
return blink::Platform::Current()->CreateURLLoader();
}
+void RenderFrameImpl::DraggableRegionsChanged() {
+ for (auto& observer : observers_)
+ observer.DraggableRegionsChanged();
+}
+
blink::WebPageVisibilityState RenderFrameImpl::GetVisibilityState() const {
return VisibilityState();
}
diff --git a/content/renderer/render_frame_impl.h b/content/renderer/render_frame_impl.h
index 61e8867..f9efacf 100644
--- a/content/renderer/render_frame_impl.h
+++ b/content/renderer/render_frame_impl.h
@@ -668,6 +668,7 @@
blink::WebSetSinkIdCallbacks* web_callbacks) override;
blink::WebPageVisibilityState VisibilityState() const override;
std::unique_ptr<blink::WebURLLoader> CreateURLLoader() override;
+ void DraggableRegionsChanged() override;
// WebFrameSerializerClient implementation:
void DidSerializeDataForFrame(
diff --git a/content/renderer/render_view_impl.cc b/content/renderer/render_view_impl.cc
index 2cec6d95..4ff3c7ae 100644
--- a/content/renderer/render_view_impl.cc
+++ b/content/renderer/render_view_impl.cc
@@ -2312,11 +2312,6 @@
return ZoomFactorToZoomLevel(factor);
}
-void RenderViewImpl::DraggableRegionsChanged() {
- for (auto& observer : observers_)
- observer.DraggableRegionsChanged(webview()->MainFrame());
-}
-
void RenderViewImpl::PageImportanceSignalsChanged() {
if (!webview() || !main_render_frame_)
return;
diff --git a/content/renderer/render_view_impl.h b/content/renderer/render_view_impl.h
index 030950e..4266f15 100644
--- a/content/renderer/render_view_impl.h
+++ b/content/renderer/render_view_impl.h
@@ -327,7 +327,6 @@
void PageScaleFactorChanged() override;
virtual double zoomLevelToZoomFactor(double zoom_level) const;
virtual double zoomFactorToZoomLevel(double factor) const;
- void DraggableRegionsChanged() override;
void PageImportanceSignalsChanged() override;
void DidAutoResize(const blink::WebSize& newSize) override;
blink::WebRect RootWindowRect() override;