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_ISOLATE_HOLDER_H_ 6#define GIN_PUBLIC_ISOLATE_HOLDER_H_ 7 8#include "base/basictypes.h" 9#include "base/memory/scoped_ptr.h" 10#include "gin/gin_export.h" 11#include "v8/include/v8.h" 12 13namespace gin { 14 15class PerIsolateData; 16class RunMicrotasksObserver; 17 18// To embed Gin, first initialize gin using IsolateHolder::Initialize and then 19// create an instance of IsolateHolder to hold the v8::Isolate in which you 20// will execute JavaScript. You might wish to subclass IsolateHolder if you 21// want to tie more state to the lifetime of the isolate. 22class GIN_EXPORT IsolateHolder { 23 public: 24 // Controls whether or not V8 should only accept strict mode scripts. 25 enum ScriptMode { 26 kNonStrictMode, 27 kStrictMode 28 }; 29 30 IsolateHolder(); 31 ~IsolateHolder(); 32 33 // Should be invoked once before creating IsolateHolder instances to 34 // initialize V8 and Gin. 35 static void Initialize(ScriptMode mode, 36 v8::ArrayBuffer::Allocator* allocator); 37 38 v8::Isolate* isolate() { return isolate_; } 39 40 // The implementations of Object.observe() and Promise enqueue v8 Microtasks 41 // that should be executed just before control is returned to the message 42 // loop. This method adds a MessageLoop TaskObserver which runs any pending 43 // Microtasks each time a Task is completed. This method should be called 44 // once, when a MessageLoop is created and it should be called on the 45 // MessageLoop's thread. 46 void AddRunMicrotasksObserver(); 47 48 // This method should also only be called once, and on the MessageLoop's 49 // thread. 50 void RemoveRunMicrotasksObserver(); 51 52 private: 53 v8::Isolate* isolate_; 54 scoped_ptr<PerIsolateData> isolate_data_; 55 scoped_ptr<RunMicrotasksObserver> task_observer_; 56 57 DISALLOW_COPY_AND_ASSIGN(IsolateHolder); 58}; 59 60} // namespace gin 61 62#endif // GIN_PUBLIC_ISOLATE_HOLDER_H_ 63