OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2012 Google Inc. All rights reserved. | 2 * Copyright (C) 2012 Google Inc. All rights reserved. |
3 * | 3 * |
4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
5 * modification, are permitted provided that the following conditions are | 5 * modification, are permitted provided that the following conditions are |
6 * met: | 6 * met: |
7 * | 7 * |
8 * * Redistributions of source code must retain the above copyright | 8 * * Redistributions of source code must retain the above copyright |
9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
10 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
(...skipping 18 matching lines...) Expand all Loading... |
29 */ | 29 */ |
30 | 30 |
31 #include "platform/v8_inspector/InjectedScript.h" | 31 #include "platform/v8_inspector/InjectedScript.h" |
32 | 32 |
33 #include "platform/inspector_protocol/Parser.h" | 33 #include "platform/inspector_protocol/Parser.h" |
34 #include "platform/inspector_protocol/String16.h" | 34 #include "platform/inspector_protocol/String16.h" |
35 #include "platform/inspector_protocol/Values.h" | 35 #include "platform/inspector_protocol/Values.h" |
36 #include "platform/v8_inspector/InjectedScriptHost.h" | 36 #include "platform/v8_inspector/InjectedScriptHost.h" |
37 #include "platform/v8_inspector/InjectedScriptManager.h" | 37 #include "platform/v8_inspector/InjectedScriptManager.h" |
38 #include "platform/v8_inspector/RemoteObjectId.h" | 38 #include "platform/v8_inspector/RemoteObjectId.h" |
| 39 #include "platform/v8_inspector/V8DebuggerImpl.h" |
39 #include "platform/v8_inspector/V8FunctionCall.h" | 40 #include "platform/v8_inspector/V8FunctionCall.h" |
40 #include "platform/v8_inspector/V8StringUtil.h" | 41 #include "platform/v8_inspector/V8StringUtil.h" |
41 #include "platform/v8_inspector/public/V8Debugger.h" | 42 #include "platform/v8_inspector/public/V8Debugger.h" |
42 #include "platform/v8_inspector/public/V8DebuggerClient.h" | 43 #include "platform/v8_inspector/public/V8DebuggerClient.h" |
43 #include "platform/v8_inspector/public/V8ToProtocolValue.h" | 44 #include "platform/v8_inspector/public/V8ToProtocolValue.h" |
44 | 45 |
45 using blink::protocol::Array; | 46 using blink::protocol::Array; |
46 using blink::protocol::Debugger::CallFrame; | 47 using blink::protocol::Debugger::CallFrame; |
47 using blink::protocol::Debugger::CollectionEntry; | 48 using blink::protocol::Debugger::CollectionEntry; |
48 using blink::protocol::Debugger::FunctionDetails; | 49 using blink::protocol::Debugger::FunctionDetails; |
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
108 if (originScriptId) | 109 if (originScriptId) |
109 exceptionDetails->setScriptId(String16::number(originScriptId)); | 110 exceptionDetails->setScriptId(String16::number(originScriptId)); |
110 return exceptionDetails.release(); | 111 return exceptionDetails.release(); |
111 } | 112 } |
112 | 113 |
113 static void weakCallback(const v8::WeakCallbackInfo<InjectedScript>& data) | 114 static void weakCallback(const v8::WeakCallbackInfo<InjectedScript>& data) |
114 { | 115 { |
115 data.GetParameter()->dispose(); | 116 data.GetParameter()->dispose(); |
116 } | 117 } |
117 | 118 |
118 InjectedScript::InjectedScript(InjectedScriptManager* manager, v8::Local<v8::Con
text> context, v8::Local<v8::Object> object, V8DebuggerClient* client, PassOwnPt
r<InjectedScriptNative> injectedScriptNative, int contextId) | 119 InjectedScript::InjectedScript(InjectedScriptManager* manager, v8::Local<v8::Con
text> context, v8::Local<v8::Object> object, PassOwnPtr<InjectedScriptNative> in
jectedScriptNative, int contextId) |
119 : m_manager(manager) | 120 : m_manager(manager) |
120 , m_isolate(context->GetIsolate()) | 121 , m_isolate(context->GetIsolate()) |
121 , m_context(m_isolate, context) | 122 , m_context(m_isolate, context) |
122 , m_value(m_isolate, object) | 123 , m_value(m_isolate, object) |
123 , m_client(client) | |
124 , m_native(injectedScriptNative) | 124 , m_native(injectedScriptNative) |
125 , m_contextId(contextId) | 125 , m_contextId(contextId) |
126 { | 126 { |
127 m_context.SetWeak(this, &weakCallback, v8::WeakCallbackType::kParameter); | 127 m_context.SetWeak(this, &weakCallback, v8::WeakCallbackType::kParameter); |
128 } | 128 } |
129 | 129 |
130 InjectedScript::~InjectedScript() | 130 InjectedScript::~InjectedScript() |
131 { | 131 { |
132 } | 132 } |
133 | 133 |
134 void InjectedScript::evaluate(ErrorString* errorString, const String16& expressi
on, const String16& objectGroup, bool includeCommandLineAPI, bool returnByValue,
bool generatePreview, OwnPtr<protocol::Runtime::RemoteObject>* result, Maybe<bo
ol>* wasThrown, Maybe<protocol::Runtime::ExceptionDetails>* exceptionDetails) | 134 void InjectedScript::evaluate(ErrorString* errorString, const String16& expressi
on, const String16& objectGroup, bool includeCommandLineAPI, bool returnByValue,
bool generatePreview, OwnPtr<protocol::Runtime::RemoteObject>* result, Maybe<bo
ol>* wasThrown, Maybe<protocol::Runtime::ExceptionDetails>* exceptionDetails) |
135 { | 135 { |
136 v8::HandleScope handles(m_isolate); | 136 v8::HandleScope handles(m_isolate); |
137 V8FunctionCall function(m_client, context(), v8Value(), "evaluate"); | 137 V8FunctionCall function(m_manager->debugger(), context(), v8Value(), "evalua
te"); |
138 function.appendArgument(expression); | 138 function.appendArgument(expression); |
139 function.appendArgument(objectGroup); | 139 function.appendArgument(objectGroup); |
140 function.appendArgument(includeCommandLineAPI); | 140 function.appendArgument(includeCommandLineAPI); |
141 function.appendArgument(returnByValue); | 141 function.appendArgument(returnByValue); |
142 function.appendArgument(generatePreview); | 142 function.appendArgument(generatePreview); |
143 *result = makeEvalCall(errorString, function, wasThrown, exceptionDetails); | 143 *result = makeEvalCall(errorString, function, wasThrown, exceptionDetails); |
144 } | 144 } |
145 | 145 |
146 void InjectedScript::callFunctionOn(ErrorString* errorString, const String16& ob
jectId, const String16& expression, const String16& arguments, bool returnByValu
e, bool generatePreview, OwnPtr<protocol::Runtime::RemoteObject>* result, Maybe<
bool>* wasThrown) | 146 void InjectedScript::callFunctionOn(ErrorString* errorString, const String16& ob
jectId, const String16& expression, const String16& arguments, bool returnByValu
e, bool generatePreview, OwnPtr<protocol::Runtime::RemoteObject>* result, Maybe<
bool>* wasThrown) |
147 { | 147 { |
148 v8::HandleScope handles(m_isolate); | 148 v8::HandleScope handles(m_isolate); |
149 V8FunctionCall function(m_client, context(), v8Value(), "callFunctionOn"); | 149 V8FunctionCall function(m_manager->debugger(), context(), v8Value(), "callFu
nctionOn"); |
150 function.appendArgument(objectId); | 150 function.appendArgument(objectId); |
151 function.appendArgument(expression); | 151 function.appendArgument(expression); |
152 function.appendArgument(arguments); | 152 function.appendArgument(arguments); |
153 function.appendArgument(returnByValue); | 153 function.appendArgument(returnByValue); |
154 function.appendArgument(generatePreview); | 154 function.appendArgument(generatePreview); |
155 *result = makeEvalCall(errorString, function, wasThrown); | 155 *result = makeEvalCall(errorString, function, wasThrown); |
156 } | 156 } |
157 | 157 |
158 void InjectedScript::evaluateOnCallFrame(ErrorString* errorString, v8::Local<v8:
:Object> callFrames, const String16& callFrameId, const String16& expression, co
nst String16& objectGroup, bool includeCommandLineAPI, bool returnByValue, bool
generatePreview, OwnPtr<RemoteObject>* result, Maybe<bool>* wasThrown, Maybe<pro
tocol::Runtime::ExceptionDetails>* exceptionDetails) | 158 void InjectedScript::evaluateOnCallFrame(ErrorString* errorString, v8::Local<v8:
:Object> callFrames, const String16& callFrameId, const String16& expression, co
nst String16& objectGroup, bool includeCommandLineAPI, bool returnByValue, bool
generatePreview, OwnPtr<RemoteObject>* result, Maybe<bool>* wasThrown, Maybe<pro
tocol::Runtime::ExceptionDetails>* exceptionDetails) |
159 { | 159 { |
160 v8::HandleScope handles(m_isolate); | 160 v8::HandleScope handles(m_isolate); |
161 V8FunctionCall function(m_client, context(), v8Value(), "evaluateOnCallFrame
"); | 161 V8FunctionCall function(m_manager->debugger(), context(), v8Value(), "evalua
teOnCallFrame"); |
162 function.appendArgument(callFrames); | 162 function.appendArgument(callFrames); |
163 function.appendArgument(callFrameId); | 163 function.appendArgument(callFrameId); |
164 function.appendArgument(expression); | 164 function.appendArgument(expression); |
165 function.appendArgument(objectGroup); | 165 function.appendArgument(objectGroup); |
166 function.appendArgument(includeCommandLineAPI); | 166 function.appendArgument(includeCommandLineAPI); |
167 function.appendArgument(returnByValue); | 167 function.appendArgument(returnByValue); |
168 function.appendArgument(generatePreview); | 168 function.appendArgument(generatePreview); |
169 *result = makeEvalCall(errorString, function, wasThrown, exceptionDetails); | 169 *result = makeEvalCall(errorString, function, wasThrown, exceptionDetails); |
170 } | 170 } |
171 | 171 |
172 void InjectedScript::getFunctionDetails(ErrorString* errorString, const String16
& functionId, OwnPtr<FunctionDetails>* result) | 172 void InjectedScript::getFunctionDetails(ErrorString* errorString, const String16
& functionId, OwnPtr<FunctionDetails>* result) |
173 { | 173 { |
174 v8::HandleScope handles(m_isolate); | 174 v8::HandleScope handles(m_isolate); |
175 V8FunctionCall function(m_client, context(), v8Value(), "getFunctionDetails"
); | 175 V8FunctionCall function(m_manager->debugger(), context(), v8Value(), "getFun
ctionDetails"); |
176 function.appendArgument(functionId); | 176 function.appendArgument(functionId); |
177 OwnPtr<protocol::Value> resultValue = makeCall(function); | 177 OwnPtr<protocol::Value> resultValue = makeCall(function); |
178 protocol::ErrorSupport errors(errorString); | 178 protocol::ErrorSupport errors(errorString); |
179 *result = FunctionDetails::parse(resultValue.get(), &errors); | 179 *result = FunctionDetails::parse(resultValue.get(), &errors); |
180 } | 180 } |
181 | 181 |
182 void InjectedScript::getCollectionEntries(ErrorString* errorString, const String
16& objectId, OwnPtr<Array<CollectionEntry>>* result) | 182 void InjectedScript::getCollectionEntries(ErrorString* errorString, const String
16& objectId, OwnPtr<Array<CollectionEntry>>* result) |
183 { | 183 { |
184 v8::HandleScope handles(m_isolate); | 184 v8::HandleScope handles(m_isolate); |
185 V8FunctionCall function(m_client, context(), v8Value(), "getCollectionEntrie
s"); | 185 V8FunctionCall function(m_manager->debugger(), context(), v8Value(), "getCol
lectionEntries"); |
186 function.appendArgument(objectId); | 186 function.appendArgument(objectId); |
187 OwnPtr<protocol::Value> resultValue = makeCall(function); | 187 OwnPtr<protocol::Value> resultValue = makeCall(function); |
188 protocol::ErrorSupport errors(errorString); | 188 protocol::ErrorSupport errors(errorString); |
189 *result = Array<CollectionEntry>::parse(resultValue.get(), &errors); | 189 *result = Array<CollectionEntry>::parse(resultValue.get(), &errors); |
190 } | 190 } |
191 | 191 |
192 void InjectedScript::getProperties(ErrorString* errorString, const String16& obj
ectId, bool ownProperties, bool accessorPropertiesOnly, bool generatePreview, Ow
nPtr<Array<PropertyDescriptor>>* properties, Maybe<protocol::Runtime::ExceptionD
etails>* exceptionDetails) | 192 void InjectedScript::getProperties(ErrorString* errorString, const String16& obj
ectId, bool ownProperties, bool accessorPropertiesOnly, bool generatePreview, Ow
nPtr<Array<PropertyDescriptor>>* properties, Maybe<protocol::Runtime::ExceptionD
etails>* exceptionDetails) |
193 { | 193 { |
194 v8::HandleScope handles(m_isolate); | 194 v8::HandleScope handles(m_isolate); |
195 V8FunctionCall function(m_client, context(), v8Value(), "getProperties"); | 195 V8FunctionCall function(m_manager->debugger(), context(), v8Value(), "getPro
perties"); |
196 function.appendArgument(objectId); | 196 function.appendArgument(objectId); |
197 function.appendArgument(ownProperties); | 197 function.appendArgument(ownProperties); |
198 function.appendArgument(accessorPropertiesOnly); | 198 function.appendArgument(accessorPropertiesOnly); |
199 function.appendArgument(generatePreview); | 199 function.appendArgument(generatePreview); |
200 | 200 |
201 OwnPtr<protocol::Value> result = makeCallWithExceptionDetails(function, exce
ptionDetails); | 201 OwnPtr<protocol::Value> result = makeCallWithExceptionDetails(function, exce
ptionDetails); |
202 if (exceptionDetails->isJust()) { | 202 if (exceptionDetails->isJust()) { |
203 // FIXME: make properties optional | 203 // FIXME: make properties optional |
204 *properties = Array<PropertyDescriptor>::create(); | 204 *properties = Array<PropertyDescriptor>::create(); |
205 return; | 205 return; |
206 } | 206 } |
207 protocol::ErrorSupport errors(errorString); | 207 protocol::ErrorSupport errors(errorString); |
208 *properties = Array<PropertyDescriptor>::parse(result.get(), &errors); | 208 *properties = Array<PropertyDescriptor>::parse(result.get(), &errors); |
209 } | 209 } |
210 | 210 |
211 void InjectedScript::getInternalProperties(ErrorString* errorString, const Strin
g16& objectId, Maybe<Array<InternalPropertyDescriptor>>* properties, Maybe<proto
col::Runtime::ExceptionDetails>* exceptionDetails) | 211 void InjectedScript::getInternalProperties(ErrorString* errorString, const Strin
g16& objectId, Maybe<Array<InternalPropertyDescriptor>>* properties, Maybe<proto
col::Runtime::ExceptionDetails>* exceptionDetails) |
212 { | 212 { |
213 v8::HandleScope handles(m_isolate); | 213 v8::HandleScope handles(m_isolate); |
214 V8FunctionCall function(m_client, context(), v8Value(), "getInternalProperti
es"); | 214 V8FunctionCall function(m_manager->debugger(), context(), v8Value(), "getInt
ernalProperties"); |
215 function.appendArgument(objectId); | 215 function.appendArgument(objectId); |
216 | 216 |
217 OwnPtr<protocol::Value> result = makeCallWithExceptionDetails(function, exce
ptionDetails); | 217 OwnPtr<protocol::Value> result = makeCallWithExceptionDetails(function, exce
ptionDetails); |
218 if (exceptionDetails->isJust()) | 218 if (exceptionDetails->isJust()) |
219 return; | 219 return; |
220 protocol::ErrorSupport errors(errorString); | 220 protocol::ErrorSupport errors(errorString); |
221 OwnPtr<Array<InternalPropertyDescriptor>> array = Array<InternalPropertyDesc
riptor>::parse(result.get(), &errors); | 221 OwnPtr<Array<InternalPropertyDescriptor>> array = Array<InternalPropertyDesc
riptor>::parse(result.get(), &errors); |
222 if (!errors.hasErrors() && array->length() > 0) | 222 if (!errors.hasErrors() && array->length() > 0) |
223 *properties = array.release(); | 223 *properties = array.release(); |
224 } | 224 } |
(...skipping 10 matching lines...) Expand all Loading... |
235 if (!object->getNumber("id", &boundId)) | 235 if (!object->getNumber("id", &boundId)) |
236 return; | 236 return; |
237 m_native->unbind(boundId); | 237 m_native->unbind(boundId); |
238 } | 238 } |
239 | 239 |
240 v8::MaybeLocal<v8::Value> InjectedScript::runCompiledScript(v8::Local<v8::Script
> script, bool includeCommandLineAPI) | 240 v8::MaybeLocal<v8::Value> InjectedScript::runCompiledScript(v8::Local<v8::Script
> script, bool includeCommandLineAPI) |
241 { | 241 { |
242 v8::Local<v8::Symbol> commandLineAPISymbolValue = V8Debugger::commandLineAPI
Symbol(m_isolate); | 242 v8::Local<v8::Symbol> commandLineAPISymbolValue = V8Debugger::commandLineAPI
Symbol(m_isolate); |
243 v8::Local<v8::Object> global = context()->Global(); | 243 v8::Local<v8::Object> global = context()->Global(); |
244 if (includeCommandLineAPI) { | 244 if (includeCommandLineAPI) { |
245 V8FunctionCall function(m_client, context(), v8Value(), "commandLineAPI"
); | 245 V8FunctionCall function(m_manager->debugger(), context(), v8Value(), "co
mmandLineAPI"); |
246 bool hadException = false; | 246 bool hadException = false; |
247 v8::Local<v8::Value> commandLineAPI = function.call(hadException, false)
; | 247 v8::Local<v8::Value> commandLineAPI = function.call(hadException, false)
; |
248 if (!hadException) | 248 if (!hadException) |
249 global->Set(commandLineAPISymbolValue, commandLineAPI); | 249 global->Set(commandLineAPISymbolValue, commandLineAPI); |
250 } | 250 } |
251 | 251 |
252 v8::MaybeLocal<v8::Value> maybeValue = m_client->runCompiledScript(context()
, script); | 252 v8::MaybeLocal<v8::Value> maybeValue = m_manager->debugger()->runCompiledScr
ipt(context(), script); |
253 if (includeCommandLineAPI) | 253 if (includeCommandLineAPI) |
254 global->Delete(context(), commandLineAPISymbolValue); | 254 global->Delete(context(), commandLineAPISymbolValue); |
255 | 255 |
256 return maybeValue; | 256 return maybeValue; |
257 } | 257 } |
258 | 258 |
259 PassOwnPtr<Array<CallFrame>> InjectedScript::wrapCallFrames(v8::Local<v8::Object
> callFrames) | 259 PassOwnPtr<Array<CallFrame>> InjectedScript::wrapCallFrames(v8::Local<v8::Object
> callFrames) |
260 { | 260 { |
261 v8::HandleScope handles(m_isolate); | 261 v8::HandleScope handles(m_isolate); |
262 V8FunctionCall function(m_client, context(), v8Value(), "wrapCallFrames"); | 262 V8FunctionCall function(m_manager->debugger(), context(), v8Value(), "wrapCa
llFrames"); |
263 function.appendArgument(callFrames); | 263 function.appendArgument(callFrames); |
264 bool hadException = false; | 264 bool hadException = false; |
265 v8::Local<v8::Value> callFramesValue = callFunctionWithEvalEnabled(function,
hadException); | 265 v8::Local<v8::Value> callFramesValue = callFunctionWithEvalEnabled(function,
hadException); |
266 ASSERT(!hadException); | 266 ASSERT(!hadException); |
267 OwnPtr<protocol::Value> result = toProtocolValue(context(), callFramesValue)
; | 267 OwnPtr<protocol::Value> result = toProtocolValue(context(), callFramesValue)
; |
268 protocol::ErrorSupport errors; | 268 protocol::ErrorSupport errors; |
269 if (result && result->type() == protocol::Value::TypeArray) | 269 if (result && result->type() == protocol::Value::TypeArray) |
270 return Array<CallFrame>::parse(result.get(), &errors); | 270 return Array<CallFrame>::parse(result.get(), &errors); |
271 return Array<CallFrame>::create(); | 271 return Array<CallFrame>::create(); |
272 } | 272 } |
273 | 273 |
274 PassOwnPtr<protocol::Runtime::RemoteObject> InjectedScript::wrapObject(v8::Local
<v8::Value> value, const String16& groupName, bool generatePreview) const | 274 PassOwnPtr<protocol::Runtime::RemoteObject> InjectedScript::wrapObject(v8::Local
<v8::Value> value, const String16& groupName, bool generatePreview) const |
275 { | 275 { |
276 v8::HandleScope handles(m_isolate); | 276 v8::HandleScope handles(m_isolate); |
277 V8FunctionCall function(m_client, context(), v8Value(), "wrapObject"); | 277 V8FunctionCall function(m_manager->debugger(), context(), v8Value(), "wrapOb
ject"); |
278 v8::Local<v8::Value> wrappedObject; | 278 v8::Local<v8::Value> wrappedObject; |
279 ErrorString errorString; | 279 ErrorString errorString; |
280 if (!wrapValue(&errorString, value, groupName, generatePreview).ToLocal(&wra
ppedObject)) | 280 if (!wrapValue(&errorString, value, groupName, generatePreview).ToLocal(&wra
ppedObject)) |
281 return nullptr; | 281 return nullptr; |
282 protocol::ErrorSupport errors; | 282 protocol::ErrorSupport errors; |
283 return protocol::Runtime::RemoteObject::parse(toProtocolValue(context(), wra
ppedObject).get(), &errors); | 283 return protocol::Runtime::RemoteObject::parse(toProtocolValue(context(), wra
ppedObject).get(), &errors); |
284 } | 284 } |
285 | 285 |
286 bool InjectedScript::wrapObjectProperty(ErrorString* error, v8::Local<v8::Object
> object, v8::Local<v8::Value> key, const String16& groupName, bool generatePrev
iew) const | 286 bool InjectedScript::wrapObjectProperty(ErrorString* error, v8::Local<v8::Object
> object, v8::Local<v8::Value> key, const String16& groupName, bool generatePrev
iew) const |
287 { | 287 { |
288 v8::Local<v8::Value> property; | 288 v8::Local<v8::Value> property; |
289 if (!object->Get(context(), key).ToLocal(&property)) { | 289 if (!object->Get(context(), key).ToLocal(&property)) { |
290 *error = "Internal error."; | 290 *error = "Internal error."; |
291 return false; | 291 return false; |
292 } | 292 } |
293 v8::Local<v8::Value> wrappedProperty; | 293 v8::Local<v8::Value> wrappedProperty; |
294 if (!wrapValue(error, property, groupName, generatePreview).ToLocal(&wrapped
Property)) | 294 if (!wrapValue(error, property, groupName, generatePreview).ToLocal(&wrapped
Property)) |
295 return false; | 295 return false; |
296 v8::Maybe<bool> success = object->Set(context(), key, wrappedProperty); | 296 v8::Maybe<bool> success = object->Set(context(), key, wrappedProperty); |
297 if (success.IsNothing() || !success.FromJust()) { | 297 if (success.IsNothing() || !success.FromJust()) { |
298 *error = "Internal error."; | 298 *error = "Internal error."; |
299 return false; | 299 return false; |
300 } | 300 } |
301 return true; | 301 return true; |
302 } | 302 } |
303 | 303 |
304 v8::MaybeLocal<v8::Value> InjectedScript::wrapValue(ErrorString* error, v8::Loca
l<v8::Value> value, const String16& groupName, bool generatePreview) const | 304 v8::MaybeLocal<v8::Value> InjectedScript::wrapValue(ErrorString* error, v8::Loca
l<v8::Value> value, const String16& groupName, bool generatePreview) const |
305 { | 305 { |
306 V8FunctionCall function(m_client, context(), v8Value(), "wrapObject"); | 306 V8FunctionCall function(m_manager->debugger(), context(), v8Value(), "wrapOb
ject"); |
307 function.appendArgument(value); | 307 function.appendArgument(value); |
308 function.appendArgument(groupName); | 308 function.appendArgument(groupName); |
309 function.appendArgument(canAccessInspectedWindow()); | 309 function.appendArgument(canAccessInspectedWindow()); |
310 function.appendArgument(generatePreview); | 310 function.appendArgument(generatePreview); |
311 bool hadException = false; | 311 bool hadException = false; |
312 v8::Local<v8::Value> r = callFunctionWithEvalEnabled(function, hadException)
; | 312 v8::Local<v8::Value> r = callFunctionWithEvalEnabled(function, hadException)
; |
313 if (hadException) { | 313 if (hadException) { |
314 *error = "Internal error."; | 314 *error = "Internal error."; |
315 return v8::MaybeLocal<v8::Value>(); | 315 return v8::MaybeLocal<v8::Value>(); |
316 } | 316 } |
317 return r; | 317 return r; |
318 } | 318 } |
319 | 319 |
320 PassOwnPtr<protocol::Runtime::RemoteObject> InjectedScript::wrapTable(v8::Local<
v8::Value> table, v8::Local<v8::Value> columns) const | 320 PassOwnPtr<protocol::Runtime::RemoteObject> InjectedScript::wrapTable(v8::Local<
v8::Value> table, v8::Local<v8::Value> columns) const |
321 { | 321 { |
322 v8::HandleScope handles(m_isolate); | 322 v8::HandleScope handles(m_isolate); |
323 V8FunctionCall function(m_client, context(), v8Value(), "wrapTable"); | 323 V8FunctionCall function(m_manager->debugger(), context(), v8Value(), "wrapTa
ble"); |
324 function.appendArgument(canAccessInspectedWindow()); | 324 function.appendArgument(canAccessInspectedWindow()); |
325 function.appendArgument(table); | 325 function.appendArgument(table); |
326 if (columns.IsEmpty()) | 326 if (columns.IsEmpty()) |
327 function.appendArgument(false); | 327 function.appendArgument(false); |
328 else | 328 else |
329 function.appendArgument(columns); | 329 function.appendArgument(columns); |
330 bool hadException = false; | 330 bool hadException = false; |
331 v8::Local<v8::Value> r = callFunctionWithEvalEnabled(function, hadException
); | 331 v8::Local<v8::Value> r = callFunctionWithEvalEnabled(function, hadException
); |
332 if (hadException) | 332 if (hadException) |
333 return nullptr; | 333 return nullptr; |
334 protocol::ErrorSupport errors; | 334 protocol::ErrorSupport errors; |
335 return protocol::Runtime::RemoteObject::parse(toProtocolValue(context(), r).
get(), &errors); | 335 return protocol::Runtime::RemoteObject::parse(toProtocolValue(context(), r).
get(), &errors); |
336 } | 336 } |
337 | 337 |
338 v8::Local<v8::Value> InjectedScript::findObject(const RemoteObjectId& objectId)
const | 338 v8::Local<v8::Value> InjectedScript::findObject(const RemoteObjectId& objectId)
const |
339 { | 339 { |
340 return m_native->objectForId(objectId.id()); | 340 return m_native->objectForId(objectId.id()); |
341 } | 341 } |
342 | 342 |
343 String16 InjectedScript::objectGroupName(const RemoteObjectId& objectId) const | 343 String16 InjectedScript::objectGroupName(const RemoteObjectId& objectId) const |
344 { | 344 { |
345 return m_native->groupName(objectId.id()); | 345 return m_native->groupName(objectId.id()); |
346 } | 346 } |
347 | 347 |
348 void InjectedScript::releaseObjectGroup(const String16& objectGroup) | 348 void InjectedScript::releaseObjectGroup(const String16& objectGroup) |
349 { | 349 { |
350 v8::HandleScope handles(m_isolate); | 350 v8::HandleScope handles(m_isolate); |
351 m_native->releaseObjectGroup(objectGroup); | 351 m_native->releaseObjectGroup(objectGroup); |
352 if (objectGroup == "console") { | 352 if (objectGroup == "console") { |
353 V8FunctionCall function(m_client, context(), v8Value(), "clearLastEvalua
tionResult"); | 353 V8FunctionCall function(m_manager->debugger(), context(), v8Value(), "cl
earLastEvaluationResult"); |
354 bool hadException = false; | 354 bool hadException = false; |
355 callFunctionWithEvalEnabled(function, hadException); | 355 callFunctionWithEvalEnabled(function, hadException); |
356 ASSERT(!hadException); | 356 ASSERT(!hadException); |
357 } | 357 } |
358 } | 358 } |
359 | 359 |
360 void InjectedScript::setCustomObjectFormatterEnabled(bool enabled) | 360 void InjectedScript::setCustomObjectFormatterEnabled(bool enabled) |
361 { | 361 { |
362 v8::HandleScope handles(m_isolate); | 362 v8::HandleScope handles(m_isolate); |
363 V8FunctionCall function(m_client, context(), v8Value(), "setCustomObjectForm
atterEnabled"); | 363 V8FunctionCall function(m_manager->debugger(), context(), v8Value(), "setCus
tomObjectFormatterEnabled"); |
364 function.appendArgument(enabled); | 364 function.appendArgument(enabled); |
365 makeCall(function); | 365 makeCall(function); |
366 } | 366 } |
367 | 367 |
368 bool InjectedScript::canAccessInspectedWindow() const | 368 bool InjectedScript::canAccessInspectedWindow() const |
369 { | 369 { |
370 v8::Local<v8::Context> callingContext = m_isolate->GetCallingContext(); | 370 v8::Local<v8::Context> callingContext = m_isolate->GetCallingContext(); |
371 if (callingContext.IsEmpty()) | 371 if (callingContext.IsEmpty()) |
372 return true; | 372 return true; |
373 return m_client->callingContextCanAccessContext(callingContext, context()); | 373 return m_manager->debugger()->client()->callingContextCanAccessContext(calli
ngContext, context()); |
374 } | 374 } |
375 | 375 |
376 v8::Local<v8::Context> InjectedScript::context() const | 376 v8::Local<v8::Context> InjectedScript::context() const |
377 { | 377 { |
378 return m_context.Get(m_isolate); | 378 return m_context.Get(m_isolate); |
379 } | 379 } |
380 | 380 |
381 v8::Local<v8::Value> InjectedScript::v8Value() const | 381 v8::Local<v8::Value> InjectedScript::v8Value() const |
382 { | 382 { |
383 return m_value.Get(m_isolate); | 383 return m_value.Get(m_isolate); |
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
491 *errorString = "Could not find object with given id"; | 491 *errorString = "Could not find object with given id"; |
492 return v8::MaybeLocal<v8::Value>(); | 492 return v8::MaybeLocal<v8::Value>(); |
493 } | 493 } |
494 return object; | 494 return object; |
495 } | 495 } |
496 if (callArgument->hasValue()) { | 496 if (callArgument->hasValue()) { |
497 String16 value = callArgument->getValue(nullptr)->toJSONString(); | 497 String16 value = callArgument->getValue(nullptr)->toJSONString(); |
498 if (callArgument->getType(String16()) == "number") | 498 if (callArgument->getType(String16()) == "number") |
499 value = "Number(" + value + ")"; | 499 value = "Number(" + value + ")"; |
500 v8::Local<v8::Value> object; | 500 v8::Local<v8::Value> object; |
501 if (!m_client->compileAndRunInternalScript(toV8String(m_isolate, value))
.ToLocal(&object)) { | 501 if (!m_manager->debugger()->compileAndRunInternalScript(context(), toV8S
tring(m_isolate, value)).ToLocal(&object)) { |
502 *errorString = "Couldn't parse value object in call argument"; | 502 *errorString = "Couldn't parse value object in call argument"; |
503 return v8::MaybeLocal<v8::Value>(); | 503 return v8::MaybeLocal<v8::Value>(); |
504 } | 504 } |
505 return object; | 505 return object; |
506 } | 506 } |
507 return v8::Undefined(m_isolate); | 507 return v8::Undefined(m_isolate); |
508 } | 508 } |
509 | 509 |
510 } // namespace blink | 510 } // namespace blink |
OLD | NEW |