Browse Source

Add devtools API to inspect shared worker. (#16615)

michtsu 6 years ago
parent
commit
392458b252

+ 18 - 0
atom/browser/api/atom_api_web_contents.cc

@@ -1416,6 +1416,23 @@ void WebContents::InspectElement(int x, int y) {
   managed_web_contents()->InspectElement(x, y);
 }
 
+void WebContents::InspectSharedWorker() {
+  if (type_ == REMOTE)
+    return;
+
+  if (!enable_devtools_)
+    return;
+
+  for (const auto& agent_host : content::DevToolsAgentHost::GetOrCreateAll()) {
+    if (agent_host->GetType() ==
+        content::DevToolsAgentHost::kTypeSharedWorker) {
+      OpenDevTools(nullptr);
+      managed_web_contents()->AttachTo(agent_host);
+      break;
+    }
+  }
+}
+
 void WebContents::InspectServiceWorker() {
   if (type_ == REMOTE)
     return;
@@ -2178,6 +2195,7 @@ void WebContents::BuildPrototype(v8::Isolate* isolate,
       .SetMethod("unregisterServiceWorker",
                  &WebContents::UnregisterServiceWorker)
       .SetMethod("inspectServiceWorker", &WebContents::InspectServiceWorker)
+      .SetMethod("inspectSharedWorker", &WebContents::InspectSharedWorker)
 #if BUILDFLAG(ENABLE_PRINTING)
       .SetMethod("_print", &WebContents::Print)
       .SetMethod("_getPrinters", &WebContents::GetPrinterList)

+ 1 - 0
atom/browser/api/atom_api_web_contents.h

@@ -160,6 +160,7 @@ class WebContents : public mate::TrackableObject<WebContents>,
   void EnableDeviceEmulation(const blink::WebDeviceEmulationParams& params);
   void DisableDeviceEmulation();
   void InspectElement(int x, int y);
+  void InspectSharedWorker();
   void InspectServiceWorker();
   v8::Local<v8::Promise> HasServiceWorker();
   void UnregisterServiceWorker(const base::Callback<void(bool)>&);

+ 4 - 0
docs/api/web-contents.md

@@ -1381,6 +1381,10 @@ Toggles the developer tools.
 
 Starts inspecting element at position (`x`, `y`).
 
+#### `contents.inspectSharedWorker()`
+
+Opens the developer tools for the shared worker context.
+
 #### `contents.inspectServiceWorker()`
 
 Opens the developer tools for the service worker context.

+ 4 - 0
docs/api/webview-tag.md

@@ -408,6 +408,10 @@ Returns `Boolean` - Whether DevTools window of guest page is focused.
 
 Starts inspecting element at position (`x`, `y`) of guest page.
 
+### `<webview>.inspectSharedWorker()`
+
+Opens the DevTools for the shared worker context present in the guest page.
+
 ### `<webview>.inspectServiceWorker()`
 
 Opens the DevTools for the service worker context present in the guest page.

+ 3 - 0
lib/browser/api/browser-window.js

@@ -171,6 +171,9 @@ Object.assign(BrowserWindow.prototype, {
   inspectElement (...args) {
     return this.webContents.inspectElement(...args)
   },
+  inspectSharedWorker () {
+    return this.webContents.inspectSharedWorker()
+  },
   inspectServiceWorker () {
     return this.webContents.inspectServiceWorker()
   },

+ 1 - 0
lib/common/web-view-methods.js

@@ -44,6 +44,7 @@ exports.syncMethods = new Set([
   'findInPage',
   'stopFindInPage',
   'downloadURL',
+  'inspectSharedWorker',
   'inspectServiceWorker',
   'showDefinitionForSelection',
   'getZoomFactor',