| OLD | NEW |
| 1 // Copyright (c) 2008, Google Inc. | 1 // Copyright (c) 2008, Google Inc. |
| 2 // All rights reserved. | 2 // 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 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 97 case INVOKE_METHOD: | 97 case INVOKE_METHOD: |
| 98 if (npobject->_class->invoke) { | 98 if (npobject->_class->invoke) { |
| 99 v8::Handle<v8::String> function_name(v8::String::Cast(*args.Data()))
; | 99 v8::Handle<v8::String> function_name(v8::String::Cast(*args.Data()))
; |
| 100 NPIdentifier ident = getStringIdentifier(function_name); | 100 NPIdentifier ident = getStringIdentifier(function_name); |
| 101 npobject->_class->invoke(npobject, ident, npArgs, argc, &result); | 101 npobject->_class->invoke(npobject, ident, npArgs, argc, &result); |
| 102 } | 102 } |
| 103 break; | 103 break; |
| 104 case INVOKE_DEFAULT: | 104 case INVOKE_DEFAULT: |
| 105 if (npobject->_class->invokeDefault) | 105 if (npobject->_class->invokeDefault) |
| 106 npobject->_class->invokeDefault(npobject, npArgs, argc, &result); | 106 npobject->_class->invokeDefault(npobject, npArgs, argc, &result); |
| 107 // The call might be a construct call on an NPObject. |
| 108 // See http://code.google.com/p/chromium/issues/detail?id=3285 |
| 109 // |
| 110 // TODO: when V8 passes in the correct flag args.is_construct_call_, |
| 111 // make a separate NPN_Construct case. |
| 112 else if (npobject->_class->construct) |
| 113 npobject->_class->construct(npobject, npArgs, argc, &result); |
| 107 break; | 114 break; |
| 108 default: | 115 default: |
| 109 break; | 116 break; |
| 110 } | 117 } |
| 111 | 118 |
| 112 for (int i=0; i < argc; i++) | 119 for (int i=0; i < argc; i++) |
| 113 NPN_ReleaseVariantValue(&npArgs[i]); | 120 NPN_ReleaseVariantValue(&npArgs[i]); |
| 114 delete[] npArgs; | 121 delete[] npArgs; |
| 115 | 122 |
| 116 // unwrap return values | 123 // unwrap return values |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 167 npobject->_class->getProperty) { | 174 npobject->_class->getProperty) { |
| 168 | 175 |
| 169 NPVariant result; | 176 NPVariant result; |
| 170 VOID_TO_NPVARIANT(result); | 177 VOID_TO_NPVARIANT(result); |
| 171 if (!npobject->_class->getProperty(npobject, ident, &result)) | 178 if (!npobject->_class->getProperty(npobject, ident, &result)) |
| 172 return v8::Handle<v8::Value>(); | 179 return v8::Handle<v8::Value>(); |
| 173 | 180 |
| 174 v8::Handle<v8::Value> rv = convertNPVariantToV8Object(&result, npobject)
; | 181 v8::Handle<v8::Value> rv = convertNPVariantToV8Object(&result, npobject)
; |
| 175 NPN_ReleaseVariantValue(&result); | 182 NPN_ReleaseVariantValue(&result); |
| 176 return rv; | 183 return rv; |
| 177 } else if (key->IsString() && npobject->_class->hasMethod && npobject->_clas
s->hasMethod(npobject, ident)) { | 184 |
| 185 } else if (key->IsString() && |
| 186 npobject->_class->hasMethod && |
| 187 npobject->_class->hasMethod(npobject, ident)) { |
| 188 |
| 178 PrivateIdentifier* id = static_cast<PrivateIdentifier*>(ident); | 189 PrivateIdentifier* id = static_cast<PrivateIdentifier*>(ident); |
| 179 v8::Persistent<v8::FunctionTemplate> desc = static_template_map.get(id); | 190 v8::Persistent<v8::FunctionTemplate> desc = static_template_map.get(id); |
| 180 // Cache templates using identifier as the key. | 191 // Cache templates using identifier as the key. |
| 181 if (desc.IsEmpty()) { | 192 if (desc.IsEmpty()) { |
| 182 // Create a new template | 193 // Create a new template |
| 183 v8::Local<v8::FunctionTemplate> temp = v8::FunctionTemplate::New(); | 194 v8::Local<v8::FunctionTemplate> temp = v8::FunctionTemplate::New(); |
| 184 temp->SetCallHandler(NPObjectMethodHandler, key); | 195 temp->SetCallHandler(NPObjectMethodHandler, key); |
| 185 desc = v8::Persistent<v8::FunctionTemplate>::New(temp); | 196 desc = v8::Persistent<v8::FunctionTemplate>::New(temp); |
| 186 static_template_map.set(id, desc); | 197 static_template_map.set(id, desc); |
| 187 } | 198 } |
| (...skipping 172 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 360 void ForgetV8ObjectForNPObject(NPObject* object) | 371 void ForgetV8ObjectForNPObject(NPObject* object) |
| 361 { | 372 { |
| 362 if (staticNpobjectMap.contains(object)) { | 373 if (staticNpobjectMap.contains(object)) { |
| 363 v8::HandleScope scope; | 374 v8::HandleScope scope; |
| 364 v8::Persistent<v8::Object> handle(staticNpobjectMap.get(object)); | 375 v8::Persistent<v8::Object> handle(staticNpobjectMap.get(object)); |
| 365 WebCore::V8Proxy::SetDOMWrapper(handle, WebCore::V8ClassIndex::NPOBJECT,
NULL); | 376 WebCore::V8Proxy::SetDOMWrapper(handle, WebCore::V8ClassIndex::NPOBJECT,
NULL); |
| 366 staticNpobjectMap.forget(object); | 377 staticNpobjectMap.forget(object); |
| 367 NPN_ReleaseObject(object); | 378 NPN_ReleaseObject(object); |
| 368 } | 379 } |
| 369 } | 380 } |
| OLD | NEW |