|  | // Copyright 2021 The Chromium Authors | 
|  | // Use of this source code is governed by a BSD-style license that can be | 
|  | // found in the LICENSE file. | 
|  | #ifndef CONTENT_BROWSER_DEVTOOLS_FRAME_AUTO_ATTACHER_H_ | 
|  | #define CONTENT_BROWSER_DEVTOOLS_FRAME_AUTO_ATTACHER_H_ | 
|  |  | 
|  | #include "base/callback.h" | 
|  | #include "content/browser/devtools/protocol/target_auto_attacher.h" | 
|  | #include "content/browser/devtools/service_worker_devtools_manager.h" | 
|  | #include "content/browser/interest_group/debuggable_auction_worklet_tracker.h" | 
|  |  | 
|  | namespace content { | 
|  |  | 
|  | class DevToolsRendererChannel; | 
|  | class FrameTree; | 
|  | class NavigationRequest; | 
|  | class RenderFrameHostImpl; | 
|  | class ServiceWorkerDevToolsAgentHost; | 
|  |  | 
|  | class FrameAutoAttacher : public protocol::RendererAutoAttacherBase, | 
|  | public ServiceWorkerDevToolsManager::Observer, | 
|  | public DebuggableAuctionWorkletTracker::Observer { | 
|  | public: | 
|  | explicit FrameAutoAttacher(DevToolsRendererChannel* renderer_channel); | 
|  | ~FrameAutoAttacher() override; | 
|  |  | 
|  | void SetRenderFrameHost(RenderFrameHostImpl* render_frame_host); | 
|  | void DidFinishNavigation(NavigationRequest* navigation_request); | 
|  | void UpdatePages(); | 
|  | void AutoAttachToPage(FrameTree* frame_tree, bool wait_for_debugger_on_start); | 
|  |  | 
|  | protected: | 
|  | // Base overrides. | 
|  | void UpdateAutoAttach(base::OnceClosure callback) override; | 
|  |  | 
|  | // ServiceWorkerDevToolsManager::Observer implementation. | 
|  | void WorkerCreated(ServiceWorkerDevToolsAgentHost* host, | 
|  | bool* should_pause_on_start) override; | 
|  | void WorkerDestroyed(ServiceWorkerDevToolsAgentHost* host) override; | 
|  |  | 
|  | // DebuggableAuctionWorkletTracker::Observer implementation. | 
|  | void AuctionWorkletCreated(DebuggableAuctionWorklet* worklet, | 
|  | bool& should_pause_on_start) override; | 
|  |  | 
|  | void ReattachServiceWorkers(); | 
|  | void UpdateFrames(); | 
|  |  | 
|  | private: | 
|  | RenderFrameHostImpl* render_frame_host_ = nullptr; | 
|  | bool observing_service_workers_ = false; | 
|  | bool observing_auction_worklets_ = false; | 
|  | }; | 
|  |  | 
|  | }  // namespace content | 
|  |  | 
|  | #endif  // CONTENT_BROWSER_DEVTOOLS_FRAME_AUTO_ATTACHER_H_ |