Home | History | Annotate | Download | only in public
      1 // Copyright 2013 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_PUBLIC_CONTEXT_HOLDER_H_
      6 #define GIN_PUBLIC_CONTEXT_HOLDER_H_
      7 
      8 #include <list>
      9 
     10 #include "base/basictypes.h"
     11 #include "base/memory/scoped_ptr.h"
     12 #include "gin/gin_export.h"
     13 #include "v8/include/v8.h"
     14 
     15 namespace gin {
     16 
     17 // Gin embedder that store embedder data in v8::Contexts must do so in a
     18 // single field with the index kPerContextDataStartIndex + GinEmbedder-enum.
     19 // The field at kDebugIdIndex is treated specially by V8 and is reserved for
     20 // a V8 debugger implementation (not used by gin).
     21 enum ContextEmbedderDataFields {
     22   kDebugIdIndex = 0,
     23   kPerContextDataStartIndex,
     24 };
     25 
     26 class PerContextData;
     27 
     28 // ContextHolder is a generic class for holding a v8::Context. Rather than
     29 // using ContextHolder directly, most code should use a subclass of
     30 // ContextHolder, such as Runner.
     31 class GIN_EXPORT ContextHolder {
     32  public:
     33   explicit ContextHolder(v8::Isolate* isolate);
     34   ~ContextHolder();
     35 
     36   v8::Isolate* isolate() const { return isolate_; }
     37 
     38   v8::Handle<v8::Context> context() const {
     39     return v8::Local<v8::Context>::New(isolate_, context_);
     40   }
     41 
     42   void SetContext(v8::Handle<v8::Context> context);
     43 
     44  private:
     45   v8::Isolate* isolate_;
     46   v8::Persistent<v8::Context> context_;
     47   scoped_ptr<PerContextData> data_;
     48 
     49   DISALLOW_COPY_AND_ASSIGN(ContextHolder);
     50 };
     51 
     52 }  // namespace gin
     53 
     54 #endif  // GIN_PUBLIC_CONTEXT_HOLDER_H_
     55