[module.json extensions] resources views

Bug: 1134103
Change-Id: Idb39a93006a87a885800b7e668e015fa7d65b37a
Reviewed-on: https://chromium-review.googlesource.com/c/devtools/devtools-frontend/+/2631962
Commit-Queue: Andres Olivares <[email protected]>
Reviewed-by: Tim van der Lippe <[email protected]>
diff --git a/devtools_grd_files.gni b/devtools_grd_files.gni
index e6ab1aa..65f75ef 100644
--- a/devtools_grd_files.gni
+++ b/devtools_grd_files.gni
@@ -328,6 +328,7 @@
   "front_end/quick_open/quick_open_module.js",
   "front_end/recorder/recorder.js",
   "front_end/resources/resources-legacy.js",
+  "front_end/resources/resources-meta.js",
   "front_end/resources/resources.js",
   "front_end/resources/resources_module.js",
   "front_end/root/root-legacy.js",
diff --git a/devtools_module_entrypoints.gni b/devtools_module_entrypoints.gni
index d7c3cc2..8ac9327 100644
--- a/devtools_module_entrypoints.gni
+++ b/devtools_module_entrypoints.gni
@@ -135,6 +135,7 @@
   "quick_open/quick_open.js",
   "recorder/recorder.js",
   "resources/resources-legacy.js",
+  "resources/resources-meta.js",
   "resources/resources.js",
   "root/root-legacy.js",
   "root/root.js",
diff --git a/front_end/BUILD.gn b/front_end/BUILD.gn
index c74a9fe..063db16 100644
--- a/front_end/BUILD.gn
+++ b/front_end/BUILD.gn
@@ -87,6 +87,7 @@
     "quick_open:bundle",
     "recorder:bundle",
     "resources:bundle",
+    "resources:meta",
     "screencast:bundle",
     "sdk:bundle",
     "search:bundle",
diff --git a/front_end/devtools_app.js b/front_end/devtools_app.js
index d5ee426..a2c2279 100644
--- a/front_end/devtools_app.js
+++ b/front_end/devtools_app.js
@@ -12,6 +12,7 @@
 import './animation/animation-meta.js';
 import './developer_resources/developer_resources-meta.js';
 import './inspector_main/inspector_main-meta.js';
+import './resources/resources-meta.js';
 import * as Startup from './startup/startup.js';
 
 Startup.RuntimeInstantiator.startApplication('devtools_app');
diff --git a/front_end/resources/BUILD.gn b/front_end/resources/BUILD.gn
index 3f86150..4277b1b 100644
--- a/front_end/resources/BUILD.gn
+++ b/front_end/resources/BUILD.gn
@@ -66,3 +66,9 @@
 
   deps = [ ":bundle" ]
 }
+
+devtools_entrypoint("meta") {
+  entrypoint = "resources-meta.ts"
+
+  deps = [ ":bundle" ]
+}
diff --git a/front_end/resources/module.json b/front_end/resources/module.json
index e5ae25b..2d7904c 100644
--- a/front_end/resources/module.json
+++ b/front_end/resources/module.json
@@ -1,15 +1,6 @@
 {
   "extensions": [
     {
-      "type": "view",
-      "location": "panel",
-      "id": "resources",
-      "title": "Application",
-      "order": 70,
-      "className": "Resources.ResourcesPanel",
-      "tags": "pwa"
-    },
-    {
       "type": "@Common.Revealer",
       "contextTypes": [
         "SDK.Resource"
diff --git a/front_end/resources/resources-meta.ts b/front_end/resources/resources-meta.ts
new file mode 100644
index 0000000..736be29
--- /dev/null
+++ b/front_end/resources/resources-meta.ts
@@ -0,0 +1,34 @@
+// Copyright 2020 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 {ls} from '../platform/platform.js';
+import * as Root from '../root/root.js';
+import * as UI from '../ui/ui.js';
+
+// eslint-disable-next-line rulesdir/es_modules_import
+import type * as Resources from './resources.js';
+
+let loadedResourcesModule: (typeof Resources|undefined);
+
+async function loadResourcesModule(): Promise<typeof Resources> {
+  if (!loadedResourcesModule) {
+    // Side-effect import resources in module.json
+    await Root.Runtime.Runtime.instance().loadModulePromise('resources');
+    loadedResourcesModule = await import('./resources.js');
+  }
+  return loadedResourcesModule;
+}
+
+UI.ViewManager.registerViewExtension({
+  location: UI.ViewManager.ViewLocationValues.PANEL,
+  id: 'resources',
+  title: ls`Application`,
+  commandPrompt: 'Show Application',
+  order: 70,
+  async loadView() {
+    const Resources = await loadResourcesModule();
+    return Resources.ResourcesPanel.ResourcesPanel.instance();
+  },
+  tags: [ls`pwa`],
+});