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;