[MBI] Use per-AgentSchedulingGroup task runners for BrowserInterfaceBrokerProxy’s mojo interfaces

Context:

Per-AgentSchedulingGroup task runners should be used where appropriate.

What this CL does:

Use per-AgentSchedulingGroup task runners for BrowserInterfaceBrokerProxy’s mojo interfaces instead of per-thread task runners.

Bug: 1105403
Change-Id: I692cf7cc11af80e4b875f2d5b7492b44f58ef9ad
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2501170
Reviewed-by: Kentaro Hara <haraken@chromium.org>
Reviewed-by: Alexander Timin <altimin@chromium.org>
Commit-Queue: Minoru Chikamune <chikamune@chromium.org>
Cr-Commit-Position: refs/heads/master@{#821488}
diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc
index 9b63b6c..8f5e4a40 100644
--- a/content/renderer/render_frame_impl.cc
+++ b/content/renderer/render_frame_impl.cc
@@ -2020,7 +2020,8 @@
 
   CHECK(params.browser_interface_broker.is_valid());
   browser_interface_broker_proxy_.Bind(
-      std::move(params.browser_interface_broker));
+      std::move(params.browser_interface_broker),
+      agent_scheduling_group_.agent_group_scheduler().DefaultTaskRunner());
 
   // Must call after binding our own remote interfaces.
   media_factory_.SetupMojo();
@@ -4334,7 +4335,8 @@
     // remote interfaces. The interface requests will be serviced once the
     // BrowserInterfaceBroker interface request is bound by the
     // RenderFrameHostImpl.
-    browser_interface_broker_receiver = browser_interface_broker_proxy_.Reset();
+    browser_interface_broker_receiver = browser_interface_broker_proxy_.Reset(
+        agent_scheduling_group_.agent_group_scheduler().DefaultTaskRunner());
 
     // blink::WebAudioOutputIPCFactory::io_task_runner_ may be null in tests.
     auto& factory = blink::WebAudioOutputIPCFactory::GetInstance();
diff --git a/third_party/blink/common/browser_interface_broker_proxy.cc b/third_party/blink/common/browser_interface_broker_proxy.cc
index 1dc9f8eaf..6605719 100644
--- a/third_party/blink/common/browser_interface_broker_proxy.cc
+++ b/third_party/blink/common/browser_interface_broker_proxy.cc
@@ -9,15 +9,19 @@
 namespace blink {
 
 void BrowserInterfaceBrokerProxy::Bind(
-    mojo::PendingRemote<blink::mojom::BrowserInterfaceBroker> broker) {
-  broker_ =
-      mojo::Remote<blink::mojom::BrowserInterfaceBroker>(std::move(broker));
+    mojo::PendingRemote<blink::mojom::BrowserInterfaceBroker> broker,
+    scoped_refptr<base::SingleThreadTaskRunner> task_runner) {
+  DCHECK(task_runner);
+  broker_ = mojo::Remote<blink::mojom::BrowserInterfaceBroker>(
+      std::move(broker), std::move(task_runner));
 }
 
 mojo::PendingReceiver<blink::mojom::BrowserInterfaceBroker>
-BrowserInterfaceBrokerProxy::Reset() {
+BrowserInterfaceBrokerProxy::Reset(
+    scoped_refptr<base::SingleThreadTaskRunner> task_runner) {
+  DCHECK(task_runner);
   broker_.reset();
-  return broker_.BindNewPipeAndPassReceiver();
+  return broker_.BindNewPipeAndPassReceiver(std::move(task_runner));
 }
 
 void BrowserInterfaceBrokerProxy::GetInterface(
@@ -59,7 +63,7 @@
     auto& proxy = proxy_slot->GetOrCreateValue();
     mojo::PendingRemote<blink::mojom::BrowserInterfaceBroker> remote;
     ignore_result(remote.InitWithNewPipeAndPassReceiver());
-    proxy.Bind(std::move(remote));
+    proxy.Bind(std::move(remote), base::ThreadTaskRunnerHandle::Get());
   }
 
   return proxy_slot->GetOrCreateValue();
diff --git a/third_party/blink/public/common/browser_interface_broker_proxy.h b/third_party/blink/public/common/browser_interface_broker_proxy.h
index 599170cc..b9044cf 100644
--- a/third_party/blink/public/common/browser_interface_broker_proxy.h
+++ b/third_party/blink/public/common/browser_interface_broker_proxy.h
@@ -18,8 +18,10 @@
 class BLINK_COMMON_EXPORT BrowserInterfaceBrokerProxy {
  public:
   BrowserInterfaceBrokerProxy() = default;
-  void Bind(mojo::PendingRemote<blink::mojom::BrowserInterfaceBroker>);
-  mojo::PendingReceiver<blink::mojom::BrowserInterfaceBroker> Reset();
+  void Bind(mojo::PendingRemote<blink::mojom::BrowserInterfaceBroker> broker,
+            scoped_refptr<base::SingleThreadTaskRunner> task_runner);
+  mojo::PendingReceiver<blink::mojom::BrowserInterfaceBroker> Reset(
+      scoped_refptr<base::SingleThreadTaskRunner> task_runner);
 
   // Asks the browser to bind the given receiver. If a non-null testing override
   // was set by |SetBinderForTesting()|, the request will be intercepted by that
diff --git a/third_party/blink/renderer/core/workers/worker_global_scope.cc b/third_party/blink/renderer/core/workers/worker_global_scope.cc
index 494404e6..2a34728 100644
--- a/third_party/blink/renderer/core/workers/worker_global_scope.cc
+++ b/third_party/blink/renderer/core/workers/worker_global_scope.cc
@@ -568,7 +568,8 @@
     auto pipe = creation_params->browser_interface_broker.PassPipe();
     browser_interface_broker_proxy_.Bind(
         mojo::PendingRemote<blink::mojom::BrowserInterfaceBroker>(
-            std::move(pipe), blink::mojom::BrowserInterfaceBroker::Version_));
+            std::move(pipe), blink::mojom::BrowserInterfaceBroker::Version_),
+        GetTaskRunner(TaskType::kInternalDefault));
   }
 
   // A FeaturePolicy is created by FeaturePolicy::CreateFromParentPolicy, even