diff options
Diffstat (limited to 'gin/interceptor.h')
-rw-r--r-- | gin/interceptor.h | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/gin/interceptor.h b/gin/interceptor.h new file mode 100644 index 0000000..802929b --- /dev/null +++ b/gin/interceptor.h @@ -0,0 +1,63 @@ +// 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_ |