chromeos: refactor MusEmbeddedFrame into its own file

And makes MusEmbeddedFrame talk to a delegate rather than directly to
RenderFrameProxy. BrowserPlugin is going to use this class, hence
refactoring to make it easy to adapt to both.

BUG=755440
TEST=none

Change-Id: Ica1fe8971e0f11b9174771b857aec5d679d8a3e6
Reviewed-on: https://chromium-review.googlesource.com/729054
Commit-Queue: Scott Violet <[email protected]>
Reviewed-by: Ken Buchanan <[email protected]>
Cr-Commit-Position: refs/heads/master@{#510590}
diff --git a/content/renderer/mus/BUILD.gn b/content/renderer/mus/BUILD.gn
index 502f4a7..2271a15 100644
--- a/content/renderer/mus/BUILD.gn
+++ b/content/renderer/mus/BUILD.gn
@@ -7,6 +7,9 @@
   visibility = [ "//content/renderer/*" ]
 
   sources = [
+    "mus_embedded_frame.cc",
+    "mus_embedded_frame.h",
+    "mus_embedded_frame_delegate.h",
     "render_widget_window_tree_client_factory.cc",
     "render_widget_window_tree_client_factory.h",
     "renderer_window_tree_client.cc",
diff --git a/content/renderer/mus/mus_embedded_frame.cc b/content/renderer/mus/mus_embedded_frame.cc
new file mode 100644
index 0000000..a49a33c
--- /dev/null
+++ b/content/renderer/mus/mus_embedded_frame.cc
@@ -0,0 +1,98 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "content/renderer/mus/mus_embedded_frame.h"
+
+#include <map>
+
+#include "base/command_line.h"
+#include "base/lazy_instance.h"
+#include "cc/base/switches.h"
+#include "components/viz/client/client_layer_tree_frame_sink.h"
+#include "components/viz/client/hit_test_data_provider.h"
+#include "components/viz/client/local_surface_id_provider.h"
+#include "components/viz/common/surfaces/surface_sequence.h"
+#include "content/renderer/mus/renderer_window_tree_client.h"
+
+namespace content {
+namespace {
+
+// Callback from embedding a child frame.
+void OnEmbedAck(bool success) {
+  DCHECK(success);
+}
+
+}  // namespace
+
+MusEmbeddedFrame::~MusEmbeddedFrame() {
+  renderer_window_tree_client_->OnEmbeddedFrameDestroyed(this);
+  // If there is |pending_state_| it means we didn't actually create the window
+  // yet and there is nothing to do.
+  if (pending_state_)
+    return;
+
+  window_tree()->DeleteWindow(GetAndAdvanceNextChangeId(), window_id_);
+}
+
+void MusEmbeddedFrame::SetWindowBounds(
+    const viz::LocalSurfaceId& local_surface_id,
+    const gfx::Rect& bounds) {
+  if (!window_tree()) {
+    DCHECK(pending_state_);
+    pending_state_->bounds = bounds;
+    pending_state_->local_surface_id = local_surface_id;
+    pending_state_->was_set_window_bounds_called = true;
+    return;
+  }
+
+  window_tree()->SetWindowBounds(GetAndAdvanceNextChangeId(), window_id_,
+                                 bounds, local_surface_id);
+}
+
+MusEmbeddedFrame::MusEmbeddedFrame(
+    RendererWindowTreeClient* renderer_window_tree_client,
+    MusEmbeddedFrameDelegate* delegate,
+    ui::ClientSpecificId window_id,
+    const base::UnguessableToken& token)
+    : renderer_window_tree_client_(renderer_window_tree_client),
+      delegate_(delegate),
+      window_id_(window_id) {
+  if (!window_tree()) {
+    pending_state_ = base::MakeUnique<PendingState>();
+    pending_state_->token = token;
+    return;
+  }
+  CreateChildWindowAndEmbed(token);
+}
+
+void MusEmbeddedFrame::CreateChildWindowAndEmbed(
+    const base::UnguessableToken& token) {
+  window_tree()->NewWindow(GetAndAdvanceNextChangeId(), window_id_,
+                           base::nullopt);
+  window_tree()->AddWindow(GetAndAdvanceNextChangeId(),
+                           renderer_window_tree_client_->root_window_id_,
+                           window_id_);
+  window_tree()->EmbedUsingToken(window_id_, token, 0, base::Bind(&OnEmbedAck));
+}
+
+void MusEmbeddedFrame::OnTreeAvailable() {
+  std::unique_ptr<PendingState> pending_state = std::move(pending_state_);
+  CreateChildWindowAndEmbed(pending_state->token);
+  if (pending_state->was_set_window_bounds_called)
+    SetWindowBounds(pending_state->local_surface_id, pending_state->bounds);
+}
+
+uint32_t MusEmbeddedFrame::GetAndAdvanceNextChangeId() {
+  return renderer_window_tree_client_->GetAndAdvanceNextChangeId();
+}
+
+ui::mojom::WindowTree* MusEmbeddedFrame::window_tree() {
+  return renderer_window_tree_client_->tree_.get();
+}
+
+MusEmbeddedFrame::PendingState::PendingState() = default;
+
+MusEmbeddedFrame::PendingState::~PendingState() = default;
+
+}  // namespace content
diff --git a/content/renderer/mus/mus_embedded_frame.h b/content/renderer/mus/mus_embedded_frame.h
new file mode 100644
index 0000000..0249333
--- /dev/null
+++ b/content/renderer/mus/mus_embedded_frame.h
@@ -0,0 +1,80 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CONTENT_RENDERER_MUS_MUS_EMBEDDED_FRAME_H_
+#define CONTENT_RENDERER_MUS_MUS_EMBEDDED_FRAME_H_
+
+#include <memory>
+
+#include "base/macros.h"
+#include "base/unguessable_token.h"
+#include "components/viz/common/surfaces/local_surface_id.h"
+#include "services/ui/common/types.h"
+#include "ui/gfx/geometry/rect.h"
+
+namespace ui {
+namespace mojom {
+class WindowTree;
+}
+}  // namespace ui
+
+namespace content {
+
+class MusEmbeddedFrameDelegate;
+class RendererWindowTreeClient;
+
+// MusEmbeddedFrame represents an embedding of an OOPIF frame. Internally this
+// creates a window in the window server and calls Embed().
+class MusEmbeddedFrame {
+ public:
+  ~MusEmbeddedFrame();
+
+  // Sets the bounds (in pixels) of the embedded frame.
+  void SetWindowBounds(const viz::LocalSurfaceId& local_surface_id,
+                       const gfx::Rect& bounds);
+
+ private:
+  friend class RendererWindowTreeClient;
+
+  // Stores state that needs to pushed to the server once the connection has
+  // been established (OnEmbed() is called).
+  struct PendingState {
+    PendingState();
+    ~PendingState();
+
+    base::UnguessableToken token;
+    viz::LocalSurfaceId local_surface_id;
+    gfx::Rect bounds;
+    // True if SetWindowBounds() was called.
+    bool was_set_window_bounds_called = false;
+  };
+
+  MusEmbeddedFrame(RendererWindowTreeClient* renderer_window_tree_client,
+                   MusEmbeddedFrameDelegate* delegate,
+                   ui::ClientSpecificId window_id,
+                   const base::UnguessableToken& token);
+
+  // Called once the WindowTree has been obtained. This is only called if
+  // the MusEmbeddedFrame is created before the WindowTree has been obtained.
+  void OnTreeAvailable();
+
+  // Does the actual embedding.
+  void CreateChildWindowAndEmbed(const base::UnguessableToken& token);
+
+  uint32_t GetAndAdvanceNextChangeId();
+
+  ui::mojom::WindowTree* window_tree();
+
+  RendererWindowTreeClient* renderer_window_tree_client_;
+  MusEmbeddedFrameDelegate* delegate_;
+  const ui::ClientSpecificId window_id_;
+
+  std::unique_ptr<PendingState> pending_state_;
+
+  DISALLOW_COPY_AND_ASSIGN(MusEmbeddedFrame);
+};
+
+}  // namespace content
+
+#endif  // CONTENT_RENDERER_MUS_MUS_EMBEDDED_FRAME_H_
diff --git a/content/renderer/mus/mus_embedded_frame_delegate.h b/content/renderer/mus/mus_embedded_frame_delegate.h
new file mode 100644
index 0000000..4c6be417
--- /dev/null
+++ b/content/renderer/mus/mus_embedded_frame_delegate.h
@@ -0,0 +1,31 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CONTENT_RENDERER_MUS_MUS_EMBEDDED_FRAME_DELEGATE_H_
+#define CONTENT_RENDERER_MUS_MUS_EMBEDDED_FRAME_DELEGATE_H_
+
+namespace viz {
+class FrameSinkId;
+class SurfaceInfo;
+}  // namespace viz
+
+namespace content {
+
+class MusEmbeddedFrameDelegate {
+ public:
+  // Called when the SurfaceInfo changes.
+  virtual void OnMusEmbeddedFrameSurfaceChanged(
+      const viz::SurfaceInfo& surface_info) = 0;
+
+  // Called when mus determines the FrameSinkId.
+  virtual void OnMusEmbeddedFrameSinkIdAllocated(
+      const viz::FrameSinkId& frame_sink_id) = 0;
+
+ protected:
+  virtual ~MusEmbeddedFrameDelegate() {}
+};
+
+}  // namespace content
+
+#endif  // CONTENT_RENDERER_MUS_MUS_EMBEDDED_FRAME_DELEGATE_H_
diff --git a/content/renderer/mus/renderer_window_tree_client.cc b/content/renderer/mus/renderer_window_tree_client.cc
index f067c9e..a681b97 100644
--- a/content/renderer/mus/renderer_window_tree_client.cc
+++ b/content/renderer/mus/renderer_window_tree_client.cc
@@ -14,6 +14,8 @@
 #include "components/viz/client/local_surface_id_provider.h"
 #include "components/viz/common/surfaces/surface_sequence.h"
 #include "content/renderer/mash_util.h"
+#include "content/renderer/mus/mus_embedded_frame.h"
+#include "content/renderer/mus/mus_embedded_frame_delegate.h"
 #include "content/renderer/render_frame_proxy.h"
 
 namespace content {
@@ -24,11 +26,6 @@
 base::LazyInstance<ConnectionMap>::Leaky g_connections =
     LAZY_INSTANCE_INITIALIZER;
 
-// Callback from embedding a child frame.
-void OnEmbedAck(bool success) {
-  DCHECK(success);
-}
-
 }  // namespace
 
 // static
@@ -101,6 +98,16 @@
   pending_layer_tree_frame_sink_callback_ = callback;
 }
 
+std::unique_ptr<MusEmbeddedFrame>
+RendererWindowTreeClient::CreateMusEmbeddedFrame(
+    MusEmbeddedFrameDelegate* delegate,
+    const base::UnguessableToken& token) {
+  std::unique_ptr<MusEmbeddedFrame> frame = base::WrapUnique<MusEmbeddedFrame>(
+      new MusEmbeddedFrame(this, delegate, ++next_window_id_, token));
+  embedded_frames_.insert(frame.get());
+  return frame;
+}
+
 RendererWindowTreeClient::RendererWindowTreeClient(int routing_id)
     : routing_id_(routing_id),
       binding_(this),
@@ -111,16 +118,6 @@
   DCHECK(embedded_frames_.empty());
 }
 
