blob: f1b2a92832bcbc7035b999e70fba6aa7bd2053ba [file] [log] [blame]
// Copyright 2017 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "third_party/blink/renderer/core/script/classic_script.h"
#include "third_party/blink/renderer/bindings/core/v8/script_controller.h"
#include "third_party/blink/renderer/bindings/core/v8/script_source_code.h"
#include "third_party/blink/renderer/bindings/core/v8/worker_or_worklet_script_controller.h"
#include "third_party/blink/renderer/core/frame/local_dom_window.h"
#include "third_party/blink/renderer/core/workers/worker_or_worklet_global_scope.h"
#include "third_party/blink/renderer/core/workers/worker_reporting_proxy.h"
namespace blink {
ClassicScript* ClassicScript::CreateUnspecifiedScript(
const ScriptSourceCode& script_source_code,
SanitizeScriptErrors sanitize_script_errors) {
return MakeGarbageCollected<ClassicScript>(
script_source_code, KURL(), ScriptFetchOptions(), sanitize_script_errors);
}
void ClassicScript::Trace(Visitor* visitor) const {
Script::Trace(visitor);
visitor->Trace(script_source_code_);
}
void ClassicScript::RunScript(LocalDOMWindow* window) {
return RunScript(window,
ScriptController::kDoNotExecuteScriptWhenScriptsDisabled);
}
void ClassicScript::RunScript(LocalDOMWindow* window,
ScriptController::ExecuteScriptPolicy policy) {
v8::HandleScope handle_scope(window->GetIsolate());
RunScriptAndReturnValue(window, policy);
}
v8::Local<v8::Value> ClassicScript::RunScriptAndReturnValue(
LocalDOMWindow* window,
ScriptController::ExecuteScriptPolicy policy) {
return window->GetScriptController().EvaluateScriptInMainWorld(
GetScriptSourceCode(), BaseURL(), sanitize_script_errors_, FetchOptions(),
policy);
}
v8::Local<v8::Value> ClassicScript::RunScriptInIsolatedWorldAndReturnValue(
LocalDOMWindow* window,
int32_t world_id) {
return window->GetScriptController().ExecuteScriptInIsolatedWorld(
world_id, GetScriptSourceCode(), BaseURL(), sanitize_script_errors_);
}
bool ClassicScript::RunScriptOnWorkerOrWorklet(
WorkerOrWorkletGlobalScope& global_scope) {
DCHECK(global_scope.IsContextThread());
v8::HandleScope handle_scope(
global_scope.ScriptController()->GetScriptState()->GetIsolate());
ScriptEvaluationResult result =
global_scope.ScriptController()->EvaluateAndReturnValue(
GetScriptSourceCode(), sanitize_script_errors_);
return result.GetResultType() == ScriptEvaluationResult::ResultType::kSuccess;
}
std::pair<size_t, size_t> ClassicScript::GetClassicScriptSizes() const {
size_t cached_metadata_size =
GetScriptSourceCode().CacheHandler()
? GetScriptSourceCode().CacheHandler()->GetCodeCacheSize()
: 0;
return std::pair<size_t, size_t>(GetScriptSourceCode().Source().length(),
cached_metadata_size);
}
} // namespace blink