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 15namespace gin { 16 17class WrappableBase; 18 19// Base class for gin::Wrappable-derived classes that want to implement a 20// property interceptor. 21class 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 41class 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