Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 /* | 1 /* |
| 2 * Copyright (C) 2009 Google Inc. All rights reserved. | 2 * Copyright (C) 2009 Google Inc. All rights reserved. |
| 3 * | 3 * |
| 4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
| 5 * modification, are permitted provided that the following conditions are | 5 * modification, are permitted provided that the following conditions are |
| 6 * met: | 6 * met: |
| 7 * | 7 * |
| 8 * * Redistributions of source code must retain the above copyright | 8 * * Redistributions of source code must retain the above copyright |
| 9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
| 10 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
| (...skipping 274 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 285 | 285 |
| 286 static void getObjectParameter(const v8::FunctionCallbackInfo<v8::Value>& info, ObjectType objectType, ExceptionState& exceptionState) | 286 static void getObjectParameter(const v8::FunctionCallbackInfo<v8::Value>& info, ObjectType objectType, ExceptionState& exceptionState) |
| 287 { | 287 { |
| 288 if (info.Length() != 2) { | 288 if (info.Length() != 2) { |
| 289 exceptionState.throwTypeError(ExceptionMessages::notEnoughArguments(2, i nfo.Length())); | 289 exceptionState.throwTypeError(ExceptionMessages::notEnoughArguments(2, i nfo.Length())); |
| 290 exceptionState.throwIfNeeded(); | 290 exceptionState.throwIfNeeded(); |
| 291 return; | 291 return; |
| 292 } | 292 } |
| 293 | 293 |
| 294 WebGLRenderingContext* context = V8WebGLRenderingContext::toNative(info.Hold er()); | 294 WebGLRenderingContext* context = V8WebGLRenderingContext::toNative(info.Hold er()); |
| 295 unsigned target = toInt32(info[0], exceptionState); | 295 unsigned target; |
|
Jens Widell
2014/07/11 12:24:30
These uses of toInt32() shared a common problem: i
| |
| 296 if (exceptionState.throwIfNeeded()) | 296 unsigned pname; |
| 297 return; | 297 { |
| 298 unsigned pname = toInt32(info[1], exceptionState); | 298 v8::TryCatch block; |
| 299 if (exceptionState.throwIfNeeded()) | 299 V8RethrowTryCatchScope rethrow(block); |
| 300 return; | 300 TONATIVE_VOID_EXCEPTIONSTATE_INTERNAL(target, toUInt32(info[0], exceptio nState), exceptionState); |
| 301 TONATIVE_VOID_EXCEPTIONSTATE_INTERNAL(pname, toUInt32(info[1], exception State), exceptionState); | |
| 302 } | |
| 301 WebGLGetInfo args; | 303 WebGLGetInfo args; |
| 302 switch (objectType) { | 304 switch (objectType) { |
| 303 case kBuffer: | 305 case kBuffer: |
| 304 args = context->getBufferParameter(target, pname); | 306 args = context->getBufferParameter(target, pname); |
| 305 break; | 307 break; |
| 306 case kRenderbuffer: | 308 case kRenderbuffer: |
| 307 args = context->getRenderbufferParameter(target, pname); | 309 args = context->getRenderbufferParameter(target, pname); |
| 308 break; | 310 break; |
| 309 case kTexture: | 311 case kTexture: |
| 310 args = context->getTexParameter(target, pname); | 312 args = context->getTexParameter(target, pname); |
| (...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 381 void V8WebGLRenderingContext::getFramebufferAttachmentParameterMethodCustom(cons t v8::FunctionCallbackInfo<v8::Value>& info) | 383 void V8WebGLRenderingContext::getFramebufferAttachmentParameterMethodCustom(cons t v8::FunctionCallbackInfo<v8::Value>& info) |
| 382 { | 384 { |
| 383 ExceptionState exceptionState(ExceptionState::ExecutionContext, "getFramebuf ferAttachmentParameter", "WebGLRenderingContext", info.Holder(), info.GetIsolate ()); | 385 ExceptionState exceptionState(ExceptionState::ExecutionContext, "getFramebuf ferAttachmentParameter", "WebGLRenderingContext", info.Holder(), info.GetIsolate ()); |
| 384 if (info.Length() != 3) { | 386 if (info.Length() != 3) { |
| 385 exceptionState.throwTypeError(ExceptionMessages::notEnoughArguments(3, i nfo.Length())); | 387 exceptionState.throwTypeError(ExceptionMessages::notEnoughArguments(3, i nfo.Length())); |
| 386 exceptionState.throwIfNeeded(); | 388 exceptionState.throwIfNeeded(); |
| 387 return; | 389 return; |
| 388 } | 390 } |
| 389 | 391 |
| 390 WebGLRenderingContext* context = V8WebGLRenderingContext::toNative(info.Hold er()); | 392 WebGLRenderingContext* context = V8WebGLRenderingContext::toNative(info.Hold er()); |
| 391 unsigned target = toInt32(info[0]); | 393 unsigned target; |
| 392 unsigned attachment = toInt32(info[1], exceptionState); | 394 unsigned attachment; |
| 393 if (exceptionState.throwIfNeeded()) | 395 unsigned pname; |
| 394 return; | 396 { |
| 395 unsigned pname = toInt32(info[2], exceptionState); | 397 v8::TryCatch block; |
| 396 if (exceptionState.throwIfNeeded()) | 398 V8RethrowTryCatchScope rethrow(block); |
| 397 return; | 399 TONATIVE_VOID_EXCEPTIONSTATE_INTERNAL(target, toUInt32(info[0], exceptio nState), exceptionState); |
| 400 TONATIVE_VOID_EXCEPTIONSTATE_INTERNAL(attachment, toUInt32(info[1], exce ptionState), exceptionState); | |
| 401 TONATIVE_VOID_EXCEPTIONSTATE_INTERNAL(pname, toUInt32(info[2], exception State), exceptionState); | |
| 402 } | |
| 398 WebGLGetInfo args = context->getFramebufferAttachmentParameter(target, attac hment, pname); | 403 WebGLGetInfo args = context->getFramebufferAttachmentParameter(target, attac hment, pname); |
| 399 v8SetReturnValue(info, toV8Object(args, info.Holder(), info.GetIsolate())); | 404 v8SetReturnValue(info, toV8Object(args, info.Holder(), info.GetIsolate())); |
| 400 } | 405 } |
| 401 | 406 |
| 402 void V8WebGLRenderingContext::getParameterMethodCustom(const v8::FunctionCallbac kInfo<v8::Value>& info) | 407 void V8WebGLRenderingContext::getParameterMethodCustom(const v8::FunctionCallbac kInfo<v8::Value>& info) |
| 403 { | 408 { |
| 404 ExceptionState exceptionState(ExceptionState::ExecutionContext, "getParamete r", "WebGLRenderingContext", info.Holder(), info.GetIsolate()); | 409 ExceptionState exceptionState(ExceptionState::ExecutionContext, "getParamete r", "WebGLRenderingContext", info.Holder(), info.GetIsolate()); |
| 405 if (info.Length() != 1) { | 410 if (info.Length() != 1) { |
| 406 exceptionState.throwTypeError(ExceptionMessages::notEnoughArguments(1, i nfo.Length())); | 411 exceptionState.throwTypeError(ExceptionMessages::notEnoughArguments(1, i nfo.Length())); |
| 407 exceptionState.throwIfNeeded(); | 412 exceptionState.throwIfNeeded(); |
| 408 return; | 413 return; |
| 409 } | 414 } |
| 410 | 415 |
| 411 WebGLRenderingContext* context = V8WebGLRenderingContext::toNative(info.Hold er()); | 416 WebGLRenderingContext* context = V8WebGLRenderingContext::toNative(info.Hold er()); |
| 412 unsigned pname = toInt32(info[0], exceptionState); | 417 unsigned pname; |
| 413 if (exceptionState.throwIfNeeded()) | 418 { |
| 414 return; | 419 v8::TryCatch block; |
| 420 V8RethrowTryCatchScope rethrow(block); | |
| 421 TONATIVE_VOID_EXCEPTIONSTATE_INTERNAL(pname, toUInt32(info[0], exception State), exceptionState); | |
| 422 } | |
| 415 WebGLGetInfo args = context->getParameter(pname); | 423 WebGLGetInfo args = context->getParameter(pname); |
| 416 v8SetReturnValue(info, toV8Object(args, info.Holder(), info.GetIsolate())); | 424 v8SetReturnValue(info, toV8Object(args, info.Holder(), info.GetIsolate())); |
| 417 } | 425 } |
| 418 | 426 |
| 419 void V8WebGLRenderingContext::getProgramParameterMethodCustom(const v8::Function CallbackInfo<v8::Value>& info) | 427 void V8WebGLRenderingContext::getProgramParameterMethodCustom(const v8::Function CallbackInfo<v8::Value>& info) |
| 420 { | 428 { |
| 421 ExceptionState exceptionState(ExceptionState::ExecutionContext, "getProgramP arameter", "WebGLRenderingContext", info.Holder(), info.GetIsolate()); | 429 ExceptionState exceptionState(ExceptionState::ExecutionContext, "getProgramP arameter", "WebGLRenderingContext", info.Holder(), info.GetIsolate()); |
| 422 if (info.Length() != 2) { | 430 if (info.Length() != 2) { |
| 423 exceptionState.throwTypeError(ExceptionMessages::notEnoughArguments(2, i nfo.Length())); | 431 exceptionState.throwTypeError(ExceptionMessages::notEnoughArguments(2, i nfo.Length())); |
| 424 exceptionState.throwIfNeeded(); | 432 exceptionState.throwIfNeeded(); |
| 425 return; | 433 return; |
| 426 } | 434 } |
| 427 | 435 |
| 428 const int programArgumentIndex = 0; | |
| 429 WebGLRenderingContext* context = V8WebGLRenderingContext::toNative(info.Hold er()); | 436 WebGLRenderingContext* context = V8WebGLRenderingContext::toNative(info.Hold er()); |
| 430 if (info.Length() > 0 && !isUndefinedOrNull(info[programArgumentIndex]) && ! V8WebGLProgram::hasInstance(info[programArgumentIndex], info.GetIsolate())) { | 437 WebGLProgram* program; |
| 431 exceptionState.throwTypeError(ExceptionMessages::argumentNullOrIncorrect Type(programArgumentIndex + 1, "WebGLProgram")); | 438 unsigned pname; |
| 432 exceptionState.throwIfNeeded(); | 439 { |
| 433 return; | 440 v8::TryCatch block; |
| 441 V8RethrowTryCatchScope rethrow(block); | |
| 442 if (info.Length() > 0 && !isUndefinedOrNull(info[0]) && !V8WebGLProgram: :hasInstance(info[0], info.GetIsolate())) { | |
| 443 exceptionState.throwTypeError("parameter 1 is not of type 'WebGLProg ram'."); | |
| 444 exceptionState.throwIfNeeded(); | |
| 445 return; | |
| 446 } | |
| 447 TONATIVE_VOID_INTERNAL(program, V8WebGLProgram::toNativeWithTypeCheck(in fo.GetIsolate(), info[0])); | |
| 448 TONATIVE_VOID_EXCEPTIONSTATE_INTERNAL(pname, toUInt32(info[1], exception State), exceptionState); | |
| 434 } | 449 } |
| 435 WebGLProgram* program = V8WebGLProgram::toNativeWithTypeCheck(info.GetIsolat e(), info[programArgumentIndex]); | |
| 436 unsigned pname = toInt32(info[1], exceptionState); | |
| 437 if (exceptionState.throwIfNeeded()) | |
| 438 return; | |
| 439 WebGLGetInfo args = context->getProgramParameter(program, pname); | 450 WebGLGetInfo args = context->getProgramParameter(program, pname); |
| 440 v8SetReturnValue(info, toV8Object(args, info.Holder(), info.GetIsolate())); | 451 v8SetReturnValue(info, toV8Object(args, info.Holder(), info.GetIsolate())); |
| 441 } | 452 } |
| 442 | 453 |
| 443 void V8WebGLRenderingContext::getRenderbufferParameterMethodCustom(const v8::Fun ctionCallbackInfo<v8::Value>& info) | 454 void V8WebGLRenderingContext::getRenderbufferParameterMethodCustom(const v8::Fun ctionCallbackInfo<v8::Value>& info) |
| 444 { | 455 { |
| 445 ExceptionState exceptionState(ExceptionState::ExecutionContext, "getRenderbu fferParameter", "WebGLRenderingContext", info.Holder(), info.GetIsolate()); | 456 ExceptionState exceptionState(ExceptionState::ExecutionContext, "getRenderbu fferParameter", "WebGLRenderingContext", info.Holder(), info.GetIsolate()); |
| 446 getObjectParameter(info, kRenderbuffer, exceptionState); | 457 getObjectParameter(info, kRenderbuffer, exceptionState); |
| 447 } | 458 } |
| 448 | 459 |
| 449 void V8WebGLRenderingContext::getShaderParameterMethodCustom(const v8::FunctionC allbackInfo<v8::Value>& info) | 460 void V8WebGLRenderingContext::getShaderParameterMethodCustom(const v8::FunctionC allbackInfo<v8::Value>& info) |
| 450 { | 461 { |
| 451 ExceptionState exceptionState(ExceptionState::ExecutionContext, "getShaderPa rameter", "WebGLRenderingContext", info.Holder(), info.GetIsolate()); | 462 ExceptionState exceptionState(ExceptionState::ExecutionContext, "getShaderPa rameter", "WebGLRenderingContext", info.Holder(), info.GetIsolate()); |
| 452 if (info.Length() != 2) { | 463 if (info.Length() != 2) { |
| 453 exceptionState.throwTypeError(ExceptionMessages::notEnoughArguments(2, i nfo.Length())); | 464 exceptionState.throwTypeError(ExceptionMessages::notEnoughArguments(2, i nfo.Length())); |
| 454 exceptionState.throwIfNeeded(); | 465 exceptionState.throwIfNeeded(); |
| 455 return; | 466 return; |
| 456 } | 467 } |
| 457 | 468 |
| 458 const int shaderArgumentIndex = 0; | |
| 459 WebGLRenderingContext* context = V8WebGLRenderingContext::toNative(info.Hold er()); | 469 WebGLRenderingContext* context = V8WebGLRenderingContext::toNative(info.Hold er()); |
| 460 if (info.Length() > 0 && !isUndefinedOrNull(info[shaderArgumentIndex]) && !V 8WebGLShader::hasInstance(info[shaderArgumentIndex], info.GetIsolate())) { | 470 WebGLShader* shader; |
| 461 exceptionState.throwTypeError(ExceptionMessages::argumentNullOrIncorrect Type(shaderArgumentIndex + 1, "WebGLShader")); | 471 unsigned pname; |
| 462 exceptionState.throwIfNeeded(); | 472 { |
| 463 return; | 473 v8::TryCatch block; |
| 474 V8RethrowTryCatchScope rethrow(block); | |
| 475 if (info.Length() > 0 && !isUndefinedOrNull(info[0]) && !V8WebGLShader:: hasInstance(info[0], info.GetIsolate())) { | |
| 476 exceptionState.throwTypeError("parameter 1 is not of type 'WebGLShad er'."); | |
| 477 exceptionState.throwIfNeeded(); | |
| 478 return; | |
| 479 } | |
| 480 TONATIVE_VOID_INTERNAL(shader, V8WebGLShader::toNativeWithTypeCheck(info .GetIsolate(), info[0])); | |
| 481 TONATIVE_VOID_EXCEPTIONSTATE_INTERNAL(pname, toUInt32(info[1], exception State), exceptionState); | |
| 464 } | 482 } |
| 465 WebGLShader* shader = V8WebGLShader::toNativeWithTypeCheck(info.GetIsolate() , info[shaderArgumentIndex]); | |
| 466 unsigned pname = toInt32(info[1], exceptionState); | |
| 467 if (exceptionState.throwIfNeeded()) | |
| 468 return; | |
| 469 WebGLGetInfo args = context->getShaderParameter(shader, pname); | 483 WebGLGetInfo args = context->getShaderParameter(shader, pname); |
| 470 v8SetReturnValue(info, toV8Object(args, info.Holder(), info.GetIsolate())); | 484 v8SetReturnValue(info, toV8Object(args, info.Holder(), info.GetIsolate())); |
| 471 } | 485 } |
| 472 | 486 |
| 473 void V8WebGLRenderingContext::getTexParameterMethodCustom(const v8::FunctionCall backInfo<v8::Value>& info) | 487 void V8WebGLRenderingContext::getTexParameterMethodCustom(const v8::FunctionCall backInfo<v8::Value>& info) |
| 474 { | 488 { |
| 475 ExceptionState exceptionState(ExceptionState::ExecutionContext, "getTexParam eter", "WebGLRenderingContext", info.Holder(), info.GetIsolate()); | 489 ExceptionState exceptionState(ExceptionState::ExecutionContext, "getTexParam eter", "WebGLRenderingContext", info.Holder(), info.GetIsolate()); |
| 476 getObjectParameter(info, kTexture, exceptionState); | 490 getObjectParameter(info, kTexture, exceptionState); |
| 477 } | 491 } |
| 478 | 492 |
| 479 void V8WebGLRenderingContext::getUniformMethodCustom(const v8::FunctionCallbackI nfo<v8::Value>& info) | 493 void V8WebGLRenderingContext::getUniformMethodCustom(const v8::FunctionCallbackI nfo<v8::Value>& info) |
| 480 { | 494 { |
| 481 ExceptionState exceptionState(ExceptionState::ExecutionContext, "getUniform" , "WebGLRenderingContext", info.Holder(), info.GetIsolate()); | 495 ExceptionState exceptionState(ExceptionState::ExecutionContext, "getUniform" , "WebGLRenderingContext", info.Holder(), info.GetIsolate()); |
| 482 if (info.Length() != 2) { | 496 if (info.Length() != 2) { |
| 483 exceptionState.throwTypeError(ExceptionMessages::notEnoughArguments(2, i nfo.Length())); | 497 exceptionState.throwTypeError(ExceptionMessages::notEnoughArguments(2, i nfo.Length())); |
| 484 exceptionState.throwIfNeeded(); | 498 exceptionState.throwIfNeeded(); |
| 485 return; | 499 return; |
| 486 } | 500 } |
| 487 | 501 |
| 488 const int programArgumentIndex = 0; | |
| 489 WebGLRenderingContext* context = V8WebGLRenderingContext::toNative(info.Hold er()); | 502 WebGLRenderingContext* context = V8WebGLRenderingContext::toNative(info.Hold er()); |
| 490 if (info.Length() > 0 && !isUndefinedOrNull(info[programArgumentIndex]) && ! V8WebGLProgram::hasInstance(info[programArgumentIndex], info.GetIsolate())) { | 503 WebGLProgram* program; |
| 491 exceptionState.throwTypeError(ExceptionMessages::argumentNullOrIncorrect Type(programArgumentIndex + 1, "WebGLProgram")); | 504 WebGLUniformLocation* location; |
| 492 exceptionState.throwIfNeeded(); | 505 { |
| 493 return; | 506 v8::TryCatch block; |
| 507 V8RethrowTryCatchScope rethrow(block); | |
| 508 if (info.Length() > 0 && !isUndefinedOrNull(info[0]) && !V8WebGLProgram: :hasInstance(info[0], info.GetIsolate())) { | |
| 509 throwTypeError(ExceptionMessages::failedToExecute("getUniform", "Web GLRenderingContext", "parameter 1 is not of type 'WebGLProgram'."), info.GetIsol ate()); | |
| 510 return; | |
| 511 } | |
| 512 TONATIVE_VOID_INTERNAL(program, V8WebGLProgram::toNativeWithTypeCheck(in fo.GetIsolate(), info[0])); | |
| 513 if (info.Length() > 1 && !isUndefinedOrNull(info[1]) && !V8WebGLUniformL ocation::hasInstance(info[1], info.GetIsolate())) { | |
| 514 throwTypeError(ExceptionMessages::failedToExecute("getUniform", "Web GLRenderingContext", "parameter 2 is not of type 'WebGLUniformLocation'."), info .GetIsolate()); | |
| 515 return; | |
| 516 } | |
| 517 TONATIVE_VOID_INTERNAL(location, V8WebGLUniformLocation::toNativeWithTyp eCheck(info.GetIsolate(), info[1])); | |
| 494 } | 518 } |
| 495 WebGLProgram* program = V8WebGLProgram::toNativeWithTypeCheck(info.GetIsolat e(), info[programArgumentIndex]); | |
| 496 | |
| 497 const int uniformArgumentIndex = 1; | |
| 498 if (info.Length() > 1 && !isUndefinedOrNull(info[uniformArgumentIndex]) && ! V8WebGLUniformLocation::hasInstance(info[uniformArgumentIndex], info.GetIsolate( ))) { | |
| 499 exceptionState.throwTypeError(ExceptionMessages::argumentNullOrIncorrect Type(uniformArgumentIndex + 1, "WebGLUniformLocation")); | |
| 500 exceptionState.throwIfNeeded(); | |
| 501 return; | |
| 502 } | |
| 503 const int uniformLocationArgumentIndex = 1; | |
| 504 WebGLUniformLocation* location = toWebGLUniformLocation(info[uniformLocation ArgumentIndex], info.GetIsolate()); | |
| 505 | |
| 506 WebGLGetInfo args = context->getUniform(program, location); | 519 WebGLGetInfo args = context->getUniform(program, location); |
| 507 v8SetReturnValue(info, toV8Object(args, info.Holder(), info.GetIsolate())); | 520 v8SetReturnValue(info, toV8Object(args, info.Holder(), info.GetIsolate())); |
| 508 } | 521 } |
| 509 | 522 |
| 510 void V8WebGLRenderingContext::getVertexAttribMethodCustom(const v8::FunctionCall backInfo<v8::Value>& info) | 523 void V8WebGLRenderingContext::getVertexAttribMethodCustom(const v8::FunctionCall backInfo<v8::Value>& info) |
| 511 { | 524 { |
| 512 ExceptionState exceptionState(ExceptionState::ExecutionContext, "getVertexAt trib", "WebGLRenderingContext", info.Holder(), info.GetIsolate()); | 525 ExceptionState exceptionState(ExceptionState::ExecutionContext, "getVertexAt trib", "WebGLRenderingContext", info.Holder(), info.GetIsolate()); |
| 513 getObjectParameter(info, kVertexAttrib, exceptionState); | 526 getObjectParameter(info, kVertexAttrib, exceptionState); |
| 514 } | 527 } |
| 515 | 528 |
| (...skipping 326 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 842 vertexAttribAndUniformHelperf(info, kVertexAttrib3v, exceptionState); | 855 vertexAttribAndUniformHelperf(info, kVertexAttrib3v, exceptionState); |
| 843 } | 856 } |
| 844 | 857 |
| 845 void V8WebGLRenderingContext::vertexAttrib4fvMethodCustom(const v8::FunctionCall backInfo<v8::Value>& info) | 858 void V8WebGLRenderingContext::vertexAttrib4fvMethodCustom(const v8::FunctionCall backInfo<v8::Value>& info) |
| 846 { | 859 { |
| 847 ExceptionState exceptionState(ExceptionState::ExecutionContext, "vertexAttri b4fv", "WebGLRenderingContext", info.Holder(), info.GetIsolate()); | 860 ExceptionState exceptionState(ExceptionState::ExecutionContext, "vertexAttri b4fv", "WebGLRenderingContext", info.Holder(), info.GetIsolate()); |
| 848 vertexAttribAndUniformHelperf(info, kVertexAttrib4v, exceptionState); | 861 vertexAttribAndUniformHelperf(info, kVertexAttrib4v, exceptionState); |
| 849 } | 862 } |
| 850 | 863 |
| 851 } // namespace WebCore | 864 } // namespace WebCore |
| OLD | NEW |