Index: third_party/WebKit/Source/platform/v8_inspector/V8DebuggerImpl.cpp |
diff --git a/third_party/WebKit/Source/platform/v8_inspector/V8DebuggerImpl.cpp b/third_party/WebKit/Source/platform/v8_inspector/V8DebuggerImpl.cpp |
index 4af40b707435963e01d2965075d90375d016ed4a..35b94d108187c98d8ef82c51f01ff350dc468044 100644 |
--- a/third_party/WebKit/Source/platform/v8_inspector/V8DebuggerImpl.cpp |
+++ b/third_party/WebKit/Source/platform/v8_inspector/V8DebuggerImpl.cpp |
@@ -37,6 +37,7 @@ |
#include "platform/v8_inspector/ScriptBreakpoint.h" |
#include "platform/v8_inspector/V8Compat.h" |
#include "platform/v8_inspector/V8DebuggerAgentImpl.h" |
+#include "platform/v8_inspector/V8InjectedScriptHost.h" |
#include "platform/v8_inspector/V8InspectorSessionImpl.h" |
#include "platform/v8_inspector/V8RuntimeAgentImpl.h" |
#include "platform/v8_inspector/V8StackTraceImpl.h" |
@@ -669,6 +670,23 @@ v8::MaybeLocal<v8::Value> V8DebuggerImpl::functionScopes(v8::Local<v8::Function> |
return callDebuggerMethod("getFunctionScopes", 1, argv); |
} |
+v8::MaybeLocal<v8::Array> V8DebuggerImpl::internalProperties(v8::Local<v8::Context> context, v8::Local<v8::Value> value) |
+{ |
+ v8::Local<v8::Array> properties; |
+ if (!v8::Debug::GetInternalProperties(m_isolate, value).ToLocal(&properties)) |
+ return v8::MaybeLocal<v8::Array>(); |
+ if (!enabled()) |
+ return properties; |
+ if (value->IsMap() || value->IsWeakMap() || value->IsSet() || value->IsWeakSet() || value->IsSetIterator() || value->IsMapIterator()) { |
+ v8::Local<v8::Value> entries = collectionEntries(context, v8::Local<v8::Object>::Cast(value)); |
+ if (entries->IsArray()) { |
+ properties->Set(properties->Length(), v8InternalizedString("[[Entries]]")); |
+ properties->Set(properties->Length(), entries); |
+ } |
+ } |
+ return properties; |
+} |
+ |
v8::Local<v8::Value> V8DebuggerImpl::generatorObjectDetails(v8::Local<v8::Object>& object) |
{ |
if (!enabled()) { |
@@ -679,14 +697,27 @@ v8::Local<v8::Value> V8DebuggerImpl::generatorObjectDetails(v8::Local<v8::Object |
return callDebuggerMethod("getGeneratorObjectDetails", 1, argv).ToLocalChecked(); |
} |
-v8::Local<v8::Value> V8DebuggerImpl::collectionEntries(v8::Local<v8::Object>& object) |
+v8::Local<v8::Value> V8DebuggerImpl::collectionEntries(v8::Local<v8::Context> context, v8::Local<v8::Object> object) |
{ |
if (!enabled()) { |
NOTREACHED(); |
- return v8::Local<v8::Value>::New(m_isolate, v8::Undefined(m_isolate)); |
+ return v8::Undefined(m_isolate); |
} |
v8::Local<v8::Value> argv[] = { object }; |
- return callDebuggerMethod("getCollectionEntries", 1, argv).ToLocalChecked(); |
+ v8::Local<v8::Value> entriesValue = callDebuggerMethod("getCollectionEntries", 1, argv).ToLocalChecked(); |
+ if (!entriesValue->IsArray()) |
+ return v8::Undefined(m_isolate); |
+ v8::Local<v8::Array> entries = entriesValue.As<v8::Array>(); |
+ for (size_t i = 0; i < entries->Length(); ++i) { |
+ v8::Local<v8::Value> entry; |
+ if (!entries->Get(context, i).ToLocal(&entry) || !entry->IsObject()) |
+ continue; |
+ if (!entry.As<v8::Object>()->SetPrivate(context, V8InjectedScriptHost::internalEntryPrivate(m_isolate), v8::True(m_isolate)).FromMaybe(false)) |
+ continue; |
+ } |
+ if (!entries->SetPrototype(context, v8::Null(m_isolate)).FromMaybe(false)) |
+ return v8::Undefined(m_isolate); |
+ return entries; |
} |
bool V8DebuggerImpl::isPaused() |