Home | History | Annotate | Download | only in src
      1 // Copyright 2014 PDFium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
      6 
      7 #ifndef FXJSE_UTIL_INLINE_H_
      8 #define FXJSE_UTIL_INLINE_H_
      9 static V8_INLINE v8::Local<v8::Object> FXJSE_GetGlobalObjectFromContext(
     10     const v8::Local<v8::Context>& hContext) {
     11   return hContext->Global()->GetPrototype().As<v8::Object>();
     12 }
     13 static V8_INLINE void FXJSE_UpdateObjectBinding(v8::Local<v8::Object>& hObject,
     14                                                 void* lpNewBinding) {
     15   ASSERT(!hObject.IsEmpty());
     16   ASSERT(hObject->InternalFieldCount() > 0);
     17   hObject->SetAlignedPointerInInternalField(0, lpNewBinding);
     18 }
     19 static V8_INLINE void* FXJSE_RetrieveObjectBinding(
     20     const v8::Local<v8::Object>& hJSObject,
     21     CFXJSE_Class* lpClass = NULL) {
     22   ASSERT(!hJSObject.IsEmpty());
     23   if (!hJSObject->IsObject()) {
     24     return NULL;
     25   }
     26   v8::Local<v8::Object> hObject = hJSObject;
     27   if (hObject->InternalFieldCount() == 0) {
     28     v8::Local<v8::Value> hProtoObject = hObject->GetPrototype();
     29     if (hProtoObject.IsEmpty() || !hProtoObject->IsObject()) {
     30       return NULL;
     31     }
     32     hObject = hProtoObject.As<v8::Object>();
     33     if (hObject->InternalFieldCount() == 0) {
     34       return NULL;
     35     }
     36   }
     37   if (lpClass) {
     38     v8::Local<v8::FunctionTemplate> hClass =
     39         v8::Local<v8::FunctionTemplate>::New(
     40             lpClass->GetContext()->GetRuntime(), lpClass->GetTemplate());
     41     if (!hClass->HasInstance(hObject)) {
     42       return NULL;
     43     }
     44   }
     45   return hObject->GetAlignedPointerFromInternalField(0);
     46 }
     47 #endif
     48