1 // Copyright 2014 The Chromium 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 #ifndef GIN_INTERCEPTOR_H_ 6 #define GIN_INTERCEPTOR_H_ 7 8 #include <string> 9 #include <vector> 10 11 #include "base/basictypes.h" 12 #include "gin/gin_export.h" 13 #include "v8/include/v8.h" 14 15 namespace gin { 16 17 class WrappableBase; 18 19 // Base class for gin::Wrappable-derived classes that want to implement a 20 // property interceptor. 21 class GIN_EXPORT NamedPropertyInterceptor { 22 public: 23 NamedPropertyInterceptor(v8::Isolate* isolate, WrappableBase* base); 24 virtual ~NamedPropertyInterceptor(); 25 26 virtual v8::Local<v8::Value> GetNamedProperty(v8::Isolate* isolate, 27 const std::string& property); 28 virtual void SetNamedProperty(v8::Isolate* isolate, 29 const std::string& property, 30 v8::Local<v8::Value> value); 31 virtual std::vector<std::string> EnumerateNamedProperties( 32 v8::Isolate* isolate); 33 34 private: 35 v8::Isolate* isolate_; 36 WrappableBase* base_; 37 38 DISALLOW_COPY_AND_ASSIGN(NamedPropertyInterceptor); 39 }; 40 41 class GIN_EXPORT IndexedPropertyInterceptor { 42 public: 43 IndexedPropertyInterceptor(v8::Isolate* isolate, WrappableBase* base); 44 virtual ~IndexedPropertyInterceptor(); 45 46 virtual v8::Local<v8::Value> GetIndexedProperty(v8::Isolate* isolate, 47 uint32_t index); 48 virtual void SetIndexedProperty(v8::Isolate* isolate, 49 uint32_t index, 50 v8::Local<v8::Value> value); 51 virtual std::vector<uint32_t> EnumerateIndexedProperties( 52 v8::Isolate* isolate); 53 54 private: 55 v8::Isolate* isolate_; 56 WrappableBase* base_; 57 58 DISALLOW_COPY_AND_ASSIGN(IndexedPropertyInterceptor); 59 }; 60 61 } // namespace gin 62 63 #endif // GIN_INTERCEPTOR_H_ 64