Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(398)

Side by Side Diff: third_party/WebKit/Source/platform/v8_inspector/InjectedScript.cpp

Issue 1738073002: DevTools: introduce protocol::Value, baseline for hierarchical data in remote debugging protocol. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 12 matching lines...) Expand all
23 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 23 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
24 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 24 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 25 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 */ 29 */
30 30
31 #include "platform/v8_inspector/InjectedScript.h" 31 #include "platform/v8_inspector/InjectedScript.h"
32 32
33 #include "platform/JSONParser.h" 33 #include "platform/inspector_protocol/Parser.h"
34 #include "platform/JSONValues.h" 34 #include "platform/inspector_protocol/Values.h"
35 #include "platform/JSONValuesForV8.h"
36 #include "platform/v8_inspector/InjectedScriptHost.h" 35 #include "platform/v8_inspector/InjectedScriptHost.h"
37 #include "platform/v8_inspector/InjectedScriptManager.h" 36 #include "platform/v8_inspector/InjectedScriptManager.h"
38 #include "platform/v8_inspector/RemoteObjectId.h" 37 #include "platform/v8_inspector/RemoteObjectId.h"
39 #include "platform/v8_inspector/V8FunctionCall.h" 38 #include "platform/v8_inspector/V8FunctionCall.h"
40 #include "platform/v8_inspector/V8StringUtil.h" 39 #include "platform/v8_inspector/V8StringUtil.h"
41 #include "platform/v8_inspector/public/V8Debugger.h" 40 #include "platform/v8_inspector/public/V8Debugger.h"
42 #include "platform/v8_inspector/public/V8DebuggerClient.h" 41 #include "platform/v8_inspector/public/V8DebuggerClient.h"
42 #include "platform/v8_inspector/public/V8ToProtocolValue.h"
43 #include "wtf/text/WTFString.h" 43 #include "wtf/text/WTFString.h"
44 44
45 using blink::protocol::Array; 45 using blink::protocol::Array;
46 using blink::protocol::Debugger::CallFrame; 46 using blink::protocol::Debugger::CallFrame;
47 using blink::protocol::Debugger::CollectionEntry; 47 using blink::protocol::Debugger::CollectionEntry;
48 using blink::protocol::Debugger::FunctionDetails; 48 using blink::protocol::Debugger::FunctionDetails;
49 using blink::protocol::Debugger::GeneratorObjectDetails; 49 using blink::protocol::Debugger::GeneratorObjectDetails;
50 using blink::protocol::Runtime::PropertyDescriptor; 50 using blink::protocol::Runtime::PropertyDescriptor;
51 using blink::protocol::Runtime::InternalPropertyDescriptor; 51 using blink::protocol::Runtime::InternalPropertyDescriptor;
52 using blink::protocol::Runtime::RemoteObject; 52 using blink::protocol::Runtime::RemoteObject;
53 using blink::protocol::Maybe; 53 using blink::protocol::Maybe;
54 54
55 namespace blink { 55 namespace blink {
56 56
57 static PassOwnPtr<protocol::Runtime::ExceptionDetails> toExceptionDetails(PassRe fPtr<JSONObject> object) 57 static PassOwnPtr<protocol::Runtime::ExceptionDetails> toExceptionDetails(PassRe fPtr<protocol::DictionaryValue> object)
58 { 58 {
59 String text; 59 String text;
60 if (!object->getString("text", &text)) 60 if (!object->getString("text", &text))
61 return nullptr; 61 return nullptr;
62 62
63 OwnPtr<protocol::Runtime::ExceptionDetails> exceptionDetails = protocol::Run time::ExceptionDetails::create().setText(text).build(); 63 OwnPtr<protocol::Runtime::ExceptionDetails> exceptionDetails = protocol::Run time::ExceptionDetails::create().setText(text).build();
64 String url; 64 String url;
65 if (object->getString("url", &url)) 65 if (object->getString("url", &url))
66 exceptionDetails->setUrl(url); 66 exceptionDetails->setUrl(url);
67 int line = 0; 67 int line = 0;
68 if (object->getNumber("line", &line)) 68 if (object->getNumber("line", &line))
69 exceptionDetails->setLine(line); 69 exceptionDetails->setLine(line);
70 int column = 0; 70 int column = 0;
71 if (object->getNumber("column", &column)) 71 if (object->getNumber("column", &column))
72 exceptionDetails->setColumn(column); 72 exceptionDetails->setColumn(column);
73 int originScriptId = 0; 73 int originScriptId = 0;
74 object->getNumber("scriptId", &originScriptId); 74 object->getNumber("scriptId", &originScriptId);
75 75
76 RefPtr<JSONArray> stackTrace = object->getArray("stackTrace"); 76 RefPtr<protocol::ListValue> stackTrace = object->getArray("stackTrace");
77 if (stackTrace && stackTrace->length() > 0) { 77 if (stackTrace && stackTrace->length() > 0) {
78 OwnPtr<protocol::Array<protocol::Runtime::CallFrame>> frames = protocol: :Array<protocol::Runtime::CallFrame>::create(); 78 OwnPtr<protocol::Array<protocol::Runtime::CallFrame>> frames = protocol: :Array<protocol::Runtime::CallFrame>::create();
79 for (unsigned i = 0; i < stackTrace->length(); ++i) { 79 for (unsigned i = 0; i < stackTrace->length(); ++i) {
80 RefPtr<JSONObject> stackFrame = JSONObject::cast(stackTrace->get(i)) ; 80 RefPtr<protocol::DictionaryValue> stackFrame = protocol::DictionaryV alue::cast(stackTrace->get(i));
81 int lineNumber = 0; 81 int lineNumber = 0;
82 stackFrame->getNumber("lineNumber", &lineNumber); 82 stackFrame->getNumber("lineNumber", &lineNumber);
83 int column = 0; 83 int column = 0;
84 stackFrame->getNumber("column", &column); 84 stackFrame->getNumber("column", &column);
85 int scriptId = 0; 85 int scriptId = 0;
86 stackFrame->getNumber("scriptId", &scriptId); 86 stackFrame->getNumber("scriptId", &scriptId);
87 if (i == 0 && scriptId == originScriptId) 87 if (i == 0 && scriptId == originScriptId)
88 originScriptId = 0; 88 originScriptId = 0;
89 89
90 String sourceURL; 90 String sourceURL;
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
169 function.appendArgument(generatePreview); 169 function.appendArgument(generatePreview);
170 makeEvalCall(errorString, function, result, wasThrown, exceptionDetails); 170 makeEvalCall(errorString, function, result, wasThrown, exceptionDetails);
171 } 171 }
172 172
173 void InjectedScript::restartFrame(ErrorString* errorString, v8::Local<v8::Object > callFrames, const String& callFrameId) 173 void InjectedScript::restartFrame(ErrorString* errorString, v8::Local<v8::Object > callFrames, const String& callFrameId)
174 { 174 {
175 v8::HandleScope handles(m_isolate); 175 v8::HandleScope handles(m_isolate);
176 V8FunctionCall function(m_client, context(), v8Value(), "restartFrame"); 176 V8FunctionCall function(m_client, context(), v8Value(), "restartFrame");
177 function.appendArgument(callFrames); 177 function.appendArgument(callFrames);
178 function.appendArgument(callFrameId); 178 function.appendArgument(callFrameId);
179 RefPtr<JSONValue> resultValue; 179 RefPtr<protocol::Value> resultValue;
180 makeCall(function, &resultValue); 180 makeCall(function, &resultValue);
181 if (resultValue) { 181 if (resultValue) {
182 if (resultValue->type() == JSONValue::TypeString) { 182 if (resultValue->type() == protocol::Value::TypeString) {
183 resultValue->asString(errorString); 183 resultValue->asString(errorString);
184 } else { 184 } else {
185 bool value; 185 bool value;
186 ASSERT_UNUSED(value, resultValue->asBoolean(&value) && value); 186 ASSERT_UNUSED(value, resultValue->asBoolean(&value) && value);
187 } 187 }
188 return; 188 return;
189 } 189 }
190 *errorString = "Internal error"; 190 *errorString = "Internal error";
191 } 191 }
192 192
193 void InjectedScript::getStepInPositions(ErrorString* errorString, v8::Local<v8:: Object> callFrames, const String& callFrameId, Maybe<Array<protocol::Debugger::L ocation>>* positions) 193 void InjectedScript::getStepInPositions(ErrorString* errorString, v8::Local<v8:: Object> callFrames, const String& callFrameId, Maybe<Array<protocol::Debugger::L ocation>>* positions)
194 { 194 {
195 v8::HandleScope handles(m_isolate); 195 v8::HandleScope handles(m_isolate);
196 V8FunctionCall function(m_client, context(), v8Value(), "getStepInPositions" ); 196 V8FunctionCall function(m_client, context(), v8Value(), "getStepInPositions" );
197 function.appendArgument(callFrames); 197 function.appendArgument(callFrames);
198 function.appendArgument(callFrameId); 198 function.appendArgument(callFrameId);
199 RefPtr<JSONValue> resultValue; 199 RefPtr<protocol::Value> resultValue;
200 makeCall(function, &resultValue); 200 makeCall(function, &resultValue);
201 if (resultValue) { 201 if (resultValue) {
202 if (resultValue->type() == JSONValue::TypeString) { 202 if (resultValue->type() == protocol::Value::TypeString) {
203 resultValue->asString(errorString); 203 resultValue->asString(errorString);
204 return; 204 return;
205 } 205 }
206 if (resultValue->type() == JSONValue::TypeArray) { 206 if (resultValue->type() == protocol::Value::TypeArray) {
207 protocol::ErrorSupport errors(errorString); 207 protocol::ErrorSupport errors(errorString);
208 *positions = Array<protocol::Debugger::Location>::parse(resultValue. release(), &errors); 208 *positions = Array<protocol::Debugger::Location>::parse(resultValue. release(), &errors);
209 return; 209 return;
210 } 210 }
211 } 211 }
212 *errorString = "Internal error"; 212 *errorString = "Internal error";
213 } 213 }
214 214
215 void InjectedScript::setVariableValue(ErrorString* errorString, 215 void InjectedScript::setVariableValue(ErrorString* errorString,
216 v8::Local<v8::Object> callFrames, 216 v8::Local<v8::Object> callFrames,
(...skipping 12 matching lines...) Expand all
229 function.appendArgument(false); 229 function.appendArgument(false);
230 function.appendArgument(false); 230 function.appendArgument(false);
231 } 231 }
232 if (functionObjectIdOpt.isJust()) 232 if (functionObjectIdOpt.isJust())
233 function.appendArgument(functionObjectIdOpt.fromJust()); 233 function.appendArgument(functionObjectIdOpt.fromJust());
234 else 234 else
235 function.appendArgument(false); 235 function.appendArgument(false);
236 function.appendArgument(scopeNumber); 236 function.appendArgument(scopeNumber);
237 function.appendArgument(variableName); 237 function.appendArgument(variableName);
238 function.appendArgument(newValueStr); 238 function.appendArgument(newValueStr);
239 RefPtr<JSONValue> resultValue; 239 RefPtr<protocol::Value> resultValue;
240 makeCall(function, &resultValue); 240 makeCall(function, &resultValue);
241 if (!resultValue) { 241 if (!resultValue) {
242 *errorString = "Internal error"; 242 *errorString = "Internal error";
243 return; 243 return;
244 } 244 }
245 if (resultValue->type() == JSONValue::TypeString) { 245 if (resultValue->type() == protocol::Value::TypeString) {
246 resultValue->asString(errorString); 246 resultValue->asString(errorString);
247 return; 247 return;
248 } 248 }
249 // Normal return. 249 // Normal return.
250 } 250 }
251 251
252 void InjectedScript::getFunctionDetails(ErrorString* errorString, const String& functionId, OwnPtr<FunctionDetails>* result) 252 void InjectedScript::getFunctionDetails(ErrorString* errorString, const String& functionId, OwnPtr<FunctionDetails>* result)
253 { 253 {
254 v8::HandleScope handles(m_isolate); 254 v8::HandleScope handles(m_isolate);
255 V8FunctionCall function(m_client, context(), v8Value(), "getFunctionDetails" ); 255 V8FunctionCall function(m_client, context(), v8Value(), "getFunctionDetails" );
256 function.appendArgument(functionId); 256 function.appendArgument(functionId);
257 RefPtr<JSONValue> resultValue; 257 RefPtr<protocol::Value> resultValue;
258 makeCall(function, &resultValue); 258 makeCall(function, &resultValue);
259 protocol::ErrorSupport errors(errorString); 259 protocol::ErrorSupport errors(errorString);
260 *result = FunctionDetails::parse(resultValue, &errors); 260 *result = FunctionDetails::parse(resultValue, &errors);
261 } 261 }
262 262
263 void InjectedScript::getGeneratorObjectDetails(ErrorString* errorString, const S tring& objectId, OwnPtr<GeneratorObjectDetails>* result) 263 void InjectedScript::getGeneratorObjectDetails(ErrorString* errorString, const S tring& objectId, OwnPtr<GeneratorObjectDetails>* result)
264 { 264 {
265 v8::HandleScope handles(m_isolate); 265 v8::HandleScope handles(m_isolate);
266 V8FunctionCall function(m_client, context(), v8Value(), "getGeneratorObjectD etails"); 266 V8FunctionCall function(m_client, context(), v8Value(), "getGeneratorObjectD etails");
267 function.appendArgument(objectId); 267 function.appendArgument(objectId);
268 RefPtr<JSONValue> resultValue; 268 RefPtr<protocol::Value> resultValue;
269 makeCall(function, &resultValue); 269 makeCall(function, &resultValue);
270 protocol::ErrorSupport errors(errorString); 270 protocol::ErrorSupport errors(errorString);
271 *result = GeneratorObjectDetails::parse(resultValue, &errors); 271 *result = GeneratorObjectDetails::parse(resultValue, &errors);
272 } 272 }
273 273
274 void InjectedScript::getCollectionEntries(ErrorString* errorString, const String & objectId, OwnPtr<Array<CollectionEntry>>* result) 274 void InjectedScript::getCollectionEntries(ErrorString* errorString, const String & objectId, OwnPtr<Array<CollectionEntry>>* result)
275 { 275 {
276 v8::HandleScope handles(m_isolate); 276 v8::HandleScope handles(m_isolate);
277 V8FunctionCall function(m_client, context(), v8Value(), "getCollectionEntrie s"); 277 V8FunctionCall function(m_client, context(), v8Value(), "getCollectionEntrie s");
278 function.appendArgument(objectId); 278 function.appendArgument(objectId);
279 RefPtr<JSONValue> resultValue; 279 RefPtr<protocol::Value> resultValue;
280 makeCall(function, &resultValue); 280 makeCall(function, &resultValue);
281 protocol::ErrorSupport errors(errorString); 281 protocol::ErrorSupport errors(errorString);
282 *result = Array<CollectionEntry>::parse(resultValue, &errors); 282 *result = Array<CollectionEntry>::parse(resultValue, &errors);
283 } 283 }
284 284
285 void InjectedScript::getProperties(ErrorString* errorString, const String& objec tId, bool ownProperties, bool accessorPropertiesOnly, bool generatePreview, OwnP tr<Array<PropertyDescriptor>>* properties, Maybe<protocol::Runtime::ExceptionDet ails>* exceptionDetails) 285 void InjectedScript::getProperties(ErrorString* errorString, const String& objec tId, bool ownProperties, bool accessorPropertiesOnly, bool generatePreview, OwnP tr<Array<PropertyDescriptor>>* properties, Maybe<protocol::Runtime::ExceptionDet ails>* exceptionDetails)
286 { 286 {
287 v8::HandleScope handles(m_isolate); 287 v8::HandleScope handles(m_isolate);
288 V8FunctionCall function(m_client, context(), v8Value(), "getProperties"); 288 V8FunctionCall function(m_client, context(), v8Value(), "getProperties");
289 function.appendArgument(objectId); 289 function.appendArgument(objectId);
290 function.appendArgument(ownProperties); 290 function.appendArgument(ownProperties);
291 function.appendArgument(accessorPropertiesOnly); 291 function.appendArgument(accessorPropertiesOnly);
292 function.appendArgument(generatePreview); 292 function.appendArgument(generatePreview);
293 293
294 RefPtr<JSONValue> result; 294 RefPtr<protocol::Value> result;
295 makeCallWithExceptionDetails(function, &result, exceptionDetails); 295 makeCallWithExceptionDetails(function, &result, exceptionDetails);
296 if (exceptionDetails->isJust()) { 296 if (exceptionDetails->isJust()) {
297 // FIXME: make properties optional 297 // FIXME: make properties optional
298 *properties = Array<PropertyDescriptor>::create(); 298 *properties = Array<PropertyDescriptor>::create();
299 return; 299 return;
300 } 300 }
301 protocol::ErrorSupport errors(errorString); 301 protocol::ErrorSupport errors(errorString);
302 *properties = Array<PropertyDescriptor>::parse(result.release(), &errors); 302 *properties = Array<PropertyDescriptor>::parse(result.release(), &errors);
303 } 303 }
304 304
305 void InjectedScript::getInternalProperties(ErrorString* errorString, const Strin g& objectId, Maybe<Array<InternalPropertyDescriptor>>* properties, Maybe<protoco l::Runtime::ExceptionDetails>* exceptionDetails) 305 void InjectedScript::getInternalProperties(ErrorString* errorString, const Strin g& objectId, Maybe<Array<InternalPropertyDescriptor>>* properties, Maybe<protoco l::Runtime::ExceptionDetails>* exceptionDetails)
306 { 306 {
307 v8::HandleScope handles(m_isolate); 307 v8::HandleScope handles(m_isolate);
308 V8FunctionCall function(m_client, context(), v8Value(), "getInternalProperti es"); 308 V8FunctionCall function(m_client, context(), v8Value(), "getInternalProperti es");
309 function.appendArgument(objectId); 309 function.appendArgument(objectId);
310 310
311 RefPtr<JSONValue> result; 311 RefPtr<protocol::Value> result;
312 makeCallWithExceptionDetails(function, &result, exceptionDetails); 312 makeCallWithExceptionDetails(function, &result, exceptionDetails);
313 if (exceptionDetails->isJust()) 313 if (exceptionDetails->isJust())
314 return; 314 return;
315 protocol::ErrorSupport errors(errorString); 315 protocol::ErrorSupport errors(errorString);
316 OwnPtr<Array<InternalPropertyDescriptor>> array = Array<InternalPropertyDesc riptor>::parse(result.release(), &errors); 316 OwnPtr<Array<InternalPropertyDescriptor>> array = Array<InternalPropertyDesc riptor>::parse(result.release(), &errors);
317 if (!errors.hasErrors() && array->length() > 0) 317 if (!errors.hasErrors() && array->length() > 0)
318 *properties = array.release(); 318 *properties = array.release();
319 } 319 }
320 320
321 void InjectedScript::releaseObject(const String& objectId) 321 void InjectedScript::releaseObject(const String& objectId)
322 { 322 {
323 RefPtr<JSONValue> parsedObjectId = parseJSON(objectId); 323 RefPtr<protocol::Value> parsedObjectId = protocol::parseJSON(objectId);
324 if (!parsedObjectId) 324 if (!parsedObjectId)
325 return; 325 return;
326 RefPtr<JSONObject> object = JSONObject::cast(parsedObjectId); 326 RefPtr<protocol::DictionaryValue> object = protocol::DictionaryValue::cast(p arsedObjectId);
327 if (!object) 327 if (!object)
328 return; 328 return;
329 int boundId = 0; 329 int boundId = 0;
330 if (!object->getNumber("id", &boundId)) 330 if (!object->getNumber("id", &boundId))
331 return; 331 return;
332 m_native->unbind(boundId); 332 m_native->unbind(boundId);
333 } 333 }
334 334
335 v8::MaybeLocal<v8::Value> InjectedScript::runCompiledScript(v8::Local<v8::Script > script, bool includeCommandLineAPI) 335 v8::MaybeLocal<v8::Value> InjectedScript::runCompiledScript(v8::Local<v8::Script > script, bool includeCommandLineAPI)
336 { 336 {
(...skipping 16 matching lines...) Expand all
353 353
354 PassOwnPtr<Array<CallFrame>> InjectedScript::wrapCallFrames(v8::Local<v8::Object > callFrames, int asyncOrdinal) 354 PassOwnPtr<Array<CallFrame>> InjectedScript::wrapCallFrames(v8::Local<v8::Object > callFrames, int asyncOrdinal)
355 { 355 {
356 v8::HandleScope handles(m_isolate); 356 v8::HandleScope handles(m_isolate);
357 V8FunctionCall function(m_client, context(), v8Value(), "wrapCallFrames"); 357 V8FunctionCall function(m_client, context(), v8Value(), "wrapCallFrames");
358 function.appendArgument(callFrames); 358 function.appendArgument(callFrames);
359 function.appendArgument(asyncOrdinal); 359 function.appendArgument(asyncOrdinal);
360 bool hadException = false; 360 bool hadException = false;
361 v8::Local<v8::Value> callFramesValue = callFunctionWithEvalEnabled(function, hadException); 361 v8::Local<v8::Value> callFramesValue = callFunctionWithEvalEnabled(function, hadException);
362 ASSERT(!hadException); 362 ASSERT(!hadException);
363 RefPtr<JSONValue> result = toJSONValue(context(), callFramesValue); 363 RefPtr<protocol::Value> result = toProtocolValue(context(), callFramesValue) ;
364 protocol::ErrorSupport errors; 364 protocol::ErrorSupport errors;
365 if (result && result->type() == JSONValue::TypeArray) 365 if (result && result->type() == protocol::Value::TypeArray)
366 return Array<CallFrame>::parse(result.release(), &errors); 366 return Array<CallFrame>::parse(result.release(), &errors);
367 return Array<CallFrame>::create(); 367 return Array<CallFrame>::create();
368 } 368 }
369 369
370 PassOwnPtr<protocol::Runtime::RemoteObject> InjectedScript::wrapObject(v8::Local <v8::Value> value, const String& groupName, bool generatePreview) const 370 PassOwnPtr<protocol::Runtime::RemoteObject> InjectedScript::wrapObject(v8::Local <v8::Value> value, const String& groupName, bool generatePreview) const
371 { 371 {
372 v8::HandleScope handles(m_isolate); 372 v8::HandleScope handles(m_isolate);
373 V8FunctionCall function(m_client, context(), v8Value(), "wrapObject"); 373 V8FunctionCall function(m_client, context(), v8Value(), "wrapObject");
374 function.appendArgument(value); 374 function.appendArgument(value);
375 function.appendArgument(groupName); 375 function.appendArgument(groupName);
376 function.appendArgument(canAccessInspectedWindow()); 376 function.appendArgument(canAccessInspectedWindow());
377 function.appendArgument(generatePreview); 377 function.appendArgument(generatePreview);
378 bool hadException = false; 378 bool hadException = false;
379 v8::Local<v8::Value> r = callFunctionWithEvalEnabled(function, hadException) ; 379 v8::Local<v8::Value> r = callFunctionWithEvalEnabled(function, hadException) ;
380 if (hadException) 380 if (hadException)
381 return nullptr; 381 return nullptr;
382 protocol::ErrorSupport errors; 382 protocol::ErrorSupport errors;
383 return protocol::Runtime::RemoteObject::parse(toJSONValue(context(), r), &er rors); 383 return protocol::Runtime::RemoteObject::parse(toProtocolValue(context(), r), &errors);
384 } 384 }
385 385
386 PassOwnPtr<protocol::Runtime::RemoteObject> InjectedScript::wrapTable(v8::Local< v8::Value> table, v8::Local<v8::Value> columns) const 386 PassOwnPtr<protocol::Runtime::RemoteObject> InjectedScript::wrapTable(v8::Local< v8::Value> table, v8::Local<v8::Value> columns) const
387 { 387 {
388 v8::HandleScope handles(m_isolate); 388 v8::HandleScope handles(m_isolate);
389 V8FunctionCall function(m_client, context(), v8Value(), "wrapTable"); 389 V8FunctionCall function(m_client, context(), v8Value(), "wrapTable");
390 function.appendArgument(canAccessInspectedWindow()); 390 function.appendArgument(canAccessInspectedWindow());
391 function.appendArgument(table); 391 function.appendArgument(table);
392 if (columns.IsEmpty()) 392 if (columns.IsEmpty())
393 function.appendArgument(false); 393 function.appendArgument(false);
394 else 394 else
395 function.appendArgument(columns); 395 function.appendArgument(columns);
396 bool hadException = false; 396 bool hadException = false;
397 v8::Local<v8::Value> r = callFunctionWithEvalEnabled(function, hadException ); 397 v8::Local<v8::Value> r = callFunctionWithEvalEnabled(function, hadException );
398 if (hadException) 398 if (hadException)
399 return nullptr; 399 return nullptr;
400 protocol::ErrorSupport errors; 400 protocol::ErrorSupport errors;
401 return protocol::Runtime::RemoteObject::parse(toJSONValue(context(), r), &er rors); 401 return protocol::Runtime::RemoteObject::parse(toProtocolValue(context(), r), &errors);
402 } 402 }
403 403
404 v8::Local<v8::Value> InjectedScript::findObject(const RemoteObjectId& objectId) const 404 v8::Local<v8::Value> InjectedScript::findObject(const RemoteObjectId& objectId) const
405 { 405 {
406 return m_native->objectForId(objectId.id()); 406 return m_native->objectForId(objectId.id());
407 } 407 }
408 408
409 String InjectedScript::objectGroupName(const RemoteObjectId& objectId) const 409 String InjectedScript::objectGroupName(const RemoteObjectId& objectId) const
410 { 410 {
411 return m_native->groupName(objectId.id()); 411 return m_native->groupName(objectId.id());
412 } 412 }
413 413
414 void InjectedScript::releaseObjectGroup(const String& objectGroup) 414 void InjectedScript::releaseObjectGroup(const String& objectGroup)
415 { 415 {
416 v8::HandleScope handles(m_isolate); 416 v8::HandleScope handles(m_isolate);
417 m_native->releaseObjectGroup(objectGroup); 417 m_native->releaseObjectGroup(objectGroup);
418 if (objectGroup == "console") { 418 if (objectGroup == "console") {
419 V8FunctionCall function(m_client, context(), v8Value(), "clearLastEvalua tionResult"); 419 V8FunctionCall function(m_client, context(), v8Value(), "clearLastEvalua tionResult");
420 bool hadException = false; 420 bool hadException = false;
421 callFunctionWithEvalEnabled(function, hadException); 421 callFunctionWithEvalEnabled(function, hadException);
422 ASSERT(!hadException); 422 ASSERT(!hadException);
423 } 423 }
424 } 424 }
425 425
426 void InjectedScript::setCustomObjectFormatterEnabled(bool enabled) 426 void InjectedScript::setCustomObjectFormatterEnabled(bool enabled)
427 { 427 {
428 v8::HandleScope handles(m_isolate); 428 v8::HandleScope handles(m_isolate);
429 V8FunctionCall function(m_client, context(), v8Value(), "setCustomObjectForm atterEnabled"); 429 V8FunctionCall function(m_client, context(), v8Value(), "setCustomObjectForm atterEnabled");
430 function.appendArgument(enabled); 430 function.appendArgument(enabled);
431 RefPtr<JSONValue> result; 431 RefPtr<protocol::Value> result;
432 makeCall(function, &result); 432 makeCall(function, &result);
433 } 433 }
434 434
435 bool InjectedScript::canAccessInspectedWindow() const 435 bool InjectedScript::canAccessInspectedWindow() const
436 { 436 {
437 v8::Local<v8::Context> callingContext = m_isolate->GetCallingContext(); 437 v8::Local<v8::Context> callingContext = m_isolate->GetCallingContext();
438 if (callingContext.IsEmpty()) 438 if (callingContext.IsEmpty())
439 return true; 439 return true;
440 return m_client->callingContextCanAccessContext(callingContext, context()); 440 return m_client->callingContextCanAccessContext(callingContext, context());
441 } 441 }
(...skipping 15 matching lines...) Expand all
457 bool evalIsDisabled = !localContext->IsCodeGenerationFromStringsAllowed(); 457 bool evalIsDisabled = !localContext->IsCodeGenerationFromStringsAllowed();
458 // Temporarily enable allow evals for inspector. 458 // Temporarily enable allow evals for inspector.
459 if (evalIsDisabled) 459 if (evalIsDisabled)
460 localContext->AllowCodeGenerationFromStrings(true); 460 localContext->AllowCodeGenerationFromStrings(true);
461 v8::Local<v8::Value> resultValue = function.call(hadException); 461 v8::Local<v8::Value> resultValue = function.call(hadException);
462 if (evalIsDisabled) 462 if (evalIsDisabled)
463 localContext->AllowCodeGenerationFromStrings(false); 463 localContext->AllowCodeGenerationFromStrings(false);
464 return resultValue; 464 return resultValue;
465 } 465 }
466 466
467 void InjectedScript::makeCall(V8FunctionCall& function, RefPtr<JSONValue>* resul t) 467 void InjectedScript::makeCall(V8FunctionCall& function, RefPtr<protocol::Value>* result)
468 { 468 {
469 if (!canAccessInspectedWindow()) { 469 if (!canAccessInspectedWindow()) {
470 *result = JSONString::create("Can not access given context."); 470 *result = protocol::StringValue::create("Can not access given context.") ;
471 return; 471 return;
472 } 472 }
473 473
474 bool hadException = false; 474 bool hadException = false;
475 v8::Local<v8::Value> resultValue = callFunctionWithEvalEnabled(function, had Exception); 475 v8::Local<v8::Value> resultValue = callFunctionWithEvalEnabled(function, had Exception);
476 476
477 ASSERT(!hadException); 477 ASSERT(!hadException);
478 if (!hadException) { 478 if (!hadException) {
479 *result = toJSONValue(function.context(), resultValue); 479 *result = toProtocolValue(function.context(), resultValue);
480 if (!*result) 480 if (!*result)
481 *result = JSONString::create(String::format("Object has too long ref erence chain(must not be longer than %d)", JSONValue::maxDepth)); 481 *result = protocol::StringValue::create(String::format("Object has t oo long reference chain(must not be longer than %d)", protocol::Value::maxDepth) );
482 } else { 482 } else {
483 *result = JSONString::create("Exception while making a call."); 483 *result = protocol::StringValue::create("Exception while making a call." );
484 } 484 }
485 } 485 }
486 486
487 void InjectedScript::makeEvalCall(ErrorString* errorString, V8FunctionCall& func tion, OwnPtr<protocol::Runtime::RemoteObject>* objectResult, Maybe<bool>* wasThr own, Maybe<protocol::Runtime::ExceptionDetails>* exceptionDetails) 487 void InjectedScript::makeEvalCall(ErrorString* errorString, V8FunctionCall& func tion, OwnPtr<protocol::Runtime::RemoteObject>* objectResult, Maybe<bool>* wasThr own, Maybe<protocol::Runtime::ExceptionDetails>* exceptionDetails)
488 { 488 {
489 RefPtr<JSONValue> result; 489 RefPtr<protocol::Value> result;
490 makeCall(function, &result); 490 makeCall(function, &result);
491 if (!result) { 491 if (!result) {
492 *errorString = "Internal error: result value is empty"; 492 *errorString = "Internal error: result value is empty";
493 return; 493 return;
494 } 494 }
495 if (result->type() == JSONValue::TypeString) { 495 if (result->type() == protocol::Value::TypeString) {
496 result->asString(errorString); 496 result->asString(errorString);
497 ASSERT(errorString->length()); 497 ASSERT(errorString->length());
498 return; 498 return;
499 } 499 }
500 RefPtr<JSONObject> resultPair = JSONObject::cast(result); 500 RefPtr<protocol::DictionaryValue> resultPair = protocol::DictionaryValue::ca st(result);
501 if (!resultPair) { 501 if (!resultPair) {
502 *errorString = "Internal error: result is not an Object"; 502 *errorString = "Internal error: result is not an Object";
503 return; 503 return;
504 } 504 }
505 RefPtr<JSONObject> resultObj = resultPair->getObject("result"); 505 RefPtr<protocol::DictionaryValue> resultObj = resultPair->getObject("result" );
506 bool wasThrownVal = false; 506 bool wasThrownVal = false;
507 if (!resultObj || !resultPair->getBoolean("wasThrown", &wasThrownVal)) { 507 if (!resultObj || !resultPair->getBoolean("wasThrown", &wasThrownVal)) {
508 *errorString = "Internal error: result is not a pair of value and wasThr own flag"; 508 *errorString = "Internal error: result is not a pair of value and wasThr own flag";
509 return; 509 return;
510 } 510 }
511 if (wasThrownVal) { 511 if (wasThrownVal) {
512 RefPtr<JSONObject> objectExceptionDetails = resultPair->getObject("excep tionDetails"); 512 RefPtr<protocol::DictionaryValue> objectExceptionDetails = resultPair->g etObject("exceptionDetails");
513 if (objectExceptionDetails) 513 if (objectExceptionDetails)
514 *exceptionDetails = toExceptionDetails(objectExceptionDetails.releas e()); 514 *exceptionDetails = toExceptionDetails(objectExceptionDetails.releas e());
515 } 515 }
516 protocol::ErrorSupport errors(errorString); 516 protocol::ErrorSupport errors(errorString);
517 *objectResult = protocol::Runtime::RemoteObject::parse(resultObj, &errors); 517 *objectResult = protocol::Runtime::RemoteObject::parse(resultObj, &errors);
518 *wasThrown = wasThrownVal; 518 *wasThrown = wasThrownVal;
519 } 519 }
520 520
521 void InjectedScript::makeCallWithExceptionDetails(V8FunctionCall& function, RefP tr<JSONValue>* result, Maybe<protocol::Runtime::ExceptionDetails>* exceptionDeta ils) 521 void InjectedScript::makeCallWithExceptionDetails(V8FunctionCall& function, RefP tr<protocol::Value>* result, Maybe<protocol::Runtime::ExceptionDetails>* excepti onDetails)
522 { 522 {
523 v8::HandleScope handles(m_isolate); 523 v8::HandleScope handles(m_isolate);
524 v8::Context::Scope scope(context()); 524 v8::Context::Scope scope(context());
525 v8::TryCatch tryCatch(m_isolate); 525 v8::TryCatch tryCatch(m_isolate);
526 v8::Local<v8::Value> resultValue = function.callWithoutExceptionHandling(); 526 v8::Local<v8::Value> resultValue = function.callWithoutExceptionHandling();
527 if (tryCatch.HasCaught()) { 527 if (tryCatch.HasCaught()) {
528 v8::Local<v8::Message> message = tryCatch.Message(); 528 v8::Local<v8::Message> message = tryCatch.Message();
529 String text = !message.IsEmpty() ? toWTFStringWithTypeCheck(message->Get ()) : "Internal error"; 529 String text = !message.IsEmpty() ? toWTFStringWithTypeCheck(message->Get ()) : "Internal error";
530 *exceptionDetails = protocol::Runtime::ExceptionDetails::create().setTex t(text).build(); 530 *exceptionDetails = protocol::Runtime::ExceptionDetails::create().setTex t(text).build();
531 } else { 531 } else {
532 *result = toJSONValue(function.context(), resultValue); 532 *result = toProtocolValue(function.context(), resultValue);
533 if (!*result) 533 if (!*result)
534 *result = JSONString::create(String::format("Object has too long ref erence chain(must not be longer than %d)", JSONValue::maxDepth)); 534 *result = protocol::StringValue::create(String::format("Object has t oo long reference chain(must not be longer than %d)", protocol::Value::maxDepth) );
535 } 535 }
536 } 536 }
537 537
538 void InjectedScript::dispose() 538 void InjectedScript::dispose()
539 { 539 {
540 m_manager->discardInjectedScript(m_contextId); 540 m_manager->discardInjectedScript(m_contextId);
541 } 541 }
542 542
543 } // namespace blink 543 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698