-std::unique_ptr<MusEmbeddedFrame>
-RendererWindowTreeClient::CreateMusEmbeddedFrame(
-    RenderFrameProxy* render_frame_proxy,
-    const base::UnguessableToken& token) {
-  std::unique_ptr<MusEmbeddedFrame> frame = base::WrapUnique<MusEmbeddedFrame>(
-      new MusEmbeddedFrame(this, render_frame_proxy, ++next_window_id_, token));
-  embedded_frames_.insert(frame.get());
-  return frame;
-}
-
 void RendererWindowTreeClient::RequestLayerTreeFrameSinkInternal(
     scoped_refptr<viz::ContextProvider> context_provider,
     gpu::GpuMemoryBufferManager* gpu_memory_buffer_manager,
@@ -208,7 +205,7 @@
     const viz::FrameSinkId& frame_sink_id) {
   for (MusEmbeddedFrame* embedded_frame : embedded_frames_) {
     if (embedded_frame->window_id_ == window_id) {
-      embedded_frame->render_frame_proxy_->OnMusFrameSinkIdAllocated(
+      embedded_frame->delegate_->OnMusEmbeddedFrameSinkIdAllocated(
           frame_sink_id);
       return;
     }
@@ -305,8 +302,7 @@
     const viz::SurfaceInfo& surface_info) {
   for (MusEmbeddedFrame* embedded_frame : embedded_frames_) {
     if (embedded_frame->window_id_ == window_id) {
-      embedded_frame->render_frame_proxy_->SetChildFrameSurface(
-          surface_info, viz::SurfaceSequence());
+      embedded_frame->delegate_->OnMusEmbeddedFrameSurfaceChanged(surface_info);
       return;
     }
   }
@@ -359,72 +355,4 @@
   NOTREACHED();
 }
 
-// MusEmbeddedFrame ------------------------------------------------------------
-
-MusEmbeddedFrame::~MusEmbeddedFrame() {
-  renderer_window_tree_client_->OnEmbeddedFrameDestroyed(this);
-  // If there is |pending_state_| it means we didn't actually create the window
-  // yet and there is nothing to do.
-  if (pending_state_)
-    return;
-
-  window_tree()->DeleteWindow(GetAndAdvanceNextChangeId(), window_id_);
-}
-
-void MusEmbeddedFrame::SetWindowBounds(
-    const viz::LocalSurfaceId& local_surface_id,
-    const gfx::Rect& bounds) {
-  if (!window_tree()) {
-    DCHECK(pending_state_);
-    pending_state_->bounds = bounds;
-    pending_state_->local_surface_id = local_surface_id;
-    pending_state_->was_set_window_bounds_called = true;
-    return;
-  }
-
-  window_tree()->SetWindowBounds(GetAndAdvanceNextChangeId(), window_id_,
-                                 bounds, local_surface_id);
-}
-
-MusEmbeddedFrame::MusEmbeddedFrame(
-    RendererWindowTreeClient* renderer_window_tree_client,
-    RenderFrameProxy* proxy,
-    ui::ClientSpecificId window_id,
-    const base::UnguessableToken& token)
-    : renderer_window_tree_client_(renderer_window_tree_client),
-      render_frame_proxy_(proxy),
-      window_id_(window_id) {
-  if (!window_tree()) {
-    pending_state_ = base::MakeUnique<PendingState>();
-    pending_state_->token = token;
-    return;
-  }
-  CreateChildWindowAndEmbed(token);
-}
-
-void MusEmbeddedFrame::CreateChildWindowAndEmbed(
-    const base::UnguessableToken& token) {
-  window_tree()->NewWindow(GetAndAdvanceNextChangeId(), window_id_,
-                           base::nullopt);
-  window_tree()->AddWindow(GetAndAdvanceNextChangeId(),
-                           renderer_window_tree_client_->root_window_id_,
-                           window_id_);
-  window_tree()->EmbedUsingToken(window_id_, token, 0, base::Bind(&OnEmbedAck));
-}
-
-void MusEmbeddedFrame::OnTreeAvailable() {
-  std::unique_ptr<PendingState> pending_state = std::move(pending_state_);
-  CreateChildWindowAndEmbed(pending_state->token);
-  if (pending_state->was_set_window_bounds_called)
-    SetWindowBounds(pending_state->local_surface_id, pending_state->bounds);
-}
-
-uint32_t MusEmbeddedFrame::GetAndAdvanceNextChangeId() {
-  return renderer_window_tree_client_->GetAndAdvanceNextChangeId();
-}
-
-MusEmbeddedFrame::PendingState::PendingState() = default;
-
-MusEmbeddedFrame::PendingState::~PendingState() = default;
-
 }  // namespace content
diff --git a/content/renderer/mus/renderer_window_tree_client.h b/content/renderer/mus/renderer_window_tree_client.h
index 22fbde9b..1e0f08d3 100644
--- a/content/renderer/mus/renderer_window_tree_client.h
+++ b/content/renderer/mus/renderer_window_tree_client.h
@@ -37,6 +37,7 @@
 namespace content {
 
 class MusEmbeddedFrame;
+class MusEmbeddedFrameDelegate;
 class RenderFrameProxy;
 
 // ui.mojom.WindowTreeClient implementation for RenderWidget. This lives and
@@ -77,16 +78,18 @@
       gpu::GpuMemoryBufferManager* gpu_memory_buffer_manager,
       const LayerTreeFrameSinkCallback& callback);
 
+  // Creates a new MusEmbeddedFrame. |token| is an UnguessableToken that was
+  // registered for an embedding with mus (specifically ui::mojom::WindowTree).
+  std::unique_ptr<MusEmbeddedFrame> CreateMusEmbeddedFrame(
+      MusEmbeddedFrameDelegate* mus_embedded_frame_delegate,
+      const base::UnguessableToken& token);
+
  private:
   friend class MusEmbeddedFrame;
 
   explicit RendererWindowTreeClient(int routing_id);
   ~RendererWindowTreeClient() override;
 
-  std::unique_ptr<MusEmbeddedFrame> CreateMusEmbeddedFrame(
-      RenderFrameProxy* render_frame_proxy,
-      const base::UnguessableToken& token);
-
   void RequestLayerTreeFrameSinkInternal(
       scoped_refptr<viz::ContextProvider> context_provider,
       gpu::GpuMemoryBufferManager* gpu_memory_buffer_manager,
@@ -229,59 +232,6 @@
   DISALLOW_COPY_AND_ASSIGN(RendererWindowTreeClient);
 };
 
-// MusEmbeddedFrame represents an embedding of an OOPIF frame. This is done
-// by creating a window and calling Embed().
-class MusEmbeddedFrame {
- public:
-  ~MusEmbeddedFrame();
-
-  // Sets the bounds of the embedded frame.
-  void SetWindowBounds(const viz::LocalSurfaceId& local_surface_id,
-                       const gfx::Rect& bounds);
-
- private:
-  friend class RendererWindowTreeClient;
-
-  // Stores state that needs to pushed to the server once the connection has
-  // been established (OnEmbed() is called).
-  struct PendingState {
-    PendingState();
-    ~PendingState();
-
-    base::UnguessableToken token;
-    viz::LocalSurfaceId local_surface_id;
-    gfx::Rect bounds;
-    // True if SetWindowBounds() was called.
-    bool was_set_window_bounds_called = false;
-  };
-
-  MusEmbeddedFrame(RendererWindowTreeClient* renderer_window_tree_client,
-                   RenderFrameProxy* proxy,
-                   ui::ClientSpecificId window_id,
-                   const base::UnguessableToken& token);
-
-  // Called once the WindowTree has been obtained. This is only called if
-  // the MusEmbeddedFrame is created before the WindowTree has been obtained.
-  void OnTreeAvailable();
-
-  // Does the actual embedding.
-  void CreateChildWindowAndEmbed(const base::UnguessableToken& token);
-
-  uint32_t GetAndAdvanceNextChangeId();
-
-  ui::mojom::WindowTree* window_tree() {
-    return renderer_window_tree_client_->tree_.get();
-  }
-
-  RendererWindowTreeClient* renderer_window_tree_client_;
-  RenderFrameProxy* render_frame_proxy_;
-  const ui::ClientSpecificId window_id_;
-
-  std::unique_ptr<PendingState> pending_state_;
-
-  DISALLOW_COPY_AND_ASSIGN(MusEmbeddedFrame);
-};
-
 }  // namespace content
 
 #endif  // CONTENT_RENDERER_MUS_RENDERER_WINDOW_TREE_CLIENT_H_
