blob: 420dd3a7c1eb7c76dc0acbf054b2d1933d37a103 [file] [log] [blame]
// Copyright 2022 The Cobalt Authors. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#include "cobalt/worker/dedicated_worker_global_scope.h"
#include <string>
#include "cobalt/base/polymorphic_downcast.h"
#include "cobalt/script/environment_settings.h"
#include "cobalt/worker/worker_global_scope.h"
#include "cobalt/worker/worker_settings.h"
#include "url/gurl.h"
namespace cobalt {
namespace worker {
DedicatedWorkerGlobalScope::DedicatedWorkerGlobalScope(
script::EnvironmentSettings* settings,
bool parent_cross_origin_isolated_capability)
: WorkerGlobalScope(settings), cross_origin_isolated_capability_(false) {
// Algorithm for 'run a worker'
// https://html.spec.whatwg.org/commit-snapshots/465a6b672c703054de278b0f8133eb3ad33d93f4/#run-a-worker
// 14.9. If is shared is false and owner's cross-origin isolated
// capability is false, then set worker global scope's cross-origin
// isolated capability to false.
if (!parent_cross_origin_isolated_capability) {
cross_origin_isolated_capability_ = false;
}
}
void DedicatedWorkerGlobalScope::Initialize() {
// Algorithm for 'run a worker'
// https://html.spec.whatwg.org/commit-snapshots/465a6b672c703054de278b0f8133eb3ad33d93f4/#run-a-worker
// 14.4. Initialize worker global scope's policy container given worker
// global scope, response, and inside settings.
// 14.5. If the Run CSP initialization for a global object algorithm
// returns
// "Blocked" when executed upon worker global scope, set response to a
// network error. [CSP]
// 14.6. If worker global scope's embedder policy's value is compatible
// with
// cross-origin isolation and is shared is true, then set agent's agent
// cluster's cross-origin isolation mode to "logical" or "concrete".
// The one chosen is implementation-defined.
// No need for dedicated worker.
// 14.7. If the result of checking a global object's embedder policy with
// worker global scope, outside settings, and response is false, then
// set response to a network error.
// 14.8. Set worker global scope's cross-origin isolated capability to
// true
// if agent's agent cluster's cross-origin isolation mode is
// "concrete".
// 14.10. If is shared is false and response's url's scheme is "data",
// then
// set worker global scope's cross-origin isolated capability to
// false.
if (!Url().SchemeIs("data")) {
cross_origin_isolated_capability_ = false;
}
}
void DedicatedWorkerGlobalScope::PostMessage(const std::string& message) {
base::polymorphic_downcast<worker::WorkerSettings*>(environment_settings())
->message_port()
->PostMessage(message);
}
} // namespace worker
} // namespace cobalt