| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2004, 2006 Apple Computer, Inc. All rights reserved. | 2 * Copyright (C) 2004, 2006 Apple Computer, Inc. All rights reserved. |
| 3 * Copyright (C) 2007, 2008, 2009 Google, Inc. All rights reserved. | 3 * Copyright (C) 2007, 2008, 2009 Google, Inc. All rights reserved. |
| 4 * Copyright (C) 2014 Opera Software ASA. All rights reserved. | 4 * Copyright (C) 2014 Opera Software ASA. All rights reserved. |
| 5 * | 5 * |
| 6 * Redistribution and use in source and binary forms, with or without | 6 * Redistribution and use in source and binary forms, with or without |
| 7 * modification, are permitted provided that the following conditions | 7 * modification, are permitted provided that the following conditions |
| 8 * are met: | 8 * are met: |
| 9 * 1. Redistributions of source code must retain the above copyright | 9 * 1. Redistributions of source code must retain the above copyright |
| 10 * notice, this list of conditions and the following disclaimer. | 10 * notice, this list of conditions and the following disclaimer. |
| (...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 90 ASSERT(npObject->_class == &V8NPObjectClass); | 90 ASSERT(npObject->_class == &V8NPObjectClass); |
| 91 V8NPObject* object = reinterpret_cast<V8NPObject*>(npObject); | 91 V8NPObject* object = reinterpret_cast<V8NPObject*>(npObject); |
| 92 LocalDOMWindow* window = object->rootObject; | 92 LocalDOMWindow* window = object->rootObject; |
| 93 if (!window || !window->isCurrentlyDisplayedInFrame()) | 93 if (!window || !window->isCurrentlyDisplayedInFrame()) |
| 94 return 0; | 94 return 0; |
| 95 v8::HandleScope handleScope(isolate); | 95 v8::HandleScope handleScope(isolate); |
| 96 v8::Local<v8::Context> context = toV8Context(object->rootObject->frame(), DO
MWrapperWorld::mainWorld()); | 96 v8::Local<v8::Context> context = toV8Context(object->rootObject->frame(), DO
MWrapperWorld::mainWorld()); |
| 97 return ScriptState::from(context); | 97 return ScriptState::from(context); |
| 98 } | 98 } |
| 99 | 99 |
| 100 static PassOwnPtr<v8::Local<v8::Value>[]> createValueListFromVariantArgs(const N
PVariant* arguments, uint32_t argumentCount, NPObject* owner, v8::Isolate* isola
te) | 100 static PassOwnPtr<v8::Local<v8::Value>[]> createValueListFromVariantArgs(v8::Iso
late* isolate, const NPVariant* arguments, uint32_t argumentCount, NPObject* own
er) |
| 101 { | 101 { |
| 102 OwnPtr<v8::Local<v8::Value>[]> argv = adoptArrayPtr(new v8::Local<v8::Value>
[argumentCount]); | 102 OwnPtr<v8::Local<v8::Value>[]> argv = adoptArrayPtr(new v8::Local<v8::Value>
[argumentCount]); |
| 103 for (uint32_t index = 0; index < argumentCount; index++) { | 103 for (uint32_t index = 0; index < argumentCount; index++) { |
| 104 const NPVariant* arg = &arguments[index]; | 104 const NPVariant* arg = &arguments[index]; |
| 105 argv[index] = convertNPVariantToV8Object(isolate, arg, owner); | 105 argv[index] = convertNPVariantToV8Object(isolate, arg, owner); |
| 106 } | 106 } |
| 107 return argv.release(); | 107 return argv.release(); |
| 108 } | 108 } |
| 109 | 109 |
| 110 // Create an identifier (null terminated utf8 char*) from the NPIdentifier. | 110 // Create an identifier (null terminated utf8 char*) from the NPIdentifier. |
| (...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 265 if (functionObject->IsUndefined()) { | 265 if (functionObject->IsUndefined()) { |
| 266 VOID_TO_NPVARIANT(*result); | 266 VOID_TO_NPVARIANT(*result); |
| 267 return false; | 267 return false; |
| 268 } | 268 } |
| 269 | 269 |
| 270 LocalFrame* frame = v8NpObject->rootObject->frame(); | 270 LocalFrame* frame = v8NpObject->rootObject->frame(); |
| 271 ASSERT(frame); | 271 ASSERT(frame); |
| 272 | 272 |
| 273 // Call the function object. | 273 // Call the function object. |
| 274 v8::Local<v8::Function> function = v8::Local<v8::Function>::Cast(functionObj
ect); | 274 v8::Local<v8::Function> function = v8::Local<v8::Function>::Cast(functionObj
ect); |
| 275 OwnPtr<v8::Local<v8::Value>[]> argv = createValueListFromVariantArgs(argumen
ts, argumentCount, npObject, isolate); | 275 OwnPtr<v8::Local<v8::Value>[]> argv = createValueListFromVariantArgs(isolate
, arguments, argumentCount, npObject); |
| 276 v8::Local<v8::Value> resultObject = frame->script().callFunction(function, v
8Object, argumentCount, argv.get()); | 276 v8::Local<v8::Value> resultObject = frame->script().callFunction(function, v
8Object, argumentCount, argv.get()); |
| 277 | 277 |
| 278 // If we had an error, return false. The spec is a little unclear here, but
says "Returns true if the method was | 278 // If we had an error, return false. The spec is a little unclear here, but
says "Returns true if the method was |
| 279 // successfully invoked". If we get an error return value, was that success
fully invoked? | 279 // successfully invoked". If we get an error return value, was that success
fully invoked? |
| 280 if (resultObject.IsEmpty()) | 280 if (resultObject.IsEmpty()) |
| 281 return false; | 281 return false; |
| 282 | 282 |
| 283 convertV8ObjectToNPVariant(isolate, resultObject, npObject, result); | 283 convertV8ObjectToNPVariant(isolate, resultObject, npObject, result); |
| 284 return true; | 284 return true; |
| 285 } | 285 } |
| (...skipping 28 matching lines...) Expand all Loading... |
| 314 v8::Local<v8::Object> functionObject = v8::Local<v8::Object>::New(isolate, v
8NpObject->v8Object); | 314 v8::Local<v8::Object> functionObject = v8::Local<v8::Object>::New(isolate, v
8NpObject->v8Object); |
| 315 if (!functionObject->IsFunction()) | 315 if (!functionObject->IsFunction()) |
| 316 return false; | 316 return false; |
| 317 | 317 |
| 318 v8::Local<v8::Value> resultObject; | 318 v8::Local<v8::Value> resultObject; |
| 319 v8::Local<v8::Function> function = v8::Local<v8::Function>::Cast(functionObj
ect); | 319 v8::Local<v8::Function> function = v8::Local<v8::Function>::Cast(functionObj
ect); |
| 320 if (!function->IsNull()) { | 320 if (!function->IsNull()) { |
| 321 LocalFrame* frame = v8NpObject->rootObject->frame(); | 321 LocalFrame* frame = v8NpObject->rootObject->frame(); |
| 322 ASSERT(frame); | 322 ASSERT(frame); |
| 323 | 323 |
| 324 OwnPtr<v8::Local<v8::Value>[]> argv = createValueListFromVariantArgs(arg
uments, argumentCount, npObject, isolate); | 324 OwnPtr<v8::Local<v8::Value>[]> argv = createValueListFromVariantArgs(iso
late, arguments, argumentCount, npObject); |
| 325 resultObject = frame->script().callFunction(function, functionObject, ar
gumentCount, argv.get()); | 325 resultObject = frame->script().callFunction(function, functionObject, ar
gumentCount, argv.get()); |
| 326 } | 326 } |
| 327 // If we had an error, return false. The spec is a little unclear here, but
says "Returns true if the method was | 327 // If we had an error, return false. The spec is a little unclear here, but
says "Returns true if the method was |
| 328 // successfully invoked". If we get an error return value, was that success
fully invoked? | 328 // successfully invoked". If we get an error return value, was that success
fully invoked? |
| 329 if (resultObject.IsEmpty()) | 329 if (resultObject.IsEmpty()) |
| 330 return false; | 330 return false; |
| 331 | 331 |
| 332 convertV8ObjectToNPVariant(isolate, resultObject, npObject, result); | 332 convertV8ObjectToNPVariant(isolate, resultObject, npObject, result); |
| 333 return true; | 333 return true; |
| 334 } | 334 } |
| (...skipping 267 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 602 return false; | 602 return false; |
| 603 | 603 |
| 604 // Call the constructor. | 604 // Call the constructor. |
| 605 v8::Local<v8::Value> resultObject; | 605 v8::Local<v8::Value> resultObject; |
| 606 v8::Local<v8::Function> ctor = v8::Local<v8::Function>::Cast(ctorObj); | 606 v8::Local<v8::Function> ctor = v8::Local<v8::Function>::Cast(ctorObj); |
| 607 if (ctor->IsNull()) | 607 if (ctor->IsNull()) |
| 608 return false; | 608 return false; |
| 609 | 609 |
| 610 LocalFrame* frame = object->rootObject->frame(); | 610 LocalFrame* frame = object->rootObject->frame(); |
| 611 ASSERT(frame); | 611 ASSERT(frame); |
| 612 OwnPtr<v8::Local<v8::Value>[]> argv = createValueListFromVariantArgs(arg
uments, argumentCount, npObject, scriptState->isolate()); | 612 OwnPtr<v8::Local<v8::Value>[]> argv = createValueListFromVariantArgs(scr
iptState->isolate(), arguments, argumentCount, npObject); |
| 613 if (!V8ObjectConstructor::newInstanceInDocument(scriptState->isolate(),
ctor, argumentCount, argv.get(), frame ? frame->document() : 0).ToLocal(&resultO
bject)) | 613 if (!V8ObjectConstructor::newInstanceInDocument(scriptState->isolate(),
ctor, argumentCount, argv.get(), frame ? frame->document() : 0).ToLocal(&resultO
bject)) |
| 614 return false; | 614 return false; |
| 615 | 615 |
| 616 convertV8ObjectToNPVariant(scriptState->isolate(), resultObject, npObjec
t, result); | 616 convertV8ObjectToNPVariant(scriptState->isolate(), resultObject, npObjec
t, result); |
| 617 return true; | 617 return true; |
| 618 } | 618 } |
| 619 | 619 |
| 620 if (NP_CLASS_STRUCT_VERSION_HAS_CTOR(npObject->_class) && npObject->_class->
construct) | 620 if (NP_CLASS_STRUCT_VERSION_HAS_CTOR(npObject->_class) && npObject->_class->
construct) |
| 621 return npObject->_class->construct(npObject, arguments, argumentCount, r
esult); | 621 return npObject->_class->construct(npObject, arguments, argumentCount, r
esult); |
| 622 | 622 |
| 623 return false; | 623 return false; |
| 624 } | 624 } |
| OLD | NEW |