Migrates layer_viewer/ to ESM internally

Bug: 1006759
Change-Id: I1e2ea259f826248fcb942ac99534664b9cdaca6f
Reviewed-on: https://chromium-review.googlesource.com/c/devtools/devtools-frontend/+/1994971
Commit-Queue: Paul Lewis <[email protected]>
Reviewed-by: Tim van der Lippe <[email protected]>
diff --git a/front_end/layer_viewer/LayerDetailsView.js b/front_end/layer_viewer/LayerDetailsView.js
index 663b80f..65354e5 100644
--- a/front_end/layer_viewer/LayerDetailsView.js
+++ b/front_end/layer_viewer/LayerDetailsView.js
@@ -27,13 +27,16 @@
  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
+
+import {LayerView, LayerViewHost, ScrollRectSelection, Selection, SnapshotSelection, Type,} from './LayerViewHost.js';  // eslint-disable-line no-unused-vars
+
 /**
- * @implements {LayerViewer.LayerView}
+ * @implements {LayerView}
  * @unrestricted
  */
 export class LayerDetailsView extends UI.Widget {
   /**
-   * @param {!LayerViewer.LayerViewHost} layerViewHost
+   * @param {!LayerViewHost} layerViewHost
    */
   constructor(layerViewHost) {
     super(true);
@@ -46,14 +49,14 @@
   }
 
   /**
-   * @param {?LayerViewer.LayerView.Selection} selection
+   * @param {?Selection} selection
    * @override
    */
   hoverObject(selection) {
   }
 
   /**
-   * @param {?LayerViewer.LayerView.Selection} selection
+   * @param {?Selection} selection
    * @override
    */
   selectObject(selection) {
@@ -86,11 +89,11 @@
     if (event.which !== 1) {
       return;
     }
-    this._layerViewHost.selectObject(new LayerViewer.LayerView.ScrollRectSelection(this._selection.layer(), index));
+    this._layerViewHost.selectObject(new ScrollRectSelection(this._selection.layer(), index));
   }
 
   _invokeProfilerLink() {
-    const snapshotSelection = this._selection.type() === LayerViewer.LayerView.Selection.Type.Snapshot ?
+    const snapshotSelection = this._selection.type() === Type.Snapshot ?
         this._selection :
         this._layerSnapshotMap.get(this._selection.layer());
     if (snapshotSelection) {
@@ -111,7 +114,7 @@
       element.classList.add('active');
     }
     element.textContent = Common.UIString(
-        '%s %d × %d (at %d, %d)', _slowScrollRectNames.get(scrollRect.type), scrollRect.rect.width,
+        '%s %d × %d (at %d, %d)', slowScrollRectNames.get(scrollRect.type), scrollRect.rect.width,
         scrollRect.rect.height, scrollRect.rect.x, scrollRect.rect.y);
     element.addEventListener('click', this._onScrollRectClicked.bind(this, index), false);
   }
@@ -193,8 +196,8 @@
     this._scrollRectsCell.removeChildren();
     layer.scrollRects().forEach(this._createScrollRectElement.bind(this));
     this._populateStickyPositionConstraintCell(layer.stickyPositionConstraint());
-    const snapshot = this._selection.type() === LayerViewer.LayerView.Selection.Type.Snapshot ?
-        /** @type {!LayerViewer.LayerView.SnapshotSelection} */ (this._selection).snapshot() :
+    const snapshot = this._selection.type() === Type.Snapshot ?
+        /** @type {!SnapshotSelection} */ (this._selection).snapshot() :
         null;
 
     this._paintProfilerLink.classList.toggle('hidden', !(this._layerSnapshotMap.has(layer) || snapshot));
@@ -262,26 +265,10 @@
   PaintProfilerRequested: Symbol('PaintProfilerRequested')
 };
 
