blob: 412c18fad411f0aebb07215b786642a2a6b49819 [file] [log] [blame]
// Copyright 2025 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_PROTOCOL_HIDDEN_TARGET_MANAGER_H_
#define CONTENT_BROWSER_DEVTOOLS_PROTOCOL_HIDDEN_TARGET_MANAGER_H_
#include "base/containers/unique_ptr_adapters.h"
#include "content/browser/devtools/protocol/protocol.h"
#include "content/public/browser/web_contents_delegate.h"
namespace content::protocol {
// Manages hidden targets. Owns hidden web contents created for hidden targets
// and disposes them when session is closed or when the delegate's close is
// called. It is also the `WebContentsDelegate` for the hidden targets to
// properly dispose them.
class HiddenTargetManager : public content::WebContentsDelegate {
public:
HiddenTargetManager();
~HiddenTargetManager() override;
HiddenTargetManager(const HiddenTargetManager&) = delete;
HiddenTargetManager& operator=(const HiddenTargetManager&) = delete;
// Disposes all hidden web contents.
void Clear();
std::string CreateHiddenTarget(const GURL& url,
BrowserContext* browser_context);
// Implements `WebContentsDelegate::CloseContents` for hidden web contents.
void CloseContents(content::WebContents* source) override;
private:
// The map of hidden web contents created for hidden targets.
// HiddenTargetManager owns them and disposes when session is closed or when
// the delegate's close is called.
base::flat_set<std::unique_ptr<content::WebContents>,
base::UniquePtrComparator>
hidden_web_contents_;
};
} // namespace content::protocol
#endif // CONTENT_BROWSER_DEVTOOLS_PROTOCOL_HIDDEN_TARGET_MANAGER_H_