#include "content/browser/worker_host/shared_worker_service_impl.h"
#include <stddef.h>
#include <algorithm>
#include <iterator>
#include <string>
#include "base/check_op.h"
#include "base/feature_list.h"
#include "base/functional/bind.h"
#include "base/functional/callback.h"
#include "base/functional/callback_helpers.h"
#include "base/not_fatal_until.h"
#include "base/observer_list.h"
#include "content/browser/devtools/shared_worker_devtools_agent_host.h"
#include "content/browser/loader/file_url_loader_factory.h"
#include "content/browser/renderer_host/private_network_access_util.h"
#include "content/browser/service_worker/service_worker_main_resource_handle.h"
#include "content/browser/storage_partition_impl.h"
#include "content/browser/web_contents/web_contents_impl.h"
#include "content/browser/worker_host/shared_worker_host.h"
#include "content/browser/worker_host/worker_script_fetcher.h"
#include "content/common/content_constants_internal.h"
#include "content/public/browser/browser_task_traits.h"
#include "content/public/browser/browser_thread.h"
#include "content/public/browser/content_browser_client.h"
#include "content/public/browser/render_frame_host.h"
#include "content/public/browser/render_process_host.h"
#include "content/public/browser/shared_worker_instance.h"
#include "content/public/common/content_client.h"
#include "content/public/common/content_features.h"
#include "content/public/common/content_switches.h"
#include "mojo/public/cpp/bindings/remote.h"
#include "net/base/isolation_info.h"
#include "net/cookies/site_for_cookies.h"
#include "net/storage_access_api/status.h"
#include "services/network/public/mojom/fetch_api.mojom.h"
#include "third_party/blink/public/common/features.h"
#include "third_party/blink/public/common/messaging/message_port_channel.h"
#include "third_party/blink/public/common/storage_key/storage_key.h"
#include "third_party/blink/public/mojom/loader/fetch_client_settings_object.mojom.h"
#include "third_party/blink/public/mojom/script/script_type.mojom.h"
#include "third_party/blink/public/mojom/worker/shared_worker_client.mojom.h"
#include "third_party/blink/public/mojom/worker/shared_worker_info.mojom.h"
#include "url/origin.h"
#include "url/url_constants.h"
namespace content {
SharedWorkerServiceImpl::SharedWorkerServiceImpl(
StoragePartitionImpl* storage_partition,
scoped_refptr<ServiceWorkerContextWrapper> service_worker_context)
: … { … }
SharedWorkerServiceImpl::~SharedWorkerServiceImpl() { … }
void SharedWorkerServiceImpl::AddObserver(Observer* observer) { … }
void SharedWorkerServiceImpl::RemoveObserver(Observer* observer) { … }
void SharedWorkerServiceImpl::EnumerateSharedWorkers(Observer* observer) { … }
bool SharedWorkerServiceImpl::TerminateWorker(
const GURL& url,
const std::string& name,
const blink::StorageKey& storage_key,
const blink::mojom::SharedWorkerSameSiteCookies same_site_cookies) { … }
void SharedWorkerServiceImpl::Shutdown() { … }
void SharedWorkerServiceImpl::SetURLLoaderFactoryForTesting(
scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory) { … }
void SharedWorkerServiceImpl::ConnectToWorker(
GlobalRenderFrameHostId client_render_frame_host_id,
blink::mojom::SharedWorkerInfoPtr info,
mojo::PendingRemote<blink::mojom::SharedWorkerClient> client,
blink::mojom::SharedWorkerCreationContextType creation_context_type,
const blink::MessagePortChannel& message_port,
scoped_refptr<network::SharedURLLoaderFactory> blob_url_loader_factory,
ukm::SourceId client_ukm_source_id,
const std::optional<blink::StorageKey>& storage_key_override) { … }
SharedWorkerHost* SharedWorkerServiceImpl::GetSharedWorkerHostFromToken(
const blink::SharedWorkerToken& worker_token) const { … }
void SharedWorkerServiceImpl::DestroyHost(SharedWorkerHost* host) { … }
void SharedWorkerServiceImpl::NotifyWorkerCreated(
const blink::SharedWorkerToken& token,
int worker_process_id,
const url::Origin& security_origin,
const base::UnguessableToken& dev_tools_token) { … }
void SharedWorkerServiceImpl::NotifyBeforeWorkerDestroyed(
const blink::SharedWorkerToken& token) { … }
void SharedWorkerServiceImpl::NotifyClientAdded(
const blink::SharedWorkerToken& token,
GlobalRenderFrameHostId client_render_frame_host_id) { … }
void SharedWorkerServiceImpl::NotifyClientRemoved(
const blink::SharedWorkerToken& token,
GlobalRenderFrameHostId client_render_frame_host_id) { … }
SharedWorkerHost* SharedWorkerServiceImpl::CreateWorker(
RenderFrameHostImpl& creator,
const SharedWorkerInstance& instance,
std::vector<network::mojom::ContentSecurityPolicyPtr>
content_security_policies,
blink::mojom::FetchClientSettingsObjectPtr
outside_fetch_client_settings_object,
const std::string& storage_domain,
const blink::MessagePortChannel& message_port,
scoped_refptr<network::SharedURLLoaderFactory> blob_url_loader_factory,
const std::optional<blink::StorageKey>& storage_key_override) { … }
void SharedWorkerServiceImpl::StartWorker(
base::WeakPtr<SharedWorkerHost> host,
const blink::MessagePortChannel& message_port,
blink::mojom::FetchClientSettingsObjectPtr
outside_fetch_client_settings_object,
std::optional<WorkerScriptFetcherResult> result) { … }
SharedWorkerHost* SharedWorkerServiceImpl::FindMatchingSharedWorkerHost(
const GURL& url,
const std::string& name,
const blink::StorageKey& storage_key,
const blink::mojom::SharedWorkerSameSiteCookies same_site_cookies) { … }
void SharedWorkerServiceImpl::ScriptLoadFailed(
mojo::PendingRemote<blink::mojom::SharedWorkerClient> client,
const std::string& error_message) { … }
}