From 7b2ffa587235a47d4094787d72f38102089f402a Mon Sep 17 00:00:00 2001 From: Allan Sandfeld Jensen Date: Wed, 31 Jul 2019 15:50:41 +0200 Subject: BASELINE: Update Chromium to 76.0.3809.94 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change-Id: I321c3f5f929c105aec0f98c5091ef6108822e647 Reviewed-by: Michael BrĂ¼ning --- .../renderer/core/workers/dedicated_worker.cc | 56 +++++++++++++++++----- 1 file changed, 44 insertions(+), 12 deletions(-) (limited to 'chromium/third_party/blink/renderer/core/workers/dedicated_worker.cc') diff --git a/chromium/third_party/blink/renderer/core/workers/dedicated_worker.cc b/chromium/third_party/blink/renderer/core/workers/dedicated_worker.cc index 60259c5858b..9c221ad625e 100644 --- a/chromium/third_party/blink/renderer/core/workers/dedicated_worker.cc +++ b/chromium/third_party/blink/renderer/core/workers/dedicated_worker.cc @@ -129,6 +129,7 @@ DedicatedWorker* DedicatedWorker::Create(ExecutionContext* context, DedicatedWorker* worker = MakeGarbageCollected( context, script_request_url, options); + worker->UpdateStateIfNeeded(); worker->Start(); return worker; } @@ -144,9 +145,7 @@ DedicatedWorker::DedicatedWorker(ExecutionContext* context, factory_client_( Platform::Current()->CreateDedicatedWorkerHostFactoryClient( this, - GetExecutionContext()->GetInterfaceProvider())), - v8_stack_trace_id_(ThreadDebugger::From(context->GetIsolate()) - ->StoreCurrentStackTrace("Worker Created")) { + GetExecutionContext()->GetInterfaceProvider())) { DCHECK(context->IsContextThread()); DCHECK(script_request_url_.IsValid()); DCHECK(context_proxy_); @@ -205,6 +204,10 @@ void DedicatedWorker::postMessage(ScriptState* script_state, void DedicatedWorker::Start() { DCHECK(GetExecutionContext()->IsContextThread()); + // This needs to be done after the UpdateStateIfNeeded is called as + // calling into the debugger can cause a breakpoint. + v8_stack_trace_id_ = ThreadDebugger::From(GetExecutionContext()->GetIsolate()) + ->StoreCurrentStackTrace("Worker Created"); if (auto* scope = DynamicTo(*GetExecutionContext())) scope->EnsureFetcher(); if (blink::features::IsPlzDedicatedWorkerEnabled()) { @@ -233,7 +236,8 @@ void DedicatedWorker::Start() { // worker thread. ContinueStart( script_request_url_, OffMainThreadWorkerScriptFetchOption::kEnabled, - network::mojom::ReferrerPolicy::kDefault, String() /* source_code */); + network::mojom::ReferrerPolicy::kDefault, + base::nullopt /* response_address_space */, String() /* source_code */); return; } if (options_->type() == "classic") { @@ -246,7 +250,6 @@ void DedicatedWorker::Start() { script_request_url_, mojom::RequestContextType::WORKER, network::mojom::FetchRequestMode::kSameOrigin, network::mojom::FetchCredentialsMode::kSameOrigin, - GetExecutionContext()->GetSecurityContext().AddressSpace(), WTF::Bind(&DedicatedWorker::OnResponse, WrapPersistent(this)), WTF::Bind(&DedicatedWorker::OnFinished, WrapPersistent(this))); return; @@ -311,7 +314,8 @@ void DedicatedWorker::OnScriptLoadStarted() { // worker thread. ContinueStart( script_request_url_, OffMainThreadWorkerScriptFetchOption::kEnabled, - network::mojom::ReferrerPolicy::kDefault, String() /* source_code */); + network::mojom::ReferrerPolicy::kDefault, + base::nullopt /* response_address_space */, String() /* source_code */); } void DedicatedWorker::OnScriptLoadStartFailed() { @@ -376,9 +380,10 @@ void DedicatedWorker::OnFinished() { DCHECK(script_request_url_ == script_response_url || SecurityOrigin::AreSameSchemeHostPort(script_request_url_, script_response_url)); - ContinueStart(script_response_url, - OffMainThreadWorkerScriptFetchOption::kDisabled, - referrer_policy, classic_script_loader_->SourceText()); + ContinueStart( + script_response_url, OffMainThreadWorkerScriptFetchOption::kDisabled, + referrer_policy, classic_script_loader_->ResponseAddressSpace(), + classic_script_loader_->SourceText()); probe::ScriptImported(GetExecutionContext(), classic_script_loader_->Identifier(), classic_script_loader_->SourceText()); @@ -390,6 +395,7 @@ void DedicatedWorker::ContinueStart( const KURL& script_url, OffMainThreadWorkerScriptFetchOption off_main_thread_fetch_option, network::mojom::ReferrerPolicy referrer_policy, + base::Optional response_address_space, const String& source_code) { auto* outside_settings_object = MakeGarbageCollected( @@ -399,7 +405,7 @@ void DedicatedWorker::ContinueStart( .GetFetchClientSettingsObject()); context_proxy_->StartWorkerGlobalScope( CreateGlobalScopeCreationParams(script_url, off_main_thread_fetch_option, - referrer_policy), + referrer_policy, response_address_space), options_, script_url, *outside_settings_object, v8_stack_trace_id_, source_code); } @@ -408,7 +414,8 @@ std::unique_ptr DedicatedWorker::CreateGlobalScopeCreationParams( const KURL& script_url, OffMainThreadWorkerScriptFetchOption off_main_thread_fetch_option, - network::mojom::ReferrerPolicy referrer_policy) { + network::mojom::ReferrerPolicy referrer_policy, + base::Optional response_address_space) { base::UnguessableToken parent_devtools_token; std::unique_ptr settings; if (auto* document = DynamicTo(GetExecutionContext())) { @@ -435,7 +442,7 @@ DedicatedWorker::CreateGlobalScopeCreationParams( referrer_policy, GetExecutionContext()->GetSecurityOrigin(), GetExecutionContext()->IsSecureContext(), GetExecutionContext()->GetHttpsState(), CreateWorkerClients(), - GetExecutionContext()->GetSecurityContext().AddressSpace(), + response_address_space, OriginTrialContext::GetTokens(GetExecutionContext()).get(), parent_devtools_token, std::move(settings), kV8CacheOptionsDefault, nullptr /* worklet_module_responses_map */, @@ -480,6 +487,31 @@ const AtomicString& DedicatedWorker::InterfaceName() const { return event_target_names::kWorker; } +void DedicatedWorker::ContextLifecycleStateChanged( + mojom::FrameLifecycleState state) { + DCHECK(GetExecutionContext()->IsContextThread()); + switch (state) { + case mojom::FrameLifecycleState::kPaused: + // Do not do anything in this case. kPaused is only used + // for when the main thread is paused we shouldn't worry + // about pausing the worker thread in this case. + break; + case mojom::FrameLifecycleState::kFrozen: + case mojom::FrameLifecycleState::kFrozenAutoResumeMedia: + if (!requested_frozen_) { + requested_frozen_ = true; + context_proxy_->Freeze(); + } + break; + case mojom::FrameLifecycleState::kRunning: + if (requested_frozen_) { + context_proxy_->Resume(); + requested_frozen_ = false; + } + break; + } +} + void DedicatedWorker::Trace(blink::Visitor* visitor) { visitor->Trace(context_proxy_); visitor->Trace(options_); -- cgit v1.2.1