Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(663)

Side by Side Diff: gin/runner.h

Issue 101583004: [gin] Turn gin into a component (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: win Created 7 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef GIN_RUNNER_H_ 5 #ifndef GIN_RUNNER_H_
6 #define GIN_RUNNER_H_ 6 #define GIN_RUNNER_H_
7 7
8 #include <string> 8 #include <string>
9 9
10 #include "base/memory/weak_ptr.h" 10 #include "base/memory/weak_ptr.h"
11 #include "gin/gin_export.h"
11 #include "gin/public/context_holder.h" 12 #include "gin/public/context_holder.h"
12 13
13 namespace gin { 14 namespace gin {
14 15
15 class Runner; 16 class Runner;
16 class TryCatch; 17 class TryCatch;
17 18
18 // Subclass RunnerDelegate to customize the behavior of |Runner|. Typical 19 // Subclass RunnerDelegate to customize the behavior of |Runner|. Typical
19 // embedders will want to subclass one of the specialized RunnerDelegates, 20 // embedders will want to subclass one of the specialized RunnerDelegates,
20 // such as ModuleRunnerDelegate. 21 // such as ModuleRunnerDelegate.
21 class RunnerDelegate { 22 class GIN_EXPORT RunnerDelegate {
22 public: 23 public:
23 RunnerDelegate(); 24 RunnerDelegate();
24 virtual ~RunnerDelegate(); 25 virtual ~RunnerDelegate();
25 26
26 // Returns the template for the global object. 27 // Returns the template for the global object.
27 virtual v8::Handle<v8::ObjectTemplate> GetGlobalTemplate(Runner* runner); 28 virtual v8::Handle<v8::ObjectTemplate> GetGlobalTemplate(Runner* runner);
28 virtual void DidCreateContext(Runner* runner); 29 virtual void DidCreateContext(Runner* runner);
29 virtual void WillRunScript(Runner* runner); 30 virtual void WillRunScript(Runner* runner);
30 virtual void DidRunScript(Runner* runner); 31 virtual void DidRunScript(Runner* runner);
31 virtual void UnhandledException(Runner* runner, TryCatch& try_catch); 32 virtual void UnhandledException(Runner* runner, TryCatch& try_catch);
32 }; 33 };
33 34
34 // Runner lets you run code in a v8::Context. Upon construction, Runner will 35 // Runner lets you run code in a v8::Context. Upon construction, Runner will
35 // create a v8::Context. Upon destruction, Runner will dispose the context. 36 // create a v8::Context. Upon destruction, Runner will dispose the context.
36 class Runner : public ContextHolder { 37 class GIN_EXPORT Runner : public ContextHolder {
37 public: 38 public:
38 Runner(RunnerDelegate* delegate, v8::Isolate* isolate); 39 Runner(RunnerDelegate* delegate, v8::Isolate* isolate);
39 ~Runner(); 40 ~Runner();
40 41
41 // Before running script in this context, you'll need to enter the runner's 42 // Before running script in this context, you'll need to enter the runner's
42 // context by creating an instance of Runner::Scope on the stack. 43 // context by creating an instance of Runner::Scope on the stack.
43 void Run(const std::string& source, const std::string& resource_name); 44 void Run(const std::string& source, const std::string& resource_name);
44 void Run(v8::Handle<v8::Script> script); 45 void Run(v8::Handle<v8::Script> script);
45 46
46 v8::Handle<v8::Value> Call(v8::Handle<v8::Function> function, 47 v8::Handle<v8::Value> Call(v8::Handle<v8::Function> function,
47 v8::Handle<v8::Value> receiver, 48 v8::Handle<v8::Value> receiver,
48 int argc, 49 int argc,
49 v8::Handle<v8::Value> argv[]); 50 v8::Handle<v8::Value> argv[]);
50 51
51 v8::Handle<v8::Object> global() const { 52 v8::Handle<v8::Object> global() const {
52 return context()->Global(); 53 return context()->Global();
53 } 54 }
54 55
55 // Useful for running script in this context asynchronously. Rather than 56 // Useful for running script in this context asynchronously. Rather than
56 // holding a raw pointer to the runner, consider holding a WeakPtr. 57 // holding a raw pointer to the runner, consider holding a WeakPtr.
57 base::WeakPtr<Runner> GetWeakPtr() { 58 base::WeakPtr<Runner> GetWeakPtr() {
58 return weak_factory_.GetWeakPtr(); 59 return weak_factory_.GetWeakPtr();
59 } 60 }
60 61
61 class Scope { 62 class GIN_EXPORT Scope {
62 public: 63 public:
63 explicit Scope(Runner* runner); 64 explicit Scope(Runner* runner);
64 ~Scope(); 65 ~Scope();
65 66
66 private: 67 private:
67 v8::Isolate::Scope isolate_scope_; 68 v8::Isolate::Scope isolate_scope_;
68 v8::HandleScope handle_scope_; 69 v8::HandleScope handle_scope_;
69 v8::Context::Scope scope_; 70 v8::Context::Scope scope_;
70 71
71 DISALLOW_COPY_AND_ASSIGN(Scope); 72 DISALLOW_COPY_AND_ASSIGN(Scope);
72 }; 73 };
73 74
74 private: 75 private:
75 friend class Scope; 76 friend class Scope;
76 77
77 RunnerDelegate* delegate_; 78 RunnerDelegate* delegate_;
78 79
79 base::WeakPtrFactory<Runner> weak_factory_; 80 base::WeakPtrFactory<Runner> weak_factory_;
80 81
81 DISALLOW_COPY_AND_ASSIGN(Runner); 82 DISALLOW_COPY_AND_ASSIGN(Runner);
82 }; 83 };
83 84
84 } // namespace gin 85 } // namespace gin
85 86
86 #endif // GIN_RUNNER_H_ 87 #endif // GIN_RUNNER_H_
OLDNEW
« gin/array_buffer.h ('K') | « gin/public/wrapper_info.h ('k') | gin/try_catch.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698