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