// Copyright 2014 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef GIN_INTERCEPTOR_H_ #define GIN_INTERCEPTOR_H_ #include <string> #include <vector> #include "base/basictypes.h" #include "gin/gin_export.h" #include "v8/include/v8.h" namespace gin { class WrappableBase; // Base class for gin::Wrappable-derived classes that want to implement a // property interceptor. class GIN_EXPORT NamedPropertyInterceptor { public: NamedPropertyInterceptor(v8::Isolate* isolate, WrappableBase* base); virtual ~NamedPropertyInterceptor(); virtual v8::Local<v8::Value> GetNamedProperty(v8::Isolate* isolate, const std::string& property); virtual void SetNamedProperty(v8::Isolate* isolate, const std::string& property, v8::Local<v8::Value> value); virtual std::vector<std::string> EnumerateNamedProperties( v8::Isolate* isolate); private: v8::Isolate* isolate_; WrappableBase* base_; DISALLOW_COPY_AND_ASSIGN(NamedPropertyInterceptor); }; class GIN_EXPORT IndexedPropertyInterceptor { public: IndexedPropertyInterceptor(v8::Isolate* isolate, WrappableBase* base); virtual ~IndexedPropertyInterceptor(); virtual v8::Local<v8::Value> GetIndexedProperty(v8::Isolate* isolate, uint32_t index); virtual void SetIndexedProperty(v8::Isolate* isolate, uint32_t index, v8::Local<v8::Value> value); virtual std::vector<uint32_t> EnumerateIndexedProperties( v8::Isolate* isolate); private: v8::Isolate* isolate_; WrappableBase* base_; DISALLOW_COPY_AND_ASSIGN(IndexedPropertyInterceptor); }; } // namespace gin #endif // GIN_INTERCEPTOR_H_