diff options
Diffstat (limited to 'gin/shell_runner.h')
-rw-r--r-- | gin/shell_runner.h | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/gin/shell_runner.h b/gin/shell_runner.h new file mode 100644 index 0000000..23e495a --- /dev/null +++ b/gin/shell_runner.h @@ -0,0 +1,68 @@ +// Copyright 2014 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef GIN_DEFAULT_RUNNER_H_ +#define GIN_DEFAULT_RUNNER_H_ + +#include "gin/runner.h" + +namespace gin { + +class ContextHolder; +class ShellRunner; +class TryCatch; + +// Subclass ShellRunnerDelegate to customize the behavior of ShellRunner. +// Typical embedders will want to subclass one of the specialized +// ShellRunnerDelegates, such as ModuleRunnerDelegate. +class GIN_EXPORT ShellRunnerDelegate { + public: + ShellRunnerDelegate(); + virtual ~ShellRunnerDelegate(); + + // Returns the template for the global object. + virtual v8::Handle<v8::ObjectTemplate> GetGlobalTemplate( + ShellRunner* runner, + v8::Isolate* isolate); + virtual void DidCreateContext(ShellRunner* runner); + virtual void WillRunScript(ShellRunner* runner); + virtual void DidRunScript(ShellRunner* runner); + virtual void UnhandledException(ShellRunner* runner, TryCatch& try_catch); +}; + +// ShellRunner executes the script/functions directly in a v8::Context. +// ShellRunner owns a ContextHolder and v8::Context, both of which are destroyed +// when the ShellRunner is deleted. +class GIN_EXPORT ShellRunner : public Runner { + public: + ShellRunner(ShellRunnerDelegate* delegate, v8::Isolate* isolate); + virtual ~ShellRunner(); + + // Before running script in this context, you'll need to enter the runner's + // context by creating an instance of Runner::Scope on the stack. + + // Runner overrides: + virtual void Run(const std::string& source, + const std::string& resource_name) OVERRIDE; + virtual v8::Handle<v8::Value> Call(v8::Handle<v8::Function> function, + v8::Handle<v8::Value> receiver, + int argc, + v8::Handle<v8::Value> argv[]) OVERRIDE; + virtual ContextHolder* GetContextHolder() OVERRIDE; + + private: + friend class Scope; + + void Run(v8::Handle<v8::Script> script); + + ShellRunnerDelegate* delegate_; + + scoped_ptr<ContextHolder> context_holder_; + + DISALLOW_COPY_AND_ASSIGN(ShellRunner); +}; + +} // namespace gin + +#endif // GIN_DEFAULT_RUNNER_H_ |