| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (c) 2011 Google Inc. All rights reserved. | 2 * Copyright (c) 2011 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 327 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 338 if (info.Length() < 1) | 338 if (info.Length() < 1) |
| 339 return; | 339 return; |
| 340 String selector = toCoreStringWithUndefinedOrNullCheck(info[0]); | 340 String selector = toCoreStringWithUndefinedOrNullCheck(info[0]); |
| 341 if (selector.isEmpty()) | 341 if (selector.isEmpty()) |
| 342 return; | 342 return; |
| 343 Node* node = secondArgumentAsNode(info); | 343 Node* node = secondArgumentAsNode(info); |
| 344 if (!node || !node->isContainerNode()) | 344 if (!node || !node->isContainerNode()) |
| 345 return; | 345 return; |
| 346 ExceptionState exceptionState(ExceptionState::ExecutionContext, "$", "Comman
dLineAPI", info.Holder(), info.GetIsolate()); | 346 ExceptionState exceptionState(ExceptionState::ExecutionContext, "$", "Comman
dLineAPI", info.Holder(), info.GetIsolate()); |
| 347 Element* element = toContainerNode(node)->querySelector(AtomicString(selecto
r), exceptionState); | 347 Element* element = toContainerNode(node)->querySelector(AtomicString(selecto
r), exceptionState); |
| 348 if (exceptionState.throwIfNeeded()) | 348 if (exceptionState.hadException()) |
| 349 return; | 349 return; |
| 350 if (element) | 350 if (element) |
| 351 info.GetReturnValue().Set(toV8(element, info.Holder(), info.GetIsolate()
)); | 351 info.GetReturnValue().Set(toV8(element, info.Holder(), info.GetIsolate()
)); |
| 352 else | 352 else |
| 353 info.GetReturnValue().Set(v8::Null(info.GetIsolate())); | 353 info.GetReturnValue().Set(v8::Null(info.GetIsolate())); |
| 354 } | 354 } |
| 355 | 355 |
| 356 void MainThreadDebugger::querySelectorAllCallback(const v8::FunctionCallbackInfo
<v8::Value>& info) | 356 void MainThreadDebugger::querySelectorAllCallback(const v8::FunctionCallbackInfo
<v8::Value>& info) |
| 357 { | 357 { |
| 358 if (info.Length() < 1) | 358 if (info.Length() < 1) |
| 359 return; | 359 return; |
| 360 String selector = toCoreStringWithUndefinedOrNullCheck(info[0]); | 360 String selector = toCoreStringWithUndefinedOrNullCheck(info[0]); |
| 361 if (selector.isEmpty()) | 361 if (selector.isEmpty()) |
| 362 return; | 362 return; |
| 363 Node* node = secondArgumentAsNode(info); | 363 Node* node = secondArgumentAsNode(info); |
| 364 if (!node || !node->isContainerNode()) | 364 if (!node || !node->isContainerNode()) |
| 365 return; | 365 return; |
| 366 ExceptionState exceptionState(ExceptionState::ExecutionContext, "$$", "Comma
ndLineAPI", info.Holder(), info.GetIsolate()); | 366 ExceptionState exceptionState(ExceptionState::ExecutionContext, "$$", "Comma
ndLineAPI", info.Holder(), info.GetIsolate()); |
| 367 // toV8(elementList) doesn't work here, since we need a proper Array instanc
e, not NodeList. | 367 // toV8(elementList) doesn't work here, since we need a proper Array instanc
e, not NodeList. |
| 368 StaticElementList* elementList = toContainerNode(node)->querySelectorAll(Ato
micString(selector), exceptionState); | 368 StaticElementList* elementList = toContainerNode(node)->querySelectorAll(Ato
micString(selector), exceptionState); |
| 369 if (exceptionState.throwIfNeeded() || !elementList) | 369 if (exceptionState.hadException() || !elementList) |
| 370 return; | 370 return; |
| 371 v8::Isolate* isolate = info.GetIsolate(); | 371 v8::Isolate* isolate = info.GetIsolate(); |
| 372 v8::Local<v8::Context> context = isolate->GetCurrentContext(); | 372 v8::Local<v8::Context> context = isolate->GetCurrentContext(); |
| 373 v8::Local<v8::Array> nodes = v8::Array::New(isolate, elementList->length()); | 373 v8::Local<v8::Array> nodes = v8::Array::New(isolate, elementList->length()); |
| 374 for (size_t i = 0; i < elementList->length(); ++i) { | 374 for (size_t i = 0; i < elementList->length(); ++i) { |
| 375 Element* element = elementList->item(i); | 375 Element* element = elementList->item(i); |
| 376 if (!createDataPropertyInArray(context, nodes, i, toV8(element, info.Hol
der(), info.GetIsolate())).FromMaybe(false)) | 376 if (!createDataPropertyInArray(context, nodes, i, toV8(element, info.Hol
der(), info.GetIsolate())).FromMaybe(false)) |
| 377 return; | 377 return; |
| 378 } | 378 } |
| 379 info.GetReturnValue().Set(nodes); | 379 info.GetReturnValue().Set(nodes); |
| 380 } | 380 } |
| 381 | 381 |
| 382 void MainThreadDebugger::xpathSelectorCallback(const v8::FunctionCallbackInfo<v8
::Value>& info) | 382 void MainThreadDebugger::xpathSelectorCallback(const v8::FunctionCallbackInfo<v8
::Value>& info) |
| 383 { | 383 { |
| 384 if (info.Length() < 1) | 384 if (info.Length() < 1) |
| 385 return; | 385 return; |
| 386 String selector = toCoreStringWithUndefinedOrNullCheck(info[0]); | 386 String selector = toCoreStringWithUndefinedOrNullCheck(info[0]); |
| 387 if (selector.isEmpty()) | 387 if (selector.isEmpty()) |
| 388 return; | 388 return; |
| 389 Node* node = secondArgumentAsNode(info); | 389 Node* node = secondArgumentAsNode(info); |
| 390 if (!node || !node->isContainerNode()) | 390 if (!node || !node->isContainerNode()) |
| 391 return; | 391 return; |
| 392 | 392 |
| 393 ExceptionState exceptionState(ExceptionState::ExecutionContext, "$x", "Comma
ndLineAPI", info.Holder(), info.GetIsolate()); | 393 ExceptionState exceptionState(ExceptionState::ExecutionContext, "$x", "Comma
ndLineAPI", info.Holder(), info.GetIsolate()); |
| 394 XPathResult* result = XPathEvaluator::create()->evaluate(selector, node, nul
lptr, XPathResult::kAnyType, ScriptValue(), exceptionState); | 394 XPathResult* result = XPathEvaluator::create()->evaluate(selector, node, nul
lptr, XPathResult::kAnyType, ScriptValue(), exceptionState); |
| 395 if (exceptionState.throwIfNeeded() || !result) | 395 if (exceptionState.hadException() || !result) |
| 396 return; | 396 return; |
| 397 if (result->resultType() == XPathResult::kNumberType) { | 397 if (result->resultType() == XPathResult::kNumberType) { |
| 398 info.GetReturnValue().Set(toV8(result->numberValue(exceptionState), info
.Holder(), info.GetIsolate())); | 398 info.GetReturnValue().Set(toV8(result->numberValue(exceptionState), info
.Holder(), info.GetIsolate())); |
| 399 } else if (result->resultType() == XPathResult::kStringType) { | 399 } else if (result->resultType() == XPathResult::kStringType) { |
| 400 info.GetReturnValue().Set(toV8(result->stringValue(exceptionState), info
.Holder(), info.GetIsolate())); | 400 info.GetReturnValue().Set(toV8(result->stringValue(exceptionState), info
.Holder(), info.GetIsolate())); |
| 401 } else if (result->resultType() == XPathResult::kBooleanType) { | 401 } else if (result->resultType() == XPathResult::kBooleanType) { |
| 402 info.GetReturnValue().Set(toV8(result->booleanValue(exceptionState), inf
o.Holder(), info.GetIsolate())); | 402 info.GetReturnValue().Set(toV8(result->booleanValue(exceptionState), inf
o.Holder(), info.GetIsolate())); |
| 403 } else { | 403 } else { |
| 404 v8::Isolate* isolate = info.GetIsolate(); | 404 v8::Isolate* isolate = info.GetIsolate(); |
| 405 v8::Local<v8::Context> context = isolate->GetCurrentContext(); | 405 v8::Local<v8::Context> context = isolate->GetCurrentContext(); |
| 406 v8::Local<v8::Array> nodes = v8::Array::New(isolate); | 406 v8::Local<v8::Array> nodes = v8::Array::New(isolate); |
| 407 size_t index = 0; | 407 size_t index = 0; |
| 408 while (Node* node = result->iterateNext(exceptionState)) { | 408 while (Node* node = result->iterateNext(exceptionState)) { |
| 409 if (exceptionState.throwIfNeeded()) | 409 if (exceptionState.hadException()) |
| 410 return; | 410 return; |
| 411 if (!createDataPropertyInArray(context, nodes, index++, toV8(node, i
nfo.Holder(), info.GetIsolate())).FromMaybe(false)) | 411 if (!createDataPropertyInArray(context, nodes, index++, toV8(node, i
nfo.Holder(), info.GetIsolate())).FromMaybe(false)) |
| 412 return; | 412 return; |
| 413 } | 413 } |
| 414 info.GetReturnValue().Set(nodes); | 414 info.GetReturnValue().Set(nodes); |
| 415 } | 415 } |
| 416 exceptionState.throwIfNeeded(); | |
| 417 } | 416 } |
| 418 | 417 |
| 419 } // namespace blink | 418 } // namespace blink |
| OLD | NEW |