| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "platform/v8_inspector/V8InjectedScriptHost.h" | 5 #include "platform/v8_inspector/V8InjectedScriptHost.h" |
| 6 | 6 |
| 7 #include "platform/inspector_protocol/String16.h" | 7 #include "platform/inspector_protocol/String16.h" |
| 8 #include "platform/v8_inspector/InjectedScriptNative.h" | 8 #include "platform/v8_inspector/InjectedScriptNative.h" |
| 9 #include "platform/v8_inspector/V8Compat.h" | 9 #include "platform/v8_inspector/V8Compat.h" |
| 10 #include "platform/v8_inspector/V8DebuggerImpl.h" | 10 #include "platform/v8_inspector/V8DebuggerImpl.h" |
| (...skipping 30 matching lines...) Expand all Loading... |
| 41 v8::Local<v8::Object> V8InjectedScriptHost::create(v8::Local<v8::Context> contex
t, V8DebuggerImpl* debugger) | 41 v8::Local<v8::Object> V8InjectedScriptHost::create(v8::Local<v8::Context> contex
t, V8DebuggerImpl* debugger) |
| 42 { | 42 { |
| 43 v8::Isolate* isolate = debugger->isolate(); | 43 v8::Isolate* isolate = debugger->isolate(); |
| 44 v8::Local<v8::Object> injectedScriptHost = v8::Object::New(isolate); | 44 v8::Local<v8::Object> injectedScriptHost = v8::Object::New(isolate); |
| 45 v8::Local<v8::External> debuggerExternal = v8::External::New(isolate, debugg
er); | 45 v8::Local<v8::External> debuggerExternal = v8::External::New(isolate, debugg
er); |
| 46 setFunctionProperty(context, injectedScriptHost, "internalConstructorName",
V8InjectedScriptHost::internalConstructorNameCallback, debuggerExternal); | 46 setFunctionProperty(context, injectedScriptHost, "internalConstructorName",
V8InjectedScriptHost::internalConstructorNameCallback, debuggerExternal); |
| 47 setFunctionProperty(context, injectedScriptHost, "formatAccessorsAsPropertie
s", V8InjectedScriptHost::formatAccessorsAsProperties, debuggerExternal); | 47 setFunctionProperty(context, injectedScriptHost, "formatAccessorsAsPropertie
s", V8InjectedScriptHost::formatAccessorsAsProperties, debuggerExternal); |
| 48 setFunctionProperty(context, injectedScriptHost, "isTypedArray", V8InjectedS
criptHost::isTypedArrayCallback, debuggerExternal); | 48 setFunctionProperty(context, injectedScriptHost, "isTypedArray", V8InjectedS
criptHost::isTypedArrayCallback, debuggerExternal); |
| 49 setFunctionProperty(context, injectedScriptHost, "subtype", V8InjectedScript
Host::subtypeCallback, debuggerExternal); | 49 setFunctionProperty(context, injectedScriptHost, "subtype", V8InjectedScript
Host::subtypeCallback, debuggerExternal); |
| 50 setFunctionProperty(context, injectedScriptHost, "getInternalProperties", V8
InjectedScriptHost::getInternalPropertiesCallback, debuggerExternal); | 50 setFunctionProperty(context, injectedScriptHost, "getInternalProperties", V8
InjectedScriptHost::getInternalPropertiesCallback, debuggerExternal); |
| 51 setFunctionProperty(context, injectedScriptHost, "suppressWarningsAndCallFun
ction", V8InjectedScriptHost::suppressWarningsAndCallFunctionCallback, debuggerE
xternal); | 51 setFunctionProperty(context, injectedScriptHost, "hasOwnProperty", V8Injecte
dScriptHost::hasOwnPropertyCallback, debuggerExternal); |
| 52 setFunctionProperty(context, injectedScriptHost, "bind", V8InjectedScriptHos
t::bindCallback, debuggerExternal); | 52 setFunctionProperty(context, injectedScriptHost, "bind", V8InjectedScriptHos
t::bindCallback, debuggerExternal); |
| 53 setFunctionProperty(context, injectedScriptHost, "proxyTargetValue", V8Injec
tedScriptHost::proxyTargetValueCallback, debuggerExternal); | 53 setFunctionProperty(context, injectedScriptHost, "proxyTargetValue", V8Injec
tedScriptHost::proxyTargetValueCallback, debuggerExternal); |
| 54 setFunctionProperty(context, injectedScriptHost, "prototype", V8InjectedScri
ptHost::prototypeCallback, debuggerExternal); | 54 setFunctionProperty(context, injectedScriptHost, "prototype", V8InjectedScri
ptHost::prototypeCallback, debuggerExternal); |
| 55 return injectedScriptHost; | 55 return injectedScriptHost; |
| 56 } | 56 } |
| 57 | 57 |
| 58 void V8InjectedScriptHost::internalConstructorNameCallback(const v8::FunctionCal
lbackInfo<v8::Value>& info) | 58 void V8InjectedScriptHost::internalConstructorNameCallback(const v8::FunctionCal
lbackInfo<v8::Value>& info) |
| 59 { | 59 { |
| 60 if (info.Length() < 1 || !info[0]->IsObject()) | 60 if (info.Length() < 1 || !info[0]->IsObject()) |
| 61 return; | 61 return; |
| (...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 143 | 143 |
| 144 void V8InjectedScriptHost::getInternalPropertiesCallback(const v8::FunctionCallb
ackInfo<v8::Value>& info) | 144 void V8InjectedScriptHost::getInternalPropertiesCallback(const v8::FunctionCallb
ackInfo<v8::Value>& info) |
| 145 { | 145 { |
| 146 if (info.Length() < 1) | 146 if (info.Length() < 1) |
| 147 return; | 147 return; |
| 148 v8::Local<v8::Array> properties; | 148 v8::Local<v8::Array> properties; |
| 149 if (unwrapDebugger(info)->internalProperties(info.GetIsolate()->GetCurrentCo
ntext(), info[0]).ToLocal(&properties)) | 149 if (unwrapDebugger(info)->internalProperties(info.GetIsolate()->GetCurrentCo
ntext(), info[0]).ToLocal(&properties)) |
| 150 info.GetReturnValue().Set(properties); | 150 info.GetReturnValue().Set(properties); |
| 151 } | 151 } |
| 152 | 152 |
| 153 void V8InjectedScriptHost::suppressWarningsAndCallFunctionCallback(const v8::Fun
ctionCallbackInfo<v8::Value>& info) | 153 void V8InjectedScriptHost::hasOwnPropertyCallback(const v8::FunctionCallbackInfo
<v8::Value>& info) |
| 154 { | 154 { |
| 155 if (info.Length() < 2 || info.Length() > 3 || !info[0]->IsFunction()) { | 155 if (info.Length() < 2 || !info[0]->IsObject() || !info[1]->IsString()) |
| 156 NOTREACHED(); | |
| 157 return; | 156 return; |
| 158 } | 157 bool result = info[0].As<v8::Object>()->HasOwnProperty(info.GetIsolate()->Ge
tCurrentContext(), v8::Local<v8::String>::Cast(info[1])).FromMaybe(false); |
| 159 if (info.Length() > 2 && (!info[2]->IsArray() && !info[2]->IsUndefined())) { | 158 info.GetReturnValue().Set(v8::Boolean::New(info.GetIsolate(), result)); |
| 160 NOTREACHED(); | |
| 161 return; | |
| 162 } | |
| 163 | |
| 164 v8::Isolate* isolate = info.GetIsolate(); | |
| 165 v8::Local<v8::Context> context = isolate->GetCurrentContext(); | |
| 166 | |
| 167 v8::Local<v8::Function> function = info[0].As<v8::Function>(); | |
| 168 v8::Local<v8::Value> receiver = info[1]; | |
| 169 std::unique_ptr<v8::Local<v8::Value>[]> argv = nullptr; | |
| 170 size_t argc = 0; | |
| 171 | |
| 172 if (info.Length() > 2 && info[2]->IsArray()) { | |
| 173 v8::Local<v8::Array> arguments = info[2].As<v8::Array>(); | |
| 174 argc = arguments->Length(); | |
| 175 argv.reset(new v8::Local<v8::Value>[argc]); | |
| 176 for (size_t i = 0; i < argc; ++i) { | |
| 177 if (!arguments->Get(context, i).ToLocal(&argv[i])) | |
| 178 return; | |
| 179 } | |
| 180 } | |
| 181 | |
| 182 V8DebuggerImpl* debugger = unwrapDebugger(info); | |
| 183 int contextGroupId = V8DebuggerImpl::getGroupId(context); | |
| 184 if (contextGroupId) | |
| 185 debugger->client()->muteWarningsAndDeprecations(contextGroupId); | |
| 186 | |
| 187 v8::MicrotasksScope microtasks(isolate, v8::MicrotasksScope::kDoNotRunMicrot
asks); | |
| 188 v8::Local<v8::Value> result; | |
| 189 if (function->Call(context, receiver, argc, argv.get()).ToLocal(&result)) | |
| 190 info.GetReturnValue().Set(result); | |
| 191 | |
| 192 if (contextGroupId) | |
| 193 debugger->client()->unmuteWarningsAndDeprecations(contextGroupId); | |
| 194 } | 159 } |
| 195 | 160 |
| 196 void V8InjectedScriptHost::bindCallback(const v8::FunctionCallbackInfo<v8::Value
>& info) | 161 void V8InjectedScriptHost::bindCallback(const v8::FunctionCallbackInfo<v8::Value
>& info) |
| 197 { | 162 { |
| 198 if (info.Length() < 2 || !info[1]->IsString()) | 163 if (info.Length() < 2 || !info[1]->IsString()) |
| 199 return; | 164 return; |
| 200 InjectedScriptNative* injectedScriptNative = InjectedScriptNative::fromInjec
tedScriptHost(info.Holder()); | 165 InjectedScriptNative* injectedScriptNative = InjectedScriptNative::fromInjec
tedScriptHost(info.Holder()); |
| 201 if (!injectedScriptNative) | 166 if (!injectedScriptNative) |
| 202 return; | 167 return; |
| 203 | 168 |
| (...skipping 15 matching lines...) Expand all Loading... |
| 219 info.GetReturnValue().Set(target); | 184 info.GetReturnValue().Set(target); |
| 220 } | 185 } |
| 221 | 186 |
| 222 void V8InjectedScriptHost::prototypeCallback(const v8::FunctionCallbackInfo<v8::
Value>& info) | 187 void V8InjectedScriptHost::prototypeCallback(const v8::FunctionCallbackInfo<v8::
Value>& info) |
| 223 { | 188 { |
| 224 DCHECK(info.Length() > 0 && info[0]->IsObject()); | 189 DCHECK(info.Length() > 0 && info[0]->IsObject()); |
| 225 info.GetReturnValue().Set(info[0].As<v8::Object>()->GetPrototype()); | 190 info.GetReturnValue().Set(info[0].As<v8::Object>()->GetPrototype()); |
| 226 } | 191 } |
| 227 | 192 |
| 228 } // namespace blink | 193 } // namespace blink |
| OLD | NEW |