diff options
Diffstat (limited to 'o3d/plugin')
-rw-r--r-- | o3d/plugin/cross/np_v8_bridge.cc | 62 | ||||
-rw-r--r-- | o3d/plugin/cross/np_v8_bridge.h | 5 | ||||
-rw-r--r-- | o3d/plugin/cross/out_of_memory.cc | 24 | ||||
-rw-r--r-- | o3d/plugin/cross/out_of_memory.h | 1 |
4 files changed, 55 insertions, 37 deletions
diff --git a/o3d/plugin/cross/np_v8_bridge.cc b/o3d/plugin/cross/np_v8_bridge.cc index 9e8c752..ced02d2 100644 --- a/o3d/plugin/cross/np_v8_bridge.cc +++ b/o3d/plugin/cross/np_v8_bridge.cc @@ -1264,27 +1264,6 @@ v8::Handle<Value> NPV8Bridge::V8PropertySetter( return v8_result; } -v8::Handle<v8::Boolean> NPV8Bridge::V8PropertyQuery(Local<Value> v8_name, - const AccessorInfo& info) { - Local<Object> holder = info.Holder(); - NPV8Bridge* bridge = static_cast<NPV8Bridge*>( - Local<External>::Cast( - holder->GetInternalField(V8_NP_OBJECT_BRIDGE))->Value()); - Context::Scope scope(bridge->script_context()); - - NPObjectPtr<NPObject> np_object = bridge->V8ToNPObject(holder); - if (np_object.IsNull()) - return v8::Handle<v8::Boolean>(); - - NPIdentifier np_name = V8ToNPIdentifier(v8_name); - if (np_name == NULL) - return v8::Handle<v8::Boolean>(); - - bool has = NPN_HasProperty(bridge->npp_, np_object.Get(), np_name) || - NPN_HasMethod(bridge->npp_, np_object.Get(), np_name); - return v8::Boolean::New(has); -} - v8::Handle<v8::Boolean> NPV8Bridge::V8PropertyDeleter( Local<Value> v8_name, const AccessorInfo& info) { @@ -1322,10 +1301,28 @@ v8::Handle<Value> NPV8Bridge::V8NamedPropertySetter(Local<v8::String> v8_name, return V8PropertySetter(v8_name, v8_value, info); } -v8::Handle<v8::Boolean> NPV8Bridge::V8NamedPropertyQuery( +v8::Handle<v8::Integer> NPV8Bridge::V8NamedPropertyQuery( Local<v8::String> v8_name, const AccessorInfo& info) { - return V8PropertyQuery(v8_name, info); + Local<Object> holder = info.Holder(); + NPV8Bridge* bridge = static_cast<NPV8Bridge*>( + Local<External>::Cast( + holder->GetInternalField(V8_NP_OBJECT_BRIDGE))->Value()); + Context::Scope scope(bridge->script_context()); + + NPObjectPtr<NPObject> np_object = bridge->V8ToNPObject(holder); + if (np_object.IsNull()) + return v8::Handle<v8::Integer>(); + + NPIdentifier np_name = V8ToNPIdentifier(v8_name); + if (np_name == NULL) + return v8::Handle<v8::Integer>(); + + bool has = NPN_HasProperty(bridge->npp_, np_object.Get(), np_name) || + NPN_HasMethod(bridge->npp_, np_object.Get(), np_name); + if (!has) + return v8::Handle<v8::Integer>(); + return v8::Integer::New(0); } v8::Handle<v8::Boolean> NPV8Bridge::V8NamedPropertyDeleter( @@ -1365,7 +1362,24 @@ v8::Handle<Value> NPV8Bridge::V8IndexedPropertySetter( v8::Handle<v8::Boolean> NPV8Bridge::V8IndexedPropertyQuery( uint32_t index, const AccessorInfo& info) { - return V8PropertyQuery(Integer::New(index), info); + Local<Object> holder = info.Holder(); + NPV8Bridge* bridge = static_cast<NPV8Bridge*>( + Local<External>::Cast( + holder->GetInternalField(V8_NP_OBJECT_BRIDGE))->Value()); + Context::Scope scope(bridge->script_context()); + + NPObjectPtr<NPObject> np_object = bridge->V8ToNPObject(holder); + if (np_object.IsNull()) + return v8::Handle<v8::Boolean>(); + + Local<Value> v8_name = Integer::New(index); + NPIdentifier np_name = V8ToNPIdentifier(v8_name); + if (np_name == NULL) + return v8::Handle<v8::Boolean>(); + + bool has = NPN_HasProperty(bridge->npp_, np_object.Get(), np_name) || + NPN_HasMethod(bridge->npp_, np_object.Get(), np_name); + return v8::Boolean::New(has); } v8::Handle<v8::Boolean> NPV8Bridge::V8IndexedPropertyDeleter( diff --git a/o3d/plugin/cross/np_v8_bridge.h b/o3d/plugin/cross/np_v8_bridge.h index 1227b5d..e3ce65c 100644 --- a/o3d/plugin/cross/np_v8_bridge.h +++ b/o3d/plugin/cross/np_v8_bridge.h @@ -332,9 +332,6 @@ class NPV8Bridge { v8::Local<v8::Value> v8_value, const v8::AccessorInfo& info); - static v8::Handle<v8::Boolean> V8PropertyQuery(v8::Local<v8::Value> v8_name, - const v8::AccessorInfo& info); - static v8::Handle<v8::Boolean> V8PropertyDeleter( v8::Local<v8::Value> v8_name, const v8::AccessorInfo& info); @@ -348,7 +345,7 @@ class NPV8Bridge { v8::Local<v8::Value> v8_value, const v8::AccessorInfo& info); - static v8::Handle<v8::Boolean> V8NamedPropertyQuery( + static v8::Handle<v8::Integer> V8NamedPropertyQuery( v8::Local<v8::String> v8_name, const v8::AccessorInfo& info); diff --git a/o3d/plugin/cross/out_of_memory.cc b/o3d/plugin/cross/out_of_memory.cc index 47937f1..db71932 100644 --- a/o3d/plugin/cross/out_of_memory.cc +++ b/o3d/plugin/cross/out_of_memory.cc @@ -31,11 +31,18 @@ // This file implements a failure handler for the new -// operator and malloc. +// operator and malloc for Windows and Mac. (On Linux, +// chrome's libbase.a implements one already.) -// TODO: This does not currently work on linux. The replacement -// operator new, malloc, etc do not take priority over those declared in -// the standard libraries. +#include "plugin/cross/out_of_memory.h" + +#ifdef OS_LINUX +namespace o3d { +bool SetupOutOfMemoryHandler() { + return true; +} +} +#else #include <stdio.h> #include <stdlib.h> @@ -54,7 +61,6 @@ #include <dlfcn.h> #endif -#include "plugin/cross/out_of_memory.h" #include "plugin/cross/plugin_metrics.h" #ifdef _MSC_VER @@ -71,7 +77,6 @@ namespace { // run after abort() to do its work. const size_t kReserveSize = 1024 * 256; void* g_reserve; -} // namespace anonymous // This is called when a memory allocation fails in the plugin. Note // that it will not be called if a memory allocation fails in another @@ -119,6 +124,7 @@ int HandleOutOfMemory(size_t size) { } return 0; } +} // namespace anonymous bool SetupOutOfMemoryHandler() { #ifdef _MSC_VER @@ -141,7 +147,7 @@ bool SetupOutOfMemoryHandler() { } } // namespace o3d -#if defined(OS_MACOSX) || defined(OS_LINUX) +#if defined(OS_MACOSX) namespace { void* dlsym_helper(const char* symbol_name) { void* ptr = dlsym(RTLD_NEXT, symbol_name); @@ -228,4 +234,6 @@ wchar_t* wcsdup(const wchar_t* ptr) { return result; } } -#endif // defined(OS_MACOSX) || defined(OS_LINUX) +#endif // defined(OS_MACOSX) +#endif // defined(OS_LINUX) + diff --git a/o3d/plugin/cross/out_of_memory.h b/o3d/plugin/cross/out_of_memory.h index aef1b1e..03a321f 100644 --- a/o3d/plugin/cross/out_of_memory.h +++ b/o3d/plugin/cross/out_of_memory.h @@ -37,7 +37,6 @@ #define O3D_PLUGIN_CROSS_OUT_OF_MEMORY_H_ namespace o3d { -void HandleOutOfMemory(); bool SetupOutOfMemoryHandler(); } |