From dbf92bdea172affda4b4a491145f264ae6e5bcb8 Mon Sep 17 00:00:00 2001 From: Nikhil Sonti Date: Wed, 18 Feb 2026 12:31:47 -0800 Subject: [PATCH] feat: add tabId and windowId in each targetInfo --- .../chrome_devtools_manager_delegate.cc | 33 +++++++++++++++++++ .../chrome_devtools_manager_delegate.h | 14 ++++++++ .../devtools/protocol/target_handler.cc | 24 ++++++++++++-- .../browser/devtools_manager_delegate.cc | 17 ++++++++++ .../browser/devtools_manager_delegate.h | 19 +++++++++++ .../devtools_protocol/domains/Target.pdl | 17 ++++++++++ 6 files changed, 122 insertions(+), 2 deletions(-) create mode 100644 packages/browseros/chromium_patches/chrome/browser/devtools/chrome_devtools_manager_delegate.cc create mode 100644 packages/browseros/chromium_patches/chrome/browser/devtools/chrome_devtools_manager_delegate.h create mode 100644 packages/browseros/chromium_patches/content/public/browser/devtools_manager_delegate.cc create mode 100644 packages/browseros/chromium_patches/content/public/browser/devtools_manager_delegate.h create mode 100644 packages/browseros/chromium_patches/third_party/blink/public/devtools_protocol/domains/Target.pdl diff --git a/packages/browseros/chromium_patches/chrome/browser/devtools/chrome_devtools_manager_delegate.cc b/packages/browseros/chromium_patches/chrome/browser/devtools/chrome_devtools_manager_delegate.cc new file mode 100644 index 00000000..bef81121 --- /dev/null +++ b/packages/browseros/chromium_patches/chrome/browser/devtools/chrome_devtools_manager_delegate.cc @@ -0,0 +1,33 @@ +diff --git a/chrome/browser/devtools/chrome_devtools_manager_delegate.cc b/chrome/browser/devtools/chrome_devtools_manager_delegate.cc +index 4173438cc19fb..b590826be0c7d 100644 +--- a/chrome/browser/devtools/chrome_devtools_manager_delegate.cc ++++ b/chrome/browser/devtools/chrome_devtools_manager_delegate.cc +@@ -46,6 +46,7 @@ + #include "components/guest_view/browser/guest_view_base.h" + #include "components/keep_alive_registry/keep_alive_types.h" + #include "components/keep_alive_registry/scoped_keep_alive.h" ++#include "components/sessions/content/session_tab_helper.h" + #include "components/tabs/public/tab_interface.h" + #include "content/public/browser/browser_thread.h" + #include "content/public/browser/devtools_agent_host.h" +@@ -342,6 +343,20 @@ std::optional ChromeDevToolsManagerDelegate::ShouldReportAsTabTarget( + return std::nullopt; + } + ++bool ChromeDevToolsManagerDelegate::GetTargetTabId( ++ content::WebContents* web_contents, ++ int* tab_id, ++ int* window_id) { ++ SessionID sid = sessions::SessionTabHelper::IdForTab(web_contents); ++ if (!sid.is_valid()) ++ return false; ++ *tab_id = sid.id(); ++ SessionID wid = ++ sessions::SessionTabHelper::IdForWindowContainingTab(web_contents); ++ *window_id = wid.is_valid() ? wid.id() : -1; ++ return true; ++} ++ + std::string ChromeDevToolsManagerDelegate::GetTargetTitle( + content::WebContents* web_contents) { + if (auto iwa_name_version = GetIsolatedWebAppNameAndVersion(web_contents)) { diff --git a/packages/browseros/chromium_patches/chrome/browser/devtools/chrome_devtools_manager_delegate.h b/packages/browseros/chromium_patches/chrome/browser/devtools/chrome_devtools_manager_delegate.h new file mode 100644 index 00000000..d5808234 --- /dev/null +++ b/packages/browseros/chromium_patches/chrome/browser/devtools/chrome_devtools_manager_delegate.h @@ -0,0 +1,14 @@ +diff --git a/chrome/browser/devtools/chrome_devtools_manager_delegate.h b/chrome/browser/devtools/chrome_devtools_manager_delegate.h +index a37b46861fb3d..af1e0e2602c88 100644 +--- a/chrome/browser/devtools/chrome_devtools_manager_delegate.h ++++ b/chrome/browser/devtools/chrome_devtools_manager_delegate.h +@@ -73,6 +73,9 @@ class ChromeDevToolsManagerDelegate : public content::DevToolsManagerDelegate, + std::string GetTargetTitle(content::WebContents* web_contents) override; + std::optional ShouldReportAsTabTarget( + content::WebContents* web_contents) override; ++ bool GetTargetTabId(content::WebContents* web_contents, ++ int* tab_id, ++ int* window_id) override; + + content::BrowserContext* CreateBrowserContext() override; + void DisposeBrowserContext(content::BrowserContext*, diff --git a/packages/browseros/chromium_patches/content/browser/devtools/protocol/target_handler.cc b/packages/browseros/chromium_patches/content/browser/devtools/protocol/target_handler.cc index b95cbd11..4ceeaca9 100644 --- a/packages/browseros/chromium_patches/content/browser/devtools/protocol/target_handler.cc +++ b/packages/browseros/chromium_patches/content/browser/devtools/protocol/target_handler.cc @@ -1,8 +1,28 @@ diff --git a/content/browser/devtools/protocol/target_handler.cc b/content/browser/devtools/protocol/target_handler.cc -index b1721338d7523..b63d11cb5fc2e 100644 +index 7568beca10c6c..4e4573c3ad32d 100644 --- a/content/browser/devtools/protocol/target_handler.cc +++ b/content/browser/devtools/protocol/target_handler.cc -@@ -1411,11 +1411,11 @@ void TargetHandler::DevToolsAgentHostDestroyed(DevToolsAgentHost* host) { +@@ -119,6 +119,19 @@ std::unique_ptr BuildTargetInfo( + if (!subtype.empty()) { + target_info->SetSubtype(subtype); + } ++ WebContents* web_contents = host->GetWebContents(); ++ if (web_contents) { ++ DevToolsManagerDelegate* delegate = ++ DevToolsManager::GetInstance()->delegate(); ++ int tab_id, window_id; ++ if (delegate && ++ delegate->GetTargetTabId(web_contents, &tab_id, &window_id)) { ++ target_info->SetTabId(tab_id); ++ if (window_id >= 0) { ++ target_info->SetWindowId(window_id); ++ } ++ } ++ } + return target_info; + } + +@@ -1416,11 +1429,11 @@ void TargetHandler::DevToolsAgentHostDestroyed(DevToolsAgentHost* host) { } void TargetHandler::DevToolsAgentHostAttached(DevToolsAgentHost* host) { diff --git a/packages/browseros/chromium_patches/content/public/browser/devtools_manager_delegate.cc b/packages/browseros/chromium_patches/content/public/browser/devtools_manager_delegate.cc new file mode 100644 index 00000000..463c9afd --- /dev/null +++ b/packages/browseros/chromium_patches/content/public/browser/devtools_manager_delegate.cc @@ -0,0 +1,17 @@ +diff --git a/content/public/browser/devtools_manager_delegate.cc b/content/public/browser/devtools_manager_delegate.cc +index 02e70247e20fd..098273cc00bdd 100644 +--- a/content/public/browser/devtools_manager_delegate.cc ++++ b/content/public/browser/devtools_manager_delegate.cc +@@ -57,6 +57,12 @@ std::optional DevToolsManagerDelegate::ShouldReportAsTabTarget( + return std::nullopt; + } + ++bool DevToolsManagerDelegate::GetTargetTabId(WebContents* web_contents, ++ int* tab_id, ++ int* window_id) { ++ return false; ++} ++ + DevToolsAgentHost::List DevToolsManagerDelegate::RemoteDebuggingTargets( + DevToolsManagerDelegate::TargetType target_type) { + return DevToolsAgentHost::GetOrCreateAll(); diff --git a/packages/browseros/chromium_patches/content/public/browser/devtools_manager_delegate.h b/packages/browseros/chromium_patches/content/public/browser/devtools_manager_delegate.h new file mode 100644 index 00000000..ba2fe4f2 --- /dev/null +++ b/packages/browseros/chromium_patches/content/public/browser/devtools_manager_delegate.h @@ -0,0 +1,19 @@ +diff --git a/content/public/browser/devtools_manager_delegate.h b/content/public/browser/devtools_manager_delegate.h +index e6e5ba7be2551..969c9a49db8cc 100644 +--- a/content/public/browser/devtools_manager_delegate.h ++++ b/content/public/browser/devtools_manager_delegate.h +@@ -91,6 +91,14 @@ class CONTENT_EXPORT DevToolsManagerDelegate { + virtual std::optional ShouldReportAsTabTarget( + WebContents* web_contents); + ++ // Returns session-scoped tab and window identifiers for the given ++ // |web_contents|. Embedders that support tab identity (e.g. Chrome) ++ // should override this to populate tabId/windowId in TargetInfo. ++ // Returns false if the web contents does not have tab identity. ++ virtual bool GetTargetTabId(WebContents* web_contents, ++ int* tab_id, ++ int* window_id); ++ + // Chrome Devtools Protocol Target type to use. Before MPArch frame targets + // were used, which correspond to the primary outermost frame in the + // WebContents. With prerender and other MPArch features, there could be diff --git a/packages/browseros/chromium_patches/third_party/blink/public/devtools_protocol/domains/Target.pdl b/packages/browseros/chromium_patches/third_party/blink/public/devtools_protocol/domains/Target.pdl new file mode 100644 index 00000000..73485a4e --- /dev/null +++ b/packages/browseros/chromium_patches/third_party/blink/public/devtools_protocol/domains/Target.pdl @@ -0,0 +1,17 @@ +diff --git a/third_party/blink/public/devtools_protocol/domains/Target.pdl b/third_party/blink/public/devtools_protocol/domains/Target.pdl +index 8d8ead638ece0..57f63cbaa0879 100644 +--- a/third_party/blink/public/devtools_protocol/domains/Target.pdl ++++ b/third_party/blink/public/devtools_protocol/domains/Target.pdl +@@ -33,6 +33,12 @@ domain Target + # Provides additional details for specific target types. For example, for + # the type of "page", this may be set to "prerender". + experimental optional string subtype ++ # Session-scoped tab id for targets associated with a browser tab. ++ # Present for page and frame targets; absent for workers, browser, etc. ++ experimental optional Browser.TabID tabId ++ # Browser window id containing the tab. Present when tabId is present ++ # and the tab is in a window. ++ experimental optional Browser.WindowID windowId + + # A filter used by target query/discovery/auto-attach operations. + experimental type FilterEntry extends object