Refactor RegisterViewportLayers parameters into a struct

This CL refactors WebLayerTreeView::RegisterViewportLayers() to
use a ViewportWebLayers struct instead of 6 separate parameters.

Bug: None
Change-Id: I7f72727a098c871321c60ef55421bb48b9ffd97d
Reviewed-on: https://chromium-review.googlesource.com/558320
Commit-Queue: Chandan Padhi <[email protected]>
Reviewed-by: Philip Rogers <[email protected]>
Reviewed-by: Antoine Labour <[email protected]>
Cr-Commit-Position: refs/heads/master@{#484859}
diff --git a/content/renderer/gpu/render_widget_compositor.cc b/content/renderer/gpu/render_widget_compositor.cc
index d7ea7d6..46049eac 100644
--- a/content/renderer/gpu/render_widget_compositor.cc
+++ b/content/renderer/gpu/render_widget_compositor.cc
@@ -777,44 +777,39 @@
 }
 
 void RenderWidgetCompositor::RegisterViewportLayers(
-    const blink::WebLayer* overscroll_elasticity_layer,
-    const blink::WebLayer* page_scale_layer,
-    const blink::WebLayer* inner_viewport_container_layer,
-    const blink::WebLayer* outer_viewport_container_layer,
-    const blink::WebLayer* inner_viewport_scroll_layer,
-    const blink::WebLayer* outer_viewport_scroll_layer) {
+    const blink::WebLayerTreeView::ViewportLayers& layers) {
   cc::LayerTreeHost::ViewportLayers viewport_layers;
   // TODO(bokan): This check can probably be removed now, but it looks
   // like overscroll elasticity may still be nullptr until VisualViewport
   // registers its layers.
-  if (overscroll_elasticity_layer) {
+  if (layers.overscroll_elasticity) {
     viewport_layers.overscroll_elasticity =
-        static_cast<const cc_blink::WebLayerImpl*>(overscroll_elasticity_layer)
+        static_cast<const cc_blink::WebLayerImpl*>(layers.overscroll_elasticity)
             ->layer();
   }
   viewport_layers.page_scale =
-      static_cast<const cc_blink::WebLayerImpl*>(page_scale_layer)->layer();
-  if (inner_viewport_container_layer) {
+      static_cast<const cc_blink::WebLayerImpl*>(layers.page_scale)->layer();
+  if (layers.inner_viewport_container) {
     viewport_layers.inner_viewport_container =
         static_cast<const cc_blink::WebLayerImpl*>(
-            inner_viewport_container_layer)
+            layers.inner_viewport_container)
             ->layer();
   }
-  if (outer_viewport_container_layer) {
+  if (layers.outer_viewport_container) {
     viewport_layers.outer_viewport_container =
         static_cast<const cc_blink::WebLayerImpl*>(
-            outer_viewport_container_layer)
+            layers.outer_viewport_container)
             ->layer();
   }
   viewport_layers.inner_viewport_scroll =
-      static_cast<const cc_blink::WebLayerImpl*>(inner_viewport_scroll_layer)
+      static_cast<const cc_blink::WebLayerImpl*>(layers.inner_viewport_scroll)
           ->layer();
   // TODO(bokan): This check can probably be removed now, but it looks
   // like overscroll elasticity may still be nullptr until VisualViewport
   // registers its layers.
-  if (outer_viewport_scroll_layer) {
+  if (layers.outer_viewport_scroll) {
     viewport_layers.outer_viewport_scroll =
-        static_cast<const cc_blink::WebLayerImpl*>(outer_viewport_scroll_layer)
+        static_cast<const cc_blink::WebLayerImpl*>(layers.outer_viewport_scroll)
             ->layer();
   }
   layer_tree_host_->RegisterViewportLayers(viewport_layers);
diff --git a/content/renderer/gpu/render_widget_compositor.h b/content/renderer/gpu/render_widget_compositor.h
index 84e8a29..372ef4b8 100644
--- a/content/renderer/gpu/render_widget_compositor.h
+++ b/content/renderer/gpu/render_widget_compositor.h
@@ -146,14 +146,8 @@
   void CompositeAndReadbackAsync(
       blink::WebCompositeAndReadbackAsyncCallback* callback) override;
   void SetDeferCommits(bool defer_commits) override;
-  // TODO(pdr): Refactor to use a struct like LayerTreeHost::ViewportLayers.
   void RegisterViewportLayers(
-      const blink::WebLayer* overscrollElasticityLayer,
-      const blink::WebLayer* pageScaleLayer,
-      const blink::WebLayer* innerViewportContainerLayer,
-      const blink::WebLayer* outerViewportContainerLayer,
-      const blink::WebLayer* innerViewportScrollLayer,
-      const blink::WebLayer* outerViewportScrollLayer) override;
+      const blink::WebLayerTreeView::ViewportLayers& viewport_layers) override;
   void ClearViewportLayers() override;
   void RegisterSelection(const blink::WebSelection& selection) override;
   void ClearSelection() override;
diff --git a/third_party/WebKit/Source/platform/graphics/GraphicsLayerTest.cpp b/third_party/WebKit/Source/platform/graphics/GraphicsLayerTest.cpp
index 2e354e6..3595d7f3 100644
--- a/third_party/WebKit/Source/platform/graphics/GraphicsLayerTest.cpp
+++ b/third_party/WebKit/Source/platform/graphics/GraphicsLayerTest.cpp
@@ -69,10 +69,13 @@
     layer_tree_view_ = WTF::WrapUnique(new WebLayerTreeViewImplForTesting);
     DCHECK(layer_tree_view_);
     layer_tree_view_->SetRootLayer(*clip_layer_->PlatformLayer());
-    layer_tree_view_->RegisterViewportLayers(
-        scroll_elasticity_layer_->PlatformLayer(),
-        page_scale_layer_->PlatformLayer(), clip_layer_->PlatformLayer(),
-        nullptr, graphics_layer_->PlatformLayer(), nullptr);
+    WebLayerTreeView::ViewportLayers viewport_layers;
+    viewport_layers.overscroll_elasticity =
+        scroll_elasticity_layer_->PlatformLayer();
+    viewport_layers.page_scale = page_scale_layer_->PlatformLayer();
+    viewport_layers.inner_viewport_container = clip_layer_->PlatformLayer();
+    viewport_layers.inner_viewport_scroll = graphics_layer_->PlatformLayer();
+    layer_tree_view_->RegisterViewportLayers(viewport_layers);
     layer_tree_view_->SetViewportSize(WebSize(1, 1));
   }
 
diff --git a/third_party/WebKit/Source/platform/testing/WebLayerTreeViewImplForTesting.cpp b/third_party/WebKit/Source/platform/testing/WebLayerTreeViewImplForTesting.cpp
index 6e8dc90..90e3280 100644
--- a/third_party/WebKit/Source/platform/testing/WebLayerTreeViewImplForTesting.cpp
+++ b/third_party/WebKit/Source/platform/testing/WebLayerTreeViewImplForTesting.cpp
@@ -147,38 +147,33 @@
 }
 
 void WebLayerTreeViewImplForTesting::RegisterViewportLayers(
-    const blink::WebLayer* overscroll_elasticity_layer,
-    const blink::WebLayer* page_scale_layer,
-    const blink::WebLayer* inner_viewport_container_layer,
-    const blink::WebLayer* outer_viewport_container_layer,
-    const blink::WebLayer* inner_viewport_scroll_layer,
-    const blink::WebLayer* outer_viewport_scroll_layer) {
+    const WebLayerTreeView::ViewportLayers& layers) {
   cc::LayerTreeHost::ViewportLayers viewport_layers;
-  if (overscroll_elasticity_layer) {
+  if (layers.overscroll_elasticity) {
     viewport_layers.overscroll_elasticity =
-        static_cast<const cc_blink::WebLayerImpl*>(overscroll_elasticity_layer)
+        static_cast<const cc_blink::WebLayerImpl*>(layers.overscroll_elasticity)
             ->layer();
   }
   viewport_layers.page_scale =
-      static_cast<const cc_blink::WebLayerImpl*>(page_scale_layer)->layer();
-  if (inner_viewport_container_layer) {
+      static_cast<const cc_blink::WebLayerImpl*>(layers.page_scale)->layer();
+  if (layers.inner_viewport_container) {
     viewport_layers.inner_viewport_container =
         static_cast<const cc_blink::WebLayerImpl*>(
-            inner_viewport_container_layer)
+            layers.inner_viewport_container)
             ->layer();
   }
-  if (outer_viewport_container_layer) {
+  if (layers.outer_viewport_container) {
     viewport_layers.outer_viewport_container =
         static_cast<const cc_blink::WebLayerImpl*>(
-            outer_viewport_container_layer)
+            layers.outer_viewport_container)
             ->layer();
   }
   viewport_layers.inner_viewport_scroll =
-      static_cast<const cc_blink::WebLayerImpl*>(inner_viewport_scroll_layer)
+      static_cast<const cc_blink::WebLayerImpl*>(layers.inner_viewport_scroll)
           ->layer();
-  if (outer_viewport_scroll_layer) {
+  if (layers.outer_viewport_scroll) {
     viewport_layers.outer_viewport_scroll =
-        static_cast<const cc_blink::WebLayerImpl*>(outer_viewport_scroll_layer)
+        static_cast<const cc_blink::WebLayerImpl*>(layers.outer_viewport_scroll)
             ->layer();
   }
   layer_tree_host_->RegisterViewportLayers(viewport_layers);
diff --git a/third_party/WebKit/Source/platform/testing/WebLayerTreeViewImplForTesting.h b/third_party/WebKit/Source/platform/testing/WebLayerTreeViewImplForTesting.h
index ddf923b..31c916e 100644
--- a/third_party/WebKit/Source/platform/testing/WebLayerTreeViewImplForTesting.h
+++ b/third_party/WebKit/Source/platform/testing/WebLayerTreeViewImplForTesting.h
@@ -58,14 +58,7 @@
   void SetNeedsBeginFrame() override;
   void DidStopFlinging() override;
   void SetDeferCommits(bool) override;
-  // TODO(pdr): Refactor to use a struct like LayerTreeHost::ViewportLayers.
-  void RegisterViewportLayers(
-      const blink::WebLayer* overscroll_elasticity_layer,
-      const blink::WebLayer* page_scale_layer_layer,
-      const blink::WebLayer* inner_viewport_container_layer,
-      const blink::WebLayer* outer_viewport_container_layer,
-      const blink::WebLayer* inner_viewport_scroll_layer,
-      const blink::WebLayer* outer_viewport_scroll_layer) override;
+  void RegisterViewportLayers(const WebLayerTreeView::ViewportLayers&) override;
   void ClearViewportLayers() override;
   void RegisterSelection(const blink::WebSelection&) override;
   void ClearSelection() override;
diff --git a/third_party/WebKit/Source/web/WebViewImpl.cpp b/third_party/WebKit/Source/web/WebViewImpl.cpp
index a11eb5b..be61617 100644
--- a/third_party/WebKit/Source/web/WebViewImpl.cpp
+++ b/third_party/WebKit/Source/web/WebViewImpl.cpp
@@ -3828,13 +3828,20 @@
   // the mehtod.
   visual_viewport.SetScrollLayerOnScrollbars(layout_viewport_scroll_web_layer);
 
-  layer_tree_view_->RegisterViewportLayers(
-      visual_viewport.OverscrollElasticityLayer()->PlatformLayer(),
-      visual_viewport.PageScaleLayer()->PlatformLayer(),
-      visual_viewport.ContainerLayer()->PlatformLayer(),
-      layout_viewport_container_web_layer,
-      visual_viewport.ScrollLayer()->PlatformLayer(),
-      layout_viewport_scroll_web_layer);
+  WebLayerTreeView::ViewportLayers viewport_layers;
+  viewport_layers.overscroll_elasticity =
+      visual_viewport.OverscrollElasticityLayer()->PlatformLayer();
+  viewport_layers.page_scale =
+      visual_viewport.PageScaleLayer()->PlatformLayer();
+  viewport_layers.inner_viewport_container =
+      visual_viewport.ContainerLayer()->PlatformLayer();
+  viewport_layers.outer_viewport_container =
+      layout_viewport_container_web_layer;
+  viewport_layers.inner_viewport_scroll =
+      visual_viewport.ScrollLayer()->PlatformLayer();
+  viewport_layers.outer_viewport_scroll = layout_viewport_scroll_web_layer;
+
+  layer_tree_view_->RegisterViewportLayers(viewport_layers);
 }
 
 void WebViewImpl::SetRootGraphicsLayer(GraphicsLayer* graphics_layer) {
diff --git a/third_party/WebKit/public/platform/WebLayerTreeView.h b/third_party/WebKit/public/platform/WebLayerTreeView.h
index eac29e0..dd162199 100644
--- a/third_party/WebKit/public/platform/WebLayerTreeView.h
+++ b/third_party/WebKit/public/platform/WebLayerTreeView.h
@@ -139,14 +139,17 @@
   // Prevents updates to layer tree from becoming visible.
   virtual void SetDeferCommits(bool defer_commits) {}
 
+  struct ViewportLayers {
+    const WebLayer* overscroll_elasticity = nullptr;
+    const WebLayer* page_scale = nullptr;
+    const WebLayer* inner_viewport_container = nullptr;
+    const WebLayer* outer_viewport_container = nullptr;
+    const WebLayer* inner_viewport_scroll = nullptr;
+    const WebLayer* outer_viewport_scroll = nullptr;
+  };
+
   // Identify key viewport layers to the compositor.
-  virtual void RegisterViewportLayers(
-      const WebLayer* overscroll_elasticity_layer,
-      const WebLayer* page_scale_layer,
-      const WebLayer* inner_viewport_container_layer,
-      const WebLayer* outer_viewport_container_layer,
-      const WebLayer* inner_viewport_scroll_layer,
-      const WebLayer* outer_viewport_scroll_layer) {}
+  virtual void RegisterViewportLayers(const ViewportLayers& viewport_layers) {}
   virtual void ClearViewportLayers() {}
 
   // Used to update the active selection bounds.