blob: 4f6ae867b13a3cf5ad0fb3b0b853639c56f7a552 [file] [log] [blame]
// Copyright (c) 2015 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 "config.h"
#include "bindings/core/v8/V8BindingForTesting.h"
#include "bindings/core/v8/DOMWrapperWorld.h"
namespace blink {
PassRefPtr<ScriptStateForTesting> ScriptStateForTesting::create(v8::Local<v8::Context> context, PassRefPtr<DOMWrapperWorld> world)
{
RefPtr<ScriptStateForTesting> scriptState = adoptRef(new ScriptStateForTesting(context, world));
// This ref() is for keeping this ScriptState alive as long as the v8::Context is alive.
// This is deref()ed in the weak callback of the v8::Context.
scriptState->ref();
return scriptState;
}
ScriptStateForTesting::ScriptStateForTesting(v8::Local<v8::Context> context, PassRefPtr<DOMWrapperWorld> world)
: ScriptState(context, world)
{
}
ExecutionContext* ScriptStateForTesting::executionContext() const
{
return m_executionContext;
}
void ScriptStateForTesting::setExecutionContext(ExecutionContext* executionContext)
{
m_executionContext = executionContext;
}
V8TestingScope::V8TestingScope(v8::Isolate* isolate)
: m_handleScope(isolate)
, m_contextScope(v8::Context::New(isolate))
// We reuse the main world since the main world is guaranteed to be registered to ScriptController.
, m_scriptState(ScriptStateForTesting::create(isolate->GetCurrentContext(), &DOMWrapperWorld::mainWorld()))
{
}
V8TestingScope::~V8TestingScope()
{
m_scriptState->disposePerContextData();
}
ScriptState* V8TestingScope::scriptState() const
{
return m_scriptState.get();
}
v8::Isolate* V8TestingScope::isolate() const
{
return m_scriptState->isolate();
}
v8::Local<v8::Context> V8TestingScope::context() const
{
return m_scriptState->context();
}
} // namespace blink