diff --git a/content/renderer/render_frame_proxy.cc b/content/renderer/render_frame_proxy.cc
index 270d2153..6fddbaa 100644
--- a/content/renderer/render_frame_proxy.cc
+++ b/content/renderer/render_frame_proxy.cc
@@ -42,6 +42,7 @@
 #include "third_party/WebKit/public/web/WebView.h"
 
 #if defined(USE_AURA)
+#include "content/renderer/mus/mus_embedded_frame.h"
 #include "content/renderer/mus/renderer_window_tree_client.h"
 #endif
 
@@ -316,6 +317,21 @@
     compositing_helper_->SetPrimarySurfaceInfo(surface_info);
 }
 
+void RenderFrameProxy::SetChildFrameSurface(
+    const viz::SurfaceInfo& surface_info,
+    const viz::SurfaceSequence& sequence) {
+  // If this WebFrame has already been detached, its parent will be null. This
+  // can happen when swapping a WebRemoteFrame with a WebLocalFrame, where this
+  // message may arrive after the frame was removed from the frame tree, but
+  // before the frame has been destroyed. http://crbug.com/446575.
+  if (!web_frame()->Parent())
+    return;
+
+  if (!enable_surface_synchronization_)
+    compositing_helper_->SetPrimarySurfaceInfo(surface_info);
+  compositing_helper_->SetFallbackSurfaceId(surface_info.id(), sequence);
+}
+
 bool RenderFrameProxy::OnMessageReceived(const IPC::Message& msg) {
   // Forward Page IPCs to the RenderView.
   if ((IPC_MESSAGE_CLASS(msg) == PageMsgStart)) {
@@ -466,36 +482,12 @@
 }
 
 #if defined(USE_AURA)
-void RenderFrameProxy::OnMusFrameSinkIdAllocated(
-    const viz::FrameSinkId& frame_sink_id) {
-  frame_sink_id_ = frame_sink_id;
-  MaybeUpdateCompositingHelper();
-  // Resend the FrameRects and allocate a new viz::LocalSurfaceId when the view
-  // changes.
-  ResendFrameRects();
-}
-
 void RenderFrameProxy::SetMusEmbeddedFrame(
     std::unique_ptr<MusEmbeddedFrame> mus_embedded_frame) {
   mus_embedded_frame_ = std::move(mus_embedded_frame);
 }
 #endif
 
-void RenderFrameProxy::SetChildFrameSurface(
-    const viz::SurfaceInfo& surface_info,
-    const viz::SurfaceSequence& sequence) {
-  // If this WebFrame has already been detached, its parent will be null. This
-  // can happen when swapping a WebRemoteFrame with a WebLocalFrame, where this
-  // message may arrive after the frame was removed from the frame tree, but
-  // before the frame has been destroyed. http://crbug.com/446575.
-  if (!web_frame()->Parent())
-    return;
-
-  if (!enable_surface_synchronization_)
-    compositing_helper_->SetPrimarySurfaceInfo(surface_info);
-  compositing_helper_->SetFallbackSurfaceId(surface_info.id(), sequence);
-}
-
 void RenderFrameProxy::FrameDetached(DetachType type) {
 #if defined(USE_AURA)
   mus_embedded_frame_.reset();
@@ -649,4 +641,20 @@
   Send(new FrameHostMsg_FrameFocused(routing_id_));
 }
 
+#if defined(USE_AURA)
+void RenderFrameProxy::OnMusEmbeddedFrameSurfaceChanged(
+    const viz::SurfaceInfo& surface_info) {
+  SetChildFrameSurface(surface_info, viz::SurfaceSequence());
+}
+
+void RenderFrameProxy::OnMusEmbeddedFrameSinkIdAllocated(
+    const viz::FrameSinkId& frame_sink_id) {
+  frame_sink_id_ = frame_sink_id;
+  MaybeUpdateCompositingHelper();
+  // Resend the FrameRects and allocate a new viz::LocalSurfaceId when the view
+  // changes.
+  ResendFrameRects();
+}
+#endif
+
 }  // namespace
