1f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
2f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
3f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// found in the LICENSE file.
4f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
5f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#ifndef GIN_PUBLIC_WRAPPER_INFO_H_
6f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#define GIN_PUBLIC_WRAPPER_INFO_H_
7f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
85d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "gin/gin_export.h"
9f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "gin/public/gin_embedders.h"
10f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "v8/include/v8.h"
11f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
12f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)namespace gin {
13f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
14f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Gin embedder that use their own WrapperInfo-like structs must ensure that
15f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// the first field is of type GinEmbedderId and has the correct id set. They
16f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// also should use kWrapperInfoIndex to start their WrapperInfo-like struct
17f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// and ensure that all objects have kNumberOfInternalFields internal fields.
18f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
19f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)enum InternalFields {
20f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  kWrapperInfoIndex,
21f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  kEncodedValueIndex,
22f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  kNumberOfInternalFields,
23f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)};
24f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)struct GIN_EXPORT WrapperInfo {
26f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  static WrapperInfo* From(v8::Handle<v8::Object> object);
27f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  const GinEmbedder embedder;
28f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)};
29f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
30f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}  // namespace gin
31f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
32f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#endif  // GIN_PUBLIC_WRAPPER_INFO_H_
33