| // 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); |
| // Return true if the set was interecepted. |
| virtual bool 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); |
| // Return true if the set was interecepted. |
| virtual bool 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_ |