diff --git a/content/renderer/render_frame_proxy.h b/content/renderer/render_frame_proxy.h
index 769d541..69a4b4ae 100644
--- a/content/renderer/render_frame_proxy.h
+++ b/content/renderer/render_frame_proxy.h
@@ -18,6 +18,10 @@
 #include "third_party/WebKit/public/web/WebRemoteFrameClient.h"
 #include "url/origin.h"
 
+#if defined(USE_AURA)
+#include "content/renderer/mus/mus_embedded_frame_delegate.h"
+#endif
+
 namespace blink {
 struct WebRect;
 }
@@ -64,6 +68,9 @@
 // RenderFrame is created for it.
 class CONTENT_EXPORT RenderFrameProxy : public IPC::Listener,
                                         public IPC::Sender,
+#if defined(USE_AURA)
+                                        public MusEmbeddedFrameDelegate,
+#endif
                                         public blink::WebRemoteFrameClient {
  public:
   // This method should be used to create a RenderFrameProxy, which will replace
@@ -135,16 +142,10 @@
   RenderWidget* render_widget() { return render_widget_; }
 
 #if defined(USE_AURA)
-  // Called when mus determines the FrameSinkId.
-  void OnMusFrameSinkIdAllocated(const viz::FrameSinkId& frame_sink_id);
-
   void SetMusEmbeddedFrame(
       std::unique_ptr<MusEmbeddedFrame> mus_embedded_frame);
 #endif
 
-  void SetChildFrameSurface(const viz::SurfaceInfo& surface_info,
-                            const viz::SurfaceSequence& sequence);
-
   // blink::WebRemoteFrameClient implementation:
   void FrameDetached(DetachType type) override;
   void ForwardPostMessage(blink::WebLocalFrame* sourceFrame,
@@ -177,6 +178,9 @@
 
   void MaybeUpdateCompositingHelper();
 
+  void SetChildFrameSurface(const viz::SurfaceInfo& surface_info,
+                            const viz::SurfaceSequence& sequence);
+
   // IPC::Listener
   bool OnMessageReceived(const IPC::Message& msg) override;
 
@@ -205,6 +209,14 @@
   void OnWillEnterFullscreen();
   void OnSetHasReceivedUserGesture();
 
+#if defined(USE_AURA)
+  // MusEmbeddedFrameDelegate
+  void OnMusEmbeddedFrameSurfaceChanged(
+      const viz::SurfaceInfo& surface_info) override;
+  void OnMusEmbeddedFrameSinkIdAllocated(
+      const viz::FrameSinkId& frame_sink_id) override;
+#endif
+
   // The routing ID by which this RenderFrameProxy is known.
   const int routing_id_;