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.
     29 class GIN_EXPORT ContextHolder {
     30  public:
     31   explicit ContextHolder(v8::Isolate* isolate);
     32   ~ContextHolder();
     33 
     34   v8::Isolate* isolate() const { return isolate_; }
     35 
     36   v8::Handle<v8::Context> context() const {
     37     return v8::Local<v8::Context>::New(isolate_, context_);
     38   }
     39 
     40   void SetContext(v8::Handle<v8::Context> context);
     41 
     42  private:
     43   v8::Isolate* isolate_;
     44   v8::UniquePersistent<v8::Context> context_;
     45   scoped_ptr<PerContextData> data_;
     46 
     47   DISALLOW_COPY_AND_ASSIGN(ContextHolder);
     48 };
     49 
     50 }  // namespace gin
     51 
     52 #endif  // GIN_PUBLIC_CONTEXT_HOLDER_H_
     53