| OLD | NEW |
| 1 /* | 1 /* |
| 2 * This file is part of the KDE libraries | 2 * This file is part of the KDE libraries |
| 3 * Copyright (C) 2000 Harri Porten (porten@kde.org) | 3 * Copyright (C) 2000 Harri Porten (porten@kde.org) |
| 4 * Copyright (C) 2001 Peter Kelly (pmk@post.com) | 4 * Copyright (C) 2001 Peter Kelly (pmk@post.com) |
| 5 * Copyright (C) 2004-2006 Apple Computer, Inc. | 5 * Copyright (C) 2004-2006 Apple Computer, Inc. |
| 6 * Copyright (C) 2006 James G. Speth (speth@end.com) | 6 * Copyright (C) 2006 James G. Speth (speth@end.com) |
| 7 * Copyright (C) 2006 Samuel Weinig (sam@webkit.org) | 7 * Copyright (C) 2006 Samuel Weinig (sam@webkit.org) |
| 8 * Copyright 2007 Google Inc. All Rights Reserved. | 8 * Copyright 2007 Google Inc. All Rights Reserved. |
| 9 * | 9 * |
| 10 * This library is free software; you can redistribute it and/or | 10 * This library is free software; you can redistribute it and/or |
| (...skipping 301 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 312 XSLTProcessor>(args); | 312 XSLTProcessor>(args); |
| 313 } | 313 } |
| 314 | 314 |
| 315 | 315 |
| 316 CALLBACK_FUNC_DECL(XSLTProcessorImportStylesheet) { | 316 CALLBACK_FUNC_DECL(XSLTProcessorImportStylesheet) { |
| 317 INC_STATS(L"DOM.XSLTProcessor.importStylesheet"); | 317 INC_STATS(L"DOM.XSLTProcessor.importStylesheet"); |
| 318 // Return undefined if argument does not have the correct type. | 318 // Return undefined if argument does not have the correct type. |
| 319 if (!V8Node::HasInstance(args[0])) | 319 if (!V8Node::HasInstance(args[0])) |
| 320 return v8::Undefined(); | 320 return v8::Undefined(); |
| 321 | 321 |
| 322 XSLTProcessor* imp = V8Proxy::FastToNativeObject<XSLTProcessor>( | 322 XSLTProcessor* imp = V8Proxy::ToNativeObject<XSLTProcessor>( |
| 323 V8ClassIndex::XSLTPROCESSOR, args.Holder()); | 323 V8ClassIndex::XSLTPROCESSOR, args.Holder()); |
| 324 | 324 |
| 325 Node* node = V8Proxy::FastToNativeObject<Node>(V8ClassIndex::NODE, args[0]); | 325 Node* node = V8Proxy::DOMWrapperToNode<Node>(args[0]); |
| 326 imp->importStylesheet(node); | 326 imp->importStylesheet(node); |
| 327 return v8::Undefined(); | 327 return v8::Undefined(); |
| 328 } | 328 } |
| 329 | 329 |
| 330 | 330 |
| 331 CALLBACK_FUNC_DECL(XSLTProcessorTransformToFragment) { | 331 CALLBACK_FUNC_DECL(XSLTProcessorTransformToFragment) { |
| 332 INC_STATS(L"DOM.XSLTProcessor.transformToFragment"); | 332 INC_STATS(L"DOM.XSLTProcessor.transformToFragment"); |
| 333 // Return undefined if arguments do not have correct types. | 333 // Return undefined if arguments do not have correct types. |
| 334 if (!V8Node::HasInstance(args[0]) || !V8Document::HasInstance(args[1])) | 334 if (!V8Node::HasInstance(args[0]) || !V8Document::HasInstance(args[1])) |
| 335 return v8::Undefined(); | 335 return v8::Undefined(); |
| 336 | 336 |
| 337 XSLTProcessor* imp = V8Proxy::FastToNativeObject<XSLTProcessor>( | 337 XSLTProcessor* imp = V8Proxy::ToNativeObject<XSLTProcessor>( |
| 338 V8ClassIndex::XSLTPROCESSOR, args.Holder()); | 338 V8ClassIndex::XSLTPROCESSOR, args.Holder()); |
| 339 | 339 |
| 340 Node* source = V8Proxy::FastToNativeObject<Node>(V8ClassIndex::NODE, args[0]); | 340 Node* source = V8Proxy::DOMWrapperToNode<Node>(args[0]); |
| 341 Document* owner = | 341 Document* owner = |
| 342 V8Proxy::FastToNativeObject<Document>(V8ClassIndex::NODE, args[1]); | 342 V8Proxy::DOMWrapperToNode<Document>(args[1]); |
| 343 RefPtr<DocumentFragment> result = imp->transformToFragment(source, owner); | 343 RefPtr<DocumentFragment> result = imp->transformToFragment(source, owner); |
| 344 return V8Proxy::ToV8Object(V8ClassIndex::NODE, result.get()); | 344 return V8Proxy::NodeToV8Object(result.get()); |
| 345 } | 345 } |
| 346 | 346 |
| 347 | 347 |
| 348 CALLBACK_FUNC_DECL(XSLTProcessorTransformToDocument) { | 348 CALLBACK_FUNC_DECL(XSLTProcessorTransformToDocument) { |
| 349 INC_STATS(L"DOM.XSLTProcessor.transformToDocument"); | 349 INC_STATS(L"DOM.XSLTProcessor.transformToDocument"); |
| 350 // Return undefined if argument does not have the correct type. | 350 // Return undefined if argument does not have the correct type. |
| 351 if (!V8Node::HasInstance(args[0])) | 351 if (!V8Node::HasInstance(args[0])) |
| 352 return v8::Undefined(); | 352 return v8::Undefined(); |
| 353 | 353 |
| 354 XSLTProcessor* imp = V8Proxy::FastToNativeObject<XSLTProcessor>( | 354 XSLTProcessor* imp = V8Proxy::ToNativeObject<XSLTProcessor>( |
| 355 V8ClassIndex::XSLTPROCESSOR, args.Holder()); | 355 V8ClassIndex::XSLTPROCESSOR, args.Holder()); |
| 356 | 356 |
| 357 Node* source = V8Proxy::FastToNativeObject<Node>(V8ClassIndex::NODE, args[0]); | 357 Node* source = V8Proxy::DOMWrapperToNode<Node>(args[0]); |
| 358 if (!source) return v8::Undefined(); | 358 if (!source) return v8::Undefined(); |
| 359 RefPtr<Document> result = imp->transformToDocument(source); | 359 RefPtr<Document> result = imp->transformToDocument(source); |
| 360 // Return undefined if no result was found. | 360 // Return undefined if no result was found. |
| 361 if (!result) return v8::Undefined(); | 361 if (!result) return v8::Undefined(); |
| 362 return V8Proxy::ToV8Object(V8ClassIndex::NODE, result.get()); | 362 return V8Proxy::NodeToV8Object(result.get()); |
| 363 } | 363 } |
| 364 | 364 |
| 365 | 365 |
| 366 CALLBACK_FUNC_DECL(XSLTProcessorSetParameter) { | 366 CALLBACK_FUNC_DECL(XSLTProcessorSetParameter) { |
| 367 INC_STATS(L"DOM.XSLTProcessor.setParameter"); | 367 INC_STATS(L"DOM.XSLTProcessor.setParameter"); |
| 368 // Bail out if localName or value is null or undefined. | 368 // Bail out if localName or value is null or undefined. |
| 369 if (args[1]->IsNull() || args[1]->IsUndefined() || | 369 if (args[1]->IsNull() || args[1]->IsUndefined() || |
| 370 args[2]->IsNull() || args[2]->IsUndefined()) { | 370 args[2]->IsNull() || args[2]->IsUndefined()) { |
| 371 return v8::Undefined(); | 371 return v8::Undefined(); |
| 372 } | 372 } |
| 373 | 373 |
| 374 XSLTProcessor* imp = V8Proxy::FastToNativeObject<XSLTProcessor>( | 374 XSLTProcessor* imp = V8Proxy::ToNativeObject<XSLTProcessor>( |
| 375 V8ClassIndex::XSLTPROCESSOR, args.Holder()); | 375 V8ClassIndex::XSLTPROCESSOR, args.Holder()); |
| 376 | 376 |
| 377 String namespaceURI = ToWebCoreString(args[0]); | 377 String namespaceURI = ToWebCoreString(args[0]); |
| 378 String localName = ToWebCoreString(args[1]); | 378 String localName = ToWebCoreString(args[1]); |
| 379 String value = ToWebCoreString(args[2]); | 379 String value = ToWebCoreString(args[2]); |
| 380 imp->setParameter(namespaceURI, localName, value); | 380 imp->setParameter(namespaceURI, localName, value); |
| 381 return v8::Undefined(); | 381 return v8::Undefined(); |
| 382 } | 382 } |
| 383 | 383 |
| 384 | 384 |
| 385 CALLBACK_FUNC_DECL(XSLTProcessorGetParameter) { | 385 CALLBACK_FUNC_DECL(XSLTProcessorGetParameter) { |
| 386 INC_STATS(L"DOM.XSLTProcessor.getParameter"); | 386 INC_STATS(L"DOM.XSLTProcessor.getParameter"); |
| 387 // Bail out if localName is null or undefined. | 387 // Bail out if localName is null or undefined. |
| 388 if (args[1]->IsNull() || args[1]->IsUndefined()) { | 388 if (args[1]->IsNull() || args[1]->IsUndefined()) { |
| 389 return v8::Undefined(); | 389 return v8::Undefined(); |
| 390 } | 390 } |
| 391 | 391 |
| 392 XSLTProcessor* imp = V8Proxy::FastToNativeObject<XSLTProcessor>( | 392 XSLTProcessor* imp = V8Proxy::ToNativeObject<XSLTProcessor>( |
| 393 V8ClassIndex::XSLTPROCESSOR, args.Holder()); | 393 V8ClassIndex::XSLTPROCESSOR, args.Holder()); |
| 394 | 394 |
| 395 String namespaceURI = ToWebCoreString(args[0]); | 395 String namespaceURI = ToWebCoreString(args[0]); |
| 396 String localName = ToWebCoreString(args[1]); | 396 String localName = ToWebCoreString(args[1]); |
| 397 String result = imp->getParameter(namespaceURI, localName); | 397 String result = imp->getParameter(namespaceURI, localName); |
| 398 // Return undefined if the string is null. | 398 // Return undefined if the string is null. |
| 399 if (result.isNull()) return v8::Undefined(); | 399 if (result.isNull()) return v8::Undefined(); |
| 400 return v8String(result); | 400 return v8String(result); |
| 401 } | 401 } |
| 402 | 402 |
| 403 | 403 |
| 404 CALLBACK_FUNC_DECL(XSLTProcessorRemoveParameter) { | 404 CALLBACK_FUNC_DECL(XSLTProcessorRemoveParameter) { |
| 405 INC_STATS(L"DOM.XSLTProcessor.removeParameter"); | 405 INC_STATS(L"DOM.XSLTProcessor.removeParameter"); |
| 406 // Bail out if localName is null or undefined. | 406 // Bail out if localName is null or undefined. |
| 407 if (args[1]->IsNull() || args[1]->IsUndefined()) { | 407 if (args[1]->IsNull() || args[1]->IsUndefined()) { |
| 408 return v8::Undefined(); | 408 return v8::Undefined(); |
| 409 } | 409 } |
| 410 | 410 |
| 411 XSLTProcessor* imp = V8Proxy::FastToNativeObject<XSLTProcessor>( | 411 XSLTProcessor* imp = V8Proxy::ToNativeObject<XSLTProcessor>( |
| 412 V8ClassIndex::XSLTPROCESSOR, args.Holder()); | 412 V8ClassIndex::XSLTPROCESSOR, args.Holder()); |
| 413 | 413 |
| 414 String namespaceURI = ToWebCoreString(args[0]); | 414 String namespaceURI = ToWebCoreString(args[0]); |
| 415 String localName = ToWebCoreString(args[1]); | 415 String localName = ToWebCoreString(args[1]); |
| 416 imp->removeParameter(namespaceURI, localName); | 416 imp->removeParameter(namespaceURI, localName); |
| 417 return v8::Undefined(); | 417 return v8::Undefined(); |
| 418 } | 418 } |
| 419 | 419 |
| 420 | 420 |
| 421 // ---- Canvas support ---- | 421 // ---- Canvas support ---- |
| 422 static v8::Handle<v8::Value> CanvasStyleToV8Object(CanvasStyle* style) { | 422 static v8::Handle<v8::Value> CanvasStyleToV8Object(CanvasStyle* style) { |
| 423 if (style->gradient()) { | 423 if (style->gradient()) { |
| 424 return V8Proxy::ToV8Object(V8ClassIndex::CANVASGRADIENT, | 424 return V8Proxy::ToV8Object(V8ClassIndex::CANVASGRADIENT, |
| 425 static_cast<Peerable*>(style->gradient())); | 425 static_cast<Peerable*>(style->gradient())); |
| 426 } | 426 } |
| 427 if (style->pattern()) { | 427 if (style->pattern()) { |
| 428 return V8Proxy::ToV8Object(V8ClassIndex::CANVASPATTERN, | 428 return V8Proxy::ToV8Object(V8ClassIndex::CANVASPATTERN, |
| 429 static_cast<Peerable*>(style->pattern())); | 429 static_cast<Peerable*>(style->pattern())); |
| 430 } | 430 } |
| 431 return v8String(style->color()); | 431 return v8String(style->color()); |
| 432 } | 432 } |
| 433 | 433 |
| 434 | 434 |
| 435 static PassRefPtr<CanvasStyle> V8ObjectToCanvasStyle( | 435 static PassRefPtr<CanvasStyle> V8ObjectToCanvasStyle( |
| 436 v8::Handle<v8::Value> value) { | 436 v8::Handle<v8::Value> value) { |
| 437 if (value->IsString()) return new CanvasStyle(ToWebCoreString(value)); | 437 if (value->IsString()) return new CanvasStyle(ToWebCoreString(value)); |
| 438 | 438 |
| 439 if (V8CanvasGradient::HasInstance(value)) { | 439 if (V8CanvasGradient::HasInstance(value)) { |
| 440 CanvasGradient* gradient = | 440 CanvasGradient* gradient = |
| 441 V8Proxy::FastDOMWrapperToNative<CanvasGradient>(value); | 441 V8Proxy::DOMWrapperToNative<CanvasGradient>(value); |
| 442 return new CanvasStyle(gradient); | 442 return new CanvasStyle(gradient); |
| 443 } | 443 } |
| 444 | 444 |
| 445 if (V8CanvasPattern::HasInstance(value)) { | 445 if (V8CanvasPattern::HasInstance(value)) { |
| 446 CanvasPattern* pattern = | 446 CanvasPattern* pattern = |
| 447 V8Proxy::FastDOMWrapperToNative<CanvasPattern>(value); | 447 V8Proxy::DOMWrapperToNative<CanvasPattern>(value); |
| 448 return new CanvasStyle(pattern); | 448 return new CanvasStyle(pattern); |
| 449 } | 449 } |
| 450 | 450 |
| 451 return 0; | 451 return 0; |
| 452 } | 452 } |
| 453 | 453 |
| 454 | 454 |
| 455 ACCESSOR_GETTER(CanvasRenderingContext2DStrokeStyle) { | 455 ACCESSOR_GETTER(CanvasRenderingContext2DStrokeStyle) { |
| 456 CanvasRenderingContext2D* impl = | 456 CanvasRenderingContext2D* impl = |
| 457 V8Proxy::FastDOMWrapperToNative<CanvasRenderingContext2D>(info.Holder()); | 457 V8Proxy::DOMWrapperToNative<CanvasRenderingContext2D>(info.Holder()); |
| 458 CanvasStyle* strokeStyle = impl->strokeStyle(); | 458 CanvasStyle* strokeStyle = impl->strokeStyle(); |
| 459 return CanvasStyleToV8Object(strokeStyle); | 459 return CanvasStyleToV8Object(strokeStyle); |
| 460 } | 460 } |
| 461 | 461 |
| 462 | 462 |
| 463 ACCESSOR_SETTER(CanvasRenderingContext2DStrokeStyle) { | 463 ACCESSOR_SETTER(CanvasRenderingContext2DStrokeStyle) { |
| 464 CanvasRenderingContext2D* impl = | 464 CanvasRenderingContext2D* impl = |
| 465 V8Proxy::FastDOMWrapperToNative<CanvasRenderingContext2D>(info.Holder()); | 465 V8Proxy::DOMWrapperToNative<CanvasRenderingContext2D>(info.Holder()); |
| 466 impl->setStrokeStyle(V8ObjectToCanvasStyle(value)); | 466 impl->setStrokeStyle(V8ObjectToCanvasStyle(value)); |
| 467 } | 467 } |
| 468 | 468 |
| 469 ACCESSOR_GETTER(CanvasRenderingContext2DFillStyle) { | 469 ACCESSOR_GETTER(CanvasRenderingContext2DFillStyle) { |
| 470 CanvasRenderingContext2D* impl = | 470 CanvasRenderingContext2D* impl = |
| 471 V8Proxy::FastDOMWrapperToNative<CanvasRenderingContext2D>(info.Holder()); | 471 V8Proxy::DOMWrapperToNative<CanvasRenderingContext2D>(info.Holder()); |
| 472 CanvasStyle* fillStyle = impl->fillStyle(); | 472 CanvasStyle* fillStyle = impl->fillStyle(); |
| 473 return CanvasStyleToV8Object(fillStyle); | 473 return CanvasStyleToV8Object(fillStyle); |
| 474 } | 474 } |
| 475 | 475 |
| 476 | 476 |
| 477 ACCESSOR_SETTER(CanvasRenderingContext2DFillStyle) { | 477 ACCESSOR_SETTER(CanvasRenderingContext2DFillStyle) { |
| 478 CanvasRenderingContext2D* impl = | 478 CanvasRenderingContext2D* impl = |
| 479 V8Proxy::FastDOMWrapperToNative<CanvasRenderingContext2D>(info.Holder()); | 479 V8Proxy::DOMWrapperToNative<CanvasRenderingContext2D>(info.Holder()); |
| 480 impl->setFillStyle(V8ObjectToCanvasStyle(value)); | 480 impl->setFillStyle(V8ObjectToCanvasStyle(value)); |
| 481 } | 481 } |
| 482 | 482 |
| 483 | 483 |
| 484 // DOMImplementation is a singleton in WebCore. If we use our normal | 484 // DOMImplementation is a singleton in WebCore. If we use our normal |
| 485 // mapping from DOM objects to V8 wrappers, the same wrapper will be | 485 // mapping from DOM objects to V8 wrappers, the same wrapper will be |
| 486 // shared for all frames in the same process. This is a major | 486 // shared for all frames in the same process. This is a major |
| 487 // security problem. Therefore, we generate a DOMImplementation | 487 // security problem. Therefore, we generate a DOMImplementation |
| 488 // wrapper per document and store it in an internal field of the | 488 // wrapper per document and store it in an internal field of the |
| 489 // document. Since the DOMImplementation object is a singleton, we do | 489 // document. Since the DOMImplementation object is a singleton, we do |
| 490 // not have to do anything to keep the DOMImplementation object alive | 490 // not have to do anything to keep the DOMImplementation object alive |
| 491 // for the lifetime of the wrapper. | 491 // for the lifetime of the wrapper. |
| 492 ACCESSOR_GETTER(DocumentImplementation) { | 492 ACCESSOR_GETTER(DocumentImplementation) { |
| 493 ASSERT(info.Holder()->InternalFieldCount() >= | 493 ASSERT(info.Holder()->InternalFieldCount() >= |
| 494 kDocumentMinimumInternalFieldCount); | 494 kDocumentMinimumInternalFieldCount); |
| 495 // Check if the internal field already contains a wrapper. | 495 // Check if the internal field already contains a wrapper. |
| 496 v8::Local<v8::Value> implementation = | 496 v8::Local<v8::Value> implementation = |
| 497 info.Holder()->GetInternalField(kDocumentImplementationIndex); | 497 info.Holder()->GetInternalField(kDocumentImplementationIndex); |
| 498 if (!implementation->IsUndefined()) { | 498 if (!implementation->IsUndefined()) { |
| 499 return implementation; | 499 return implementation; |
| 500 } | 500 } |
| 501 // Generate a wrapper. | 501 // Generate a wrapper. |
| 502 Document* doc = V8Proxy::FastDOMWrapperToNative<Document>(info.Holder()); | 502 Document* doc = V8Proxy::DOMWrapperToNative<Document>(info.Holder()); |
| 503 v8::Handle<v8::Value> wrapper = | 503 v8::Handle<v8::Value> wrapper = |
| 504 V8Proxy::DOMImplementationToV8Object(doc->implementation()); | 504 V8Proxy::DOMImplementationToV8Object(doc->implementation()); |
| 505 // Store the wrapper in the internal field. | 505 // Store the wrapper in the internal field. |
| 506 info.Holder()->SetInternalField(kDocumentImplementationIndex, wrapper); | 506 info.Holder()->SetInternalField(kDocumentImplementationIndex, wrapper); |
| 507 | 507 |
| 508 return wrapper; | 508 return wrapper; |
| 509 } | 509 } |
| 510 | 510 |
| 511 | 511 |
| 512 ACCESSOR_GETTER(DocumentLocation) { | 512 ACCESSOR_GETTER(DocumentLocation) { |
| 513 Document* imp = V8Proxy::FastDOMWrapperToNative<Document>(info.Holder()); | 513 Document* imp = V8Proxy::DOMWrapperToNative<Document>(info.Holder()); |
| 514 if (!imp->frame()) | 514 if (!imp->frame()) |
| 515 return v8::Null(); | 515 return v8::Null(); |
| 516 | 516 |
| 517 DOMWindow* window = imp->frame()->domWindow(); | 517 DOMWindow* window = imp->frame()->domWindow(); |
| 518 return V8Proxy::ToV8Object(V8ClassIndex::LOCATION, | 518 return V8Proxy::ToV8Object(V8ClassIndex::LOCATION, |
| 519 static_cast<Peerable*>(window->location())); | 519 static_cast<Peerable*>(window->location())); |
| 520 } | 520 } |
| 521 | 521 |
| 522 | 522 |
| 523 ACCESSOR_SETTER(DocumentLocation) { | 523 ACCESSOR_SETTER(DocumentLocation) { |
| 524 Document* imp = V8Proxy::FastDOMWrapperToNative<Document>(info.Holder()); | 524 Document* imp = V8Proxy::DOMWrapperToNative<Document>(info.Holder()); |
| 525 if (!imp->frame()) | 525 if (!imp->frame()) |
| 526 return; | 526 return; |
| 527 | 527 |
| 528 DOMWindow* window = imp->frame()->domWindow(); | 528 DOMWindow* window = imp->frame()->domWindow(); |
| 529 // DOMWindow::setLocation does security checks. | 529 // DOMWindow::setLocation does security checks. |
| 530 window->setLocation(ToWebCoreString(value)); | 530 window->setLocation(ToWebCoreString(value)); |
| 531 } | 531 } |
| 532 | 532 |
| 533 | 533 |
| 534 ACCESSOR_SETTER(DOMWindowLocation) { | 534 ACCESSOR_SETTER(DOMWindowLocation) { |
| 535 v8::Handle<v8::Object> holder = V8Proxy::LookupDOMWrapper( | 535 v8::Handle<v8::Object> holder = V8Proxy::LookupDOMWrapper( |
| 536 V8ClassIndex::DOMWINDOW, info.This()); | 536 V8ClassIndex::DOMWINDOW, info.This()); |
| 537 if (holder.IsEmpty()) | 537 if (holder.IsEmpty()) |
| 538 return; | 538 return; |
| 539 | 539 |
| 540 DOMWindow* imp = V8Proxy::FastToNativeObject<DOMWindow>( | 540 DOMWindow* imp = V8Proxy::ToNativeObject<DOMWindow>( |
| 541 V8ClassIndex::DOMWINDOW, holder); | 541 V8ClassIndex::DOMWINDOW, holder); |
| 542 imp->setLocation(ToWebCoreString(value)); | 542 imp->setLocation(ToWebCoreString(value)); |
| 543 } | 543 } |
| 544 | 544 |
| 545 | 545 |
| 546 ACCESSOR_SETTER(DOMWindowOpener) { | 546 ACCESSOR_SETTER(DOMWindowOpener) { |
| 547 DOMWindow* imp = V8Proxy::FastToNativeObject<DOMWindow>( | 547 DOMWindow* imp = V8Proxy::ToNativeObject<DOMWindow>( |
| 548 V8ClassIndex::DOMWINDOW, info.Holder()); | 548 V8ClassIndex::DOMWINDOW, info.Holder()); |
| 549 | 549 |
| 550 if (!V8Proxy::IsFromSameOrigin(imp->frame(), true)) | 550 if (!V8Proxy::IsFromSameOrigin(imp->frame(), true)) |
| 551 return; | 551 return; |
| 552 | 552 |
| 553 // Opener can be shadowed if it is in the same domain. | 553 // Opener can be shadowed if it is in the same domain. |
| 554 // Have a special handling of null value to behave | 554 // Have a special handling of null value to behave |
| 555 // like Firefox. See bug 1224887 & 791706. | 555 // like Firefox. See bug 1224887 & 791706. |
| 556 if (value->IsNull()) { | 556 if (value->IsNull()) { |
| 557 // imp->frame() cannot be null, | 557 // imp->frame() cannot be null, |
| 558 // otherwise, SameOrigin check would have failed. | 558 // otherwise, SameOrigin check would have failed. |
| 559 ASSERT(imp->frame()); | 559 ASSERT(imp->frame()); |
| 560 imp->frame()->loader()->setOpener(0); | 560 imp->frame()->loader()->setOpener(0); |
| 561 } | 561 } |
| 562 | 562 |
| 563 // Delete the accessor from this object. | 563 // Delete the accessor from this object. |
| 564 info.Holder()->Delete(name); | 564 info.Holder()->Delete(name); |
| 565 | 565 |
| 566 // Put property on the front (this) object. | 566 // Put property on the front (this) object. |
| 567 info.This()->Set(name, value); | 567 info.This()->Set(name, value); |
| 568 } | 568 } |
| 569 | 569 |
| 570 | 570 |
| 571 ACCESSOR_GETTER(EventSrcElement) { | 571 ACCESSOR_GETTER(EventSrcElement) { |
| 572 Event* event = V8Proxy::FastDOMWrapperToNative<Event>(info.Holder()); | 572 Event* event = V8Proxy::DOMWrapperToNative<Event>(info.Holder()); |
| 573 EventTarget* target = event->target(); | 573 EventTarget* target = event->target(); |
| 574 return V8Proxy::EventTargetToV8Object(target); | 574 return V8Proxy::EventTargetToV8Object(target); |
| 575 } | 575 } |
| 576 | 576 |
| 577 | 577 |
| 578 ACCESSOR_GETTER(EventReturnValue) { | 578 ACCESSOR_GETTER(EventReturnValue) { |
| 579 Event* event = V8Proxy::FastDOMWrapperToNative<Event>(info.Holder()); | 579 Event* event = V8Proxy::DOMWrapperToNative<Event>(info.Holder()); |
| 580 return event->defaultPrevented() ? v8::False() : v8::True(); | 580 return event->defaultPrevented() ? v8::False() : v8::True(); |
| 581 } | 581 } |
| 582 | 582 |
| 583 | 583 |
| 584 ACCESSOR_SETTER(EventReturnValue) { | 584 ACCESSOR_SETTER(EventReturnValue) { |
| 585 Event* event = V8Proxy::FastDOMWrapperToNative<Event>(info.Holder()); | 585 Event* event = V8Proxy::DOMWrapperToNative<Event>(info.Holder()); |
| 586 bool v = value->BooleanValue(); | 586 bool v = value->BooleanValue(); |
| 587 event->setDefaultPrevented(!v); | 587 event->setDefaultPrevented(!v); |
| 588 } | 588 } |
| 589 | 589 |
| 590 | 590 |
| 591 ACCESSOR_GETTER(EventDataTransfer) { | 591 ACCESSOR_GETTER(EventDataTransfer) { |
| 592 Event* event = V8Proxy::FastDOMWrapperToNative<Event>(info.Holder()); | 592 Event* event = V8Proxy::DOMWrapperToNative<Event>(info.Holder()); |
| 593 | 593 |
| 594 if (event->isDragEvent()) { | 594 if (event->isDragEvent()) { |
| 595 MouseEvent* impl = static_cast<MouseEvent*>(event); | 595 MouseEvent* impl = static_cast<MouseEvent*>(event); |
| 596 Clipboard* clipboard = impl->clipboard(); | 596 Clipboard* clipboard = impl->clipboard(); |
| 597 return V8Proxy::ToV8Object(V8ClassIndex::CLIPBOARD, clipboard); | 597 return V8Proxy::ToV8Object(V8ClassIndex::CLIPBOARD, clipboard); |
| 598 } | 598 } |
| 599 | 599 |
| 600 return v8::Undefined(); | 600 return v8::Undefined(); |
| 601 } | 601 } |
| 602 | 602 |
| 603 | 603 |
| 604 ACCESSOR_GETTER(EventClipboardData) { | 604 ACCESSOR_GETTER(EventClipboardData) { |
| 605 Event* event = V8Proxy::FastDOMWrapperToNative<Event>(info.Holder()); | 605 Event* event = V8Proxy::DOMWrapperToNative<Event>(info.Holder()); |
| 606 | 606 |
| 607 if (event->isClipboardEvent()) { | 607 if (event->isClipboardEvent()) { |
| 608 ClipboardEvent* impl = static_cast<ClipboardEvent*>(event); | 608 ClipboardEvent* impl = static_cast<ClipboardEvent*>(event); |
| 609 Clipboard* clipboard = impl->clipboard(); | 609 Clipboard* clipboard = impl->clipboard(); |
| 610 return V8Proxy::ToV8Object(V8ClassIndex::CLIPBOARD, clipboard); | 610 return V8Proxy::ToV8Object(V8ClassIndex::CLIPBOARD, clipboard); |
| 611 } | 611 } |
| 612 | 612 |
| 613 return v8::Undefined(); | 613 return v8::Undefined(); |
| 614 } | 614 } |
| 615 | 615 |
| 616 | 616 |
| 617 static v8::Handle<v8::Value> HTMLCollectionGetNamedItems( | 617 static v8::Handle<v8::Value> HTMLCollectionGetNamedItems( |
| 618 HTMLCollection* collection, String name) { | 618 HTMLCollection* collection, String name) { |
| 619 Vector<RefPtr<Node> > namedItems; | 619 Vector<RefPtr<Node> > namedItems; |
| 620 collection->namedItems(name, namedItems); | 620 collection->namedItems(name, namedItems); |
| 621 switch (namedItems.size()) { | 621 switch (namedItems.size()) { |
| 622 case 0: | 622 case 0: |
| 623 return v8::Handle<v8::Value>(); | 623 return v8::Handle<v8::Value>(); |
| 624 case 1: | 624 case 1: |
| 625 return V8Proxy::ToV8Object(V8ClassIndex::NODE, namedItems.at(0).get()); | 625 return V8Proxy::NodeToV8Object(namedItems.at(0).get()); |
| 626 default: | 626 default: |
| 627 NodeList* list = new V8VectorNodeList(namedItems); | 627 NodeList* list = new V8VectorNodeList(namedItems); |
| 628 return V8Proxy::ToV8Object(V8ClassIndex::NODELIST, | 628 return V8Proxy::ToV8Object(V8ClassIndex::NODELIST, |
| 629 static_cast<Peerable*>(list)); | 629 static_cast<Peerable*>(list)); |
| 630 } | 630 } |
| 631 } | 631 } |
| 632 | 632 |
| 633 | 633 |
| 634 static v8::Handle<v8::Value> HTMLCollectionGetItem( | 634 static v8::Handle<v8::Value> HTMLCollectionGetItem( |
| 635 HTMLCollection* collection, v8::Handle<v8::Value> argument) { | 635 HTMLCollection* collection, v8::Handle<v8::Value> argument) { |
| 636 v8::Local<v8::Uint32> index = argument->ToArrayIndex(); | 636 v8::Local<v8::Uint32> index = argument->ToArrayIndex(); |
| 637 if (index.IsEmpty()) { | 637 if (index.IsEmpty()) { |
| 638 v8::Handle<v8::String> str = argument->ToString(); | 638 v8::Handle<v8::String> str = argument->ToString(); |
| 639 v8::Handle<v8::Value> result = | 639 v8::Handle<v8::Value> result = |
| 640 HTMLCollectionGetNamedItems(collection, ToWebCoreString(str)); | 640 HTMLCollectionGetNamedItems(collection, ToWebCoreString(str)); |
| 641 if (result.IsEmpty()) | 641 if (result.IsEmpty()) |
| 642 return v8::Undefined(); | 642 return v8::Undefined(); |
| 643 else | 643 else |
| 644 return result; | 644 return result; |
| 645 } | 645 } |
| 646 unsigned i = index->Uint32Value(); | 646 unsigned i = index->Uint32Value(); |
| 647 RefPtr<Node> result = collection->item(i); | 647 RefPtr<Node> result = collection->item(i); |
| 648 return V8Proxy::ToV8Object(V8ClassIndex::NODE, result.get()); | 648 return V8Proxy::NodeToV8Object(result.get()); |
| 649 } | 649 } |
| 650 | 650 |
| 651 | 651 |
| 652 NAMED_PROPERTY_GETTER(HTMLCollection) { | 652 NAMED_PROPERTY_GETTER(HTMLCollection) { |
| 653 INC_STATS(L"DOM.HTMLCollection.NamedPropertyGetter"); | 653 INC_STATS(L"DOM.HTMLCollection.NamedPropertyGetter"); |
| 654 // Search the prototype chain first. | 654 // Search the prototype chain first. |
| 655 v8::Handle<v8::Value> value = | 655 v8::Handle<v8::Value> value = |
| 656 info.Holder()->GetRealNamedPropertyInPrototypeChain(name); | 656 info.Holder()->GetRealNamedPropertyInPrototypeChain(name); |
| 657 | 657 |
| 658 if (!value.IsEmpty()) { | 658 if (!value.IsEmpty()) { |
| 659 return value; | 659 return value; |
| 660 } | 660 } |
| 661 | 661 |
| 662 // Search local callback properties next to find IDL defined | 662 // Search local callback properties next to find IDL defined |
| 663 // properties. | 663 // properties. |
| 664 if (info.Holder()->HasRealNamedCallbackProperty(name)) { | 664 if (info.Holder()->HasRealNamedCallbackProperty(name)) { |
| 665 return v8::Handle<v8::Value>(); | 665 return v8::Handle<v8::Value>(); |
| 666 } | 666 } |
| 667 | 667 |
| 668 // Finally, search the DOM structure. | 668 // Finally, search the DOM structure. |
| 669 HTMLCollection* imp = V8Proxy::FastToNativeObject<HTMLCollection>( | 669 HTMLCollection* imp = V8Proxy::ToNativeObject<HTMLCollection>( |
| 670 V8ClassIndex::HTMLCOLLECTION, info.Holder()); | 670 V8ClassIndex::HTMLCOLLECTION, info.Holder()); |
| 671 String key = ToWebCoreString(name); | 671 String key = ToWebCoreString(name); |
| 672 return HTMLCollectionGetNamedItems(imp, key); | 672 return HTMLCollectionGetNamedItems(imp, key); |
| 673 } | 673 } |
| 674 | 674 |
| 675 | 675 |
| 676 CALLBACK_FUNC_DECL(HTMLCollectionItem) { | 676 CALLBACK_FUNC_DECL(HTMLCollectionItem) { |
| 677 INC_STATS(L"DOM.HTMLCollection.item()"); | 677 INC_STATS(L"DOM.HTMLCollection.item()"); |
| 678 HTMLCollection* imp = V8Proxy::FastToNativeObject<HTMLCollection>( | 678 HTMLCollection* imp = V8Proxy::ToNativeObject<HTMLCollection>( |
| 679 V8ClassIndex::HTMLCOLLECTION, args.Holder()); | 679 V8ClassIndex::HTMLCOLLECTION, args.Holder()); |
| 680 return HTMLCollectionGetItem(imp, args[0]); | 680 return HTMLCollectionGetItem(imp, args[0]); |
| 681 } | 681 } |
| 682 | 682 |
| 683 | 683 |
| 684 CALLBACK_FUNC_DECL(HTMLCollectionNamedItem) { | 684 CALLBACK_FUNC_DECL(HTMLCollectionNamedItem) { |
| 685 INC_STATS(L"DOM.HTMLCollection.namedItem()"); | 685 INC_STATS(L"DOM.HTMLCollection.namedItem()"); |
| 686 HTMLCollection* imp = V8Proxy::FastToNativeObject<HTMLCollection>( | 686 HTMLCollection* imp = V8Proxy::ToNativeObject<HTMLCollection>( |
| 687 V8ClassIndex::HTMLCOLLECTION, args.Holder()); | 687 V8ClassIndex::HTMLCOLLECTION, args.Holder()); |
| 688 String name = ToWebCoreString(args[0]); | 688 String name = ToWebCoreString(args[0]); |
| 689 v8::Handle<v8::Value> result = | 689 v8::Handle<v8::Value> result = |
| 690 HTMLCollectionGetNamedItems(imp, name); | 690 HTMLCollectionGetNamedItems(imp, name); |
| 691 if (result.IsEmpty()) | 691 if (result.IsEmpty()) |
| 692 return v8::Undefined(); | 692 return v8::Undefined(); |
| 693 else | 693 else |
| 694 return result; | 694 return result; |
| 695 } | 695 } |
| 696 | 696 |
| 697 | 697 |
| 698 CALLBACK_FUNC_DECL(HTMLCollectionCallAsFunction) { | 698 CALLBACK_FUNC_DECL(HTMLCollectionCallAsFunction) { |
| 699 INC_STATS(L"DOM.HTMLCollection.callAsFunction()"); | 699 INC_STATS(L"DOM.HTMLCollection.callAsFunction()"); |
| 700 if (args.Length() < 1) return v8::Undefined(); | 700 if (args.Length() < 1) return v8::Undefined(); |
| 701 | 701 |
| 702 HTMLCollection* imp = V8Proxy::FastToNativeObject<HTMLCollection>( | 702 HTMLCollection* imp = V8Proxy::ToNativeObject<HTMLCollection>( |
| 703 V8ClassIndex::HTMLCOLLECTION, args.Holder()); | 703 V8ClassIndex::HTMLCOLLECTION, args.Holder()); |
| 704 | 704 |
| 705 if (args.Length() == 1) { | 705 if (args.Length() == 1) { |
| 706 return HTMLCollectionGetItem(imp, args[0]); | 706 return HTMLCollectionGetItem(imp, args[0]); |
| 707 } | 707 } |
| 708 | 708 |
| 709 // If there is a second argument it is the index of the item we | 709 // If there is a second argument it is the index of the item we |
| 710 // want. | 710 // want. |
| 711 String name = ToWebCoreString(args[0]); | 711 String name = ToWebCoreString(args[0]); |
| 712 v8::Local<v8::Uint32> index = args[1]->ToArrayIndex(); | 712 v8::Local<v8::Uint32> index = args[1]->ToArrayIndex(); |
| 713 if (index.IsEmpty()) return v8::Undefined(); | 713 if (index.IsEmpty()) return v8::Undefined(); |
| 714 unsigned i = index->Uint32Value(); | 714 unsigned i = index->Uint32Value(); |
| 715 Node* node = imp->namedItem(name); | 715 Node* node = imp->namedItem(name); |
| 716 while (node) { | 716 while (node) { |
| 717 if (i == 0) return V8Proxy::ToV8Object(V8ClassIndex::NODE, node); | 717 if (i == 0) return V8Proxy::NodeToV8Object(node); |
| 718 node = imp->nextNamedItem(name); | 718 node = imp->nextNamedItem(name); |
| 719 i--; | 719 i--; |
| 720 } | 720 } |
| 721 | 721 |
| 722 return v8::Undefined(); | 722 return v8::Undefined(); |
| 723 } | 723 } |
| 724 | 724 |
| 725 | 725 |
| 726 static v8::Handle<v8::Value> V8HTMLSelectElementRemoveHelper( | 726 static v8::Handle<v8::Value> V8HTMLSelectElementRemoveHelper( |
| 727 HTMLSelectElement* imp, const v8::Arguments& args) { | 727 HTMLSelectElement* imp, const v8::Arguments& args) { |
| 728 if (V8HTMLOptionElement::HasInstance(args[0])) { | 728 if (V8HTMLOptionElement::HasInstance(args[0])) { |
| 729 HTMLOptionElement* element = V8Proxy::ToNativeObject<HTMLOptionElement>( | 729 HTMLOptionElement* element = |
| 730 V8ClassIndex::HTMLOPTIONELEMENT, args[0]); | 730 V8Proxy::DOMWrapperToNode<HTMLOptionElement>(args[0]); |
| 731 imp->remove(element->index()); | 731 imp->remove(element->index()); |
| 732 return v8::Undefined(); | 732 return v8::Undefined(); |
| 733 } | 733 } |
| 734 | 734 |
| 735 imp->remove(ToInt32(args[0])); | 735 imp->remove(ToInt32(args[0])); |
| 736 return v8::Undefined(); | 736 return v8::Undefined(); |
| 737 } | 737 } |
| 738 | 738 |
| 739 CALLBACK_FUNC_DECL(HTMLSelectElementRemove) { | 739 CALLBACK_FUNC_DECL(HTMLSelectElementRemove) { |
| 740 INC_STATS(L"DOM.HTMLSelectElement.remove"); | 740 INC_STATS(L"DOM.HTMLSelectElement.remove"); |
| 741 HTMLSelectElement* imp = V8Proxy::FastToNativeObject<HTMLSelectElement>( | 741 HTMLSelectElement* imp = |
| 742 V8ClassIndex::HTMLSELECTELEMENT, args.Holder()); | 742 V8Proxy::DOMWrapperToNode<HTMLSelectElement>(args.Holder()); |
| 743 return V8HTMLSelectElementRemoveHelper(imp, args); | 743 return V8HTMLSelectElementRemoveHelper(imp, args); |
| 744 } | 744 } |
| 745 | 745 |
| 746 CALLBACK_FUNC_DECL(HTMLOptionsCollectionRemove) { | 746 CALLBACK_FUNC_DECL(HTMLOptionsCollectionRemove) { |
| 747 INC_STATS(L"DOM.HTMLOptionsCollection.remove()"); | 747 INC_STATS(L"DOM.HTMLOptionsCollection.remove()"); |
| 748 HTMLOptionsCollection* imp = | 748 HTMLOptionsCollection* imp = |
| 749 V8Proxy::FastToNativeObject<HTMLOptionsCollection>( | 749 V8Proxy::ToNativeObject<HTMLOptionsCollection>( |
| 750 V8ClassIndex::HTMLOPTIONSCOLLECTION, args.Holder()); | 750 V8ClassIndex::HTMLOPTIONSCOLLECTION, args.Holder()); |
| 751 HTMLSelectElement* base = static_cast<HTMLSelectElement*>(imp->base()); | 751 HTMLSelectElement* base = static_cast<HTMLSelectElement*>(imp->base()); |
| 752 return V8HTMLSelectElementRemoveHelper(base, args); | 752 return V8HTMLSelectElementRemoveHelper(base, args); |
| 753 } | 753 } |
| 754 | 754 |
| 755 | 755 |
| 756 CALLBACK_FUNC_DECL(HTMLOptionsCollectionAdd) { | 756 CALLBACK_FUNC_DECL(HTMLOptionsCollectionAdd) { |
| 757 INC_STATS(L"DOM.HTMLOptionsCollection.add()"); | 757 INC_STATS(L"DOM.HTMLOptionsCollection.add()"); |
| 758 if (!V8HTMLOptionElement::HasInstance(args[0])) { | 758 if (!V8HTMLOptionElement::HasInstance(args[0])) { |
| 759 V8Proxy::SetDOMException(TYPE_MISMATCH_ERR); | 759 V8Proxy::SetDOMException(TYPE_MISMATCH_ERR); |
| 760 return v8::Undefined(); | 760 return v8::Undefined(); |
| 761 } | 761 } |
| 762 HTMLOptionsCollection* imp = | 762 HTMLOptionsCollection* imp = |
| 763 V8Proxy::FastToNativeObject<HTMLOptionsCollection>( | 763 V8Proxy::ToNativeObject<HTMLOptionsCollection>( |
| 764 V8ClassIndex::HTMLOPTIONSCOLLECTION, args.Holder()); | 764 V8ClassIndex::HTMLOPTIONSCOLLECTION, args.Holder()); |
| 765 HTMLOptionElement* option = V8Proxy::ToNativeObject<HTMLOptionElement>( | 765 HTMLOptionElement* option = |
| 766 V8ClassIndex::NODE, args[0]); | 766 V8Proxy::DOMWrapperToNode<HTMLOptionElement>(args[0]); |
| 767 | 767 |
| 768 ExceptionCode ec = 0; | 768 ExceptionCode ec = 0; |
| 769 if (args.Length() < 2) { | 769 if (args.Length() < 2) { |
| 770 imp->add(option, ec); | 770 imp->add(option, ec); |
| 771 } else { | 771 } else { |
| 772 bool ok; | 772 bool ok; |
| 773 v8::TryCatch try_catch; | 773 v8::TryCatch try_catch; |
| 774 int index = ToInt32(args[1], ok); | 774 int index = ToInt32(args[1], ok); |
| 775 if (try_catch.HasCaught()) { | 775 if (try_catch.HasCaught()) { |
| 776 return v8::Undefined(); | 776 return v8::Undefined(); |
| 777 } | 777 } |
| 778 if (!ok) { | 778 if (!ok) { |
| 779 ec = TYPE_MISMATCH_ERR; | 779 ec = TYPE_MISMATCH_ERR; |
| 780 } else { | 780 } else { |
| 781 imp->add(option, index, ec); | 781 imp->add(option, index, ec); |
| 782 } | 782 } |
| 783 } | 783 } |
| 784 if (ec != 0) { | 784 if (ec != 0) { |
| 785 V8Proxy::SetDOMException(ec); | 785 V8Proxy::SetDOMException(ec); |
| 786 } | 786 } |
| 787 return v8::Undefined(); | 787 return v8::Undefined(); |
| 788 } | 788 } |
| 789 | 789 |
| 790 | 790 |
| 791 CALLBACK_FUNC_DECL(DOMWindowAddEventListener) { | 791 CALLBACK_FUNC_DECL(DOMWindowAddEventListener) { |
| 792 INC_STATS(L"DOM.DOMWindow.addEventListener()"); | 792 INC_STATS(L"DOM.DOMWindow.addEventListener()"); |
| 793 DOMWindow* imp = V8Proxy::FastToNativeObject<DOMWindow>( | 793 DOMWindow* imp = V8Proxy::ToNativeObject<DOMWindow>( |
| 794 V8ClassIndex::DOMWINDOW, args.Holder()); | 794 V8ClassIndex::DOMWINDOW, args.Holder()); |
| 795 | 795 |
| 796 // Fast check This argument with the global object of security context. | 796 // Fast check This argument with the global object of security context. |
| 797 if ((args.This() != v8::Context::GetCurrentSecurityContext()->Global()) && | 797 if ((args.This() != v8::Context::GetCurrentSecurityContext()->Global()) && |
| 798 !V8Proxy::IsFromSameOrigin(imp->frame(), true)) { | 798 !V8Proxy::IsFromSameOrigin(imp->frame(), true)) { |
| 799 return v8::Undefined(); | 799 return v8::Undefined(); |
| 800 } | 800 } |
| 801 | 801 |
| 802 if (!imp->frame()) | 802 if (!imp->frame()) |
| 803 return v8::Undefined(); // DOMWindow could be disconnected from the frame | 803 return v8::Undefined(); // DOMWindow could be disconnected from the frame |
| (...skipping 15 matching lines...) Expand all Loading... |
| 819 bool useCapture = args[2]->BooleanValue(); | 819 bool useCapture = args[2]->BooleanValue(); |
| 820 doc->addWindowEventListener(event_type, listener, useCapture); | 820 doc->addWindowEventListener(event_type, listener, useCapture); |
| 821 } | 821 } |
| 822 | 822 |
| 823 return v8::Undefined(); | 823 return v8::Undefined(); |
| 824 } | 824 } |
| 825 | 825 |
| 826 | 826 |
| 827 CALLBACK_FUNC_DECL(DOMWindowRemoveEventListener) { | 827 CALLBACK_FUNC_DECL(DOMWindowRemoveEventListener) { |
| 828 INC_STATS(L"DOM.DOMWindow.removeEventListener()"); | 828 INC_STATS(L"DOM.DOMWindow.removeEventListener()"); |
| 829 DOMWindow* imp = V8Proxy::FastToNativeObject<DOMWindow>( | 829 DOMWindow* imp = V8Proxy::ToNativeObject<DOMWindow>( |
| 830 V8ClassIndex::DOMWINDOW, args.Holder()); | 830 V8ClassIndex::DOMWINDOW, args.Holder()); |
| 831 | 831 |
| 832 // Fast check This argument with the global object of security context. | 832 // Fast check This argument with the global object of security context. |
| 833 if ((args.This() != v8::Context::GetCurrentSecurityContext()->Global()) && | 833 if ((args.This() != v8::Context::GetCurrentSecurityContext()->Global()) && |
| 834 !V8Proxy::IsFromSameOrigin(imp->frame(), true)) { | 834 !V8Proxy::IsFromSameOrigin(imp->frame(), true)) { |
| 835 return v8::Undefined(); | 835 return v8::Undefined(); |
| 836 } | 836 } |
| 837 | 837 |
| 838 if (!imp->frame()) | 838 if (!imp->frame()) |
| 839 return v8::Undefined(); | 839 return v8::Undefined(); |
| (...skipping 13 matching lines...) Expand all Loading... |
| 853 String event_type = ToWebCoreString(args[0]); | 853 String event_type = ToWebCoreString(args[0]); |
| 854 bool useCapture = args[2]->BooleanValue(); | 854 bool useCapture = args[2]->BooleanValue(); |
| 855 doc->removeWindowEventListener(event_type, listener, useCapture); | 855 doc->removeWindowEventListener(event_type, listener, useCapture); |
| 856 } | 856 } |
| 857 | 857 |
| 858 return v8::Undefined(); | 858 return v8::Undefined(); |
| 859 } | 859 } |
| 860 | 860 |
| 861 CALLBACK_FUNC_DECL(DOMWindowPostMessage) { | 861 CALLBACK_FUNC_DECL(DOMWindowPostMessage) { |
| 862 INC_STATS(L"DOM.DOMWindow.postMessage()"); | 862 INC_STATS(L"DOM.DOMWindow.postMessage()"); |
| 863 DOMWindow* window = V8Proxy::FastToNativeObject<DOMWindow>( | 863 DOMWindow* window = V8Proxy::ToNativeObject<DOMWindow>( |
| 864 V8ClassIndex::DOMWINDOW, args.Holder()); | 864 V8ClassIndex::DOMWINDOW, args.Holder()); |
| 865 | 865 |
| 866 DOMWindow* source = V8Proxy::retrieveActiveFrame()->domWindow(); | 866 DOMWindow* source = V8Proxy::retrieveActiveFrame()->domWindow(); |
| 867 ASSERT(source->frame()); | 867 ASSERT(source->frame()); |
| 868 | 868 |
| 869 String domain = source->frame()->loader()->url().host(); | 869 String domain = source->frame()->loader()->url().host(); |
| 870 String uri = source->frame()->loader()->url().string(); | 870 String uri = source->frame()->loader()->url().string(); |
| 871 | 871 |
| 872 v8::TryCatch try_catch; | 872 v8::TryCatch try_catch; |
| 873 | 873 |
| (...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 995 user_gesture); | 995 user_gesture); |
| 996 } | 996 } |
| 997 } | 997 } |
| 998 | 998 |
| 999 return new_frame; | 999 return new_frame; |
| 1000 } | 1000 } |
| 1001 | 1001 |
| 1002 | 1002 |
| 1003 CALLBACK_FUNC_DECL(DOMWindowShowModalDialog) { | 1003 CALLBACK_FUNC_DECL(DOMWindowShowModalDialog) { |
| 1004 INC_STATS(L"DOM.DOMWindow.showModalDialog()"); | 1004 INC_STATS(L"DOM.DOMWindow.showModalDialog()"); |
| 1005 DOMWindow* window = V8Proxy::FastToNativeObject<DOMWindow>( | 1005 DOMWindow* window = V8Proxy::ToNativeObject<DOMWindow>( |
| 1006 V8ClassIndex::DOMWINDOW, args.Holder()); | 1006 V8ClassIndex::DOMWINDOW, args.Holder()); |
| 1007 Frame* frame = window->frame(); | 1007 Frame* frame = window->frame(); |
| 1008 | 1008 |
| 1009 if (!frame) | 1009 if (!frame) |
| 1010 return v8::Undefined(); | 1010 return v8::Undefined(); |
| 1011 | 1011 |
| 1012 if (!canShowModalDialogNow(frame) || !allowPopUp()) | 1012 if (!canShowModalDialogNow(frame) || !allowPopUp()) |
| 1013 return v8::Undefined(); | 1013 return v8::Undefined(); |
| 1014 | 1014 |
| 1015 String url = valueToStringWithNullOrUndefinedCheck(args[0]); | 1015 String url = valueToStringWithNullOrUndefinedCheck(args[0]); |
| (...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1085 if (!return_value.IsEmpty()) { | 1085 if (!return_value.IsEmpty()) { |
| 1086 return return_value; | 1086 return return_value; |
| 1087 } | 1087 } |
| 1088 | 1088 |
| 1089 return v8::Undefined(); | 1089 return v8::Undefined(); |
| 1090 } | 1090 } |
| 1091 | 1091 |
| 1092 | 1092 |
| 1093 CALLBACK_FUNC_DECL(DOMWindowOpen) { | 1093 CALLBACK_FUNC_DECL(DOMWindowOpen) { |
| 1094 INC_STATS(L"DOM.DOMWindow.open()"); | 1094 INC_STATS(L"DOM.DOMWindow.open()"); |
| 1095 DOMWindow* parent = V8Proxy::FastToNativeObject<DOMWindow>( | 1095 DOMWindow* parent = V8Proxy::ToNativeObject<DOMWindow>( |
| 1096 V8ClassIndex::DOMWINDOW, args.Holder()); | 1096 V8ClassIndex::DOMWINDOW, args.Holder()); |
| 1097 Frame* frame = parent->frame(); | 1097 Frame* frame = parent->frame(); |
| 1098 if (!frame) | 1098 if (!frame) |
| 1099 return v8::Undefined(); | 1099 return v8::Undefined(); |
| 1100 | 1100 |
| 1101 // Fast check This argument with the global object of security context. | 1101 // Fast check This argument with the global object of security context. |
| 1102 if ((args.This() != v8::Context::GetCurrentSecurityContext()->Global()) && | 1102 if ((args.This() != v8::Context::GetCurrentSecurityContext()->Global()) && |
| 1103 !V8Proxy::IsFromSameOrigin(frame, true)) { | 1103 !V8Proxy::IsFromSameOrigin(frame, true)) { |
| 1104 return v8::Undefined(); | 1104 return v8::Undefined(); |
| 1105 } | 1105 } |
| (...skipping 231 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1337 v8::Local<v8::Value> result = proxy->Evaluate(prop_name, 0, code, 0); | 1337 v8::Local<v8::Value> result = proxy->Evaluate(prop_name, 0, code, 0); |
| 1338 return result; | 1338 return result; |
| 1339 } | 1339 } |
| 1340 | 1340 |
| 1341 // Search named items in the document. | 1341 // Search named items in the document. |
| 1342 Document* doc = frame->document(); | 1342 Document* doc = frame->document(); |
| 1343 if (doc) { | 1343 if (doc) { |
| 1344 RefPtr<HTMLCollection> items = doc->windowNamedItems(prop_name); | 1344 RefPtr<HTMLCollection> items = doc->windowNamedItems(prop_name); |
| 1345 if (items->length() >= 1) { | 1345 if (items->length() >= 1) { |
| 1346 if (items->length() == 1) { | 1346 if (items->length() == 1) { |
| 1347 return V8Proxy::ToV8Object(V8ClassIndex::NODE, items->firstItem()); | 1347 return V8Proxy::NodeToV8Object(items->firstItem()); |
| 1348 } else { | 1348 } else { |
| 1349 return V8Proxy::ToV8Object(V8ClassIndex::HTMLCOLLECTION, | 1349 return V8Proxy::ToV8Object(V8ClassIndex::HTMLCOLLECTION, |
| 1350 static_cast<Peerable*>(items.get())); | 1350 static_cast<Peerable*>(items.get())); |
| 1351 } | 1351 } |
| 1352 } | 1352 } |
| 1353 } | 1353 } |
| 1354 | 1354 |
| 1355 return v8::Handle<v8::Value>(); | 1355 return v8::Handle<v8::Value>(); |
| 1356 } | 1356 } |
| 1357 | 1357 |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1399 kHTMLDocumentInternalFieldCount); | 1399 kHTMLDocumentInternalFieldCount); |
| 1400 v8::Local<v8::Value> marker = | 1400 v8::Local<v8::Value> marker = |
| 1401 info.Holder()->GetInternalField(kHTMLDocumentMarkerIndex); | 1401 info.Holder()->GetInternalField(kHTMLDocumentMarkerIndex); |
| 1402 v8::Local<v8::Value> value = | 1402 v8::Local<v8::Value> value = |
| 1403 info.Holder()->GetInternalField(kHTMLDocumentShadowIndex); | 1403 info.Holder()->GetInternalField(kHTMLDocumentShadowIndex); |
| 1404 if (marker != value) { | 1404 if (marker != value) { |
| 1405 return value; | 1405 return value; |
| 1406 } | 1406 } |
| 1407 } | 1407 } |
| 1408 | 1408 |
| 1409 HTMLDocument* imp = V8Proxy::FastToNativeObject<HTMLDocument>( | 1409 HTMLDocument* imp = V8Proxy::DOMWrapperToNode<HTMLDocument>(info.Holder()); |
| 1410 V8ClassIndex::HTMLDOCUMENT, info.Holder()); | |
| 1411 | 1410 |
| 1412 // Fast case for named elements that are not there. | 1411 // Fast case for named elements that are not there. |
| 1413 if (!imp->hasNamedItem(key) && !imp->hasDocExtraNamedItem(key)) { | 1412 if (!imp->hasNamedItem(key) && !imp->hasDocExtraNamedItem(key)) { |
| 1414 return v8::Handle<v8::Value>(); | 1413 return v8::Handle<v8::Value>(); |
| 1415 } | 1414 } |
| 1416 | 1415 |
| 1417 | 1416 |
| 1418 RefPtr<HTMLCollection> items = imp->documentNamedItems(key); | 1417 RefPtr<HTMLCollection> items = imp->documentNamedItems(key); |
| 1419 if (items->length() == 0) return v8::Handle<v8::Value>(); | 1418 if (items->length() == 0) return v8::Handle<v8::Value>(); |
| 1420 if (items->length() == 1) { | 1419 if (items->length() == 1) { |
| 1421 Node* node = items->firstItem(); | 1420 Node* node = items->firstItem(); |
| 1422 Frame* frame = 0; | 1421 Frame* frame = 0; |
| 1423 if (node->hasTagName(HTMLNames::iframeTag) && | 1422 if (node->hasTagName(HTMLNames::iframeTag) && |
| 1424 (frame = static_cast<HTMLIFrameElement*>(node)->contentFrame())) { | 1423 (frame = static_cast<HTMLIFrameElement*>(node)->contentFrame())) { |
| 1425 return V8Proxy::ToV8Object(V8ClassIndex::DOMWINDOW, frame->domWindow()); | 1424 return V8Proxy::ToV8Object(V8ClassIndex::DOMWINDOW, frame->domWindow()); |
| 1426 } | 1425 } |
| 1427 return V8Proxy::ToV8Object(V8ClassIndex::NODE, node); | 1426 return V8Proxy::NodeToV8Object(node); |
| 1428 } | 1427 } |
| 1429 return V8Proxy::ToV8Object(V8ClassIndex::HTMLCOLLECTION, | 1428 return V8Proxy::ToV8Object(V8ClassIndex::HTMLCOLLECTION, |
| 1430 static_cast<Peerable*>(items.get())); | 1429 static_cast<Peerable*>(items.get())); |
| 1431 } | 1430 } |
| 1432 | 1431 |
| 1433 | 1432 |
| 1434 NAMED_PROPERTY_GETTER(HTMLFrameSetElement) { | 1433 NAMED_PROPERTY_GETTER(HTMLFrameSetElement) { |
| 1435 INC_STATS(L"DOM.HTMLFrameSetElement.NamedPropertyGetter"); | 1434 INC_STATS(L"DOM.HTMLFrameSetElement.NamedPropertyGetter"); |
| 1436 HTMLFrameSetElement* imp = V8Proxy::FastToNativeObject<HTMLFrameSetElement>( | 1435 HTMLFrameSetElement* imp = |
| 1437 V8ClassIndex::HTMLFRAMESETELEMENT, info.Holder()); | 1436 V8Proxy::DOMWrapperToNode<HTMLFrameSetElement>(info.Holder()); |
| 1438 String key = ToWebCoreString(name); | 1437 String key = ToWebCoreString(name); |
| 1439 Node* frame = imp->children()->namedItem(key); | 1438 Node* frame = imp->children()->namedItem(key); |
| 1440 if (frame && frame->hasTagName(HTMLNames::frameTag)) { | 1439 if (frame && frame->hasTagName(HTMLNames::frameTag)) { |
| 1441 Document* doc = static_cast<HTMLFrameElement*>(frame)->contentDocument(); | 1440 Document* doc = static_cast<HTMLFrameElement*>(frame)->contentDocument(); |
| 1442 if (doc) { | 1441 if (doc) { |
| 1443 Frame* content_frame = doc->frame(); | 1442 Frame* content_frame = doc->frame(); |
| 1444 if (content_frame) { | 1443 if (content_frame) { |
| 1445 return V8Proxy::ToV8Object(V8ClassIndex::DOMWINDOW, | 1444 return V8Proxy::ToV8Object(V8ClassIndex::DOMWINDOW, |
| 1446 content_frame->domWindow()); | 1445 content_frame->domWindow()); |
| 1447 } | 1446 } |
| 1448 } | 1447 } |
| 1449 return v8::Undefined(); | 1448 return v8::Undefined(); |
| 1450 } | 1449 } |
| 1451 return v8::Handle<v8::Value>(); | 1450 return v8::Handle<v8::Value>(); |
| 1452 } | 1451 } |
| 1453 | 1452 |
| 1454 | 1453 |
| 1455 NAMED_PROPERTY_GETTER(HTMLFormElement) { | 1454 NAMED_PROPERTY_GETTER(HTMLFormElement) { |
| 1456 INC_STATS(L"DOM.HTMLFormElement.NamedPropertyGetter"); | 1455 INC_STATS(L"DOM.HTMLFormElement.NamedPropertyGetter"); |
| 1457 HTMLFormElement* imp = V8Proxy::FastToNativeObject<HTMLFormElement>( | 1456 HTMLFormElement* imp = |
| 1458 V8ClassIndex::HTMLFORMELEMENT, info.Holder()); | 1457 V8Proxy::DOMWrapperToNode<HTMLFormElement>(info.Holder()); |
| 1459 String v = ToWebCoreString(name); | 1458 String v = ToWebCoreString(name); |
| 1460 | 1459 |
| 1461 // Call getNamedElements twice, first time check if it has a value | 1460 // Call getNamedElements twice, first time check if it has a value |
| 1462 // and let HTMLFormElement update its cache. | 1461 // and let HTMLFormElement update its cache. |
| 1463 // See issue: 867404 | 1462 // See issue: 867404 |
| 1464 { | 1463 { |
| 1465 Vector<RefPtr<Node> > elements; | 1464 Vector<RefPtr<Node> > elements; |
| 1466 imp->getNamedElements(v, elements); | 1465 imp->getNamedElements(v, elements); |
| 1467 if (elements.size() == 0) | 1466 if (elements.size() == 0) |
| 1468 return v8::Handle<v8::Value>(); | 1467 return v8::Handle<v8::Value>(); |
| 1469 } | 1468 } |
| 1470 // Second call may return different results from the first call, | 1469 // Second call may return different results from the first call, |
| 1471 // but if the first the size cannot be zero. | 1470 // but if the first the size cannot be zero. |
| 1472 Vector<RefPtr<Node> > elements; | 1471 Vector<RefPtr<Node> > elements; |
| 1473 imp->getNamedElements(v, elements); | 1472 imp->getNamedElements(v, elements); |
| 1474 ASSERT(elements.size() != 0); | 1473 ASSERT(elements.size() != 0); |
| 1475 if (elements.size() == 1) { | 1474 if (elements.size() == 1) { |
| 1476 return V8Proxy::ToV8Object(V8ClassIndex::NODE, elements.at(0).get()); | 1475 return V8Proxy::NodeToV8Object(elements.at(0).get()); |
| 1477 } else { | 1476 } else { |
| 1478 NodeList* collection = new V8VectorNodeList(elements); | 1477 NodeList* collection = new V8VectorNodeList(elements); |
| 1479 return V8Proxy::ToV8Object(V8ClassIndex::NODELIST, | 1478 return V8Proxy::ToV8Object(V8ClassIndex::NODELIST, |
| 1480 static_cast<Peerable*>(collection)); | 1479 static_cast<Peerable*>(collection)); |
| 1481 } | 1480 } |
| 1482 } | 1481 } |
| 1483 | 1482 |
| 1484 | 1483 |
| 1485 INDEXED_PROPERTY_GETTER(NamedNodeMap) { | 1484 INDEXED_PROPERTY_GETTER(NamedNodeMap) { |
| 1486 INC_STATS(L"DOM.NamedNodeMap.IndexedPropertyGetter"); | 1485 INC_STATS(L"DOM.NamedNodeMap.IndexedPropertyGetter"); |
| 1487 NamedNodeMap* imp = V8Proxy::FastToNativeObject<NamedNodeMap>( | 1486 NamedNodeMap* imp = V8Proxy::ToNativeObject<NamedNodeMap>( |
| 1488 V8ClassIndex::NAMEDNODEMAP, info.Holder()); | 1487 V8ClassIndex::NAMEDNODEMAP, info.Holder()); |
| 1489 RefPtr<Node> result = imp->item(index); | 1488 RefPtr<Node> result = imp->item(index); |
| 1490 if (!result) return v8::Handle<v8::Value>(); | 1489 if (!result) return v8::Handle<v8::Value>(); |
| 1491 | 1490 |
| 1492 return V8Proxy::ToV8Object(V8ClassIndex::NODE, result.get()); | 1491 return V8Proxy::NodeToV8Object(result.get()); |
| 1493 } | 1492 } |
| 1494 | 1493 |
| 1495 NAMED_PROPERTY_GETTER(NamedNodeMap) { | 1494 NAMED_PROPERTY_GETTER(NamedNodeMap) { |
| 1496 INC_STATS(L"DOM.NamedNodeMap.NamedPropertyGetter"); | 1495 INC_STATS(L"DOM.NamedNodeMap.NamedPropertyGetter"); |
| 1497 // Search the prototype chain first. | 1496 // Search the prototype chain first. |
| 1498 v8::Handle<v8::Value> value = | 1497 v8::Handle<v8::Value> value = |
| 1499 info.Holder()->GetRealNamedPropertyInPrototypeChain(name); | 1498 info.Holder()->GetRealNamedPropertyInPrototypeChain(name); |
| 1500 if (!value.IsEmpty()) | 1499 if (!value.IsEmpty()) |
| 1501 return value; | 1500 return value; |
| 1502 | 1501 |
| 1503 // Then look for IDL defined properties on the object itself. | 1502 // Then look for IDL defined properties on the object itself. |
| 1504 if (info.Holder()->HasRealNamedCallbackProperty(name)) | 1503 if (info.Holder()->HasRealNamedCallbackProperty(name)) |
| 1505 return v8::Handle<v8::Value>(); | 1504 return v8::Handle<v8::Value>(); |
| 1506 | 1505 |
| 1507 // Finally, search the DOM. | 1506 // Finally, search the DOM. |
| 1508 NamedNodeMap* imp = V8Proxy::FastToNativeObject<NamedNodeMap>( | 1507 NamedNodeMap* imp = V8Proxy::ToNativeObject<NamedNodeMap>( |
| 1509 V8ClassIndex::NAMEDNODEMAP, info.Holder()); | 1508 V8ClassIndex::NAMEDNODEMAP, info.Holder()); |
| 1510 String prop_name = ToWebCoreString(name); | 1509 String prop_name = ToWebCoreString(name); |
| 1511 RefPtr<Node> result = imp->getNamedItem(prop_name); | 1510 RefPtr<Node> result = imp->getNamedItem(prop_name); |
| 1512 if (!result) return v8::Handle<v8::Value>(); | 1511 if (!result) return v8::Handle<v8::Value>(); |
| 1513 | 1512 |
| 1514 return V8Proxy::ToV8Object(V8ClassIndex::NODE, result.get()); | 1513 return V8Proxy::NodeToV8Object(result.get()); |
| 1515 } | 1514 } |
| 1516 | 1515 |
| 1517 | 1516 |
| 1518 NAMED_PROPERTY_GETTER(NodeList) { | 1517 NAMED_PROPERTY_GETTER(NodeList) { |
| 1519 INC_STATS(L"DOM.NodeList.NamedPropertyGetter"); | 1518 INC_STATS(L"DOM.NodeList.NamedPropertyGetter"); |
| 1520 NodeList* list = V8Proxy::FastToNativeObject<NodeList>( | 1519 NodeList* list = V8Proxy::ToNativeObject<NodeList>( |
| 1521 V8ClassIndex::NODELIST, info.Holder()); | 1520 V8ClassIndex::NODELIST, info.Holder()); |
| 1522 String prop_name = ToWebCoreString(name); | 1521 String prop_name = ToWebCoreString(name); |
| 1523 | 1522 |
| 1524 // Length property cannot be overridden. | 1523 // Length property cannot be overridden. |
| 1525 if (prop_name == "length") | 1524 if (prop_name == "length") |
| 1526 return v8::Number::New(list->length()); | 1525 return v8::Number::New(list->length()); |
| 1527 | 1526 |
| 1528 RefPtr<Node> result = list->itemWithName(prop_name); | 1527 RefPtr<Node> result = list->itemWithName(prop_name); |
| 1529 if (result) | 1528 if (result) |
| 1530 return V8Proxy::ToV8Object(V8ClassIndex::NODE, result.get()); | 1529 return V8Proxy::NodeToV8Object(result.get()); |
| 1531 | 1530 |
| 1532 return v8::Handle<v8::Value>(); | 1531 return v8::Handle<v8::Value>(); |
| 1533 } | 1532 } |
| 1534 | 1533 |
| 1535 | 1534 |
| 1536 INDEXED_PROPERTY_GETTER(HTMLFormElement) { | 1535 INDEXED_PROPERTY_GETTER(HTMLFormElement) { |
| 1537 INC_STATS(L"DOM.HTMLFormElement.IndexedPropertyGetter"); | 1536 INC_STATS(L"DOM.HTMLFormElement.IndexedPropertyGetter"); |
| 1538 HTMLFormElement* form = V8Proxy::FastToNativeObject<HTMLFormElement>( | 1537 HTMLFormElement* form = |
| 1539 V8ClassIndex::HTMLFORMELEMENT, info.Holder()); | 1538 V8Proxy::DOMWrapperToNode<HTMLFormElement>(info.Holder()); |
| 1540 | 1539 |
| 1541 RefPtr<Node> result = form->elements()->item(index); | 1540 RefPtr<Node> result = form->elements()->item(index); |
| 1542 if (!result) return v8::Handle<v8::Value>(); | 1541 if (!result) return v8::Handle<v8::Value>(); |
| 1543 return V8Proxy::ToV8Object(V8ClassIndex::NODE, result.get()); | 1542 return V8Proxy::NodeToV8Object(result.get()); |
| 1544 } | 1543 } |
| 1545 | 1544 |
| 1546 | 1545 |
| 1547 INDEXED_PROPERTY_GETTER(HTMLOptionsCollection) { | 1546 INDEXED_PROPERTY_GETTER(HTMLOptionsCollection) { |
| 1548 INC_STATS(L"DOM.HTMLOptionsCollection.IndexedPropertyGetter"); | 1547 INC_STATS(L"DOM.HTMLOptionsCollection.IndexedPropertyGetter"); |
| 1549 HTMLOptionsCollection* collection = | 1548 HTMLOptionsCollection* collection = |
| 1550 V8Proxy::FastToNativeObject<HTMLOptionsCollection>( | 1549 V8Proxy::ToNativeObject<HTMLOptionsCollection>( |
| 1551 V8ClassIndex::HTMLOPTIONSCOLLECTION, info.Holder()); | 1550 V8ClassIndex::HTMLOPTIONSCOLLECTION, info.Holder()); |
| 1552 | 1551 |
| 1553 RefPtr<Node> result = collection->item(index); | 1552 RefPtr<Node> result = collection->item(index); |
| 1554 if (!result) return v8::Handle<v8::Value>(); | 1553 if (!result) return v8::Handle<v8::Value>(); |
| 1555 | 1554 |
| 1556 return V8Proxy::ToV8Object(V8ClassIndex::NODE, result.get()); | 1555 return V8Proxy::NodeToV8Object(result.get()); |
| 1557 } | 1556 } |
| 1558 | 1557 |
| 1559 static v8::Handle<v8::Value> OptionsCollectionSetter(uint32_t index, | 1558 static v8::Handle<v8::Value> OptionsCollectionSetter(uint32_t index, |
| 1560 v8::Handle<v8::Value> value, HTMLSelectElement* base) { | 1559 v8::Handle<v8::Value> value, HTMLSelectElement* base) { |
| 1561 if (value->IsNull() || value->IsUndefined()) { | 1560 if (value->IsNull() || value->IsUndefined()) { |
| 1562 base->remove(index); | 1561 base->remove(index); |
| 1563 return value; | 1562 return value; |
| 1564 } | 1563 } |
| 1565 | 1564 |
| 1566 ExceptionCode ec = 0; | 1565 ExceptionCode ec = 0; |
| 1567 | 1566 |
| 1568 // Check that the value is an HTMLOptionElement. If not, throw a | 1567 // Check that the value is an HTMLOptionElement. If not, throw a |
| 1569 // TYPE_MISMATCH_ERR DOMException. | 1568 // TYPE_MISMATCH_ERR DOMException. |
| 1570 if (!V8HTMLOptionElement::HasInstance(value)) { | 1569 if (!V8HTMLOptionElement::HasInstance(value)) { |
| 1571 V8Proxy::SetDOMException(TYPE_MISMATCH_ERR); | 1570 V8Proxy::SetDOMException(TYPE_MISMATCH_ERR); |
| 1572 return value; | 1571 return value; |
| 1573 } | 1572 } |
| 1574 | 1573 |
| 1575 HTMLOptionElement* element = V8Proxy::FastToNativeObject<HTMLOptionElement>( | 1574 HTMLOptionElement* element = |
| 1576 V8ClassIndex::HTMLOPTIONELEMENT, v8::Handle<v8::Object>::Cast(value)); | 1575 V8Proxy::DOMWrapperToNode<HTMLOptionElement>( |
| 1576 v8::Handle<v8::Object>::Cast(value)); |
| 1577 base->setOption(index, element, ec); | 1577 base->setOption(index, element, ec); |
| 1578 | 1578 |
| 1579 V8Proxy::SetDOMException(ec); | 1579 V8Proxy::SetDOMException(ec); |
| 1580 return value; | 1580 return value; |
| 1581 } | 1581 } |
| 1582 | 1582 |
| 1583 | 1583 |
| 1584 INDEXED_PROPERTY_SETTER(HTMLOptionsCollection) { | 1584 INDEXED_PROPERTY_SETTER(HTMLOptionsCollection) { |
| 1585 INC_STATS(L"DOM.HTMLOptionsCollection.IndexedPropertySetter"); | 1585 INC_STATS(L"DOM.HTMLOptionsCollection.IndexedPropertySetter"); |
| 1586 HTMLOptionsCollection* collection = | 1586 HTMLOptionsCollection* collection = |
| 1587 V8Proxy::FastToNativeObject<HTMLOptionsCollection>( | 1587 V8Proxy::ToNativeObject<HTMLOptionsCollection>( |
| 1588 V8ClassIndex::HTMLOPTIONSCOLLECTION, info.Holder()); | 1588 V8ClassIndex::HTMLOPTIONSCOLLECTION, info.Holder()); |
| 1589 HTMLSelectElement* base = static_cast<HTMLSelectElement*>(collection->base()); | 1589 HTMLSelectElement* base = static_cast<HTMLSelectElement*>(collection->base()); |
| 1590 return OptionsCollectionSetter(index, value, base); | 1590 return OptionsCollectionSetter(index, value, base); |
| 1591 } | 1591 } |
| 1592 | 1592 |
| 1593 | 1593 |
| 1594 INDEXED_PROPERTY_SETTER(HTMLSelectElementCollection) { | 1594 INDEXED_PROPERTY_SETTER(HTMLSelectElementCollection) { |
| 1595 INC_STATS(L"DOM.HTMLSelectElementCollection.IndexedPropertySetter"); | 1595 INC_STATS(L"DOM.HTMLSelectElementCollection.IndexedPropertySetter"); |
| 1596 HTMLSelectElement* select = | 1596 HTMLSelectElement* select = |
| 1597 V8Proxy::FastToNativeObject<HTMLSelectElement>( | 1597 V8Proxy::DOMWrapperToNode<HTMLSelectElement>(info.Holder()); |
| 1598 V8ClassIndex::HTMLSELECTELEMENT, info.Holder()); | |
| 1599 return OptionsCollectionSetter(index, value, select); | 1598 return OptionsCollectionSetter(index, value, select); |
| 1600 } | 1599 } |
| 1601 | 1600 |
| 1602 | 1601 |
| 1603 // When getting properties on CSSStyleDeclarations, the name used from | 1602 // When getting properties on CSSStyleDeclarations, the name used from |
| 1604 // Javascript and the actual name of the property are not the same, so | 1603 // Javascript and the actual name of the property are not the same, so |
| 1605 // we have to do the following translation. The translation turns upper | 1604 // we have to do the following translation. The translation turns upper |
| 1606 // case characters into lower case characters and inserts dashes to | 1605 // case characters into lower case characters and inserts dashes to |
| 1607 // separate words. | 1606 // separate words. |
| 1608 // | 1607 // |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1648 | 1647 |
| 1649 NAMED_PROPERTY_GETTER(CSSStyleDeclaration) { | 1648 NAMED_PROPERTY_GETTER(CSSStyleDeclaration) { |
| 1650 INC_STATS(L"DOM.CSSStyleDeclaration.NamedPropertyGetter"); | 1649 INC_STATS(L"DOM.CSSStyleDeclaration.NamedPropertyGetter"); |
| 1651 // First look for API defined attributes on the style declaration | 1650 // First look for API defined attributes on the style declaration |
| 1652 // object. | 1651 // object. |
| 1653 if (info.Holder()->HasRealNamedCallbackProperty(name)) { | 1652 if (info.Holder()->HasRealNamedCallbackProperty(name)) { |
| 1654 return v8::Handle<v8::Value>(); | 1653 return v8::Handle<v8::Value>(); |
| 1655 } | 1654 } |
| 1656 | 1655 |
| 1657 // Search the style declaration. | 1656 // Search the style declaration. |
| 1658 CSSStyleDeclaration* imp = V8Proxy::FastToNativeObject<CSSStyleDeclaration>( | 1657 CSSStyleDeclaration* imp = V8Proxy::ToNativeObject<CSSStyleDeclaration>( |
| 1659 V8ClassIndex::CSSSTYLEDECLARATION, info.Holder()); | 1658 V8ClassIndex::CSSSTYLEDECLARATION, info.Holder()); |
| 1660 | 1659 |
| 1661 bool pixel_or_pos; | 1660 bool pixel_or_pos; |
| 1662 String p = ToWebCoreString(name); | 1661 String p = ToWebCoreString(name); |
| 1663 String prop = CSSPropertyName(p, &pixel_or_pos); | 1662 String prop = CSSPropertyName(p, &pixel_or_pos); |
| 1664 | 1663 |
| 1665 // Do not handle non-property names. | 1664 // Do not handle non-property names. |
| 1666 if (!CSSStyleDeclaration::isPropertyName(prop)) { | 1665 if (!CSSStyleDeclaration::isPropertyName(prop)) { |
| 1667 return v8::Handle<v8::Value>(); | 1666 return v8::Handle<v8::Value>(); |
| 1668 } | 1667 } |
| (...skipping 17 matching lines...) Expand all Loading... |
| 1686 // to avoid confusion with IE's filter extension. | 1685 // to avoid confusion with IE's filter extension. |
| 1687 if (prop == "filter") { | 1686 if (prop == "filter") { |
| 1688 return v8UndetectableString(result); | 1687 return v8UndetectableString(result); |
| 1689 } | 1688 } |
| 1690 return v8String(result); | 1689 return v8String(result); |
| 1691 } | 1690 } |
| 1692 | 1691 |
| 1693 | 1692 |
| 1694 NAMED_PROPERTY_SETTER(CSSStyleDeclaration) { | 1693 NAMED_PROPERTY_SETTER(CSSStyleDeclaration) { |
| 1695 INC_STATS(L"DOM.CSSStyleDeclaration.NamedPropertySetter"); | 1694 INC_STATS(L"DOM.CSSStyleDeclaration.NamedPropertySetter"); |
| 1696 CSSStyleDeclaration* imp = V8Proxy::FastToNativeObject<CSSStyleDeclaration>( | 1695 CSSStyleDeclaration* imp = V8Proxy::ToNativeObject<CSSStyleDeclaration>( |
| 1697 V8ClassIndex::CSSSTYLEDECLARATION, info.Holder()); | 1696 V8ClassIndex::CSSSTYLEDECLARATION, info.Holder()); |
| 1698 String property_name = ToWebCoreString(name); | 1697 String property_name = ToWebCoreString(name); |
| 1699 int ec = 0; | 1698 int ec = 0; |
| 1700 | 1699 |
| 1701 bool pixel_or_pos; | 1700 bool pixel_or_pos; |
| 1702 String prop = CSSPropertyName(property_name, &pixel_or_pos); | 1701 String prop = CSSPropertyName(property_name, &pixel_or_pos); |
| 1703 if (!CSSStyleDeclaration::isPropertyName(prop)) { | 1702 if (!CSSStyleDeclaration::isPropertyName(prop)) { |
| 1704 return v8::Handle<v8::Value>(); // do not block the call | 1703 return v8::Handle<v8::Value>(); // do not block the call |
| 1705 } | 1704 } |
| 1706 | 1705 |
| 1707 String prop_value = valueToStringWithNullCheck(value); | 1706 String prop_value = valueToStringWithNullCheck(value); |
| 1708 if (pixel_or_pos) prop_value += "px"; | 1707 if (pixel_or_pos) prop_value += "px"; |
| 1709 imp->setProperty(prop, prop_value, ec); | 1708 imp->setProperty(prop, prop_value, ec); |
| 1710 | 1709 |
| 1711 V8Proxy::SetDOMException(ec); | 1710 V8Proxy::SetDOMException(ec); |
| 1712 return value; | 1711 return value; |
| 1713 } | 1712 } |
| 1714 | 1713 |
| 1715 | 1714 |
| 1716 NAMED_PROPERTY_GETTER(HTMLPlugInElement) { | 1715 NAMED_PROPERTY_GETTER(HTMLPlugInElement) { |
| 1717 INC_STATS(L"DOM.HTMLPlugInElement.NamedPropertyGetter"); | 1716 INC_STATS(L"DOM.HTMLPlugInElement.NamedPropertyGetter"); |
| 1718 HTMLPlugInElement* imp = V8Proxy::FastToNativeObject<HTMLPlugInElement>( | 1717 HTMLPlugInElement* imp = |
| 1719 V8ClassIndex::NODE, info.Holder()); | 1718 V8Proxy::DOMWrapperToNode<HTMLPlugInElement>(info.Holder()); |
| 1720 v8::Local<v8::Object> instance = | 1719 v8::Local<v8::Object> instance = |
| 1721 v8::Local<v8::Object>::New(imp->getInstance()); | 1720 v8::Local<v8::Object>::New(imp->getInstance()); |
| 1722 if (instance.IsEmpty()) return v8::Handle<v8::Object>(); | 1721 if (instance.IsEmpty()) return v8::Handle<v8::Object>(); |
| 1723 return NPObjectGetNamedProperty(instance, name); | 1722 return NPObjectGetNamedProperty(instance, name); |
| 1724 } | 1723 } |
| 1725 | 1724 |
| 1726 | 1725 |
| 1727 NAMED_PROPERTY_SETTER(HTMLPlugInElement) { | 1726 NAMED_PROPERTY_SETTER(HTMLPlugInElement) { |
| 1728 INC_STATS(L"DOM.HTMLPlugInElement.NamedPropertySetter"); | 1727 INC_STATS(L"DOM.HTMLPlugInElement.NamedPropertySetter"); |
| 1729 HTMLPlugInElement* imp = V8Proxy::FastToNativeObject<HTMLPlugInElement>( | 1728 HTMLPlugInElement* imp = |
| 1730 V8ClassIndex::NODE, info.Holder()); | 1729 V8Proxy::DOMWrapperToNode<HTMLPlugInElement>(info.Holder()); |
| 1731 v8::Local<v8::Object> instance = | 1730 v8::Local<v8::Object> instance = |
| 1732 v8::Local<v8::Object>::New(imp->getInstance()); | 1731 v8::Local<v8::Object>::New(imp->getInstance()); |
| 1733 if (instance.IsEmpty()) { | 1732 if (instance.IsEmpty()) { |
| 1734 return v8::Handle<v8::Value>(); // do not block the call | 1733 return v8::Handle<v8::Value>(); // do not block the call |
| 1735 } | 1734 } |
| 1736 | 1735 |
| 1737 return NPObjectSetNamedProperty(instance, name, value); | 1736 return NPObjectSetNamedProperty(instance, name, value); |
| 1738 } | 1737 } |
| 1739 | 1738 |
| 1740 | 1739 |
| 1741 CALLBACK_FUNC_DECL(HTMLPlugInElement) { | 1740 CALLBACK_FUNC_DECL(HTMLPlugInElement) { |
| 1742 INC_STATS(L"DOM.HTMLPluginElement()"); | 1741 INC_STATS(L"DOM.HTMLPluginElement()"); |
| 1743 return NPObjectInvokeDefaultHandler(args); | 1742 return NPObjectInvokeDefaultHandler(args); |
| 1744 } | 1743 } |
| 1745 | 1744 |
| 1746 | 1745 |
| 1747 INDEXED_PROPERTY_GETTER(HTMLPlugInElement) { | 1746 INDEXED_PROPERTY_GETTER(HTMLPlugInElement) { |
| 1748 INC_STATS(L"DOM.HTMLPlugInElement.IndexedPropertyGetter"); | 1747 INC_STATS(L"DOM.HTMLPlugInElement.IndexedPropertyGetter"); |
| 1749 HTMLPlugInElement* imp = V8Proxy::FastToNativeObject<HTMLPlugInElement>( | 1748 HTMLPlugInElement* imp = |
| 1750 V8ClassIndex::NODE, info.Holder()); | 1749 V8Proxy::DOMWrapperToNode<HTMLPlugInElement>(info.Holder()); |
| 1751 v8::Local<v8::Object> instance = | 1750 v8::Local<v8::Object> instance = |
| 1752 v8::Local<v8::Object>::New(imp->getInstance()); | 1751 v8::Local<v8::Object>::New(imp->getInstance()); |
| 1753 if (instance.IsEmpty()) return v8::Handle<v8::Object>(); | 1752 if (instance.IsEmpty()) return v8::Handle<v8::Object>(); |
| 1754 return NPObjectGetIndexedProperty(instance, index); | 1753 return NPObjectGetIndexedProperty(instance, index); |
| 1755 } | 1754 } |
| 1756 | 1755 |
| 1757 | 1756 |
| 1758 INDEXED_PROPERTY_SETTER(HTMLPlugInElement) { | 1757 INDEXED_PROPERTY_SETTER(HTMLPlugInElement) { |
| 1759 INC_STATS(L"DOM.HTMLPlugInElement.IndexedPropertySetter"); | 1758 INC_STATS(L"DOM.HTMLPlugInElement.IndexedPropertySetter"); |
| 1760 HTMLPlugInElement* imp = V8Proxy::FastToNativeObject<HTMLPlugInElement>( | 1759 HTMLPlugInElement* imp = |
| 1761 V8ClassIndex::NODE, info.Holder()); | 1760 V8Proxy::DOMWrapperToNode<HTMLPlugInElement>(info.Holder()); |
| 1762 v8::Local<v8::Object> instance = | 1761 v8::Local<v8::Object> instance = |
| 1763 v8::Local<v8::Object>::New(imp->getInstance()); | 1762 v8::Local<v8::Object>::New(imp->getInstance()); |
| 1764 if (instance.IsEmpty()) { | 1763 if (instance.IsEmpty()) { |
| 1765 return v8::Handle<v8::Value>(); // do not block the call | 1764 return v8::Handle<v8::Value>(); // do not block the call |
| 1766 } | 1765 } |
| 1767 | 1766 |
| 1768 return NPObjectSetIndexedProperty(instance, index, value); | 1767 return NPObjectSetIndexedProperty(instance, index, value); |
| 1769 } | 1768 } |
| 1770 | 1769 |
| 1771 NAMED_PROPERTY_GETTER(StyleSheetList) { | 1770 NAMED_PROPERTY_GETTER(StyleSheetList) { |
| 1772 INC_STATS(L"DOM.StyleSheetList.NamedPropertyGetter"); | 1771 INC_STATS(L"DOM.StyleSheetList.NamedPropertyGetter"); |
| 1773 // Look for local properties first. | 1772 // Look for local properties first. |
| 1774 if (info.Holder()->HasRealNamedProperty(name)) { | 1773 if (info.Holder()->HasRealNamedProperty(name)) { |
| 1775 return v8::Handle<v8::Value>(); | 1774 return v8::Handle<v8::Value>(); |
| 1776 } | 1775 } |
| 1777 | 1776 |
| 1778 // Search style sheet. | 1777 // Search style sheet. |
| 1779 StyleSheetList* imp = V8Proxy::FastToNativeObject<StyleSheetList>( | 1778 StyleSheetList* imp = V8Proxy::ToNativeObject<StyleSheetList>( |
| 1780 V8ClassIndex::STYLESHEETLIST, info.Holder()); | 1779 V8ClassIndex::STYLESHEETLIST, info.Holder()); |
| 1781 String key = ToWebCoreString(name); | 1780 String key = ToWebCoreString(name); |
| 1782 HTMLStyleElement* item = imp->getNamedItem(key); | 1781 HTMLStyleElement* item = imp->getNamedItem(key); |
| 1783 if (item) { | 1782 if (item) { |
| 1784 return V8Proxy::ToV8Object(V8ClassIndex::HTMLSTYLEELEMENT, item); | 1783 return V8Proxy::ToV8Object(V8ClassIndex::HTMLSTYLEELEMENT, item); |
| 1785 } | 1784 } |
| 1786 return v8::Handle<v8::Value>(); | 1785 return v8::Handle<v8::Value>(); |
| 1787 } | 1786 } |
| 1788 | 1787 |
| 1789 | 1788 |
| 1790 CALLBACK_FUNC_DECL(CSSPrimitiveValueGetRGBColorValue) { | 1789 CALLBACK_FUNC_DECL(CSSPrimitiveValueGetRGBColorValue) { |
| 1791 INC_STATS(L"DOM.CSSPrimitiveValue.getRGBColorValue()"); | 1790 INC_STATS(L"DOM.CSSPrimitiveValue.getRGBColorValue()"); |
| 1792 CSSPrimitiveValue* value = V8Proxy::FastToNativeObject<CSSPrimitiveValue>( | 1791 CSSPrimitiveValue* value = V8Proxy::ToNativeObject<CSSPrimitiveValue>( |
| 1793 V8ClassIndex::CSSPRIMITIVEVALUE, args.Holder()); | 1792 V8ClassIndex::CSSPRIMITIVEVALUE, args.Holder()); |
| 1794 ExceptionCode ec = 0; | 1793 ExceptionCode ec = 0; |
| 1795 unsigned int rgbcolor = value->getRGBColorValue(ec); | 1794 unsigned int rgbcolor = value->getRGBColorValue(ec); |
| 1796 if (ec != 0) { | 1795 if (ec != 0) { |
| 1797 V8Proxy::SetDOMException(ec); | 1796 V8Proxy::SetDOMException(ec); |
| 1798 return v8::Handle<v8::Value>(); | 1797 return v8::Handle<v8::Value>(); |
| 1799 } | 1798 } |
| 1800 return V8Proxy::ToV8Object(V8ClassIndex::RGBCOLOR, | 1799 return V8Proxy::ToV8Object(V8ClassIndex::RGBCOLOR, |
| 1801 static_cast<Peerable*>(new RGBColor(rgbcolor))); | 1800 static_cast<Peerable*>(new RGBColor(rgbcolor))); |
| 1802 } | 1801 } |
| 1803 | 1802 |
| 1804 // Helper macro for converting v8 values into floats (expected by many of the | 1803 // Helper macro for converting v8 values into floats (expected by many of the |
| 1805 // canvas functions). | 1804 // canvas functions). |
| 1806 #define TO_FLOAT(a) static_cast<float>((a)->NumberValue()) | 1805 #define TO_FLOAT(a) static_cast<float>((a)->NumberValue()) |
| 1807 | 1806 |
| 1808 // TODO: SetStrokeColor and SetFillColor are similar except function names, | 1807 // TODO: SetStrokeColor and SetFillColor are similar except function names, |
| 1809 // consolidate them into one. | 1808 // consolidate them into one. |
| 1810 CALLBACK_FUNC_DECL(CanvasRenderingContext2DSetStrokeColor) { | 1809 CALLBACK_FUNC_DECL(CanvasRenderingContext2DSetStrokeColor) { |
| 1811 INC_STATS(L"DOM.CanvasRenderingContext2D.setStrokeColor()"); | 1810 INC_STATS(L"DOM.CanvasRenderingContext2D.setStrokeColor()"); |
| 1812 CanvasRenderingContext2D* context = | 1811 CanvasRenderingContext2D* context = |
| 1813 V8Proxy::FastToNativeObject<CanvasRenderingContext2D>( | 1812 V8Proxy::ToNativeObject<CanvasRenderingContext2D>( |
| 1814 V8ClassIndex::CANVASRENDERINGCONTEXT2D, args.Holder()); | 1813 V8ClassIndex::CANVASRENDERINGCONTEXT2D, args.Holder()); |
| 1815 switch (args.Length()) { | 1814 switch (args.Length()) { |
| 1816 case 1: | 1815 case 1: |
| 1817 if (args[0]->IsString()) { | 1816 if (args[0]->IsString()) { |
| 1818 context->setStrokeColor(ToWebCoreString(args[0])); | 1817 context->setStrokeColor(ToWebCoreString(args[0])); |
| 1819 } else { | 1818 } else { |
| 1820 context->setStrokeColor(TO_FLOAT(args[0])); | 1819 context->setStrokeColor(TO_FLOAT(args[0])); |
| 1821 } | 1820 } |
| 1822 break; | 1821 break; |
| 1823 case 2: | 1822 case 2: |
| (...skipping 23 matching lines...) Expand all Loading... |
| 1847 "setStrokeColor: Invalid number of arguments"); | 1846 "setStrokeColor: Invalid number of arguments"); |
| 1848 break; | 1847 break; |
| 1849 } | 1848 } |
| 1850 return v8::Undefined(); | 1849 return v8::Undefined(); |
| 1851 } | 1850 } |
| 1852 | 1851 |
| 1853 | 1852 |
| 1854 CALLBACK_FUNC_DECL(CanvasRenderingContext2DSetFillColor) { | 1853 CALLBACK_FUNC_DECL(CanvasRenderingContext2DSetFillColor) { |
| 1855 INC_STATS(L"DOM.CanvasRenderingContext2D.steFillColor()"); | 1854 INC_STATS(L"DOM.CanvasRenderingContext2D.steFillColor()"); |
| 1856 CanvasRenderingContext2D* context = | 1855 CanvasRenderingContext2D* context = |
| 1857 V8Proxy::FastToNativeObject<CanvasRenderingContext2D>( | 1856 V8Proxy::ToNativeObject<CanvasRenderingContext2D>( |
| 1858 V8ClassIndex::CANVASRENDERINGCONTEXT2D, args.Holder()); | 1857 V8ClassIndex::CANVASRENDERINGCONTEXT2D, args.Holder()); |
| 1859 switch (args.Length()) { | 1858 switch (args.Length()) { |
| 1860 case 1: | 1859 case 1: |
| 1861 if (args[0]->IsString()) { | 1860 if (args[0]->IsString()) { |
| 1862 context->setFillColor(ToWebCoreString(args[0])); | 1861 context->setFillColor(ToWebCoreString(args[0])); |
| 1863 } else { | 1862 } else { |
| 1864 context->setFillColor(TO_FLOAT(args[0])); | 1863 context->setFillColor(TO_FLOAT(args[0])); |
| 1865 } | 1864 } |
| 1866 break; | 1865 break; |
| 1867 case 2: | 1866 case 2: |
| (...skipping 21 matching lines...) Expand all Loading... |
| 1889 "setFillColor: Invalid number of arguments"); | 1888 "setFillColor: Invalid number of arguments"); |
| 1890 break; | 1889 break; |
| 1891 } | 1890 } |
| 1892 return v8::Undefined(); | 1891 return v8::Undefined(); |
| 1893 } | 1892 } |
| 1894 | 1893 |
| 1895 | 1894 |
| 1896 CALLBACK_FUNC_DECL(CanvasRenderingContext2DStrokeRect) { | 1895 CALLBACK_FUNC_DECL(CanvasRenderingContext2DStrokeRect) { |
| 1897 INC_STATS(L"DOM.CanvasRenderingContext2D.strokeRect()"); | 1896 INC_STATS(L"DOM.CanvasRenderingContext2D.strokeRect()"); |
| 1898 CanvasRenderingContext2D* context = | 1897 CanvasRenderingContext2D* context = |
| 1899 V8Proxy::FastToNativeObject<CanvasRenderingContext2D>( | 1898 V8Proxy::ToNativeObject<CanvasRenderingContext2D>( |
| 1900 V8ClassIndex::CANVASRENDERINGCONTEXT2D, args.Holder()); | 1899 V8ClassIndex::CANVASRENDERINGCONTEXT2D, args.Holder()); |
| 1901 ExceptionCode ec = 0; | 1900 ExceptionCode ec = 0; |
| 1902 double x = 0, y = 0, width = 0, height = 0, line_width = 0; | 1901 double x = 0, y = 0, width = 0, height = 0, line_width = 0; |
| 1903 if (args.Length() == 5) { | 1902 if (args.Length() == 5) { |
| 1904 context->strokeRect(TO_FLOAT(args[0]), | 1903 context->strokeRect(TO_FLOAT(args[0]), |
| 1905 TO_FLOAT(args[1]), | 1904 TO_FLOAT(args[1]), |
| 1906 TO_FLOAT(args[2]), | 1905 TO_FLOAT(args[2]), |
| 1907 TO_FLOAT(args[3]), | 1906 TO_FLOAT(args[3]), |
| 1908 TO_FLOAT(args[4]), | 1907 TO_FLOAT(args[4]), |
| 1909 ec); | 1908 ec); |
| (...skipping 11 matching lines...) Expand all Loading... |
| 1921 V8Proxy::SetDOMException(ec); | 1920 V8Proxy::SetDOMException(ec); |
| 1922 return v8::Handle<v8::Value>(); | 1921 return v8::Handle<v8::Value>(); |
| 1923 } | 1922 } |
| 1924 return v8::Undefined(); | 1923 return v8::Undefined(); |
| 1925 } | 1924 } |
| 1926 | 1925 |
| 1927 | 1926 |
| 1928 CALLBACK_FUNC_DECL(CanvasRenderingContext2DSetShadow) { | 1927 CALLBACK_FUNC_DECL(CanvasRenderingContext2DSetShadow) { |
| 1929 INC_STATS(L"DOM.CanvasRenderingContext2D.setShadow()"); | 1928 INC_STATS(L"DOM.CanvasRenderingContext2D.setShadow()"); |
| 1930 CanvasRenderingContext2D* context = | 1929 CanvasRenderingContext2D* context = |
| 1931 V8Proxy::FastToNativeObject<CanvasRenderingContext2D>( | 1930 V8Proxy::ToNativeObject<CanvasRenderingContext2D>( |
| 1932 V8ClassIndex::CANVASRENDERINGCONTEXT2D, args.Holder()); | 1931 V8ClassIndex::CANVASRENDERINGCONTEXT2D, args.Holder()); |
| 1933 | 1932 |
| 1934 switch (args.Length()) { | 1933 switch (args.Length()) { |
| 1935 case 3: | 1934 case 3: |
| 1936 context->setShadow(TO_FLOAT(args[0]), TO_FLOAT(args[1]), | 1935 context->setShadow(TO_FLOAT(args[0]), TO_FLOAT(args[1]), |
| 1937 TO_FLOAT(args[2])); | 1936 TO_FLOAT(args[2])); |
| 1938 break; | 1937 break; |
| 1939 case 4: | 1938 case 4: |
| 1940 if (args[3]->IsString()) | 1939 if (args[3]->IsString()) |
| 1941 context->setShadow(TO_FLOAT(args[0]), TO_FLOAT(args[1]), | 1940 context->setShadow(TO_FLOAT(args[0]), TO_FLOAT(args[1]), |
| (...skipping 30 matching lines...) Expand all Loading... |
| 1972 break; | 1971 break; |
| 1973 } | 1972 } |
| 1974 | 1973 |
| 1975 return v8::Undefined(); | 1974 return v8::Undefined(); |
| 1976 } | 1975 } |
| 1977 | 1976 |
| 1978 | 1977 |
| 1979 CALLBACK_FUNC_DECL(CanvasRenderingContext2DDrawImage) { | 1978 CALLBACK_FUNC_DECL(CanvasRenderingContext2DDrawImage) { |
| 1980 INC_STATS(L"DOM.CanvasRenderingContext2D.drawImage()"); | 1979 INC_STATS(L"DOM.CanvasRenderingContext2D.drawImage()"); |
| 1981 CanvasRenderingContext2D* context = | 1980 CanvasRenderingContext2D* context = |
| 1982 V8Proxy::FastToNativeObject<CanvasRenderingContext2D>( | 1981 V8Proxy::ToNativeObject<CanvasRenderingContext2D>( |
| 1983 V8ClassIndex::CANVASRENDERINGCONTEXT2D, args.Holder()); | 1982 V8ClassIndex::CANVASRENDERINGCONTEXT2D, args.Holder()); |
| 1984 | 1983 |
| 1985 v8::Handle<v8::Value> arg = args[0]; | 1984 v8::Handle<v8::Value> arg = args[0]; |
| 1986 | 1985 |
| 1987 if (V8HTMLImageElement::HasInstance(arg)) { | 1986 if (V8HTMLImageElement::HasInstance(arg)) { |
| 1988 ExceptionCode ec = 0; | 1987 ExceptionCode ec = 0; |
| 1989 HTMLImageElement* image_element = | 1988 HTMLImageElement* image_element = |
| 1990 V8Proxy::FastToNativeObject<HTMLImageElement>( | 1989 V8Proxy::DOMWrapperToNode<HTMLImageElement>(arg); |
| 1991 V8ClassIndex::HTMLIMAGEELEMENT, arg); | |
| 1992 switch (args.Length()) { | 1990 switch (args.Length()) { |
| 1993 case 3: | 1991 case 3: |
| 1994 context->drawImage(image_element, TO_FLOAT(args[1]), TO_FLOAT(args[2])); | 1992 context->drawImage(image_element, TO_FLOAT(args[1]), TO_FLOAT(args[2])); |
| 1995 break; | 1993 break; |
| 1996 case 5: | 1994 case 5: |
| 1997 context->drawImage(image_element, TO_FLOAT(args[1]), TO_FLOAT(args[2]), | 1995 context->drawImage(image_element, TO_FLOAT(args[1]), TO_FLOAT(args[2]), |
| 1998 TO_FLOAT(args[3]), TO_FLOAT(args[4]), ec); | 1996 TO_FLOAT(args[3]), TO_FLOAT(args[4]), ec); |
| 1999 if (ec != 0) { | 1997 if (ec != 0) { |
| 2000 V8Proxy::SetDOMException(ec); | 1998 V8Proxy::SetDOMException(ec); |
| 2001 return v8::Handle<v8::Value>(); | 1999 return v8::Handle<v8::Value>(); |
| (...skipping 16 matching lines...) Expand all Loading... |
| 2018 "drawImage: Invalid number of arguments"); | 2016 "drawImage: Invalid number of arguments"); |
| 2019 return v8::Undefined(); | 2017 return v8::Undefined(); |
| 2020 } | 2018 } |
| 2021 return v8::Undefined(); | 2019 return v8::Undefined(); |
| 2022 } | 2020 } |
| 2023 | 2021 |
| 2024 // HTMLCanvasElement | 2022 // HTMLCanvasElement |
| 2025 if (V8HTMLCanvasElement::HasInstance(arg)) { | 2023 if (V8HTMLCanvasElement::HasInstance(arg)) { |
| 2026 ExceptionCode ec = 0; | 2024 ExceptionCode ec = 0; |
| 2027 HTMLCanvasElement* canvas_element = | 2025 HTMLCanvasElement* canvas_element = |
| 2028 V8Proxy::FastToNativeObject<HTMLCanvasElement>( | 2026 V8Proxy::DOMWrapperToNode<HTMLCanvasElement>(arg); |
| 2029 V8ClassIndex::HTMLCANVASELEMENT, arg); | |
| 2030 switch (args.Length()) { | 2027 switch (args.Length()) { |
| 2031 case 3: | 2028 case 3: |
| 2032 context->drawImage(canvas_element, TO_FLOAT(args[1]), TO_FLOAT(args[2])); | 2029 context->drawImage(canvas_element, TO_FLOAT(args[1]), TO_FLOAT(args[2])); |
| 2033 break; | 2030 break; |
| 2034 case 5: | 2031 case 5: |
| 2035 context->drawImage(canvas_element, TO_FLOAT(args[1]), TO_FLOAT(args[2]), | 2032 context->drawImage(canvas_element, TO_FLOAT(args[1]), TO_FLOAT(args[2]), |
| 2036 TO_FLOAT(args[3]), TO_FLOAT(args[4]), ec); | 2033 TO_FLOAT(args[3]), TO_FLOAT(args[4]), ec); |
| 2037 if (ec != 0) { | 2034 if (ec != 0) { |
| 2038 V8Proxy::SetDOMException(ec); | 2035 V8Proxy::SetDOMException(ec); |
| 2039 return v8::Handle<v8::Value>(); | 2036 return v8::Handle<v8::Value>(); |
| (...skipping 20 matching lines...) Expand all Loading... |
| 2060 } | 2057 } |
| 2061 | 2058 |
| 2062 V8Proxy::SetDOMException(TYPE_MISMATCH_ERR); | 2059 V8Proxy::SetDOMException(TYPE_MISMATCH_ERR); |
| 2063 return v8::Handle<v8::Value>(); | 2060 return v8::Handle<v8::Value>(); |
| 2064 } | 2061 } |
| 2065 | 2062 |
| 2066 | 2063 |
| 2067 CALLBACK_FUNC_DECL(CanvasRenderingContext2DDrawImageFromRect) { | 2064 CALLBACK_FUNC_DECL(CanvasRenderingContext2DDrawImageFromRect) { |
| 2068 INC_STATS(L"DOM.CanvasRenderingContext2D.drawImageFromRect()"); | 2065 INC_STATS(L"DOM.CanvasRenderingContext2D.drawImageFromRect()"); |
| 2069 CanvasRenderingContext2D* context = | 2066 CanvasRenderingContext2D* context = |
| 2070 V8Proxy::FastToNativeObject<CanvasRenderingContext2D>( | 2067 V8Proxy::ToNativeObject<CanvasRenderingContext2D>( |
| 2071 V8ClassIndex::CANVASRENDERINGCONTEXT2D, args.Holder()); | 2068 V8ClassIndex::CANVASRENDERINGCONTEXT2D, args.Holder()); |
| 2072 | 2069 |
| 2073 v8::Handle<v8::Value> arg = args[0]; | 2070 v8::Handle<v8::Value> arg = args[0]; |
| 2074 | 2071 |
| 2075 if (!V8Proxy::MaybeDOMWrapper(arg)) { | |
| 2076 V8Proxy::ThrowError(V8Proxy::TYPE_ERROR, | |
| 2077 "drawImageFromRect: Invalid type of arguments"); | |
| 2078 return v8::Undefined(); | |
| 2079 } | |
| 2080 | |
| 2081 if (V8HTMLImageElement::HasInstance(arg)) { | 2072 if (V8HTMLImageElement::HasInstance(arg)) { |
| 2082 HTMLImageElement* image_element = | 2073 HTMLImageElement* image_element = |
| 2083 V8Proxy::FastToNativeObject<HTMLImageElement>( | 2074 V8Proxy::DOMWrapperToNode<HTMLImageElement>(arg); |
| 2084 V8ClassIndex::HTMLIMAGEELEMENT, arg); | |
| 2085 context->drawImageFromRect(image_element, | 2075 context->drawImageFromRect(image_element, |
| 2086 TO_FLOAT(args[1]), TO_FLOAT(args[2]), | 2076 TO_FLOAT(args[1]), TO_FLOAT(args[2]), |
| 2087 TO_FLOAT(args[3]), TO_FLOAT(args[4]), | 2077 TO_FLOAT(args[3]), TO_FLOAT(args[4]), |
| 2088 TO_FLOAT(args[5]), TO_FLOAT(args[6]), | 2078 TO_FLOAT(args[5]), TO_FLOAT(args[6]), |
| 2089 TO_FLOAT(args[7]), TO_FLOAT(args[8]), | 2079 TO_FLOAT(args[7]), TO_FLOAT(args[8]), |
| 2090 ToWebCoreString(args[9])); | 2080 ToWebCoreString(args[9])); |
| 2091 } else { | 2081 } else { |
| 2092 V8Proxy::ThrowError(V8Proxy::TYPE_ERROR, | 2082 V8Proxy::ThrowError(V8Proxy::TYPE_ERROR, |
| 2093 "drawImageFromRect: Invalid type of arguments"); | 2083 "drawImageFromRect: Invalid type of arguments"); |
| 2094 } | 2084 } |
| 2095 | 2085 |
| 2096 return v8::Undefined(); | 2086 return v8::Undefined(); |
| 2097 } | 2087 } |
| 2098 | 2088 |
| 2099 // Remove the macro since we don't need it anymore. | 2089 // Remove the macro since we don't need it anymore. |
| 2100 #undef TO_FLOAT | 2090 #undef TO_FLOAT |
| 2101 | 2091 |
| 2102 CALLBACK_FUNC_DECL(CanvasRenderingContext2DCreatePattern) { | 2092 CALLBACK_FUNC_DECL(CanvasRenderingContext2DCreatePattern) { |
| 2103 INC_STATS(L"DOM.CanvasRenderingContext2D.createPattern()"); | 2093 INC_STATS(L"DOM.CanvasRenderingContext2D.createPattern()"); |
| 2104 CanvasRenderingContext2D* context = | 2094 CanvasRenderingContext2D* context = |
| 2105 V8Proxy::FastToNativeObject<CanvasRenderingContext2D>( | 2095 V8Proxy::ToNativeObject<CanvasRenderingContext2D>( |
| 2106 V8ClassIndex::CANVASRENDERINGCONTEXT2D, args.Holder()); | 2096 V8ClassIndex::CANVASRENDERINGCONTEXT2D, args.Holder()); |
| 2107 | 2097 |
| 2108 v8::Handle<v8::Value> arg = args[0]; | 2098 v8::Handle<v8::Value> arg = args[0]; |
| 2109 | 2099 |
| 2110 if (V8HTMLImageElement::HasInstance(arg)) { | 2100 if (V8HTMLImageElement::HasInstance(arg)) { |
| 2111 HTMLImageElement* image_element = | 2101 HTMLImageElement* image_element = |
| 2112 V8Proxy::FastToNativeObject<HTMLImageElement>( | 2102 V8Proxy::DOMWrapperToNode<HTMLImageElement>(arg); |
| 2113 V8ClassIndex::HTMLIMAGEELEMENT, arg); | |
| 2114 ExceptionCode ec = 0; | 2103 ExceptionCode ec = 0; |
| 2115 RefPtr<CanvasPattern> pattern = | 2104 RefPtr<CanvasPattern> pattern = |
| 2116 context->createPattern(image_element, ToWebCoreString(args[1]), ec); | 2105 context->createPattern(image_element, ToWebCoreString(args[1]), ec); |
| 2117 if (ec != 0) { | 2106 if (ec != 0) { |
| 2118 V8Proxy::SetDOMException(ec); | 2107 V8Proxy::SetDOMException(ec); |
| 2119 return v8::Handle<v8::Value>(); | 2108 return v8::Handle<v8::Value>(); |
| 2120 } | 2109 } |
| 2121 return V8Proxy::ToV8Object(V8ClassIndex::CANVASPATTERN, | 2110 return V8Proxy::ToV8Object(V8ClassIndex::CANVASPATTERN, |
| 2122 static_cast<Peerable*>(pattern.get())); | 2111 static_cast<Peerable*>(pattern.get())); |
| 2123 } | 2112 } |
| 2124 | 2113 |
| 2125 if (V8HTMLCanvasElement::HasInstance(arg)) { | 2114 if (V8HTMLCanvasElement::HasInstance(arg)) { |
| 2126 HTMLCanvasElement* canvas_element = | 2115 HTMLCanvasElement* canvas_element = |
| 2127 V8Proxy::FastToNativeObject<HTMLCanvasElement>( | 2116 V8Proxy::DOMWrapperToNode<HTMLCanvasElement>(arg); |
| 2128 V8ClassIndex::HTMLCANVASELEMENT, arg); | |
| 2129 ExceptionCode ec = 0; | 2117 ExceptionCode ec = 0; |
| 2130 RefPtr<CanvasPattern> pattern = | 2118 RefPtr<CanvasPattern> pattern = |
| 2131 context->createPattern(canvas_element, ToWebCoreString(args[1]), ec); | 2119 context->createPattern(canvas_element, ToWebCoreString(args[1]), ec); |
| 2132 if (ec != 0) { | 2120 if (ec != 0) { |
| 2133 V8Proxy::SetDOMException(ec); | 2121 V8Proxy::SetDOMException(ec); |
| 2134 return v8::Handle<v8::Value>(); | 2122 return v8::Handle<v8::Value>(); |
| 2135 } | 2123 } |
| 2136 return V8Proxy::ToV8Object(V8ClassIndex::CANVASPATTERN, | 2124 return V8Proxy::ToV8Object(V8ClassIndex::CANVASPATTERN, |
| 2137 static_cast<Peerable*>(pattern.get())); | 2125 static_cast<Peerable*>(pattern.get())); |
| 2138 } | 2126 } |
| 2139 | 2127 |
| 2140 V8Proxy::SetDOMException(TYPE_MISMATCH_ERR); | 2128 V8Proxy::SetDOMException(TYPE_MISMATCH_ERR); |
| 2141 return v8::Handle<v8::Value>(); | 2129 return v8::Handle<v8::Value>(); |
| 2142 } | 2130 } |
| 2143 | 2131 |
| 2144 | 2132 |
| 2145 CALLBACK_FUNC_DECL(ClipboardClearData) { | 2133 CALLBACK_FUNC_DECL(ClipboardClearData) { |
| 2146 INC_STATS(L"DOM.Clipboard.clearData()"); | 2134 INC_STATS(L"DOM.Clipboard.clearData()"); |
| 2147 Clipboard* imp = V8Proxy::FastToNativeObject<Clipboard>( | 2135 Clipboard* imp = V8Proxy::ToNativeObject<Clipboard>( |
| 2148 V8ClassIndex::CLIPBOARD, args.Holder()); | 2136 V8ClassIndex::CLIPBOARD, args.Holder()); |
| 2149 if (args.Length() == 0) { | 2137 if (args.Length() == 0) { |
| 2150 imp->clearAllData(); | 2138 imp->clearAllData(); |
| 2151 } else { | 2139 } else { |
| 2152 String v = ToWebCoreString(args[0]); | 2140 String v = ToWebCoreString(args[0]); |
| 2153 imp->clearData(v); | 2141 imp->clearData(v); |
| 2154 } | 2142 } |
| 2155 return v8::Undefined(); | 2143 return v8::Undefined(); |
| 2156 } | 2144 } |
| 2157 | 2145 |
| 2158 | 2146 |
| 2159 CALLBACK_FUNC_DECL(ClipboardGetData) { | 2147 CALLBACK_FUNC_DECL(ClipboardGetData) { |
| 2160 INC_STATS(L"DOM.Clipboard.getData()"); | 2148 INC_STATS(L"DOM.Clipboard.getData()"); |
| 2161 Clipboard* imp = V8Proxy::FastToNativeObject<Clipboard>( | 2149 Clipboard* imp = V8Proxy::ToNativeObject<Clipboard>( |
| 2162 V8ClassIndex::CLIPBOARD, args.Holder()); | 2150 V8ClassIndex::CLIPBOARD, args.Holder()); |
| 2163 if (args.Length() == 1) { | 2151 if (args.Length() == 1) { |
| 2164 bool success; | 2152 bool success; |
| 2165 String v = ToWebCoreString(args[0]); | 2153 String v = ToWebCoreString(args[0]); |
| 2166 String result = imp->getData(v, success); | 2154 String result = imp->getData(v, success); |
| 2167 if (success) return v8String(result); | 2155 if (success) return v8String(result); |
| 2168 return v8::Undefined(); | 2156 return v8::Undefined(); |
| 2169 } | 2157 } |
| 2170 | 2158 |
| 2171 V8Proxy::ThrowError(V8Proxy::SYNTAX_ERROR, | 2159 V8Proxy::ThrowError(V8Proxy::SYNTAX_ERROR, |
| 2172 "getData: Invalid number of arguments"); | 2160 "getData: Invalid number of arguments"); |
| 2173 | 2161 |
| 2174 return v8::Undefined(); | 2162 return v8::Undefined(); |
| 2175 } | 2163 } |
| 2176 | 2164 |
| 2177 CALLBACK_FUNC_DECL(ClipboardSetData) { | 2165 CALLBACK_FUNC_DECL(ClipboardSetData) { |
| 2178 INC_STATS(L"DOM.Clipboard.setData()"); | 2166 INC_STATS(L"DOM.Clipboard.setData()"); |
| 2179 Clipboard* imp = V8Proxy::FastToNativeObject<Clipboard>( | 2167 Clipboard* imp = V8Proxy::ToNativeObject<Clipboard>( |
| 2180 V8ClassIndex::CLIPBOARD, args.Holder()); | 2168 V8ClassIndex::CLIPBOARD, args.Holder()); |
| 2181 if (args.Length() == 2) { | 2169 if (args.Length() == 2) { |
| 2182 String type = ToWebCoreString(args[0]); | 2170 String type = ToWebCoreString(args[0]); |
| 2183 String data = ToWebCoreString(args[1]); | 2171 String data = ToWebCoreString(args[1]); |
| 2184 bool result = imp->setData(type, data); | 2172 bool result = imp->setData(type, data); |
| 2185 return result?v8::True():v8::False(); | 2173 return result?v8::True():v8::False(); |
| 2186 } | 2174 } |
| 2187 | 2175 |
| 2188 V8Proxy::ThrowError(V8Proxy::SYNTAX_ERROR, | 2176 V8Proxy::ThrowError(V8Proxy::SYNTAX_ERROR, |
| 2189 "setData: Invalid number of arguments"); | 2177 "setData: Invalid number of arguments"); |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2222 Node* contentDoc = frame->contentDocument(); | 2210 Node* contentDoc = frame->contentDocument(); |
| 2223 if (contentDoc && !V8Proxy::CheckNodeSecurity(contentDoc)) | 2211 if (contentDoc && !V8Proxy::CheckNodeSecurity(contentDoc)) |
| 2224 return false; | 2212 return false; |
| 2225 } | 2213 } |
| 2226 return true; | 2214 return true; |
| 2227 } | 2215 } |
| 2228 | 2216 |
| 2229 | 2217 |
| 2230 CALLBACK_FUNC_DECL(ElementSetAttribute) { | 2218 CALLBACK_FUNC_DECL(ElementSetAttribute) { |
| 2231 INC_STATS(L"DOM.Element.setAttribute()"); | 2219 INC_STATS(L"DOM.Element.setAttribute()"); |
| 2232 Element* imp = V8Proxy::FastToNativeObject<Element>( | 2220 Element* imp = V8Proxy::DOMWrapperToNode<Element>(args.Holder()); |
| 2233 V8ClassIndex::ELEMENT, args.Holder()); | |
| 2234 ExceptionCode ec = 0; | 2221 ExceptionCode ec = 0; |
| 2235 String name = ToWebCoreString(args[0]); | 2222 String name = ToWebCoreString(args[0]); |
| 2236 String value = ToWebCoreString(args[1]); | 2223 String value = ToWebCoreString(args[1]); |
| 2237 | 2224 |
| 2238 if (!AllowSettingSrcToJavascriptURL(imp, name, value)) { | 2225 if (!AllowSettingSrcToJavascriptURL(imp, name, value)) { |
| 2239 return v8::Undefined(); | 2226 return v8::Undefined(); |
| 2240 } | 2227 } |
| 2241 | 2228 |
| 2242 imp->setAttribute(name, value, ec); | 2229 imp->setAttribute(name, value, ec); |
| 2243 if (ec != 0) { | 2230 if (ec != 0) { |
| 2244 V8Proxy::SetDOMException(ec); | 2231 V8Proxy::SetDOMException(ec); |
| 2245 return v8::Handle<v8::Value>(); | 2232 return v8::Handle<v8::Value>(); |
| 2246 } | 2233 } |
| 2247 return v8::Undefined(); | 2234 return v8::Undefined(); |
| 2248 } | 2235 } |
| 2249 | 2236 |
| 2250 | 2237 |
| 2251 CALLBACK_FUNC_DECL(ElementSetAttributeNode) { | 2238 CALLBACK_FUNC_DECL(ElementSetAttributeNode) { |
| 2252 INC_STATS(L"DOM.Element.setAttributeNode()"); | 2239 INC_STATS(L"DOM.Element.setAttributeNode()"); |
| 2253 if (!V8Attr::HasInstance(args[0])) { | 2240 if (!V8Attr::HasInstance(args[0])) { |
| 2254 V8Proxy::SetDOMException(TYPE_MISMATCH_ERR); | 2241 V8Proxy::SetDOMException(TYPE_MISMATCH_ERR); |
| 2255 return v8::Handle<v8::Value>(); | 2242 return v8::Handle<v8::Value>(); |
| 2256 } | 2243 } |
| 2257 | 2244 |
| 2258 Attr* newAttr = | 2245 Attr* newAttr = V8Proxy::DOMWrapperToNode<Attr>(args[0]); |
| 2259 V8Proxy::FastToNativeObject<Attr>(V8ClassIndex::ATTR, args[0]); | 2246 Element* imp = V8Proxy::DOMWrapperToNode<Element>(args.Holder()); |
| 2260 | |
| 2261 ExceptionCode ec = 0; | 2247 ExceptionCode ec = 0; |
| 2262 Element* imp = V8Proxy::FastToNativeObject<Element>( | |
| 2263 V8ClassIndex::ELEMENT, args.Holder()); | |
| 2264 | 2248 |
| 2265 if (!AllowSettingSrcToJavascriptURL(imp, newAttr->name(), newAttr->value())) { | 2249 if (!AllowSettingSrcToJavascriptURL(imp, newAttr->name(), newAttr->value())) { |
| 2266 return v8::Undefined(); | 2250 return v8::Undefined(); |
| 2267 } | 2251 } |
| 2268 | 2252 |
| 2269 RefPtr<Attr> result = imp->setAttributeNode(newAttr, ec); | 2253 RefPtr<Attr> result = imp->setAttributeNode(newAttr, ec); |
| 2270 if (ec != 0) { | 2254 if (ec != 0) { |
| 2271 V8Proxy::SetDOMException(ec); | 2255 V8Proxy::SetDOMException(ec); |
| 2272 return v8::Handle<v8::Value>(); | 2256 return v8::Handle<v8::Value>(); |
| 2273 } | 2257 } |
| 2274 return V8Proxy::ToV8Object(V8ClassIndex::NODE, result.get()); | 2258 return V8Proxy::NodeToV8Object(result.get()); |
| 2275 } | 2259 } |
| 2276 | 2260 |
| 2277 | 2261 |
| 2278 CALLBACK_FUNC_DECL(ElementSetAttributeNS) { | 2262 CALLBACK_FUNC_DECL(ElementSetAttributeNS) { |
| 2279 INC_STATS(L"DOM.Element.setAttributeNS()"); | 2263 INC_STATS(L"DOM.Element.setAttributeNS()"); |
| 2280 Element* imp = V8Proxy::FastToNativeObject<Element>( | 2264 Element* imp = V8Proxy::DOMWrapperToNode<Element>(args.Holder()); |
| 2281 V8ClassIndex::ELEMENT, args.Holder()); | |
| 2282 ExceptionCode ec = 0; | 2265 ExceptionCode ec = 0; |
| 2283 String namespaceURI = valueToStringWithNullCheck(args[0]); | 2266 String namespaceURI = valueToStringWithNullCheck(args[0]); |
| 2284 String qualifiedName = ToWebCoreString(args[1]); | 2267 String qualifiedName = ToWebCoreString(args[1]); |
| 2285 String value = ToWebCoreString(args[2]); | 2268 String value = ToWebCoreString(args[2]); |
| 2286 | 2269 |
| 2287 if (!AllowSettingSrcToJavascriptURL(imp, qualifiedName, value)) { | 2270 if (!AllowSettingSrcToJavascriptURL(imp, qualifiedName, value)) { |
| 2288 return v8::Undefined(); | 2271 return v8::Undefined(); |
| 2289 } | 2272 } |
| 2290 | 2273 |
| 2291 imp->setAttributeNS(namespaceURI, qualifiedName, value, ec); | 2274 imp->setAttributeNS(namespaceURI, qualifiedName, value, ec); |
| 2292 if (ec != 0) { | 2275 if (ec != 0) { |
| 2293 V8Proxy::SetDOMException(ec); | 2276 V8Proxy::SetDOMException(ec); |
| 2294 return v8::Handle<v8::Value>(); | 2277 return v8::Handle<v8::Value>(); |
| 2295 } | 2278 } |
| 2296 return v8::Undefined(); | 2279 return v8::Undefined(); |
| 2297 } | 2280 } |
| 2298 | 2281 |
| 2299 | 2282 |
| 2300 CALLBACK_FUNC_DECL(ElementSetAttributeNodeNS) { | 2283 CALLBACK_FUNC_DECL(ElementSetAttributeNodeNS) { |
| 2301 INC_STATS(L"DOM.Element.setAttributeNodeNS()"); | 2284 INC_STATS(L"DOM.Element.setAttributeNodeNS()"); |
| 2302 if (!V8Attr::HasInstance(args[0])) { | 2285 if (!V8Attr::HasInstance(args[0])) { |
| 2303 V8Proxy::SetDOMException(TYPE_MISMATCH_ERR); | 2286 V8Proxy::SetDOMException(TYPE_MISMATCH_ERR); |
| 2304 return v8::Handle<v8::Value>(); | 2287 return v8::Handle<v8::Value>(); |
| 2305 } | 2288 } |
| 2306 | 2289 |
| 2307 Attr* newAttr = | 2290 Attr* newAttr = V8Proxy::DOMWrapperToNode<Attr>(args[0]); |
| 2308 V8Proxy::FastToNativeObject<Attr>(V8ClassIndex::ATTR, args[0]); | 2291 Element* imp = V8Proxy::DOMWrapperToNode<Element>(args.Holder()); |
| 2309 | |
| 2310 Element* imp = V8Proxy::FastToNativeObject<Element>( | |
| 2311 V8ClassIndex::ELEMENT, args.Holder()); | |
| 2312 ExceptionCode ec = 0; | 2292 ExceptionCode ec = 0; |
| 2313 | 2293 |
| 2314 if (!AllowSettingSrcToJavascriptURL(imp, newAttr->name(), newAttr->value())) { | 2294 if (!AllowSettingSrcToJavascriptURL(imp, newAttr->name(), newAttr->value())) { |
| 2315 return v8::Undefined(); | 2295 return v8::Undefined(); |
| 2316 } | 2296 } |
| 2317 | 2297 |
| 2318 RefPtr<Attr> result = imp->setAttributeNodeNS(newAttr, ec); | 2298 RefPtr<Attr> result = imp->setAttributeNodeNS(newAttr, ec); |
| 2319 if (ec != 0) { | 2299 if (ec != 0) { |
| 2320 V8Proxy::SetDOMException(ec); | 2300 V8Proxy::SetDOMException(ec); |
| 2321 return v8::Handle<v8::Value>(); | 2301 return v8::Handle<v8::Value>(); |
| 2322 } | 2302 } |
| 2323 return V8Proxy::ToV8Object(V8ClassIndex::NODE, result.get()); | 2303 return V8Proxy::NodeToV8Object(result.get()); |
| 2324 } | 2304 } |
| 2325 | 2305 |
| 2326 | 2306 |
| 2327 ACCESSOR_SETTER(AttrValue) { | 2307 ACCESSOR_SETTER(AttrValue) { |
| 2328 Attr* imp = | 2308 Attr* imp = |
| 2329 V8Proxy::FastToNativeObject<Attr>(V8ClassIndex::ATTR, info.Holder()); | 2309 V8Proxy::DOMWrapperToNode<Attr>(info.Holder()); |
| 2330 String v = valueToStringWithNullCheck(value); | 2310 String v = valueToStringWithNullCheck(value); |
| 2331 Element* ownerElement = imp->ownerElement(); | 2311 Element* ownerElement = imp->ownerElement(); |
| 2332 | 2312 |
| 2333 if (ownerElement && | 2313 if (ownerElement && |
| 2334 !AllowSettingSrcToJavascriptURL(ownerElement, imp->name(), v)) | 2314 !AllowSettingSrcToJavascriptURL(ownerElement, imp->name(), v)) |
| 2335 return; | 2315 return; |
| 2336 | 2316 |
| 2337 ExceptionCode ec = 0; | 2317 ExceptionCode ec = 0; |
| 2338 imp->setValue(v, ec); | 2318 imp->setValue(v, ec); |
| 2339 V8Proxy::SetDOMException(ec); | 2319 V8Proxy::SetDOMException(ec); |
| 2340 } | 2320 } |
| 2341 | 2321 |
| 2342 | 2322 |
| 2343 ACCESSOR_SETTER(HTMLFrameElementSrc) { | 2323 ACCESSOR_SETTER(HTMLFrameElementSrc) { |
| 2344 HTMLFrameElement* imp = V8Proxy::FastToNativeObject<HTMLFrameElement>( | 2324 HTMLFrameElement* imp = |
| 2345 V8ClassIndex::HTMLFRAMEELEMENT, info.Holder()); | 2325 V8Proxy::DOMWrapperToNode<HTMLFrameElement>(info.Holder()); |
| 2346 String v = valueToStringWithNullCheck(value); | 2326 String v = valueToStringWithNullCheck(value); |
| 2347 | 2327 |
| 2348 if (!AllowSettingFrameSrcToJavascriptUrl(imp, v)) return; | 2328 if (!AllowSettingFrameSrcToJavascriptUrl(imp, v)) return; |
| 2349 | 2329 |
| 2350 imp->setSrc(v); | 2330 imp->setSrc(v); |
| 2351 } | 2331 } |
| 2352 | 2332 |
| 2353 | 2333 |
| 2354 ACCESSOR_SETTER(HTMLFrameElementLocation) { | 2334 ACCESSOR_SETTER(HTMLFrameElementLocation) { |
| 2355 HTMLFrameElement* imp = V8Proxy::FastToNativeObject<HTMLFrameElement>( | 2335 HTMLFrameElement* imp = |
| 2356 V8ClassIndex::HTMLFRAMEELEMENT, info.Holder()); | 2336 V8Proxy::DOMWrapperToNode<HTMLFrameElement>(info.Holder()); |
| 2357 String v = valueToStringWithNullCheck(value); | 2337 String v = valueToStringWithNullCheck(value); |
| 2358 | 2338 |
| 2359 if (!AllowSettingFrameSrcToJavascriptUrl(imp, v)) return; | 2339 if (!AllowSettingFrameSrcToJavascriptUrl(imp, v)) return; |
| 2360 | 2340 |
| 2361 imp->setLocation(v); | 2341 imp->setLocation(v); |
| 2362 } | 2342 } |
| 2363 | 2343 |
| 2364 | 2344 |
| 2365 ACCESSOR_SETTER(HTMLIFrameElementSrc) { | 2345 ACCESSOR_SETTER(HTMLIFrameElementSrc) { |
| 2366 HTMLIFrameElement* imp = V8Proxy::FastToNativeObject<HTMLIFrameElement>( | 2346 HTMLIFrameElement* imp = |
| 2367 V8ClassIndex::HTMLIFRAMEELEMENT, info.Holder()); | 2347 V8Proxy::DOMWrapperToNode<HTMLIFrameElement>(info.Holder()); |
| 2368 String v = valueToStringWithNullCheck(value); | 2348 String v = valueToStringWithNullCheck(value); |
| 2369 | 2349 |
| 2370 if (!AllowSettingFrameSrcToJavascriptUrl(imp, v)) return; | 2350 if (!AllowSettingFrameSrcToJavascriptUrl(imp, v)) return; |
| 2371 | 2351 |
| 2372 imp->setSrc(v); | 2352 imp->setSrc(v); |
| 2373 } | 2353 } |
| 2374 | 2354 |
| 2375 | 2355 |
| 2376 v8::Handle<v8::Value> V8Custom::WindowSetTimeoutImpl(const v8::Arguments& args, | 2356 v8::Handle<v8::Value> V8Custom::WindowSetTimeoutImpl(const v8::Arguments& args, |
| 2377 bool single_shot) { | 2357 bool single_shot) { |
| 2378 int num_arguments = args.Length(); | 2358 int num_arguments = args.Length(); |
| 2379 | 2359 |
| 2380 if (num_arguments < 1) return v8::Undefined(); | 2360 if (num_arguments < 1) return v8::Undefined(); |
| 2381 | 2361 |
| 2382 DOMWindow* imp = V8Proxy::FastToNativeObject<DOMWindow>( | 2362 DOMWindow* imp = V8Proxy::ToNativeObject<DOMWindow>( |
| 2383 V8ClassIndex::DOMWINDOW, args.Holder()); | 2363 V8ClassIndex::DOMWINDOW, args.Holder()); |
| 2384 | 2364 |
| 2385 // Fast check This argument with the global object of security context. | 2365 // Fast check This argument with the global object of security context. |
| 2386 if ((args.This() != v8::Context::GetCurrentSecurityContext()->Global()) && | 2366 if ((args.This() != v8::Context::GetCurrentSecurityContext()->Global()) && |
| 2387 !V8Proxy::IsFromSameOrigin(imp->frame(), true)) { | 2367 !V8Proxy::IsFromSameOrigin(imp->frame(), true)) { |
| 2388 return v8::Undefined(); | 2368 return v8::Undefined(); |
| 2389 } | 2369 } |
| 2390 | 2370 |
| 2391 v8::Handle<v8::Value> function = args[0]; | 2371 v8::Handle<v8::Value> function = args[0]; |
| 2392 | 2372 |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2447 String str = ""; | 2427 String str = ""; |
| 2448 for (int i = 0; i < args.Length(); ++i) { | 2428 for (int i = 0; i < args.Length(); ++i) { |
| 2449 str += ToWebCoreString(args[i]); | 2429 str += ToWebCoreString(args[i]); |
| 2450 } | 2430 } |
| 2451 return str; | 2431 return str; |
| 2452 } | 2432 } |
| 2453 | 2433 |
| 2454 | 2434 |
| 2455 CALLBACK_FUNC_DECL(HTMLDocumentWrite) { | 2435 CALLBACK_FUNC_DECL(HTMLDocumentWrite) { |
| 2456 INC_STATS(L"DOM.HTMLDocument.write()"); | 2436 INC_STATS(L"DOM.HTMLDocument.write()"); |
| 2457 HTMLDocument* imp = V8Proxy::FastToNativeObject<HTMLDocument>( | 2437 HTMLDocument* imp = V8Proxy::DOMWrapperToNode<HTMLDocument>(args.Holder()); |
| 2458 V8ClassIndex::HTMLDOCUMENT, args.Holder()); | |
| 2459 imp->write(WriteHelper_GetString(args)); | 2438 imp->write(WriteHelper_GetString(args)); |
| 2460 return v8::Undefined(); | 2439 return v8::Undefined(); |
| 2461 } | 2440 } |
| 2462 | 2441 |
| 2463 | 2442 |
| 2464 CALLBACK_FUNC_DECL(HTMLDocumentWriteln) { | 2443 CALLBACK_FUNC_DECL(HTMLDocumentWriteln) { |
| 2465 INC_STATS(L"DOM.HTMLDocument.writeln()"); | 2444 INC_STATS(L"DOM.HTMLDocument.writeln()"); |
| 2466 HTMLDocument* imp = V8Proxy::FastToNativeObject<HTMLDocument>( | 2445 HTMLDocument* imp = V8Proxy::DOMWrapperToNode<HTMLDocument>(args.Holder()); |
| 2467 V8ClassIndex::HTMLDOCUMENT, args.Holder()); | |
| 2468 imp->writeln(WriteHelper_GetString(args)); | 2446 imp->writeln(WriteHelper_GetString(args)); |
| 2469 return v8::Undefined(); | 2447 return v8::Undefined(); |
| 2470 } | 2448 } |
| 2471 | 2449 |
| 2472 | 2450 |
| 2473 CALLBACK_FUNC_DECL(HTMLDocumentOpen) { | 2451 CALLBACK_FUNC_DECL(HTMLDocumentOpen) { |
| 2474 INC_STATS(L"DOM.HTMLDocument.open()"); | 2452 INC_STATS(L"DOM.HTMLDocument.open()"); |
| 2475 HTMLDocument* imp = V8Proxy::FastToNativeObject<HTMLDocument>( | 2453 HTMLDocument* imp = V8Proxy::DOMWrapperToNode<HTMLDocument>(args.Holder()); |
| 2476 V8ClassIndex::HTMLDOCUMENT, args.Holder()); | |
| 2477 | 2454 |
| 2478 if (args.Length() > 2) { | 2455 if (args.Length() > 2) { |
| 2479 if (Frame* frame = imp->frame()) { | 2456 if (Frame* frame = imp->frame()) { |
| 2480 // Fetch the global object for the frame. | 2457 // Fetch the global object for the frame. |
| 2481 v8::Local<v8::Context> context = V8Proxy::GetContext(frame); | 2458 v8::Local<v8::Context> context = V8Proxy::GetContext(frame); |
| 2482 // Bail out if we cannot get the context. | 2459 // Bail out if we cannot get the context. |
| 2483 if (context.IsEmpty()) return v8::Undefined(); | 2460 if (context.IsEmpty()) return v8::Undefined(); |
| 2484 v8::Local<v8::Object> global = context->Global(); | 2461 v8::Local<v8::Object> global = context->Global(); |
| 2485 // Get the open property of the global object. | 2462 // Get the open property of the global object. |
| 2486 v8::Local<v8::Value> function = global->Get(v8::String::New("open")); | 2463 v8::Local<v8::Value> function = global->Get(v8::String::New("open")); |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2519 // Invoking HTMLDocument::clear() can cause a crash, since it | 2496 // Invoking HTMLDocument::clear() can cause a crash, since it |
| 2520 // deletes the document's tokenizer while it may still be in use. | 2497 // deletes the document's tokenizer while it may still be in use. |
| 2521 // See b:1055485 for details. | 2498 // See b:1055485 for details. |
| 2522 return v8::Undefined(); | 2499 return v8::Undefined(); |
| 2523 } | 2500 } |
| 2524 | 2501 |
| 2525 | 2502 |
| 2526 CALLBACK_FUNC_DECL(DocumentEvaluate) { | 2503 CALLBACK_FUNC_DECL(DocumentEvaluate) { |
| 2527 INC_STATS(L"DOM.Document.evaluate()"); | 2504 INC_STATS(L"DOM.Document.evaluate()"); |
| 2528 | 2505 |
| 2529 Document* imp = V8Proxy::FastToNativeObject<Document>( | 2506 Document* imp = V8Proxy::DOMWrapperToNode<Document>(args.Holder()); |
| 2530 V8ClassIndex::DOCUMENT, args.Holder()); | |
| 2531 ExceptionCode ec = 0; | 2507 ExceptionCode ec = 0; |
| 2532 String expression = ToWebCoreString(args[0]); | 2508 String expression = ToWebCoreString(args[0]); |
| 2533 Node* contextNode = NULL; | 2509 Node* contextNode = NULL; |
| 2534 if (V8Node::HasInstance(args[1])) { | 2510 if (V8Node::HasInstance(args[1])) { |
| 2535 contextNode = | 2511 contextNode = V8Proxy::DOMWrapperToNode<Node>(args[1]); |
| 2536 V8Proxy::FastToNativeObject<Node>(V8ClassIndex::NODE, args[1]); | |
| 2537 } | 2512 } |
| 2538 // Find the XPath | 2513 // Find the XPath |
| 2539 XPathNSResolver* resolver = NULL; | 2514 XPathNSResolver* resolver = NULL; |
| 2540 if (V8XPathNSResolver::HasInstance(args[2])) { | 2515 if (V8XPathNSResolver::HasInstance(args[2])) { |
| 2541 resolver = V8Proxy::FastToNativeObject<XPathNSResolver>( | 2516 resolver = V8Proxy::ToNativeObject<XPathNSResolver>( |
| 2542 V8ClassIndex::XPATHNSRESOLVER, args[2]); | 2517 V8ClassIndex::XPATHNSRESOLVER, args[2]); |
| 2543 } else if (args[2]->IsObject()) { | 2518 } else if (args[2]->IsObject()) { |
| 2544 v8::Handle<v8::Object> obj = args[2]->ToObject(); | 2519 v8::Handle<v8::Object> obj = args[2]->ToObject(); |
| 2545 resolver = new JSXPathNSResolver(obj); | 2520 resolver = new JSXPathNSResolver(obj); |
| 2546 } else if (!args[2]->IsNull() && !args[2]->IsUndefined()) { | 2521 } else if (!args[2]->IsNull() && !args[2]->IsUndefined()) { |
| 2547 V8Proxy::SetDOMException(TYPE_MISMATCH_ERR); | 2522 V8Proxy::SetDOMException(TYPE_MISMATCH_ERR); |
| 2548 return v8::Handle<v8::Value>(); | 2523 return v8::Handle<v8::Value>(); |
| 2549 } | 2524 } |
| 2550 int type = ToInt32(args[3]); | 2525 int type = ToInt32(args[3]); |
| 2551 XPathResult* inResult = NULL; | 2526 XPathResult* inResult = NULL; |
| 2552 if (V8XPathResult::HasInstance(args[4])) { | 2527 if (V8XPathResult::HasInstance(args[4])) { |
| 2553 inResult = V8Proxy::FastToNativeObject<XPathResult>( | 2528 inResult = V8Proxy::ToNativeObject<XPathResult>( |
| 2554 V8ClassIndex::XPATHRESULT, args[4]); | 2529 V8ClassIndex::XPATHRESULT, args[4]); |
| 2555 } | 2530 } |
| 2556 RefPtr<XPathResult> result = | 2531 RefPtr<XPathResult> result = |
| 2557 imp->evaluate(expression, contextNode, resolver, type, inResult, ec); | 2532 imp->evaluate(expression, contextNode, resolver, type, inResult, ec); |
| 2558 if (ec != 0) { | 2533 if (ec != 0) { |
| 2559 V8Proxy::SetDOMException(ec); | 2534 V8Proxy::SetDOMException(ec); |
| 2560 return v8::Handle<v8::Value>(); | 2535 return v8::Handle<v8::Value>(); |
| 2561 } | 2536 } |
| 2562 return V8Proxy::ToV8Object(V8ClassIndex::XPATHRESULT, | 2537 return V8Proxy::ToV8Object(V8ClassIndex::XPATHRESULT, |
| 2563 static_cast<Peerable*>(result.get())); | 2538 static_cast<Peerable*>(result.get())); |
| (...skipping 29 matching lines...) Expand all Loading... |
| 2593 return v8::Undefined(); | 2568 return v8::Undefined(); |
| 2594 } | 2569 } |
| 2595 } | 2570 } |
| 2596 | 2571 |
| 2597 return v8String(String(out.data(), out.size())); | 2572 return v8String(String(out.data(), out.size())); |
| 2598 } | 2573 } |
| 2599 | 2574 |
| 2600 | 2575 |
| 2601 CALLBACK_FUNC_DECL(DOMWindowAtob) { | 2576 CALLBACK_FUNC_DECL(DOMWindowAtob) { |
| 2602 INC_STATS(L"DOM.DOMWindow.atob()"); | 2577 INC_STATS(L"DOM.DOMWindow.atob()"); |
| 2603 DOMWindow* imp = V8Proxy::FastToNativeObject<DOMWindow>( | 2578 DOMWindow* imp = V8Proxy::ToNativeObject<DOMWindow>( |
| 2604 V8ClassIndex::DOMWINDOW, args.Holder()); | 2579 V8ClassIndex::DOMWINDOW, args.Holder()); |
| 2605 | 2580 |
| 2606 // Fast check This argument with the global object of security context. | 2581 // Fast check This argument with the global object of security context. |
| 2607 if ((args.This() != v8::Context::GetCurrentSecurityContext()->Global()) && | 2582 if ((args.This() != v8::Context::GetCurrentSecurityContext()->Global()) && |
| 2608 !V8Proxy::IsFromSameOrigin(imp->frame(), true)) { | 2583 !V8Proxy::IsFromSameOrigin(imp->frame(), true)) { |
| 2609 return v8::Undefined(); | 2584 return v8::Undefined(); |
| 2610 } | 2585 } |
| 2611 | 2586 |
| 2612 if (args.Length() < 1) { | 2587 if (args.Length() < 1) { |
| 2613 V8Proxy::ThrowError(V8Proxy::SYNTAX_ERROR, "Not enough arguments"); | 2588 V8Proxy::ThrowError(V8Proxy::SYNTAX_ERROR, "Not enough arguments"); |
| 2614 return v8::Undefined(); | 2589 return v8::Undefined(); |
| 2615 } | 2590 } |
| 2616 | 2591 |
| 2617 if (args[0]->IsNull()) return v8String(""); | 2592 if (args[0]->IsNull()) return v8String(""); |
| 2618 | 2593 |
| 2619 String str = ToWebCoreString(args[0]); | 2594 String str = ToWebCoreString(args[0]); |
| 2620 return Base64Convert(str, false); | 2595 return Base64Convert(str, false); |
| 2621 } | 2596 } |
| 2622 | 2597 |
| 2623 | 2598 |
| 2624 CALLBACK_FUNC_DECL(DOMWindowBtoa) { | 2599 CALLBACK_FUNC_DECL(DOMWindowBtoa) { |
| 2625 INC_STATS(L"DOM.DOMWindow.btoa()"); | 2600 INC_STATS(L"DOM.DOMWindow.btoa()"); |
| 2626 DOMWindow* imp = V8Proxy::FastToNativeObject<DOMWindow>( | 2601 DOMWindow* imp = V8Proxy::ToNativeObject<DOMWindow>( |
| 2627 V8ClassIndex::DOMWINDOW, args.Holder()); | 2602 V8ClassIndex::DOMWINDOW, args.Holder()); |
| 2628 | 2603 |
| 2629 // Fast check This argument with the global object of security context. | 2604 // Fast check This argument with the global object of security context. |
| 2630 if ((args.This() != v8::Context::GetCurrentSecurityContext()->Global()) && | 2605 if ((args.This() != v8::Context::GetCurrentSecurityContext()->Global()) && |
| 2631 !V8Proxy::IsFromSameOrigin(imp->frame(), true)) { | 2606 !V8Proxy::IsFromSameOrigin(imp->frame(), true)) { |
| 2632 return v8::Undefined(); | 2607 return v8::Undefined(); |
| 2633 } | 2608 } |
| 2634 | 2609 |
| 2635 if (args.Length() < 1) { | 2610 if (args.Length() < 1) { |
| 2636 V8Proxy::ThrowError(V8Proxy::SYNTAX_ERROR, "Not enough arguments"); | 2611 V8Proxy::ThrowError(V8Proxy::SYNTAX_ERROR, "Not enough arguments"); |
| (...skipping 18 matching lines...) Expand all Loading... |
| 2655 | 2630 |
| 2656 | 2631 |
| 2657 CALLBACK_FUNC_DECL(DOMWindowNOP) { | 2632 CALLBACK_FUNC_DECL(DOMWindowNOP) { |
| 2658 INC_STATS(L"DOM.DOMWindow.nop()"); | 2633 INC_STATS(L"DOM.DOMWindow.nop()"); |
| 2659 return v8::Undefined(); | 2634 return v8::Undefined(); |
| 2660 } | 2635 } |
| 2661 | 2636 |
| 2662 | 2637 |
| 2663 CALLBACK_FUNC_DECL(EventTargetNodeAddEventListener) { | 2638 CALLBACK_FUNC_DECL(EventTargetNodeAddEventListener) { |
| 2664 INC_STATS(L"DOM.EventTargetNode.addEventListener()"); | 2639 INC_STATS(L"DOM.EventTargetNode.addEventListener()"); |
| 2665 EventTargetNode* node = V8Proxy::FastToNativeObject<EventTargetNode>( | 2640 EventTargetNode* node = |
| 2666 V8ClassIndex::EVENTTARGETNODE, args.Holder()); | 2641 V8Proxy::DOMWrapperToNode<EventTargetNode>(args.Holder()); |
| 2667 | 2642 |
| 2668 V8Proxy* proxy = V8Proxy::retrieve(node->document()->frame()); | 2643 V8Proxy* proxy = V8Proxy::retrieve(node->document()->frame()); |
| 2669 if (!proxy) | 2644 if (!proxy) |
| 2670 return v8::Undefined(); | 2645 return v8::Undefined(); |
| 2671 | 2646 |
| 2672 EventListener* listener = | 2647 EventListener* listener = |
| 2673 proxy->FindOrCreateV8EventListener(args[1], false); | 2648 proxy->FindOrCreateV8EventListener(args[1], false); |
| 2674 if (listener) { | 2649 if (listener) { |
| 2675 String type = ToWebCoreString(args[0]); | 2650 String type = ToWebCoreString(args[0]); |
| 2676 bool useCapture = args[2]->BooleanValue(); | 2651 bool useCapture = args[2]->BooleanValue(); |
| 2677 node->addEventListener(type, listener, useCapture); | 2652 node->addEventListener(type, listener, useCapture); |
| 2678 } | 2653 } |
| 2679 return v8::Undefined(); | 2654 return v8::Undefined(); |
| 2680 } | 2655 } |
| 2681 | 2656 |
| 2682 | 2657 |
| 2683 CALLBACK_FUNC_DECL(EventTargetNodeRemoveEventListener) { | 2658 CALLBACK_FUNC_DECL(EventTargetNodeRemoveEventListener) { |
| 2684 INC_STATS(L"DOM.EventTargetNode.removeEventListener()"); | 2659 INC_STATS(L"DOM.EventTargetNode.removeEventListener()"); |
| 2685 EventTargetNode* node = V8Proxy::FastToNativeObject<EventTargetNode>( | 2660 EventTargetNode* node = |
| 2686 V8ClassIndex::EVENTTARGETNODE, args.Holder()); | 2661 V8Proxy::DOMWrapperToNode<EventTargetNode>(args.Holder()); |
| 2687 | 2662 |
| 2688 V8Proxy* proxy = V8Proxy::retrieve(node->document()->frame()); | 2663 V8Proxy* proxy = V8Proxy::retrieve(node->document()->frame()); |
| 2689 // It is possbile that the owner document of the node is detached | 2664 // It is possbile that the owner document of the node is detached |
| 2690 // from the frame, return immediately in this case. | 2665 // from the frame, return immediately in this case. |
| 2691 // See issue 878909 | 2666 // See issue 878909 |
| 2692 if (!proxy) | 2667 if (!proxy) |
| 2693 return v8::Undefined(); | 2668 return v8::Undefined(); |
| 2694 | 2669 |
| 2695 EventListener* listener = | 2670 EventListener* listener = |
| 2696 proxy->FindV8EventListener(args[1], false); | 2671 proxy->FindV8EventListener(args[1], false); |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2738 return; | 2713 return; |
| 2739 } | 2714 } |
| 2740 } | 2715 } |
| 2741 | 2716 |
| 2742 // Should not reach here. | 2717 // Should not reach here. |
| 2743 ASSERT(false); | 2718 ASSERT(false); |
| 2744 } | 2719 } |
| 2745 | 2720 |
| 2746 | 2721 |
| 2747 ACCESSOR_SETTER(XMLHttpRequestOnreadystatechange) { | 2722 ACCESSOR_SETTER(XMLHttpRequestOnreadystatechange) { |
| 2748 XMLHttpRequest* imp = V8Proxy::FastToNativeObject<XMLHttpRequest>( | 2723 XMLHttpRequest* imp = V8Proxy::ToNativeObject<XMLHttpRequest>( |
| 2749 V8ClassIndex::XMLHTTPREQUEST, info.Holder()); | 2724 V8ClassIndex::XMLHTTPREQUEST, info.Holder()); |
| 2750 if (value->IsNull()) { | 2725 if (value->IsNull()) { |
| 2751 if (imp->onreadystatechange()) { | 2726 if (imp->onreadystatechange()) { |
| 2752 V8XHREventListener* listener = | 2727 V8XHREventListener* listener = |
| 2753 static_cast<V8XHREventListener*>(imp->onreadystatechange()); | 2728 static_cast<V8XHREventListener*>(imp->onreadystatechange()); |
| 2754 v8::Local<v8::Object> v8_listener = listener->GetListenerObject(); | 2729 v8::Local<v8::Object> v8_listener = listener->GetListenerObject(); |
| 2755 RemoveHiddenXHRDependency(info.Holder(), v8_listener); | 2730 RemoveHiddenXHRDependency(info.Holder(), v8_listener); |
| 2756 } | 2731 } |
| 2757 | 2732 |
| 2758 // Clear the listener | 2733 // Clear the listener |
| 2759 imp->setOnreadystatechange(0); | 2734 imp->setOnreadystatechange(0); |
| 2760 | 2735 |
| 2761 } else { | 2736 } else { |
| 2762 V8Proxy* proxy = V8Proxy::retrieve(imp->document()->frame()); | 2737 V8Proxy* proxy = V8Proxy::retrieve(imp->document()->frame()); |
| 2763 if (!proxy) | 2738 if (!proxy) |
| 2764 return; | 2739 return; |
| 2765 | 2740 |
| 2766 EventListener* listener = | 2741 EventListener* listener = |
| 2767 proxy->FindOrCreateXHREventListener(value, false); | 2742 proxy->FindOrCreateXHREventListener(value, false); |
| 2768 if (listener) { | 2743 if (listener) { |
| 2769 imp->setOnreadystatechange(listener); | 2744 imp->setOnreadystatechange(listener); |
| 2770 CreateHiddenXHRDependency(info.Holder(), value); | 2745 CreateHiddenXHRDependency(info.Holder(), value); |
| 2771 } | 2746 } |
| 2772 } | 2747 } |
| 2773 } | 2748 } |
| 2774 | 2749 |
| 2775 | 2750 |
| 2776 ACCESSOR_SETTER(XMLHttpRequestOnload) { | 2751 ACCESSOR_SETTER(XMLHttpRequestOnload) { |
| 2777 XMLHttpRequest* imp = V8Proxy::FastToNativeObject<XMLHttpRequest>( | 2752 XMLHttpRequest* imp = V8Proxy::ToNativeObject<XMLHttpRequest>( |
| 2778 V8ClassIndex::XMLHTTPREQUEST, info.Holder()); | 2753 V8ClassIndex::XMLHTTPREQUEST, info.Holder()); |
| 2779 if (value->IsNull()) { | 2754 if (value->IsNull()) { |
| 2780 if (imp->onload()) { | 2755 if (imp->onload()) { |
| 2781 V8XHREventListener* listener = | 2756 V8XHREventListener* listener = |
| 2782 static_cast<V8XHREventListener*>(imp->onload()); | 2757 static_cast<V8XHREventListener*>(imp->onload()); |
| 2783 v8::Local<v8::Object> v8_listener = listener->GetListenerObject(); | 2758 v8::Local<v8::Object> v8_listener = listener->GetListenerObject(); |
| 2784 RemoveHiddenXHRDependency(info.Holder(), v8_listener); | 2759 RemoveHiddenXHRDependency(info.Holder(), v8_listener); |
| 2785 } | 2760 } |
| 2786 | 2761 |
| 2787 imp->setOnload(0); | 2762 imp->setOnload(0); |
| 2788 | 2763 |
| 2789 } else { | 2764 } else { |
| 2790 V8Proxy* proxy = V8Proxy::retrieve(imp->document()->frame()); | 2765 V8Proxy* proxy = V8Proxy::retrieve(imp->document()->frame()); |
| 2791 if (!proxy) | 2766 if (!proxy) |
| 2792 return; | 2767 return; |
| 2793 | 2768 |
| 2794 EventListener* listener = | 2769 EventListener* listener = |
| 2795 proxy->FindOrCreateXHREventListener(value, false); | 2770 proxy->FindOrCreateXHREventListener(value, false); |
| 2796 if (listener) { | 2771 if (listener) { |
| 2797 imp->setOnload(listener); | 2772 imp->setOnload(listener); |
| 2798 CreateHiddenXHRDependency(info.Holder(), value); | 2773 CreateHiddenXHRDependency(info.Holder(), value); |
| 2799 } | 2774 } |
| 2800 } | 2775 } |
| 2801 } | 2776 } |
| 2802 | 2777 |
| 2803 | 2778 |
| 2804 CALLBACK_FUNC_DECL(XMLHttpRequestAddEventListener) { | 2779 CALLBACK_FUNC_DECL(XMLHttpRequestAddEventListener) { |
| 2805 INC_STATS(L"DOM.XMLHttpRequest.addEventListener()"); | 2780 INC_STATS(L"DOM.XMLHttpRequest.addEventListener()"); |
| 2806 XMLHttpRequest* imp = V8Proxy::FastToNativeObject<XMLHttpRequest>( | 2781 XMLHttpRequest* imp = V8Proxy::ToNativeObject<XMLHttpRequest>( |
| 2807 V8ClassIndex::XMLHTTPREQUEST, args.Holder()); | 2782 V8ClassIndex::XMLHTTPREQUEST, args.Holder()); |
| 2808 | 2783 |
| 2809 V8Proxy* proxy = V8Proxy::retrieve(imp->document()->frame()); | 2784 V8Proxy* proxy = V8Proxy::retrieve(imp->document()->frame()); |
| 2810 if (!proxy) | 2785 if (!proxy) |
| 2811 return v8::Undefined(); | 2786 return v8::Undefined(); |
| 2812 | 2787 |
| 2813 EventListener* listener = | 2788 EventListener* listener = |
| 2814 proxy->FindOrCreateXHREventListener(args[1], false); | 2789 proxy->FindOrCreateXHREventListener(args[1], false); |
| 2815 if (listener) { | 2790 if (listener) { |
| 2816 String type = ToWebCoreString(args[0]); | 2791 String type = ToWebCoreString(args[0]); |
| 2817 bool useCapture = args[2]->BooleanValue(); | 2792 bool useCapture = args[2]->BooleanValue(); |
| 2818 imp->addEventListener(type, listener, useCapture); | 2793 imp->addEventListener(type, listener, useCapture); |
| 2819 | 2794 |
| 2820 CreateHiddenXHRDependency(args.Holder(), args[1]); | 2795 CreateHiddenXHRDependency(args.Holder(), args[1]); |
| 2821 } | 2796 } |
| 2822 return v8::Undefined(); | 2797 return v8::Undefined(); |
| 2823 } | 2798 } |
| 2824 | 2799 |
| 2825 | 2800 |
| 2826 CALLBACK_FUNC_DECL(XMLHttpRequestRemoveEventListener) { | 2801 CALLBACK_FUNC_DECL(XMLHttpRequestRemoveEventListener) { |
| 2827 INC_STATS(L"DOM.XMLHttpRequest.removeEventListener()"); | 2802 INC_STATS(L"DOM.XMLHttpRequest.removeEventListener()"); |
| 2828 XMLHttpRequest* imp = V8Proxy::FastToNativeObject<XMLHttpRequest>( | 2803 XMLHttpRequest* imp = V8Proxy::ToNativeObject<XMLHttpRequest>( |
| 2829 V8ClassIndex::XMLHTTPREQUEST, args.Holder()); | 2804 V8ClassIndex::XMLHTTPREQUEST, args.Holder()); |
| 2830 | 2805 |
| 2831 V8Proxy* proxy = V8Proxy::retrieve(imp->document()->frame()); | 2806 V8Proxy* proxy = V8Proxy::retrieve(imp->document()->frame()); |
| 2832 if (!proxy) | 2807 if (!proxy) |
| 2833 return v8::Undefined(); // probably leaked | 2808 return v8::Undefined(); // probably leaked |
| 2834 | 2809 |
| 2835 EventListener* listener = | 2810 EventListener* listener = |
| 2836 proxy->FindXHREventListener(args[1], false); | 2811 proxy->FindXHREventListener(args[1], false); |
| 2837 | 2812 |
| 2838 if (listener) { | 2813 if (listener) { |
| (...skipping 15 matching lines...) Expand all Loading... |
| 2854 // open(method, url, async) | 2829 // open(method, url, async) |
| 2855 // open(method, url, async, user) | 2830 // open(method, url, async, user) |
| 2856 // open(method, url, async, user, passwd) | 2831 // open(method, url, async, user, passwd) |
| 2857 | 2832 |
| 2858 if (args.Length() < 2) { | 2833 if (args.Length() < 2) { |
| 2859 V8Proxy::ThrowError(V8Proxy::SYNTAX_ERROR, "Not enough arguments"); | 2834 V8Proxy::ThrowError(V8Proxy::SYNTAX_ERROR, "Not enough arguments"); |
| 2860 return v8::Undefined(); | 2835 return v8::Undefined(); |
| 2861 } | 2836 } |
| 2862 | 2837 |
| 2863 // get the implementation | 2838 // get the implementation |
| 2864 XMLHttpRequest* xhr = V8Proxy::FastToNativeObject<XMLHttpRequest>( | 2839 XMLHttpRequest* xhr = V8Proxy::ToNativeObject<XMLHttpRequest>( |
| 2865 V8ClassIndex::XMLHTTPREQUEST, args.Holder()); | 2840 V8ClassIndex::XMLHTTPREQUEST, args.Holder()); |
| 2866 | 2841 |
| 2867 // retrieve parameters | 2842 // retrieve parameters |
| 2868 String method = ToWebCoreString(args[0]); | 2843 String method = ToWebCoreString(args[0]); |
| 2869 String urlstring = ToWebCoreString(args[1]); | 2844 String urlstring = ToWebCoreString(args[1]); |
| 2870 V8Proxy* proxy = V8Proxy::retrieve(); | 2845 V8Proxy* proxy = V8Proxy::retrieve(); |
| 2871 KURL url = | 2846 KURL url = |
| 2872 proxy->frame()->document()->completeURL(urlstring).deprecatedString(); | 2847 proxy->frame()->document()->completeURL(urlstring).deprecatedString(); |
| 2873 | 2848 |
| 2874 bool async = (args.Length() < 3) ? true : args[2]->BooleanValue(); | 2849 bool async = (args.Length() < 3) ? true : args[2]->BooleanValue(); |
| (...skipping 28 matching lines...) Expand all Loading... |
| 2903 } | 2878 } |
| 2904 | 2879 |
| 2905 | 2880 |
| 2906 CALLBACK_FUNC_DECL(XMLHttpRequestSend) { | 2881 CALLBACK_FUNC_DECL(XMLHttpRequestSend) { |
| 2907 INC_STATS(L"DOM.XMLHttpRequest.send()"); | 2882 INC_STATS(L"DOM.XMLHttpRequest.send()"); |
| 2908 // Two cases: | 2883 // Two cases: |
| 2909 // send(document) | 2884 // send(document) |
| 2910 // send(string) | 2885 // send(string) |
| 2911 | 2886 |
| 2912 // get implementation | 2887 // get implementation |
| 2913 XMLHttpRequest* xhr = V8Proxy::FastToNativeObject<XMLHttpRequest>( | 2888 XMLHttpRequest* xhr = V8Proxy::ToNativeObject<XMLHttpRequest>( |
| 2914 V8ClassIndex::XMLHTTPREQUEST, args.Holder()); | 2889 V8ClassIndex::XMLHTTPREQUEST, args.Holder()); |
| 2915 | 2890 |
| 2916 String body; | 2891 String body; |
| 2917 if (args.Length() >= 1) { | 2892 if (args.Length() >= 1) { |
| 2918 v8::Handle<v8::Value> arg = args[0]; | 2893 v8::Handle<v8::Value> arg = args[0]; |
| 2919 if (IsDocumentType(arg)) { | 2894 if (IsDocumentType(arg)) { |
| 2920 v8::Handle<v8::Object> obj = v8::Handle<v8::Object>::Cast(arg); | 2895 v8::Handle<v8::Object> obj = v8::Handle<v8::Object>::Cast(arg); |
| 2921 Document* doc = | 2896 Document* doc = V8Proxy::DOMWrapperToNode<Document>(obj); |
| 2922 V8Proxy::ToNativeObject<Document>(V8ClassIndex::DOCUMENT, obj); | |
| 2923 ASSERT(doc); | 2897 ASSERT(doc); |
| 2924 body = doc->toString(); | 2898 body = doc->toString(); |
| 2925 } else { | 2899 } else { |
| 2926 body = valueToStringWithNullCheck(arg); | 2900 body = valueToStringWithNullCheck(arg); |
| 2927 } | 2901 } |
| 2928 } | 2902 } |
| 2929 | 2903 |
| 2930 ExceptionCode ec = 0; | 2904 ExceptionCode ec = 0; |
| 2931 xhr->send(body, ec); | 2905 xhr->send(body, ec); |
| 2932 if (ec != 0) { | 2906 if (ec != 0) { |
| 2933 V8Proxy::SetDOMException(ec); | 2907 V8Proxy::SetDOMException(ec); |
| 2934 return v8::Handle<v8::Value>(); | 2908 return v8::Handle<v8::Value>(); |
| 2935 } | 2909 } |
| 2936 | 2910 |
| 2937 return v8::Undefined(); | 2911 return v8::Undefined(); |
| 2938 } | 2912 } |
| 2939 | 2913 |
| 2940 | 2914 |
| 2941 CALLBACK_FUNC_DECL(XMLHttpRequestSetRequestHeader) { | 2915 CALLBACK_FUNC_DECL(XMLHttpRequestSetRequestHeader) { |
| 2942 INC_STATS(L"DOM.XMLHttpRequest.setRequestHeader()"); | 2916 INC_STATS(L"DOM.XMLHttpRequest.setRequestHeader()"); |
| 2943 if (args.Length() < 2) { | 2917 if (args.Length() < 2) { |
| 2944 V8Proxy::ThrowError(V8Proxy::SYNTAX_ERROR, "Not enough arguments"); | 2918 V8Proxy::ThrowError(V8Proxy::SYNTAX_ERROR, "Not enough arguments"); |
| 2945 return v8::Undefined(); | 2919 return v8::Undefined(); |
| 2946 } | 2920 } |
| 2947 | 2921 |
| 2948 XMLHttpRequest* imp = V8Proxy::FastToNativeObject<XMLHttpRequest>( | 2922 XMLHttpRequest* imp = V8Proxy::ToNativeObject<XMLHttpRequest>( |
| 2949 V8ClassIndex::XMLHTTPREQUEST, args.Holder()); | 2923 V8ClassIndex::XMLHTTPREQUEST, args.Holder()); |
| 2950 ExceptionCode ec = 0; | 2924 ExceptionCode ec = 0; |
| 2951 String header = ToWebCoreString(args[0]); | 2925 String header = ToWebCoreString(args[0]); |
| 2952 String value = ToWebCoreString(args[1]); | 2926 String value = ToWebCoreString(args[1]); |
| 2953 imp->setRequestHeader(header, value, ec); | 2927 imp->setRequestHeader(header, value, ec); |
| 2954 if (ec != 0) { | 2928 if (ec != 0) { |
| 2955 V8Proxy::SetDOMException(ec); | 2929 V8Proxy::SetDOMException(ec); |
| 2956 return v8::Handle<v8::Value>(); | 2930 return v8::Handle<v8::Value>(); |
| 2957 } | 2931 } |
| 2958 return v8::Undefined(); | 2932 return v8::Undefined(); |
| 2959 } | 2933 } |
| 2960 | 2934 |
| 2961 | 2935 |
| 2962 CALLBACK_FUNC_DECL(XMLHttpRequestGetResponseHeader) { | 2936 CALLBACK_FUNC_DECL(XMLHttpRequestGetResponseHeader) { |
| 2963 INC_STATS(L"DOM.XMLHttpRequest.getResponseHeader()"); | 2937 INC_STATS(L"DOM.XMLHttpRequest.getResponseHeader()"); |
| 2964 if (args.Length() < 1) { | 2938 if (args.Length() < 1) { |
| 2965 V8Proxy::ThrowError(V8Proxy::SYNTAX_ERROR, "Not enough arguments"); | 2939 V8Proxy::ThrowError(V8Proxy::SYNTAX_ERROR, "Not enough arguments"); |
| 2966 return v8::Undefined(); | 2940 return v8::Undefined(); |
| 2967 } | 2941 } |
| 2968 | 2942 |
| 2969 XMLHttpRequest* imp = V8Proxy::FastToNativeObject<XMLHttpRequest>( | 2943 XMLHttpRequest* imp = V8Proxy::ToNativeObject<XMLHttpRequest>( |
| 2970 V8ClassIndex::XMLHTTPREQUEST, args.Holder()); | 2944 V8ClassIndex::XMLHTTPREQUEST, args.Holder()); |
| 2971 ExceptionCode ec = 0; | 2945 ExceptionCode ec = 0; |
| 2972 String header = ToWebCoreString(args[0]); | 2946 String header = ToWebCoreString(args[0]); |
| 2973 String result = imp->getResponseHeader(header, ec); | 2947 String result = imp->getResponseHeader(header, ec); |
| 2974 if (ec != 0) { | 2948 if (ec != 0) { |
| 2975 V8Proxy::SetDOMException(ec); | 2949 V8Proxy::SetDOMException(ec); |
| 2976 return v8::Handle<v8::Value>(); | 2950 return v8::Handle<v8::Value>(); |
| 2977 } | 2951 } |
| 2978 return v8StringOrNull(result); | 2952 return v8StringOrNull(result); |
| 2979 } | 2953 } |
| 2980 | 2954 |
| 2981 | 2955 |
| 2982 CALLBACK_FUNC_DECL(XMLHttpRequestOverrideMimeType) { | 2956 CALLBACK_FUNC_DECL(XMLHttpRequestOverrideMimeType) { |
| 2983 INC_STATS(L"DOM.XMLHttpRequest.overrideMimeType()"); | 2957 INC_STATS(L"DOM.XMLHttpRequest.overrideMimeType()"); |
| 2984 if (args.Length() < 1) { | 2958 if (args.Length() < 1) { |
| 2985 V8Proxy::ThrowError(V8Proxy::SYNTAX_ERROR, "Not enough arguments"); | 2959 V8Proxy::ThrowError(V8Proxy::SYNTAX_ERROR, "Not enough arguments"); |
| 2986 return v8::Undefined(); | 2960 return v8::Undefined(); |
| 2987 } | 2961 } |
| 2988 | 2962 |
| 2989 XMLHttpRequest* imp = V8Proxy::FastToNativeObject<XMLHttpRequest>( | 2963 XMLHttpRequest* imp = V8Proxy::ToNativeObject<XMLHttpRequest>( |
| 2990 V8ClassIndex::XMLHTTPREQUEST, args.Holder()); | 2964 V8ClassIndex::XMLHTTPREQUEST, args.Holder()); |
| 2991 String value = ToWebCoreString(args[0]); | 2965 String value = ToWebCoreString(args[0]); |
| 2992 imp->overrideMIMEType(value); | 2966 imp->overrideMIMEType(value); |
| 2993 return v8::Undefined(); | 2967 return v8::Undefined(); |
| 2994 } | 2968 } |
| 2995 | 2969 |
| 2996 CALLBACK_FUNC_DECL(TreeWalkerParentNode) { | 2970 CALLBACK_FUNC_DECL(TreeWalkerParentNode) { |
| 2997 INC_STATS(L"DOM.TreeWalker.parentNode()"); | 2971 INC_STATS(L"DOM.TreeWalker.parentNode()"); |
| 2998 TreeWalker* imp = V8Proxy::FastToNativeObject<TreeWalker>( | 2972 TreeWalker* imp = V8Proxy::ToNativeObject<TreeWalker>( |
| 2999 V8ClassIndex::TREEWALKER, args.Holder()); | 2973 V8ClassIndex::TREEWALKER, args.Holder()); |
| 3000 return V8Proxy::ToV8Object(V8ClassIndex::NODE, imp->parentNode()); | 2974 return V8Proxy::NodeToV8Object(imp->parentNode()); |
| 3001 } | 2975 } |
| 3002 | 2976 |
| 3003 CALLBACK_FUNC_DECL(TreeWalkerFirstChild) { | 2977 CALLBACK_FUNC_DECL(TreeWalkerFirstChild) { |
| 3004 INC_STATS(L"DOM.TreeWalker.firstChild()"); | 2978 INC_STATS(L"DOM.TreeWalker.firstChild()"); |
| 3005 TreeWalker* imp = V8Proxy::FastToNativeObject<TreeWalker>( | 2979 TreeWalker* imp = V8Proxy::ToNativeObject<TreeWalker>( |
| 3006 V8ClassIndex::TREEWALKER, args.Holder()); | 2980 V8ClassIndex::TREEWALKER, args.Holder()); |
| 3007 return V8Proxy::ToV8Object(V8ClassIndex::NODE, imp->firstChild()); | 2981 return V8Proxy::NodeToV8Object(imp->firstChild()); |
| 3008 } | 2982 } |
| 3009 | 2983 |
| 3010 CALLBACK_FUNC_DECL(TreeWalkerLastChild) { | 2984 CALLBACK_FUNC_DECL(TreeWalkerLastChild) { |
| 3011 INC_STATS(L"DOM.TreeWalker.lastChild()"); | 2985 INC_STATS(L"DOM.TreeWalker.lastChild()"); |
| 3012 TreeWalker* imp = V8Proxy::FastToNativeObject<TreeWalker>( | 2986 TreeWalker* imp = V8Proxy::ToNativeObject<TreeWalker>( |
| 3013 V8ClassIndex::TREEWALKER, args.Holder()); | 2987 V8ClassIndex::TREEWALKER, args.Holder()); |
| 3014 return V8Proxy::ToV8Object(V8ClassIndex::NODE, imp->lastChild()); | 2988 return V8Proxy::NodeToV8Object(imp->lastChild()); |
| 3015 } | 2989 } |
| 3016 | 2990 |
| 3017 CALLBACK_FUNC_DECL(TreeWalkerNextNode) { | 2991 CALLBACK_FUNC_DECL(TreeWalkerNextNode) { |
| 3018 INC_STATS(L"DOM.TreeWalker.nextNode()"); | 2992 INC_STATS(L"DOM.TreeWalker.nextNode()"); |
| 3019 TreeWalker* imp = V8Proxy::FastToNativeObject<TreeWalker>( | 2993 TreeWalker* imp = V8Proxy::ToNativeObject<TreeWalker>( |
| 3020 V8ClassIndex::TREEWALKER, args.Holder()); | 2994 V8ClassIndex::TREEWALKER, args.Holder()); |
| 3021 return V8Proxy::ToV8Object(V8ClassIndex::NODE, imp->nextNode()); | 2995 return V8Proxy::NodeToV8Object(imp->nextNode()); |
| 3022 } | 2996 } |
| 3023 | 2997 |
| 3024 CALLBACK_FUNC_DECL(TreeWalkerPreviousNode) { | 2998 CALLBACK_FUNC_DECL(TreeWalkerPreviousNode) { |
| 3025 INC_STATS(L"DOM.TreeWalker.previousNode()"); | 2999 INC_STATS(L"DOM.TreeWalker.previousNode()"); |
| 3026 TreeWalker* imp = V8Proxy::FastToNativeObject<TreeWalker>( | 3000 TreeWalker* imp = V8Proxy::ToNativeObject<TreeWalker>( |
| 3027 V8ClassIndex::TREEWALKER, args.Holder()); | 3001 V8ClassIndex::TREEWALKER, args.Holder()); |
| 3028 return V8Proxy::ToV8Object(V8ClassIndex::NODE, imp->previousNode()); | 3002 return V8Proxy::NodeToV8Object(imp->previousNode()); |
| 3029 } | 3003 } |
| 3030 | 3004 |
| 3031 CALLBACK_FUNC_DECL(TreeWalkerNextSibling) { | 3005 CALLBACK_FUNC_DECL(TreeWalkerNextSibling) { |
| 3032 INC_STATS(L"DOM.TreeWalker.nextSibling()"); | 3006 INC_STATS(L"DOM.TreeWalker.nextSibling()"); |
| 3033 TreeWalker* imp = V8Proxy::FastToNativeObject<TreeWalker>( | 3007 TreeWalker* imp = V8Proxy::ToNativeObject<TreeWalker>( |
| 3034 V8ClassIndex::TREEWALKER, args.Holder()); | 3008 V8ClassIndex::TREEWALKER, args.Holder()); |
| 3035 return V8Proxy::ToV8Object(V8ClassIndex::NODE, imp->nextSibling()); | 3009 return V8Proxy::NodeToV8Object(imp->nextSibling()); |
| 3036 } | 3010 } |
| 3037 | 3011 |
| 3038 CALLBACK_FUNC_DECL(TreeWalkerPreviousSibling) { | 3012 CALLBACK_FUNC_DECL(TreeWalkerPreviousSibling) { |
| 3039 INC_STATS(L"DOM.TreeWalker.previousSibling()"); | 3013 INC_STATS(L"DOM.TreeWalker.previousSibling()"); |
| 3040 TreeWalker* imp = V8Proxy::FastToNativeObject<TreeWalker>( | 3014 TreeWalker* imp = V8Proxy::ToNativeObject<TreeWalker>( |
| 3041 V8ClassIndex::TREEWALKER, args.Holder()); | 3015 V8ClassIndex::TREEWALKER, args.Holder()); |
| 3042 return V8Proxy::ToV8Object(V8ClassIndex::NODE, imp->previousSibling()); | 3016 return V8Proxy::NodeToV8Object(imp->previousSibling()); |
| 3043 } | 3017 } |
| 3044 | 3018 |
| 3045 CALLBACK_FUNC_DECL(NodeIteratorNextNode) { | 3019 CALLBACK_FUNC_DECL(NodeIteratorNextNode) { |
| 3046 INC_STATS(L"DOM.NodeIterator.nextNode()"); | 3020 INC_STATS(L"DOM.NodeIterator.nextNode()"); |
| 3047 NodeIterator* imp = V8Proxy::FastToNativeObject<NodeIterator>( | 3021 NodeIterator* imp = V8Proxy::ToNativeObject<NodeIterator>( |
| 3048 V8ClassIndex::NODEITERATOR, args.Holder()); | 3022 V8ClassIndex::NODEITERATOR, args.Holder()); |
| 3049 ExceptionCode ec = 0; | 3023 ExceptionCode ec = 0; |
| 3050 return V8Proxy::ToV8Object(V8ClassIndex::NODE, imp->nextNode(ec)); | 3024 return V8Proxy::NodeToV8Object(imp->nextNode(ec)); |
| 3051 } | 3025 } |
| 3052 | 3026 |
| 3053 CALLBACK_FUNC_DECL(NodeIteratorPreviousNode) { | 3027 CALLBACK_FUNC_DECL(NodeIteratorPreviousNode) { |
| 3054 INC_STATS(L"DOM.NodeIterator.previousNode()"); | 3028 INC_STATS(L"DOM.NodeIterator.previousNode()"); |
| 3055 NodeIterator* imp = V8Proxy::FastToNativeObject<NodeIterator>( | 3029 NodeIterator* imp = V8Proxy::ToNativeObject<NodeIterator>( |
| 3056 V8ClassIndex::NODEITERATOR, args.Holder()); | 3030 V8ClassIndex::NODEITERATOR, args.Holder()); |
| 3057 ExceptionCode ec = 0; | 3031 ExceptionCode ec = 0; |
| 3058 return V8Proxy::ToV8Object(V8ClassIndex::NODE, imp->previousNode(ec)); | 3032 return V8Proxy::NodeToV8Object(imp->previousNode(ec)); |
| 3059 } | 3033 } |
| 3060 | 3034 |
| 3061 CALLBACK_FUNC_DECL(NodeFilterAcceptNode) { | 3035 CALLBACK_FUNC_DECL(NodeFilterAcceptNode) { |
| 3062 INC_STATS(L"DOM.NodeFilter.acceptNode()"); | 3036 INC_STATS(L"DOM.NodeFilter.acceptNode()"); |
| 3063 NodeFilter* imp = V8Proxy::FastToNativeObject<NodeFilter>( | 3037 NodeFilter* imp = V8Proxy::ToNativeObject<NodeFilter>( |
| 3064 V8ClassIndex::NODEFILTER, args.Holder()); | 3038 V8ClassIndex::NODEFILTER, args.Holder()); |
| 3065 Node* node = V8Proxy::FastToNativeObject<Node>(V8ClassIndex::NODE, args[0]); | 3039 Node* node = V8Proxy::DOMWrapperToNode<Node>(args[0]); |
| 3066 return v8::Local<v8::Integer>(v8::Integer::New(imp->acceptNode(node))); | 3040 return v8::Local<v8::Integer>(v8::Integer::New(imp->acceptNode(node))); |
| 3067 } | 3041 } |
| 3068 | 3042 |
| 3069 ACCESSOR_SETTER(DOMWindowEventHandler) { | 3043 ACCESSOR_SETTER(DOMWindowEventHandler) { |
| 3070 v8::Handle<v8::Object> holder = V8Proxy::LookupDOMWrapper( | 3044 v8::Handle<v8::Object> holder = V8Proxy::LookupDOMWrapper( |
| 3071 V8ClassIndex::DOMWINDOW, info.This()); | 3045 V8ClassIndex::DOMWINDOW, info.This()); |
| 3072 if (holder.IsEmpty()) | 3046 if (holder.IsEmpty()) |
| 3073 return; | 3047 return; |
| 3074 | 3048 |
| 3075 DOMWindow* imp = V8Proxy::FastToNativeObject<DOMWindow>( | 3049 DOMWindow* imp = V8Proxy::ToNativeObject<DOMWindow>( |
| 3076 V8ClassIndex::DOMWINDOW, holder); | 3050 V8ClassIndex::DOMWINDOW, holder); |
| 3077 if (!imp->frame()) | 3051 if (!imp->frame()) |
| 3078 return; | 3052 return; |
| 3079 | 3053 |
| 3080 Document* doc = imp->frame()->document(); | 3054 Document* doc = imp->frame()->document(); |
| 3081 if (!doc) | 3055 if (!doc) |
| 3082 return; | 3056 return; |
| 3083 | 3057 |
| 3084 // Name starts with 'on', remove them. | 3058 // Name starts with 'on', remove them. |
| 3085 String key = ToWebCoreString(name); | 3059 String key = ToWebCoreString(name); |
| (...skipping 16 matching lines...) Expand all Loading... |
| 3102 } | 3076 } |
| 3103 } | 3077 } |
| 3104 | 3078 |
| 3105 | 3079 |
| 3106 ACCESSOR_GETTER(DOMWindowEventHandler) { | 3080 ACCESSOR_GETTER(DOMWindowEventHandler) { |
| 3107 v8::Handle<v8::Object> holder = V8Proxy::LookupDOMWrapper( | 3081 v8::Handle<v8::Object> holder = V8Proxy::LookupDOMWrapper( |
| 3108 V8ClassIndex::DOMWINDOW, info.This()); | 3082 V8ClassIndex::DOMWINDOW, info.This()); |
| 3109 if (holder.IsEmpty()) | 3083 if (holder.IsEmpty()) |
| 3110 return v8::Undefined(); | 3084 return v8::Undefined(); |
| 3111 | 3085 |
| 3112 DOMWindow* imp = V8Proxy::FastToNativeObject<DOMWindow>( | 3086 DOMWindow* imp = V8Proxy::ToNativeObject<DOMWindow>( |
| 3113 V8ClassIndex::DOMWINDOW, holder); | 3087 V8ClassIndex::DOMWINDOW, holder); |
| 3114 if (!imp->frame()) | 3088 if (!imp->frame()) |
| 3115 return v8::Undefined(); | 3089 return v8::Undefined(); |
| 3116 | 3090 |
| 3117 Document* doc = imp->frame()->document(); | 3091 Document* doc = imp->frame()->document(); |
| 3118 if (!doc) | 3092 if (!doc) |
| 3119 return v8::Undefined(); | 3093 return v8::Undefined(); |
| 3120 | 3094 |
| 3121 // Name starts with 'on', remove them. | 3095 // Name starts with 'on', remove them. |
| 3122 String key = ToWebCoreString(name); | 3096 String key = ToWebCoreString(name); |
| 3123 ASSERT(key.startsWith("on")); | 3097 ASSERT(key.startsWith("on")); |
| 3124 String event_type = key.substring(2); | 3098 String event_type = key.substring(2); |
| 3125 | 3099 |
| 3126 EventListener* listener = doc->getHTMLWindowEventListener(event_type); | 3100 EventListener* listener = doc->getHTMLWindowEventListener(event_type); |
| 3127 return V8Proxy::EventListenerToV8Object(listener); | 3101 return V8Proxy::EventListenerToV8Object(listener); |
| 3128 } | 3102 } |
| 3129 | 3103 |
| 3130 | 3104 |
| 3131 ACCESSOR_SETTER(ElementEventHandler) { | 3105 ACCESSOR_SETTER(ElementEventHandler) { |
| 3132 EventTargetNode* node = V8Proxy::FastToNativeObject<EventTargetNode>( | 3106 EventTargetNode* node = |
| 3133 V8ClassIndex::EVENTTARGETNODE, info.Holder()); | 3107 V8Proxy::DOMWrapperToNode<EventTargetNode>(info.Holder()); |
| 3134 | 3108 |
| 3135 // Name starts with 'on', remove them. | 3109 // Name starts with 'on', remove them. |
| 3136 String key = ToWebCoreString(name); | 3110 String key = ToWebCoreString(name); |
| 3137 ASSERT(key.startsWith("on")); | 3111 ASSERT(key.startsWith("on")); |
| 3138 String event_type = key.substring(2); | 3112 String event_type = key.substring(2); |
| 3139 | 3113 |
| 3140 // Set handler if the value is a function. Otherwise, clear the | 3114 // Set handler if the value is a function. Otherwise, clear the |
| 3141 // event handler. | 3115 // event handler. |
| 3142 if (value->IsFunction()) { | 3116 if (value->IsFunction()) { |
| 3143 V8Proxy* proxy = V8Proxy::retrieve(node->document()->frame()); | 3117 V8Proxy* proxy = V8Proxy::retrieve(node->document()->frame()); |
| 3144 // the document might be created using createDocument, | 3118 // the document might be created using createDocument, |
| 3145 // which does not have a frame, use the active frame | 3119 // which does not have a frame, use the active frame |
| 3146 if (!proxy) | 3120 if (!proxy) |
| 3147 proxy = V8Proxy::retrieve(V8Proxy::retrieveActiveFrame()); | 3121 proxy = V8Proxy::retrieve(V8Proxy::retrieveActiveFrame()); |
| 3148 if (!proxy) | 3122 if (!proxy) |
| 3149 return; | 3123 return; |
| 3150 | 3124 |
| 3151 EventListener* listener = | 3125 EventListener* listener = |
| 3152 proxy->FindOrCreateV8EventListener(value, true); | 3126 proxy->FindOrCreateV8EventListener(value, true); |
| 3153 if (listener) { | 3127 if (listener) { |
| 3154 node->setHTMLEventListener(event_type, listener); | 3128 node->setHTMLEventListener(event_type, listener); |
| 3155 } | 3129 } |
| 3156 } else { | 3130 } else { |
| 3157 node->removeHTMLEventListener(event_type); | 3131 node->removeHTMLEventListener(event_type); |
| 3158 } | 3132 } |
| 3159 } | 3133 } |
| 3160 | 3134 |
| 3161 | 3135 |
| 3162 ACCESSOR_GETTER(ElementEventHandler) { | 3136 ACCESSOR_GETTER(ElementEventHandler) { |
| 3163 EventTargetNode* node = V8Proxy::FastToNativeObject<EventTargetNode>( | 3137 EventTargetNode* node = |
| 3164 V8ClassIndex::EVENTTARGETNODE, info.Holder()); | 3138 V8Proxy::DOMWrapperToNode<EventTargetNode>(info.Holder()); |
| 3165 | 3139 |
| 3166 // Name starts with 'on', remove them. | 3140 // Name starts with 'on', remove them. |
| 3167 String key = ToWebCoreString(name); | 3141 String key = ToWebCoreString(name); |
| 3168 ASSERT(key.startsWith("on")); | 3142 ASSERT(key.startsWith("on")); |
| 3169 String event_type = key.substring(2); | 3143 String event_type = key.substring(2); |
| 3170 | 3144 |
| 3171 EventListener* listener = node->getHTMLEventListener(event_type); | 3145 EventListener* listener = node->getHTMLEventListener(event_type); |
| 3172 return V8Proxy::EventListenerToV8Object(listener); | 3146 return V8Proxy::EventListenerToV8Object(listener); |
| 3173 } | 3147 } |
| 3174 | 3148 |
| 3175 | 3149 |
| 3176 ACCESSOR_SETTER(HTMLOptionsCollectionLength) { | 3150 ACCESSOR_SETTER(HTMLOptionsCollectionLength) { |
| 3177 HTMLOptionsCollection* imp = | 3151 HTMLOptionsCollection* imp = |
| 3178 V8Proxy::FastToNativeObject<HTMLOptionsCollection>( | 3152 V8Proxy::ToNativeObject<HTMLOptionsCollection>( |
| 3179 V8ClassIndex::HTMLOPTIONSCOLLECTION, info.Holder()); | 3153 V8ClassIndex::HTMLOPTIONSCOLLECTION, info.Holder()); |
| 3180 double v = value->NumberValue(); | 3154 double v = value->NumberValue(); |
| 3181 unsigned newLength = 0; | 3155 unsigned newLength = 0; |
| 3182 ExceptionCode ec = 0; | 3156 ExceptionCode ec = 0; |
| 3183 if (!isnan(v) && !isinf(v)) { | 3157 if (!isnan(v) && !isinf(v)) { |
| 3184 if (v < 0.0) { | 3158 if (v < 0.0) { |
| 3185 ec = INDEX_SIZE_ERR; | 3159 ec = INDEX_SIZE_ERR; |
| 3186 } else if (v > static_cast<double>(UINT_MAX)) { | 3160 } else if (v > static_cast<double>(UINT_MAX)) { |
| 3187 newLength = UINT_MAX; | 3161 newLength = UINT_MAX; |
| 3188 } else { | 3162 } else { |
| 3189 newLength = static_cast<unsigned>(v); | 3163 newLength = static_cast<unsigned>(v); |
| 3190 } | 3164 } |
| 3191 } | 3165 } |
| 3192 if (!ec) imp->setLength(value->Uint32Value(), ec); | 3166 if (!ec) imp->setLength(value->Uint32Value(), ec); |
| 3193 V8Proxy::SetDOMException(ec); | 3167 V8Proxy::SetDOMException(ec); |
| 3194 } | 3168 } |
| 3195 | 3169 |
| 3196 #if ENABLE(SVG) | 3170 #if ENABLE(SVG) |
| 3197 CALLBACK_FUNC_DECL(SVGMatrixInverse) { | 3171 CALLBACK_FUNC_DECL(SVGMatrixInverse) { |
| 3198 INC_STATS(L"DOM.SVGMatrix.inverse()"); | 3172 INC_STATS(L"DOM.SVGMatrix.inverse()"); |
| 3199 AffineTransform imp = | 3173 AffineTransform imp = |
| 3200 *V8Proxy::FastToNativeObject<V8SVGPODTypeWrapper<AffineTransform> >( | 3174 *V8Proxy::ToNativeObject<V8SVGPODTypeWrapper<AffineTransform> >( |
| 3201 V8ClassIndex::SVGMATRIX, args.Holder()); | 3175 V8ClassIndex::SVGMATRIX, args.Holder()); |
| 3202 ExceptionCode ec = 0; | 3176 ExceptionCode ec = 0; |
| 3203 AffineTransform result = imp.inverse(); | 3177 AffineTransform result = imp.inverse(); |
| 3204 if (!imp.isInvertible()) { | 3178 if (!imp.isInvertible()) { |
| 3205 ec = SVGException::SVG_MATRIX_NOT_INVERTABLE; | 3179 ec = SVGException::SVG_MATRIX_NOT_INVERTABLE; |
| 3206 } | 3180 } |
| 3207 if (ec != 0) { | 3181 if (ec != 0) { |
| 3208 V8Proxy::SetDOMException(ec); | 3182 V8Proxy::SetDOMException(ec); |
| 3209 return v8::Handle<v8::Value>(); | 3183 return v8::Handle<v8::Value>(); |
| 3210 } | 3184 } |
| 3211 | 3185 |
| 3212 Peerable* peer = static_cast<Peerable*>( | 3186 Peerable* peer = static_cast<Peerable*>( |
| 3213 new V8SVGPODTypeWrapperCreatorReadOnly<AffineTransform>(result)); | 3187 new V8SVGPODTypeWrapperCreatorReadOnly<AffineTransform>(result)); |
| 3214 return V8Proxy::ToV8Object(V8ClassIndex::SVGMATRIX, peer); | 3188 return V8Proxy::ToV8Object(V8ClassIndex::SVGMATRIX, peer); |
| 3215 } | 3189 } |
| 3216 | 3190 |
| 3217 CALLBACK_FUNC_DECL(SVGMatrixRotateFromVector) { | 3191 CALLBACK_FUNC_DECL(SVGMatrixRotateFromVector) { |
| 3218 INC_STATS(L"DOM.SVGMatrix.rotateFromVector()"); | 3192 INC_STATS(L"DOM.SVGMatrix.rotateFromVector()"); |
| 3219 AffineTransform imp = | 3193 AffineTransform imp = |
| 3220 *V8Proxy::FastToNativeObject<V8SVGPODTypeWrapper<AffineTransform> >( | 3194 *V8Proxy::ToNativeObject<V8SVGPODTypeWrapper<AffineTransform> >( |
| 3221 V8ClassIndex::SVGMATRIX, args.Holder()); | 3195 V8ClassIndex::SVGMATRIX, args.Holder()); |
| 3222 ExceptionCode ec = 0; | 3196 ExceptionCode ec = 0; |
| 3223 float x = static_cast<float>(args[0]->NumberValue()); | 3197 float x = static_cast<float>(args[0]->NumberValue()); |
| 3224 float y = static_cast<float>(args[1]->NumberValue()); | 3198 float y = static_cast<float>(args[1]->NumberValue()); |
| 3225 AffineTransform result = imp; | 3199 AffineTransform result = imp; |
| 3226 result.rotateFromVector(x, y); | 3200 result.rotateFromVector(x, y); |
| 3227 if (x == 0.0 || y == 0.0) { | 3201 if (x == 0.0 || y == 0.0) { |
| 3228 ec = SVGException::SVG_INVALID_VALUE_ERR; | 3202 ec = SVGException::SVG_INVALID_VALUE_ERR; |
| 3229 } | 3203 } |
| 3230 if (ec != 0) { | 3204 if (ec != 0) { |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3285 } | 3259 } |
| 3286 | 3260 |
| 3287 return V8Proxy::CanAccess(target); | 3261 return V8Proxy::CanAccess(target); |
| 3288 } | 3262 } |
| 3289 | 3263 |
| 3290 | 3264 |
| 3291 INDEXED_ACCESS_CHECK(History) { | 3265 INDEXED_ACCESS_CHECK(History) { |
| 3292 ASSERT(V8ClassIndex::ToWrapperType(data) == V8ClassIndex::HISTORY); | 3266 ASSERT(V8ClassIndex::ToWrapperType(data) == V8ClassIndex::HISTORY); |
| 3293 // Only allow same origin access | 3267 // Only allow same origin access |
| 3294 History* imp = | 3268 History* imp = |
| 3295 V8Proxy::FastToNativeObject<History>(V8ClassIndex::HISTORY, host); | 3269 V8Proxy::ToNativeObject<History>(V8ClassIndex::HISTORY, host); |
| 3296 return V8Proxy::IsFromSameOrigin(imp->frame(), false); | 3270 return V8Proxy::IsFromSameOrigin(imp->frame(), false); |
| 3297 } | 3271 } |
| 3298 | 3272 |
| 3299 | 3273 |
| 3300 NAMED_ACCESS_CHECK(History) { | 3274 NAMED_ACCESS_CHECK(History) { |
| 3301 ASSERT(V8ClassIndex::ToWrapperType(data) == V8ClassIndex::HISTORY); | 3275 ASSERT(V8ClassIndex::ToWrapperType(data) == V8ClassIndex::HISTORY); |
| 3302 // Only allow same origin access | 3276 // Only allow same origin access |
| 3303 History* imp = | 3277 History* imp = |
| 3304 V8Proxy::FastToNativeObject<History>(V8ClassIndex::HISTORY, host); | 3278 V8Proxy::ToNativeObject<History>(V8ClassIndex::HISTORY, host); |
| 3305 return V8Proxy::IsFromSameOrigin(imp->frame(), false); | 3279 return V8Proxy::IsFromSameOrigin(imp->frame(), false); |
| 3306 } | 3280 } |
| 3307 | 3281 |
| 3308 | 3282 |
| 3309 INDEXED_ACCESS_CHECK(Location) { | 3283 INDEXED_ACCESS_CHECK(Location) { |
| 3310 ASSERT(V8ClassIndex::ToWrapperType(data) == V8ClassIndex::LOCATION); | 3284 ASSERT(V8ClassIndex::ToWrapperType(data) == V8ClassIndex::LOCATION); |
| 3311 // Only allow same origin access | 3285 // Only allow same origin access |
| 3312 Location* imp = | 3286 Location* imp = |
| 3313 V8Proxy::FastToNativeObject<Location>(V8ClassIndex::LOCATION, host); | 3287 V8Proxy::ToNativeObject<Location>(V8ClassIndex::LOCATION, host); |
| 3314 return V8Proxy::IsFromSameOrigin(imp->frame(), false); | 3288 return V8Proxy::IsFromSameOrigin(imp->frame(), false); |
| 3315 } | 3289 } |
| 3316 | 3290 |
| 3317 | 3291 |
| 3318 NAMED_ACCESS_CHECK(Location) { | 3292 NAMED_ACCESS_CHECK(Location) { |
| 3319 ASSERT(V8ClassIndex::ToWrapperType(data) == V8ClassIndex::LOCATION); | 3293 ASSERT(V8ClassIndex::ToWrapperType(data) == V8ClassIndex::LOCATION); |
| 3320 // Only allow same origin access | 3294 // Only allow same origin access |
| 3321 Location* imp = | 3295 Location* imp = |
| 3322 V8Proxy::FastToNativeObject<Location>(V8ClassIndex::LOCATION, host); | 3296 V8Proxy::ToNativeObject<Location>(V8ClassIndex::LOCATION, host); |
| 3323 return V8Proxy::IsFromSameOrigin(imp->frame(), false); | 3297 return V8Proxy::IsFromSameOrigin(imp->frame(), false); |
| 3324 } | 3298 } |
| 3325 | 3299 |
| 3326 | 3300 |
| 3327 #undef INDEXED_ACCESS_CHECK | 3301 #undef INDEXED_ACCESS_CHECK |
| 3328 #undef NAMED_ACCESS_CHECK | 3302 #undef NAMED_ACCESS_CHECK |
| 3329 #undef ACCESSOR_GETTER | 3303 #undef ACCESSOR_GETTER |
| 3330 #undef ACCESSOR_SETTER | 3304 #undef ACCESSOR_SETTER |
| 3331 #undef CALLBACK_FUNC_DECL | 3305 #undef CALLBACK_FUNC_DECL |
| 3332 #undef NAMED_PROPERTY_GETTER | 3306 #undef NAMED_PROPERTY_GETTER |
| 3333 #undef NAMED_PROPERTY_SETTER | 3307 #undef NAMED_PROPERTY_SETTER |
| 3334 #undef INDEXED_PROPERTY_GETTER | 3308 #undef INDEXED_PROPERTY_GETTER |
| 3335 #undef INDEXED_PROPERTY_SETTER | 3309 #undef INDEXED_PROPERTY_SETTER |
| 3336 | 3310 |
| 3337 | 3311 |
| 3338 // static | 3312 // static |
| 3339 Frame* V8Custom::GetTargetFrame(v8::Local<v8::Object> host, | 3313 Frame* V8Custom::GetTargetFrame(v8::Local<v8::Object> host, |
| 3340 v8::Local<v8::Value> data) { | 3314 v8::Local<v8::Value> data) { |
| 3341 Frame* target = 0; | 3315 Frame* target = 0; |
| 3342 switch (V8ClassIndex::ToWrapperType(data)) { | 3316 switch (V8ClassIndex::ToWrapperType(data)) { |
| 3343 case V8ClassIndex::DOMWINDOW: { | 3317 case V8ClassIndex::DOMWINDOW: { |
| 3344 v8::Handle<v8::Value> window = host->GetPrototype(); | 3318 v8::Handle<v8::Value> window = host->GetPrototype(); |
| 3345 DOMWindow* target_win = | 3319 DOMWindow* target_win = |
| 3346 V8Proxy::ToNativeObject<DOMWindow>(V8ClassIndex::DOMWINDOW, window); | 3320 V8Proxy::ToNativeObject<DOMWindow>(V8ClassIndex::DOMWINDOW, window); |
| 3347 target = target_win->frame(); | 3321 target = target_win->frame(); |
| 3348 break; | 3322 break; |
| 3349 } | 3323 } |
| 3350 case V8ClassIndex::LOCATION: { | 3324 case V8ClassIndex::LOCATION: { |
| 3351 History* imp = | 3325 History* imp = |
| 3352 V8Proxy::FastToNativeObject<History>(V8ClassIndex::HISTORY, host); | 3326 V8Proxy::ToNativeObject<History>(V8ClassIndex::HISTORY, host); |
| 3353 target = imp->frame(); | 3327 target = imp->frame(); |
| 3354 break; | 3328 break; |
| 3355 } | 3329 } |
| 3356 case V8ClassIndex::HISTORY: { | 3330 case V8ClassIndex::HISTORY: { |
| 3357 Location* imp = | 3331 Location* imp = |
| 3358 V8Proxy::FastToNativeObject<Location>(V8ClassIndex::LOCATION, host); | 3332 V8Proxy::ToNativeObject<Location>(V8ClassIndex::LOCATION, host); |
| 3359 target = imp->frame(); | 3333 target = imp->frame(); |
| 3360 break; | 3334 break; |
| 3361 } | 3335 } |
| 3362 } | 3336 } |
| 3363 return target; | 3337 return target; |
| 3364 } | 3338 } |
| 3365 | 3339 |
| 3366 #if ENABLE(SVG) | 3340 #if ENABLE(SVG) |
| 3367 V8ClassIndex::V8WrapperType V8Custom::DowncastSVGPathSeg(void* path_seg) { | 3341 V8ClassIndex::V8WrapperType V8Custom::DowncastSVGPathSeg(void* path_seg) { |
| 3368 WebCore::SVGPathSeg *real_path_seg = | 3342 WebCore::SVGPathSeg *real_path_seg = |
| (...skipping 29 matching lines...) Expand all Loading... |
| 3398 #undef MAKE_CASE | 3372 #undef MAKE_CASE |
| 3399 | 3373 |
| 3400 default: | 3374 default: |
| 3401 return V8ClassIndex::INVALID_CLASS_INDEX; | 3375 return V8ClassIndex::INVALID_CLASS_INDEX; |
| 3402 } | 3376 } |
| 3403 } | 3377 } |
| 3404 | 3378 |
| 3405 #endif // ENABLE(SVG) | 3379 #endif // ENABLE(SVG) |
| 3406 | 3380 |
| 3407 } // namespace WebCore | 3381 } // namespace WebCore |
| OLD | NEW |