1 // Copyright 2014 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.
5 #ifndef GIN_SHELL_RUNNER_H_
6 #define GIN_SHELL_RUNNER_H_
8 #include "gin/runner.h"
16 // Subclass ShellRunnerDelegate to customize the behavior of ShellRunner.
17 // Typical embedders will want to subclass one of the specialized
18 // ShellRunnerDelegates, such as ModuleRunnerDelegate.
19 class GIN_EXPORT ShellRunnerDelegate
{
21 ShellRunnerDelegate();
22 virtual ~ShellRunnerDelegate();
24 // Returns the template for the global object.
25 virtual v8::Local
<v8::ObjectTemplate
> GetGlobalTemplate(
27 v8::Isolate
* isolate
);
28 virtual void DidCreateContext(ShellRunner
* runner
);
29 virtual void WillRunScript(ShellRunner
* runner
);
30 virtual void DidRunScript(ShellRunner
* runner
);
31 virtual void UnhandledException(ShellRunner
* runner
, TryCatch
& try_catch
);
34 // ShellRunner executes the script/functions directly in a v8::Context.
35 // ShellRunner owns a ContextHolder and v8::Context, both of which are destroyed
36 // when the ShellRunner is deleted.
37 class GIN_EXPORT ShellRunner
: public Runner
{
39 ShellRunner(ShellRunnerDelegate
* delegate
, v8::Isolate
* isolate
);
40 ~ShellRunner() override
;
42 // Before running script in this context, you'll need to enter the runner's
43 // context by creating an instance of Runner::Scope on the stack.
46 void Run(const std::string
& source
,
47 const std::string
& resource_name
) override
;
48 v8::Local
<v8::Value
> Call(v8::Local
<v8::Function
> function
,
49 v8::Local
<v8::Value
> receiver
,
51 v8::Local
<v8::Value
> argv
[]) override
;
52 ContextHolder
* GetContextHolder() override
;
57 void Run(v8::Local
<v8::Script
> script
);
59 ShellRunnerDelegate
* delegate_
;
61 scoped_ptr
<ContextHolder
> context_holder_
;
63 DISALLOW_COPY_AND_ASSIGN(ShellRunner
);
68 #endif // GIN_SHELL_RUNNER_H_