-export const _slowScrollRectNames = new Map([
+export const slowScrollRectNames = new Map([
   [SDK.Layer.ScrollRectType.NonFastScrollable, Common.UIString('Non fast scrollable')],
   [SDK.Layer.ScrollRectType.TouchEventHandler, Common.UIString('Touch event handler')],
   [SDK.Layer.ScrollRectType.WheelEventHandler, Common.UIString('Wheel event handler')],
   [SDK.Layer.ScrollRectType.RepaintsOnScroll, Common.UIString('Repaints on scroll')],
   [SDK.Layer.ScrollRectType.MainThreadScrollingReason, Common.UIString('Main thread scrolling reason')]
 ]);
-
-/* Legacy exported object */
-self.LayerViewer = self.LayerViewer || {};
-
-/* Legacy exported object */
-LayerViewer = LayerViewer || {};
-
-/**
- * @constructor
- */
-LayerViewer.LayerDetailsView = LayerDetailsView;
-
-/** @enum {symbol} */
-LayerViewer.LayerDetailsView.Events = Events;
-
-LayerViewer.LayerDetailsView._slowScrollRectNames = _slowScrollRectNames;
diff --git a/front_end/layer_viewer/LayerTreeOutline.js b/front_end/layer_viewer/LayerTreeOutline.js
index 70a2b7a..5e55e49 100644
--- a/front_end/layer_viewer/LayerTreeOutline.js
+++ b/front_end/layer_viewer/LayerTreeOutline.js
@@ -28,15 +28,17 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-const _symbol = Symbol('layer');
+import {LayerSelection, LayerView, LayerViewHost, Selection} from './LayerViewHost.js';  // eslint-disable-line no-unused-vars
+
+export const layerSymbol = Symbol('layer');
 
 /**
- * @implements {LayerViewer.LayerView}
+ * @implements {LayerView}
  * @unrestricted
  */
 export class LayerTreeOutline extends Common.Object {
   /**
-   * @param {!LayerViewer.LayerViewHost} layerViewHost
+   * @param {!LayerViewHost} layerViewHost
    */
   constructor(layerViewHost) {
     super();
@@ -60,13 +62,13 @@
   }
 
   /**
-   * @param {?LayerViewer.LayerView.Selection} selection
+   * @param {?Selection} selection
    * @override
    */
   selectObject(selection) {
     this.hoverObject(null);
     const layer = selection && selection.layer();
-    const node = layer && layer[_symbol];
+    const node = layer && layer[layerSymbol];
     if (node) {
       node.revealAndSelect(true);
     } else if (this._treeOutline.selectedTreeElement) {
@@ -75,12 +77,12 @@
   }
 
   /**
-   * @param {?LayerViewer.LayerView.Selection} selection
+   * @param {?Selection} selection
    * @override
    */
   hoverObject(selection) {
     const layer = selection && selection.layer();
-    const node = layer && layer[_symbol];
+    const node = layer && layer[layerSymbol];
     if (node === this._lastHoveredNode) {
       return;
     }
@@ -117,7 +119,7 @@
 
     /**
      * @param {!SDK.Layer} layer
-     * @this {LayerViewer.LayerTreeOutline}
+     * @this {LayerTreeOutline}
      */
     function updateLayer(layer) {
       if (!layer.drawsContent() && !showInternalLayers) {
@@ -127,13 +129,13 @@
         console.assert(false, 'Duplicate layer: ' + layer.id());
       }
       seenLayers.set(layer, true);
-      let node = layer[_symbol];
+      let node = layer[layerSymbol];
       let parentLayer = layer.parent();
       // Skip till nearest visible ancestor.
       while (parentLayer && parentLayer !== root && !parentLayer.drawsContent() && !showInternalLayers) {
         parentLayer = parentLayer.parent();
       }
-      const parent = layer === root ? this._treeOutline.rootElement() : parentLayer[_symbol];
+      const parent = layer === root ? this._treeOutline.rootElement() : parentLayer[layerSymbol];
       if (!parent) {
         console.assert(false, 'Parent is not in the tree');
         return;
@@ -179,7 +181,7 @@
     if (!this._treeOutline.selectedTreeElement) {
       const elementToSelect = this._layerTree.contentRoot() || this._layerTree.root();
       if (elementToSelect) {
-        elementToSelect[_symbol].revealAndSelect(true);
+        elementToSelect[layerSymbol].revealAndSelect(true);
       }
     }
   }
@@ -196,7 +198,7 @@
   }
 
   /**
-   * @param {!LayerViewer.LayerTreeElement} node
+   * @param {!LayerTreeElement} node
    */
   _selectedNodeChanged(node) {
     this._layerViewHost.selectObject(this._selectionForNode(node));
@@ -222,10 +224,10 @@
 
   /**
    * @param {?UI.TreeElement} node
-   * @return {?LayerViewer.LayerView.Selection}
+   * @return {?Selection}
    */
   _selectionForNode(node) {
-    return node && node._layer ? new LayerViewer.LayerView.LayerSelection(node._layer) : null;
+    return node && node._layer ? new LayerSelection(node._layer) : null;
   }
 }
 
@@ -241,14 +243,14 @@
  */
 export class LayerTreeElement extends UI.TreeElement {
   /**
-   * @param {!LayerViewer.LayerTreeOutline} tree
+   * @param {!LayerTreeOutline} tree
    * @param {!SDK.Layer} layer
    */
   constructor(tree, layer) {
     super();
     this._treeOutline = tree;
     this._layer = layer;
-    this._layer[_symbol] = this;
+    this._layer[layerSymbol] = this;
     this._update();
   }
 
@@ -277,26 +279,3 @@
     this.listItemElement.classList.toggle('hovered', hovered);
   }
 }
-
-/* Legacy exported object */
-self.LayerViewer = self.LayerViewer || {};
-
-/* Legacy exported object */
-LayerViewer = LayerViewer || {};
-
-/**
- * @constructor
- */
-LayerViewer.LayerTreeOutline = LayerTreeOutline;
-
-/**
- * @enum {symbol}
- */
-LayerViewer.LayerTreeOutline.Events = Events;
-
-/**
- * @constructor
- */
-LayerViewer.LayerTreeElement = LayerTreeElement;
-
-LayerViewer.LayerTreeElement._symbol = _symbol;
diff --git a/front_end/layer_viewer/LayerViewHost.js b/front_end/layer_viewer/LayerViewHost.js
index dc2b108..cd92636 100644
--- a/front_end/layer_viewer/LayerViewHost.js
+++ b/front_end/layer_viewer/LayerViewHost.js
@@ -8,13 +8,13 @@
  */
 export class LayerView {
   /**
-   * @param {?LayerViewer.LayerView.Selection} selection
+   * @param {?Selection} selection
    */
   hoverObject(selection) {
   }
 
   /**
-   * @param {?LayerViewer.LayerView.Selection} selection
+   * @param {?Selection} selection
    */
   selectObject(selection) {
   }
@@ -30,7 +30,7 @@
  */
 export class Selection {
   /**
-   * @param {!LayerViewer.LayerView.Selection.Type} type
+   * @param {!Type} type
    * @param {!SDK.Layer} layer
    */
   constructor(type, layer) {
@@ -39,7 +39,7 @@
   }
 
   /**
-   * @param {?LayerViewer.LayerView.Selection} a
+   * @param {?Selection} a
    * @param {?LayerViewer.LayerView.Selection} b
    * @return {boolean}
    */
@@ -48,7 +48,7 @@
   }
 
   /**
-   * @return {!LayerViewer.LayerView.Selection.Type}
+   * @return {!Type}
    */
   type() {
     return this._type;
@@ -62,7 +62,7 @@
   }
 
   /**
-   * @param {!LayerViewer.LayerView.Selection} other
+   * @param {!Selection} other
    * @return {boolean}
    */
   _isEqual(other) {
@@ -93,7 +93,7 @@
 
   /**
    * @override
-   * @param {!LayerViewer.LayerView.Selection} other
+   * @param {!Selection} other
    * @return {boolean}
    */
   _isEqual(other) {
@@ -116,7 +116,7 @@
 
   /**
    * @override
-   * @param {!LayerViewer.LayerView.Selection} other
+   * @param {!Selection} other
    * @return {boolean}
    */
   _isEqual(other) {
@@ -140,7 +140,7 @@
 
   /**
    * @override
-   * @param {!LayerViewer.LayerView.Selection} other
+   * @param {!Selection} other
    * @return {boolean}
    */
   _isEqual(other) {
@@ -161,7 +161,7 @@
  */
 export class LayerViewHost {
   constructor() {
-    /** @type {!Array.<!LayerViewer.LayerView>} */
+    /** @type {!Array.<!LayerView>} */
     this._views = [];
     this._selectedObject = null;
     this._hoveredObject = null;
@@ -169,21 +169,21 @@
   }
 
   /**
-   * @param {!LayerViewer.LayerView} layerView
+   * @param {!LayerView} layerView
    */
   registerView(layerView) {
     this._views.push(layerView);
   }
 
   /**
-   * @param {!Map<!SDK.Layer, !LayerViewer.LayerView.SnapshotSelection>} snapshotLayers
+   * @param {!Map<!SDK.Layer, !SnapshotSelection>} snapshotLayers
    */
   setLayerSnapshotMap(snapshotLayers) {
     this._snapshotLayers = snapshotLayers;
   }
 
   /**
-   * @return {!Map<!SDK.Layer, !LayerViewer.LayerView.SnapshotSelection>}
+   * @return {!Map<!SDK.Layer, !SnapshotSelection>}
    */
   getLayerSnapshotMap() {
     return this._snapshotLayers;
@@ -208,7 +208,7 @@
   }
 
   /**
-   * @param {?LayerViewer.LayerView.Selection} selection
+   * @param {?Selection} selection
    */
   hoverObject(selection) {
     if (Selection.isEqual(this._hoveredObject, selection)) {
@@ -223,7 +223,7 @@
   }
 
   /**
-   * @param {?LayerViewer.LayerView.Selection} selection
+   * @param {?Selection} selection
    */
   selectObject(selection) {
     if (Selection.isEqual(this._selectedObject, selection)) {
@@ -236,7 +236,7 @@
   }
 
   /**
-   * @return {?LayerViewer.LayerView.Selection}
+   * @return {?Selection}
    */
   selection() {
     return this._selectedObject;
@@ -244,7 +244,7 @@
 
   /**
    * @param {!UI.ContextMenu} contextMenu
-   * @param {?LayerViewer.LayerView.Selection} selection
+   * @param {?Selection} selection
    */
   showContextMenu(contextMenu, selection) {
     contextMenu.defaultSection().appendCheckboxItem(
@@ -279,44 +279,3 @@
     SDK.OverlayModel.hideDOMNodeHighlight();
   }
 }
-
-/* Legacy exported object */
-self.LayerViewer = self.LayerViewer || {};
-
-/* Legacy exported object */
-LayerViewer = LayerViewer || {};
-
-/**
- * @interface
- */
-LayerViewer.LayerView = LayerView;
-
-/**
- * @constructor
- */
-LayerViewer.LayerView.Selection = Selection;
-
-/**
- * @enum {symbol}
- */
-LayerViewer.LayerView.Selection.Type = Type;
-
-/**
- * @constructor
- */
-LayerViewer.LayerView.LayerSelection = LayerSelection;
-
-/**
- * @constructor
- */
-LayerViewer.LayerView.ScrollRectSelection = ScrollRectSelection;
-
-/**
- * @constructor
- */
-LayerViewer.LayerView.SnapshotSelection = SnapshotSelection;
-
-/**
- * @constructor
- */
-LayerViewer.LayerViewHost = LayerViewHost;
diff --git a/front_end/layer_viewer/Layers3DView.js b/front_end/layer_viewer/Layers3DView.js
index 09eb9a4..597e454 100644
--- a/front_end/layer_viewer/Layers3DView.js
+++ b/front_end/layer_viewer/Layers3DView.js
@@ -27,13 +27,16 @@
  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
+import {LayerSelection, LayerView, LayerViewHost, ScrollRectSelection, Selection, SnapshotSelection, Type,} from './LayerViewHost.js';  // eslint-disable-line no-unused-vars
+import {Events as TransformControllerEvents, TransformController} from './TransformController.js';
+
 /**
- * @implements {LayerViewer.LayerView}
+ * @implements {LayerView}
  * @unrestricted
  */
 export class Layers3DView extends UI.VBox {
   /**
-   * @param {!LayerViewer.LayerViewHost} layerViewHost
+   * @param {!LayerViewHost} layerViewHost
    */
   constructor(layerViewHost) {
     super(true);
@@ -46,9 +49,8 @@
     this._layerViewHost = layerViewHost;
     this._layerViewHost.registerView(this);
 
-    this._transformController = new LayerViewer.TransformController(this.contentElement);
-    this._transformController.addEventListener(
-        LayerViewer.TransformController.Events.TransformChanged, this._update, this);
+    this._transformController = new TransformController(this.contentElement);
+    this._transformController.addEventListener(TransformControllerEvents.TransformChanged, this._update, this);
     this._initToolbar();
 
     this._canvasElement = this.contentElement.createChild('canvas');
@@ -70,7 +72,7 @@
     this._chromeTextures = [];
     this._rects = [];
 
-    /** @type Map<SDK.Layer, LayerViewer.LayerView.SnapshotSelection> */
+    /** @type Map<SDK.Layer, SnapshotSelection> */
     this._snapshotLayers = new Map();
     this._layerViewHost.setLayerSnapshotMap(this._snapshotLayers);
 
@@ -143,8 +145,8 @@
   }
 
   /**
-   * @param {!LayerViewer.Layers3DView.OutlineType} type
-   * @param {?LayerViewer.LayerView.Selection} selection
+   * @param {!OutlineType} type
+   * @param {?Selection} selection
    */
   _setOutline(type, selection) {
     this._lastSelection[type] = selection;
@@ -152,7 +154,7 @@
   }
 
   /**
-   * @param {?LayerViewer.LayerView.Selection} selection
+   * @param {?Selection} selection
    * @override
    */
   hoverObject(selection) {
@@ -160,7 +162,7 @@
   }
 
   /**
-   * @param {?LayerViewer.LayerView.Selection} selection
+   * @param {?Selection} selection
    * @override
    */
   selectObject(selection) {
@@ -169,12 +171,12 @@
   }
 
   /**
-   * @param {!LayerViewer.LayerView.Selection} selection
+   * @param {!Selection} selection
    * @return {!Promise<?SDK.SnapshotWithRect>}
    */
   snapshotForSelection(selection) {
-    if (selection.type() === LayerViewer.LayerView.Selection.Type.Snapshot) {
-      const snapshotWithRect = /** @type {!LayerViewer.LayerView.SnapshotSelection} */ (selection).snapshot();
+    if (selection.type() === Type.Snapshot) {
+      const snapshotWithRect = /** @type {!SnapshotSelection} */ (selection).snapshot();
       snapshotWithRect.snapshot.addReference();
       return /** @type {!Promise<?SDK.SnapshotWithRect>} */ (Promise.resolve(snapshotWithRect));
     }
@@ -315,8 +317,8 @@
 
   _initChromeTextures() {
     /**
-     * @this {LayerViewer.Layers3DView}
-     * @param {!LayerViewer.Layers3DView.ChromeTexture} index
+     * @this {Layers3DView}
+     * @param {!ChromeTexture} index
      * @param {string} url
      */
     function loadChromeTexture(index, url) {
@@ -407,7 +409,7 @@
     if (!this._visibleLayers.has(layer)) {
       return;
     }
-    const selection = new LayerViewer.LayerView.LayerSelection(layer);
+    const selection = new LayerSelection(layer);
     const rect = new Rectangle(selection);
     rect.setVertices(layer.quad(), this._depthForLayer(layer));
     this._appendRect(rect);
@@ -415,12 +417,12 @@
   }
 
   /**
-   * @param {!LayerViewer.Layers3DView.Rectangle} rect
+   * @param {!Rectangle} rect
    */
   _appendRect(rect) {
     const selection = rect.relatedObject;
-    const isSelected = LayerViewer.LayerView.Selection.isEqual(this._lastSelection[OutlineType.Selected], selection);
-    const isHovered = LayerViewer.LayerView.Selection.isEqual(this._lastSelection[OutlineType.Hovered], selection);
+    const isSelected = Selection.isEqual(this._lastSelection[OutlineType.Selected], selection);
+    const isHovered = Selection.isEqual(this._lastSelection[OutlineType.Hovered], selection);
     if (isSelected) {
       rect.borderColor = SelectedBorderColor;
     } else if (isHovered) {
@@ -444,7 +446,7 @@
   _calculateLayerScrollRects(layer) {
     const scrollRects = layer.scrollRects();
     for (let i = 0; i < scrollRects.length; ++i) {
-      const selection = new LayerViewer.LayerView.ScrollRectSelection(layer, i);
+      const selection = new ScrollRectSelection(layer, i);
       const rect = new Rectangle(selection);
       rect.calculateVerticesFromRect(layer, scrollRects[i].rect, this._calculateScrollRectDepth(layer, i));
       rect.fillColor = ScrollRectBackgroundColor;
@@ -462,7 +464,7 @@
       if (!tile.texture) {
         continue;
       }
-      const selection = new LayerViewer.LayerView.SnapshotSelection(layer, {rect: tile.rect, snapshot: tile.snapshot});
+      const selection = new SnapshotSelection(layer, {rect: tile.rect, snapshot: tile.snapshot});
       const rect = new Rectangle(selection);
       if (!this._snapshotLayers.has(layer)) {
         this._snapshotLayers.set(layer, selection);
@@ -486,7 +488,7 @@
 
     if (this._layerTexture && this._visibleLayers.has(this._layerTexture.layer)) {
       const layer = this._layerTexture.layer;
-      const selection = new LayerViewer.LayerView.LayerSelection(layer);
+      const selection = new LayerSelection(layer);
       const rect = new Rectangle(selection);
       rect.setVertices(layer.quad(), this._depthForLayer(layer));
       rect.texture = this._layerTexture.texture;
@@ -594,7 +596,7 @@
   }
 
   /**
-   * @param {!LayerViewer.Layers3DView.Rectangle} rect
+   * @param {!Rectangle} rect
    */
   _drawViewRect(rect) {
     const vertices = rect.vertices;
@@ -653,7 +655,7 @@
 
   /**
    * @param {!Event} event
-   * @return {?LayerViewer.LayerView.Selection}
+   * @return {?Selection}
    */
   _selectionFromEventPoint(event) {
     if (!this._layerTree) {
@@ -667,7 +669,7 @@
     const y0 = -(event.clientY - this._canvasElement.totalOffsetTop()) * window.devicePixelRatio;
 
     /**
-     * @param {!LayerViewer.Layers3DView.Rectangle} rect
+     * @param {!Rectangle} rect
      */
     function checkIntersection(rect) {
       if (!rect.relatedObject) {
@@ -718,7 +720,7 @@
     contextMenu.defaultSection().appendItem(
         Common.UIString('Reset View'), this._transformController.resetAndNotify.bind(this._transformController), false);
     const selection = this._selectionFromEventPoint(event);
-    if (selection && selection.type() === LayerViewer.LayerView.Selection.Type.Snapshot) {
+    if (selection && selection.type() === Type.Snapshot) {
       contextMenu.defaultSection().appendItem(
           Common.UIString('Show Paint Profiler'),
           this.dispatchEventToListeners.bind(this, Events.PaintProfilerRequested, selection), false);
@@ -762,7 +764,7 @@
    */
   _onDoubleClick(event) {
     const selection = this._selectionFromEventPoint(event);
-    if (selection && (selection.type() === LayerViewer.LayerView.Selection.Type.Snapshot || selection.layer())) {
+    if (selection && (selection.type() === Type.Snapshot || selection.layer())) {
       this.dispatchEventToListeners(Events.PaintProfilerRequested, selection);
     }
     event.stopPropagation();
@@ -894,7 +896,7 @@
       this.setLayerTree(null);
     }
 
-    /** @type {!Map<!SDK.Layer, !Array<!LayerViewer.LayerTextureManager.Tile>>} */
+    /** @type {!Map<!SDK.Layer, !Array<!Tile>>} */
     this._tilesByLayer = new Map();
     /** @type {!Array<!SDK.Layer>} */
     this._queue = [];
@@ -992,7 +994,7 @@
 
   /**
    * @param {!SDK.Layer} layer
-   * @return {!Array<!LayerViewer.LayerTextureManager.Tile>}
+   * @return {!Array<!Tile>}
    */
   tilesForLayer(layer) {
     return this._tilesByLayer.get(layer) || [];
@@ -1063,7 +1065,7 @@
  */
 export class Rectangle {
   /**
-   * @param {?LayerViewer.LayerView.Selection} relatedObject
+   * @param {?Selection} relatedObject
    */
   constructor(relatedObject) {
     this.relatedObject = relatedObject;
@@ -1221,69 +1223,3 @@
     this.texture = image ? LayerTextureManager._createTextureForImage(glContext, image) : null;
   }
 }
-
-/* Legacy exported object */
-self.LayerViewer = self.LayerViewer || {};
-
-/* Legacy exported object */
-LayerViewer = LayerViewer || {};
-
-/**
- * @constructor
- */
-LayerViewer.Layers3DView = Layers3DView;
-
-/** @typedef {{borderColor: !Array<number>, borderWidth: number}} */
-LayerViewer.Layers3DView.LayerStyle;
-
-/**
- * @enum {string}
- */
-LayerViewer.Layers3DView.OutlineType = OutlineType;
-
-/**
- * @enum {symbol}
- */
-LayerViewer.Layers3DView.Events = Events;
-
-/**
- * @enum {number}
- */
-LayerViewer.Layers3DView.ChromeTexture = ChromeTexture;
-
-/**
- * @enum {string}
- */
-LayerViewer.Layers3DView.ScrollRectTitles = ScrollRectTitles;
-
-LayerViewer.Layers3DView.FragmentShader = FragmentShader;
-LayerViewer.Layers3DView.VertexShader = VertexShader;
-
-LayerViewer.Layers3DView.HoveredBorderColor = HoveredBorderColor;
-LayerViewer.Layers3DView.SelectedBorderColor = SelectedBorderColor;
-LayerViewer.Layers3DView.BorderColor = BorderColor;
-LayerViewer.Layers3DView.ViewportBorderColor = ViewportBorderColor;
-LayerViewer.Layers3DView.ScrollRectBackgroundColor = ScrollRectBackgroundColor;
-LayerViewer.Layers3DView.HoveredImageMaskColor = HoveredImageMaskColor;
-LayerViewer.Layers3DView.BorderWidth = BorderWidth;
-
-LayerViewer.Layers3DView.SelectedBorderWidth = SelectedBorderWidth;
-LayerViewer.Layers3DView.ViewportBorderWidth = ViewportBorderWidth;
-
-LayerViewer.Layers3DView.LayerSpacing = LayerSpacing;
-LayerViewer.Layers3DView.ScrollRectSpacing = ScrollRectSpacing;
-
-/**
- * @constructor
- */
-LayerViewer.Layers3DView.Rectangle = Rectangle;
-
-/**
- * @constructor
- */
-LayerViewer.LayerTextureManager = LayerTextureManager;
-
-/**
- * @constructor
- */
-LayerViewer.LayerTextureManager.Tile = Tile;
diff --git a/front_end/layer_viewer/PaintProfilerView.js b/front_end/layer_viewer/PaintProfilerView.js
index e590dcb..ad84506 100644
--- a/front_end/layer_viewer/PaintProfilerView.js
+++ b/front_end/layer_viewer/PaintProfilerView.js
@@ -65,7 +65,7 @@
   }
 
   /**
-   * @return {!Object.<string, !LayerViewer.PaintProfilerCategory>}
+   * @return {!Object.<string, !PaintProfilerCategory>}
    */
   static categories() {
     if (PaintProfilerView._categories) {
@@ -81,7 +81,7 @@
   }
 
   /**
-   * @return {!Object.<string, !LayerViewer.PaintProfilerCategory>}
+   * @return {!Object.<string, !PaintProfilerCategory>}
    */
   static _initLogItemCategories() {
     if (PaintProfilerView._logItemCategoriesMap) {
@@ -134,7 +134,7 @@
 
   /**
    * @param {!Object} logItem
-   * @return {!LayerViewer.PaintProfilerCategory}
+   * @return {!PaintProfilerCategory}
    */
   static _categoryForLogItem(logItem) {
     const method = logItem.method.toTitleCase();
@@ -451,7 +451,7 @@
  */
 export class LogTreeElement extends UI.TreeElement {
   /**
-   * @param {!LayerViewer.PaintProfilerCommandLogView} ownerView
+   * @param {!PaintProfilerCommandLogView} ownerView
    * @param {!SDK.PaintProfilerLogItem} logItem
    */
   constructor(ownerView, logItem) {
@@ -584,36 +584,3 @@
     this.color = color;
   }
 }
-
-/* Legacy exported object */
-self.LayerViewer = self.LayerViewer || {};
-
-/* Legacy exported object */
-LayerViewer = LayerViewer || {};
-
-/**
- * @constructor
- */
-LayerViewer.PaintProfilerView = PaintProfilerView;
-
-LayerViewer.PaintProfilerView.Events = Events;
-
-/**
- * @constructor
- */
-LayerViewer.PaintProfilerCommandLogView = PaintProfilerCommandLogView;
-
-/**
- * @constructor
- */
-LayerViewer.LogTreeElement = LogTreeElement;
-
-/**
- * @constructor
- */
-LayerViewer.LogPropertyTreeElement = LogPropertyTreeElement;
-
-/**
- * @constructor
- */
-LayerViewer.PaintProfilerCategory = PaintProfilerCategory;
diff --git a/front_end/layer_viewer/TransformController.js b/front_end/layer_viewer/TransformController.js
index 2660ea6..2e877e4 100644
--- a/front_end/layer_viewer/TransformController.js
+++ b/front_end/layer_viewer/TransformController.js
@@ -95,7 +95,7 @@
   }
 
   /**
-   * @param {!LayerViewer.TransformController.Modes} mode
+   * @param {!Modes} mode
    */
   _setMode(mode) {
     if (this._mode === mode) {
@@ -296,24 +296,3 @@
   Pan: 'Pan',
   Rotate: 'Rotate',
 };
-
-/* Legacy exported object */
-self.LayerViewer = self.LayerViewer || {};
-
-/* Legacy exported object */
-LayerViewer = LayerViewer || {};
-
-/**
- * @constructor
- */
-LayerViewer.TransformController = TransformController;
-
-/**
- * @enum {symbol}
- */
-LayerViewer.TransformController.Events = Events;
-
-/**
- * @enum {string}
- */
-LayerViewer.TransformController.Modes = Modes;
diff --git a/front_end/layer_viewer/layer_viewer-legacy.js b/front_end/layer_viewer/layer_viewer-legacy.js
new file mode 100644
index 0000000..0c383ec
--- /dev/null
+++ b/front_end/layer_viewer/layer_viewer-legacy.js
@@ -0,0 +1,172 @@
+// Copyright 2019 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.
+
+import * as LayerViewerModule from './layer_viewer.js';
+
+self.LayerViewer = self.LayerViewer || {};
+LayerViewer = LayerViewer || {};
+
+/**
+ * @constructor
+ */
+LayerViewer.LayerDetailsView = LayerViewerModule.LayerDetailsView.LayerDetailsView;
+
+/** @enum {symbol} */
+LayerViewer.LayerDetailsView.Events = LayerViewerModule.LayerDetailsView.Events;
+
+LayerViewer.LayerDetailsView._slowScrollRectNames = LayerViewerModule.LayerDetailsView.slowScrollRectNames;
+
+/**
+ * @constructor
+ */
+LayerViewer.LayerTreeOutline = LayerViewerModule.LayerTreeOutline.LayerTreeOutline;
+
+/**
+ * @enum {symbol}
+ */
+LayerViewer.LayerTreeOutline.Events = LayerViewerModule.LayerTreeOutline.Events;
+
+/**
+ * @constructor
+ */
+LayerViewer.LayerTreeElement = LayerViewerModule.LayerTreeOutline.LayerTreeElement;
+
+LayerViewer.LayerTreeElement._symbol = LayerViewerModule.LayerTreeOutline.layerSymbol;
+
+/**
+ * @interface
+ */
+LayerViewer.LayerView = LayerViewerModule.LayerViewHost.LayerView;
+
+/**
+ * @constructor
+ */
+LayerViewer.LayerView.Selection = LayerViewerModule.LayerViewHost.Selection;
+
+/**
+ * @enum {symbol}
+ */
+LayerViewer.LayerView.Selection.Type = LayerViewerModule.LayerViewHost.Type;
+
+/**
+ * @constructor
+ */
+LayerViewer.LayerView.LayerSelection = LayerViewerModule.LayerViewHost.LayerSelection;
+
+/**
+ * @constructor
+ */
+LayerViewer.LayerView.ScrollRectSelection = LayerViewerModule.LayerViewHost.ScrollRectSelection;
+
+/**
+ * @constructor
+ */
+LayerViewer.LayerView.SnapshotSelection = LayerViewerModule.LayerViewHost.SnapshotSelection;
+
+/**
+ * @constructor
+ */
+LayerViewer.LayerViewHost = LayerViewerModule.LayerViewHost.LayerViewHost;
+
+/**
+ * @constructor
+ */
+LayerViewer.Layers3DView = LayerViewerModule.Layers3DView.Layers3DView;
+
+/**
+ * @enum {string}
+ */
+LayerViewer.Layers3DView.OutlineType = LayerViewerModule.Layers3DView.OutlineType;
+
+/**
+ * @enum {symbol}
+ */
+LayerViewer.Layers3DView.Events = LayerViewerModule.Layers3DView.Events;
+
+/**
+ * @enum {number}
+ */
+LayerViewer.Layers3DView.ChromeTexture = LayerViewerModule.Layers3DView.ChromeTexture;
+
+/**
+ * @enum {string}
+ */
+LayerViewer.Layers3DView.ScrollRectTitles = LayerViewerModule.Layers3DView.ScrollRectTitles;
+
+LayerViewer.Layers3DView.FragmentShader = LayerViewerModule.Layers3DView.FragmentShader;
+LayerViewer.Layers3DView.VertexShader = LayerViewerModule.Layers3DView.VertexShader;
+
+LayerViewer.Layers3DView.HoveredBorderColor = LayerViewerModule.Layers3DView.HoveredBorderColor;
+LayerViewer.Layers3DView.SelectedBorderColor = LayerViewerModule.Layers3DView.SelectedBorderColor;
+LayerViewer.Layers3DView.BorderColor = LayerViewerModule.Layers3DView.BorderColor;
+LayerViewer.Layers3DView.ViewportBorderColor = LayerViewerModule.Layers3DView.ViewportBorderColor;
+LayerViewer.Layers3DView.ScrollRectBackgroundColor = LayerViewerModule.Layers3DView.ScrollRectBackgroundColor;
+LayerViewer.Layers3DView.HoveredImageMaskColor = LayerViewerModule.Layers3DView.HoveredImageMaskColor;
+LayerViewer.Layers3DView.BorderWidth = LayerViewerModule.Layers3DView.BorderWidth;
+
+LayerViewer.Layers3DView.SelectedBorderWidth = LayerViewerModule.Layers3DView.SelectedBorderWidth;
+LayerViewer.Layers3DView.ViewportBorderWidth = LayerViewerModule.Layers3DView.ViewportBorderWidth;
+
+LayerViewer.Layers3DView.LayerSpacing = LayerViewerModule.Layers3DView.LayerSpacing;
+LayerViewer.Layers3DView.ScrollRectSpacing = LayerViewerModule.Layers3DView.ScrollRectSpacing;
+
+/**
+ * @constructor
+ */
+LayerViewer.Layers3DView.Rectangle = LayerViewerModule.Layers3DView.Rectangle;
+
+/**
+ * @constructor
+ */
+LayerViewer.LayerTextureManager = LayerViewerModule.Layers3DView.LayerTextureManager;
+
+/**
+ * @constructor
+ */
+LayerViewer.LayerTextureManager.Tile = LayerViewerModule.Layers3DView.Tile;
+
+/**
+ * @constructor
+ */
+LayerViewer.PaintProfilerView = LayerViewerModule.PaintProfilerView.PaintProfilerView;
+
+LayerViewer.PaintProfilerView.Events = LayerViewerModule.PaintProfilerView.Events;
+
+/**
+ * @constructor
+ */
+LayerViewer.PaintProfilerCommandLogView = LayerViewerModule.PaintProfilerView.PaintProfilerCommandLogView;
+
+/**
+ * @constructor
+ */
+LayerViewer.LogTreeElement = LayerViewerModule.PaintProfilerView.LogTreeElement;
+
+/**
+ * @constructor
+ */
+LayerViewer.LogPropertyTreeElement = LayerViewerModule.PaintProfilerView.LogPropertyTreeElement;
+
+/**
+ * @constructor
+ */
+LayerViewer.PaintProfilerCategory = LayerViewerModule.PaintProfilerView.PaintProfilerCategory;
+
+/**
+ * @constructor
+ */
+LayerViewer.TransformController = LayerViewerModule.TransformController.TransformController;
+
+/**
+ * @enum {symbol}
+ */
+LayerViewer.TransformController.Events = LayerViewerModule.TransformController.Events;
+
+/**
+ * @enum {string}
+ */
+LayerViewer.TransformController.Modes = LayerViewerModule.TransformController.Modes;
+
+/** @typedef {{borderColor: !Array<number>, borderWidth: number}} */
+LayerViewer.Layers3DView.LayerStyle;
diff --git a/front_end/layer_viewer/module.json b/front_end/layer_viewer/module.json
index 86fc1a8..c6a421e 100644
--- a/front_end/layer_viewer/module.json
+++ b/front_end/layer_viewer/module.json
@@ -8,6 +8,8 @@
     ],
     "scripts": [],
     "modules": [
+        "layer_viewer.js",
+        "layer_viewer-legacy.js",
         "LayerDetailsView.js",
         "LayerTreeOutline.js",
         "LayerViewHost.js",