| Index: src/inspector/InspectedContext.cpp
|
| diff --git a/src/inspector/InspectedContext.cpp b/src/inspector/InspectedContext.cpp
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..521bba4508e399c269c8c1c587ce644bdd2c11ad
|
| --- /dev/null
|
| +++ b/src/inspector/InspectedContext.cpp
|
| @@ -0,0 +1,84 @@
|
| +// Copyright 2016 the V8 project 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 "src/inspector/InspectedContext.h"
|
| +
|
| +#include "src/inspector/InjectedScript.h"
|
| +#include "src/inspector/StringUtil.h"
|
| +#include "src/inspector/V8Console.h"
|
| +#include "src/inspector/V8InspectorImpl.h"
|
| +#include "src/inspector/V8ValueCopier.h"
|
| +#include "src/inspector/public/V8ContextInfo.h"
|
| +#include "src/inspector/public/V8InspectorClient.h"
|
| +
|
| +namespace v8_inspector {
|
| +
|
| +void InspectedContext::weakCallback(
|
| + const v8::WeakCallbackInfo<InspectedContext>& data) {
|
| + InspectedContext* context = data.GetParameter();
|
| + if (!context->m_context.IsEmpty()) {
|
| + context->m_context.Reset();
|
| + data.SetSecondPassCallback(&InspectedContext::weakCallback);
|
| + } else {
|
| + context->m_inspector->discardInspectedContext(context->m_contextGroupId,
|
| + context->m_contextId);
|
| + }
|
| +}
|
| +
|
| +void InspectedContext::consoleWeakCallback(
|
| + const v8::WeakCallbackInfo<InspectedContext>& data) {
|
| + data.GetParameter()->m_console.Reset();
|
| +}
|
| +
|
| +InspectedContext::InspectedContext(V8InspectorImpl* inspector,
|
| + const V8ContextInfo& info, int contextId)
|
| + : m_inspector(inspector),
|
| + m_context(info.context->GetIsolate(), info.context),
|
| + m_contextId(contextId),
|
| + m_contextGroupId(info.contextGroupId),
|
| + m_origin(toString16(info.origin)),
|
| + m_humanReadableName(toString16(info.humanReadableName)),
|
| + m_auxData(toString16(info.auxData)),
|
| + m_reported(false) {
|
| + m_context.SetWeak(this, &InspectedContext::weakCallback,
|
| + v8::WeakCallbackType::kParameter);
|
| +
|
| + v8::Isolate* isolate = m_inspector->isolate();
|
| + v8::Local<v8::Object> global = info.context->Global();
|
| + v8::Local<v8::Object> console =
|
| + V8Console::createConsole(this, info.hasMemoryOnConsole);
|
| + if (!global
|
| + ->Set(info.context, toV8StringInternalized(isolate, "console"),
|
| + console)
|
| + .FromMaybe(false))
|
| + return;
|
| + m_console.Reset(isolate, console);
|
| + m_console.SetWeak(this, &InspectedContext::consoleWeakCallback,
|
| + v8::WeakCallbackType::kParameter);
|
| +}
|
| +
|
| +InspectedContext::~InspectedContext() {
|
| + if (!m_context.IsEmpty() && !m_console.IsEmpty()) {
|
| + v8::HandleScope scope(isolate());
|
| + V8Console::clearInspectedContextIfNeeded(context(),
|
| + m_console.Get(isolate()));
|
| + }
|
| +}
|
| +
|
| +v8::Local<v8::Context> InspectedContext::context() const {
|
| + return m_context.Get(isolate());
|
| +}
|
| +
|
| +v8::Isolate* InspectedContext::isolate() const {
|
| + return m_inspector->isolate();
|
| +}
|
| +
|
| +void InspectedContext::createInjectedScript() {
|
| + DCHECK(!m_injectedScript);
|
| + m_injectedScript = InjectedScript::create(this);
|
| +}
|
| +
|
| +void InspectedContext::discardInjectedScript() { m_injectedScript.reset(); }
|
| +
|
| +} // namespace v8_inspector
|
|
|