#include "third_party/blink/renderer/core/workers/dedicated_worker.h"
#include <optional>
#include <utility>
#include "base/feature_list.h"
#include "base/metrics/histogram_macros.h"
#include "base/task/single_thread_task_runner.h"
#include "base/trace_event/typed_macros.h"
#include "base/unguessable_token.h"
#include "mojo/public/cpp/bindings/pending_remote.h"
#include "services/network/public/cpp/cross_origin_embedder_policy.h"
#include "services/network/public/mojom/fetch_api.mojom-blink.h"
#include "third_party/blink/public/common/blob/blob_utils.h"
#include "third_party/blink/public/common/features.h"
#include "third_party/blink/public/mojom/browser_interface_broker.mojom-blink.h"
#include "third_party/blink/public/mojom/fetch/fetch_api_request.mojom-blink.h"
#include "third_party/blink/public/mojom/script/script_type.mojom-blink.h"
#include "third_party/blink/public/mojom/worker/dedicated_worker_host_factory.mojom-blink.h"
#include "third_party/blink/public/platform/web_content_settings_client.h"
#include "third_party/blink/public/platform/web_fetch_client_settings_object.h"
#include "third_party/blink/renderer/bindings/core/v8/serialization/post_message_helper.h"
#include "third_party/blink/renderer/bindings/core/v8/v8_post_message_options.h"
#include "third_party/blink/renderer/bindings/core/v8/v8_structured_serialize_options.h"
#include "third_party/blink/renderer/core/dom/document.h"
#include "third_party/blink/renderer/core/event_target_names.h"
#include "third_party/blink/renderer/core/events/message_event.h"
#include "third_party/blink/renderer/core/execution_context/execution_context.h"
#include "third_party/blink/renderer/core/fetch/request.h"
#include "third_party/blink/renderer/core/fileapi/public_url_manager.h"
#include "third_party/blink/renderer/core/frame/local_dom_window.h"
#include "third_party/blink/renderer/core/frame/local_frame.h"
#include "third_party/blink/renderer/core/frame/local_frame_client.h"
#include "third_party/blink/renderer/core/frame/web_frame_widget_impl.h"
#include "third_party/blink/renderer/core/frame/web_local_frame_impl.h"
#include "third_party/blink/renderer/core/inspector/inspector_trace_events.h"
#include "third_party/blink/renderer/core/inspector/main_thread_debugger.h"
#include "third_party/blink/renderer/core/loader/document_loader.h"
#include "third_party/blink/renderer/core/loader/frame_loader.h"
#include "third_party/blink/renderer/core/loader/worker_fetch_context.h"
#include "third_party/blink/renderer/core/origin_trials/origin_trial_context.h"
#include "third_party/blink/renderer/core/page/page.h"
#include "third_party/blink/renderer/core/probe/core_probes.h"
#include "third_party/blink/renderer/core/script/script.h"
#include "third_party/blink/renderer/core/script_type_names.h"
#include "third_party/blink/renderer/core/workers/custom_event_message.h"
#include "third_party/blink/renderer/core/workers/dedicated_worker_messaging_proxy.h"
#include "third_party/blink/renderer/core/workers/global_scope_creation_params.h"
#include "third_party/blink/renderer/core/workers/worker_classic_script_loader.h"
#include "third_party/blink/renderer/core/workers/worker_clients.h"
#include "third_party/blink/renderer/core/workers/worker_global_scope.h"
#include "third_party/blink/renderer/platform/bindings/enumeration_base.h"
#include "third_party/blink/renderer/platform/bindings/exception_state.h"
#include "third_party/blink/renderer/platform/bindings/script_state.h"
#include "third_party/blink/renderer/platform/graphics/begin_frame_provider.h"
#include "third_party/blink/renderer/platform/instrumentation/use_counter.h"
#include "third_party/blink/renderer/platform/loader/fetch/resource_fetcher.h"
#include "third_party/blink/renderer/platform/loader/fetch/resource_fetcher_properties.h"
#include "third_party/blink/renderer/platform/loader/fetch/url_loader/dedicated_or_shared_worker_fetch_context_impl.h"
#include "third_party/blink/renderer/platform/weborigin/security_origin.h"
#include "third_party/blink/renderer/platform/weborigin/security_policy.h"
#include "third_party/blink/renderer/platform/wtf/casting.h"
namespace blink {
DedicatedWorker* DedicatedWorker::Create(ExecutionContext* context,
const String& url,
const WorkerOptions* options,
ExceptionState& exception_state) { … }
DedicatedWorker::DedicatedWorker(ExecutionContext* context,
const KURL& script_request_url,
const WorkerOptions* options)
: … { … }
DedicatedWorker::DedicatedWorker(
ExecutionContext* context,
const KURL& script_request_url,
const WorkerOptions* options,
base::FunctionRef<DedicatedWorkerMessagingProxy*(DedicatedWorker*)>
context_proxy_factory)
: … { … }
DedicatedWorker::~DedicatedWorker() = default;
void DedicatedWorker::Dispose() { … }
void DedicatedWorker::postMessage(ScriptState* script_state,
const ScriptValue& message,
HeapVector<ScriptValue>& transfer,
ExceptionState& exception_state) { … }
void DedicatedWorker::postMessage(ScriptState* script_state,
const ScriptValue& message,
const PostMessageOptions* options,
ExceptionState& exception_state) { … }
void DedicatedWorker::PostCustomEvent(
TaskType task_type,
ScriptState* script_state,
CrossThreadFunction<Event*(ScriptState*, CustomEventMessage)>
event_factory_callback,
CrossThreadFunction<Event*(ScriptState*)> event_factory_error_callback,
const ScriptValue& message,
HeapVector<ScriptValue>& transfer,
ExceptionState& exception_state) { … }
void DedicatedWorker::Start() { … }
void DedicatedWorker::OnHostCreated(
mojo::PendingRemote<network::mojom::blink::URLLoaderFactory>
blob_url_loader_factory,
const network::CrossOriginEmbedderPolicy& parent_coep,
CrossVariantMojoRemote<
mojom::blink::BackForwardCacheControllerHostInterfaceBase>
back_forward_cache_controller_host) { … }
void DedicatedWorker::terminate() { … }
void DedicatedWorker::ContextDestroyed() { … }
bool DedicatedWorker::HasPendingActivity() const { … }
void DedicatedWorker::OnWorkerHostCreated(
CrossVariantMojoRemote<mojom::blink::BrowserInterfaceBrokerInterfaceBase>
browser_interface_broker,
CrossVariantMojoRemote<mojom::blink::DedicatedWorkerHostInterfaceBase>
dedicated_worker_host,
const WebSecurityOrigin& origin) { … }
void DedicatedWorker::OnScriptLoadStarted(
std::unique_ptr<WorkerMainScriptLoadParameters>
worker_main_script_load_params,
CrossVariantMojoRemote<
mojom::blink::BackForwardCacheControllerHostInterfaceBase>
back_forward_cache_controller_host) { … }
void DedicatedWorker::OnScriptLoadStartFailed() { … }
void DedicatedWorker::DispatchErrorEventForScriptFetchFailure() { … }
std::unique_ptr<WebContentSettingsClient>
DedicatedWorker::CreateWebContentSettingsClient() { … }
void DedicatedWorker::OnResponse() { … }
void DedicatedWorker::OnFinished(
mojo::PendingRemote<mojom::blink::BackForwardCacheControllerHost>
back_forward_cache_controller_host) { … }
void DedicatedWorker::ContinueStart(
const KURL& script_url,
std::unique_ptr<WorkerMainScriptLoadParameters>
worker_main_script_load_params,
network::mojom::ReferrerPolicy referrer_policy,
Vector<network::mojom::blink::ContentSecurityPolicyPtr>
response_content_security_policies,
const String& source_code,
RejectCoepUnsafeNone reject_coep_unsafe_none,
mojo::PendingRemote<mojom::blink::BackForwardCacheControllerHost>
back_forward_cache_controller_host) { … }
void DedicatedWorker::ContinueStartInternal(
const KURL& script_url,
std::unique_ptr<WorkerMainScriptLoadParameters>
worker_main_script_load_params,
network::mojom::ReferrerPolicy referrer_policy,
Vector<network::mojom::blink::ContentSecurityPolicyPtr>
response_content_security_policies,
const String& source_code,
RejectCoepUnsafeNone reject_coep_unsafe_none,
mojo::PendingRemote<mojom::blink::BackForwardCacheControllerHost>
back_forward_cache_controller_host) { … }
namespace {
BeginFrameProviderParams CreateBeginFrameProviderParams(
ExecutionContext& execution_context) { … }
}
std::unique_ptr<GlobalScopeCreationParams>
DedicatedWorker::CreateGlobalScopeCreationParams(
const KURL& script_url,
network::mojom::ReferrerPolicy referrer_policy,
Vector<network::mojom::blink::ContentSecurityPolicyPtr>
response_content_security_policies) { … }
scoped_refptr<WebWorkerFetchContext>
DedicatedWorker::CreateWebWorkerFetchContext() { … }
const AtomicString& DedicatedWorker::InterfaceName() const { … }
void DedicatedWorker::ContextLifecycleStateChanged(
mojom::FrameLifecycleState state) { … }
void DedicatedWorker::Trace(Visitor* visitor) const { … }
}