// Copyright 2013 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_RUNNER_H_ #define GIN_RUNNER_H_ #include #include "base/memory/weak_ptr.h" #include "gin/context_holder.h" namespace gin { class Runner; class TryCatch; class RunnerDelegate { public: RunnerDelegate(); virtual ~RunnerDelegate(); // Returns the template for the global object. virtual v8::Handle GetGlobalTemplate(Runner* runner); virtual void DidCreateContext(Runner* runner); virtual void WillRunScript(Runner* runner); virtual void DidRunScript(Runner* runner); virtual void UnhandledException(Runner* runner, TryCatch& try_catch); }; class Runner : public ContextHolder { public: Runner(RunnerDelegate* delegate, v8::Isolate* isolate); ~Runner(); void Run(const std::string& source, const std::string& resource_name); void Run(v8::Handle script); v8::Handle Call(v8::Handle function, v8::Handle receiver, int argc, v8::Handle argv[]); v8::Handle global() const { return context()->Global(); } base::WeakPtr GetWeakPtr() { return weak_factory_.GetWeakPtr(); } class Scope { public: explicit Scope(Runner* runner); ~Scope(); private: v8::Isolate::Scope isolate_scope_; v8::HandleScope handle_scope_; v8::Context::Scope scope_; DISALLOW_COPY_AND_ASSIGN(Scope); }; private: friend class Scope; RunnerDelegate* delegate_; base::WeakPtrFactory weak_factory_; DISALLOW_COPY_AND_ASSIGN(Runner); }; } // namespace gin #endif // GIN_RUNNER_H_