Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1)

Side by Side Diff: webkit/port/bindings/v8/v8_npobject.cpp

Issue 3195: Use static type information from IDL to streamline the wrapping and unwrappin... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 12 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
52 // Params: holder could be HTMLEmbedElement or NPObject 52 // Params: holder could be HTMLEmbedElement or NPObject
53 static v8::Handle<v8::Value> NPObjectInvokeImpl( 53 static v8::Handle<v8::Value> NPObjectInvokeImpl(
54 const v8::Arguments& args, InvokeFunctionType func_id) { 54 const v8::Arguments& args, InvokeFunctionType func_id) {
55 NPObject* npobject; 55 NPObject* npobject;
56 56
57 // These three types are subtypes of HTMLPlugInElement. 57 // These three types are subtypes of HTMLPlugInElement.
58 if (V8HTMLAppletElement::HasInstance(args.Holder()) || 58 if (V8HTMLAppletElement::HasInstance(args.Holder()) ||
59 V8HTMLEmbedElement::HasInstance(args.Holder()) || 59 V8HTMLEmbedElement::HasInstance(args.Holder()) ||
60 V8HTMLObjectElement::HasInstance(args.Holder())) { 60 V8HTMLObjectElement::HasInstance(args.Holder())) {
61 // The holder object is a subtype of HTMLPlugInElement. 61 // The holder object is a subtype of HTMLPlugInElement.
62 HTMLPlugInElement* imp = V8Proxy::FastToNativeObject<HTMLPlugInElement>( 62 HTMLPlugInElement* imp =
63 V8ClassIndex::NODE, args.Holder()); 63 V8Proxy::DOMWrapperToNode<HTMLPlugInElement>(args.Holder());
64 v8::Handle<v8::Object> instance = imp->getInstance(); 64 v8::Handle<v8::Object> instance = imp->getInstance();
65 npobject = V8Proxy::ToNativeObject<NPObject>( 65 npobject = V8Proxy::ToNativeObject<NPObject>(
66 V8ClassIndex::NPOBJECT, instance); 66 V8ClassIndex::NPOBJECT, instance);
67 67
68 } else { 68 } else {
69 // The holder object is not a subtype of HTMLPlugInElement, it 69 // The holder object is not a subtype of HTMLPlugInElement, it
70 // must be an NPObject which has three internal fields. 70 // must be an NPObject which has three internal fields.
71 ASSERT(args.Holder()->InternalFieldCount() == 3); 71 ASSERT(args.Holder()->InternalFieldCount() == 3);
72 npobject = V8Proxy::ToNativeObject<NPObject>( 72 npobject = V8Proxy::ToNativeObject<NPObject>(
73 V8ClassIndex::NPOBJECT, args.Holder()); 73 V8ClassIndex::NPOBJECT, args.Holder());
(...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after
216 216
217 v8::Handle<v8::Value> NPObjectGetIndexedProperty(v8::Local<v8::Object> self, 217 v8::Handle<v8::Value> NPObjectGetIndexedProperty(v8::Local<v8::Object> self,
218 uint32_t index) { 218 uint32_t index) {
219 NPIdentifier ident = NPN_GetIntIdentifier(index); 219 NPIdentifier ident = NPN_GetIntIdentifier(index);
220 return NPObjectGetProperty(self, ident, v8::Number::New(index)); 220 return NPObjectGetProperty(self, ident, v8::Number::New(index));
221 } 221 }
222 222
223 static v8::Handle<v8::Value> NPObjectSetProperty(v8::Local<v8::Object> self, 223 static v8::Handle<v8::Value> NPObjectSetProperty(v8::Local<v8::Object> self,
224 NPIdentifier ident, 224 NPIdentifier ident,
225 v8::Local<v8::Value> value) { 225 v8::Local<v8::Value> value) {
226 NPObject* npobject = V8Proxy::ToNativeObject<NPObject>(V8ClassIndex::NPOBJECT, 226 NPObject* npobject =
227 self); 227 V8Proxy::ToNativeObject<NPObject>(V8ClassIndex::NPOBJECT, self);
228 228
229 // Verify that our wrapper wasn't using a NPObject which 229 // Verify that our wrapper wasn't using a NPObject which
230 // has already been deleted. 230 // has already been deleted.
231 if (!npobject || !_NPN_IsAlive(npobject)) { 231 if (!npobject || !_NPN_IsAlive(npobject)) {
232 V8Proxy::ThrowError(V8Proxy::REFERENCE_ERROR, "NPObject deleted"); 232 V8Proxy::ThrowError(V8Proxy::REFERENCE_ERROR, "NPObject deleted");
233 return value; // intercepted, but an exception was thrown 233 return value; // intercepted, but an exception was thrown
234 } 234 }
235 235
236 if (npobject->_class->hasProperty && 236 if (npobject->_class->hasProperty &&
237 npobject->_class->hasProperty(npobject, ident) && 237 npobject->_class->hasProperty(npobject, ident) &&
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after
355 void ForgetV8ObjectForNPObject(NPObject* object) { 355 void ForgetV8ObjectForNPObject(NPObject* object) {
356 if (static_npobject_map.contains(object)) { 356 if (static_npobject_map.contains(object)) {
357 v8::HandleScope scope; 357 v8::HandleScope scope;
358 v8::Persistent<v8::Object> handle(static_npobject_map.get(object)); 358 v8::Persistent<v8::Object> handle(static_npobject_map.get(object));
359 WebCore::V8Proxy::SetDOMWrapper(handle, 359 WebCore::V8Proxy::SetDOMWrapper(handle,
360 WebCore::V8ClassIndex::NPOBJECT, NULL); 360 WebCore::V8ClassIndex::NPOBJECT, NULL);
361 static_npobject_map.forget(object); 361 static_npobject_map.forget(object);
362 NPN_ReleaseObject(object); 362 NPN_ReleaseObject(object);
363 } 363 }
364 } 364 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698