diff options
author | abarth@chromium.org <abarth@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-11-25 02:19:34 +0000 |
---|---|---|
committer | abarth@chromium.org <abarth@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-11-25 02:19:34 +0000 |
commit | 0d72f004efa9898b428b9b289a8d63d2427e2828 (patch) | |
tree | f749189620fba034c4e09aa5e64c537eba778e61 /gin/modules | |
parent | 6a36eff422ce0dfaf8bcb75585863c38817d219d (diff) | |
download | chromium_src-0d72f004efa9898b428b9b289a8d63d2427e2828.zip chromium_src-0d72f004efa9898b428b9b289a8d63d2427e2828.tar.gz chromium_src-0d72f004efa9898b428b9b289a8d63d2427e2828.tar.bz2 |
[Mojo] Almost connect mojo_js with hello_world_service
This CL connects mojo_js with hello_world_service. After this
CL, the JavaScript and C++ implementations have reached
parity.
BUG=317398
Review URL: https://codereview.chromium.org/82953004
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@237018 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'gin/modules')
-rw-r--r-- | gin/modules/module_registry.cc | 47 | ||||
-rw-r--r-- | gin/modules/module_runner_delegate.cc | 3 | ||||
-rw-r--r-- | gin/modules/module_runner_delegate.h | 3 |
3 files changed, 23 insertions, 30 deletions
diff --git a/gin/modules/module_registry.cc b/gin/modules/module_registry.cc index afb07d3..d868dec 100644 --- a/gin/modules/module_registry.cc +++ b/gin/modules/module_registry.cc @@ -12,13 +12,12 @@ #include "gin/converter.h" #include "gin/per_isolate_data.h" #include "gin/public/wrapper_info.h" -#include "gin/try_catch.h" +#include "gin/runner.h" using v8::Context; using v8::External; using v8::Function; using v8::FunctionTemplate; -using v8::Handle; using v8::Isolate; using v8::Local; using v8::Object; @@ -56,7 +55,7 @@ void Define(const v8::FunctionCallbackInfo<Value>& info) { std::string id; std::vector<std::string> dependencies; - Handle<Value> factory; + v8::Handle<Value> factory; if (args.PeekNext()->IsString()) args.GetNext(&id); @@ -88,7 +87,7 @@ Local<FunctionTemplate> GetDefineTemplate(Isolate* isolate) { return templ; } -Handle<String> GetHiddenValueKey(Isolate* isolate) { +v8::Handle<String> GetHiddenValueKey(Isolate* isolate) { return StringToSymbol(isolate, "::gin::ModuleRegistry"); } @@ -103,15 +102,15 @@ ModuleRegistry::~ModuleRegistry() { } void ModuleRegistry::RegisterGlobals(Isolate* isolate, - Handle<ObjectTemplate> templ) { + v8::Handle<ObjectTemplate> templ) { templ->Set(StringToSymbol(isolate, "define"), GetDefineTemplate(isolate)); } -ModuleRegistry* ModuleRegistry::From(Handle<Context> context) { +ModuleRegistry* ModuleRegistry::From(v8::Handle<Context> context) { Isolate* isolate = context->GetIsolate(); - Handle<String> key = GetHiddenValueKey(isolate); - Handle<Value> value = context->Global()->GetHiddenValue(key); - Handle<External> external; + v8::Handle<String> key = GetHiddenValueKey(isolate); + v8::Handle<Value> value = context->Global()->GetHiddenValue(key); + v8::Handle<External> external; if (value.IsEmpty() || !ConvertFromV8(value, &external)) { PerContextData* data = PerContextData::From(context); if (!data) @@ -126,7 +125,7 @@ ModuleRegistry* ModuleRegistry::From(Handle<Context> context) { void ModuleRegistry::AddBuiltinModule(Isolate* isolate, const std::string& id, - Handle<ObjectTemplate> templ) { + v8::Handle<ObjectTemplate> templ) { DCHECK(!id.empty()); RegisterModule(isolate, id, templ->NewInstance()); } @@ -138,19 +137,19 @@ void ModuleRegistry::AddPendingModule(Isolate* isolate, void ModuleRegistry::RegisterModule(Isolate* isolate, const std::string& id, - Handle<Value> module) { + v8::Handle<Value> module) { if (id.empty() || module.IsEmpty()) return; unsatisfied_dependencies_.erase(id); available_modules_.insert(id); - Handle<Object> modules = Local<Object>::New(isolate, modules_); + v8::Handle<Object> modules = Local<Object>::New(isolate, modules_); modules->Set(StringToSymbol(isolate, id), module); } -void ModuleRegistry::Detach(Handle<Context> context) { +void ModuleRegistry::Detach(v8::Handle<Context> context) { context->Global()->SetHiddenValue(GetHiddenValueKey(context->GetIsolate()), - Handle<Value>()); + v8::Handle<Value>()); } bool ModuleRegistry::CheckDependencies(PendingModule* pending) { @@ -170,26 +169,22 @@ void ModuleRegistry::Load(Isolate* isolate, scoped_ptr<PendingModule> pending) { if (!pending->id.empty() && available_modules_.count(pending->id)) return; // We've already loaded this module. - Handle<Object> modules = Local<Object>::New(isolate, modules_); + v8::Handle<Object> modules = Local<Object>::New(isolate, modules_); uint32_t argc = static_cast<uint32_t>(pending->dependencies.size()); - std::vector<Handle<Value> > argv(argc); + std::vector<v8::Handle<Value> > argv(argc); for (uint32_t i = 0; i < argc; ++i) { - Handle<String> key = StringToSymbol(isolate, pending->dependencies[i]); + v8::Handle<String> key = StringToSymbol(isolate, pending->dependencies[i]); DCHECK(modules->HasOwnProperty(key)); argv[i] = modules->Get(key); } - Handle<Value> module = Local<Value>::New(isolate, pending->factory); + v8::Handle<Value> module = Local<Value>::New(isolate, pending->factory); - Handle<Function> factory; + v8::Handle<Function> factory; if (ConvertFromV8(module, &factory)) { - Handle<Object> global = isolate->GetCurrentContext()->Global(); - { - gin::TryCatch try_catch; - module = factory->Call(global, argc, argv.data()); - if (try_catch.HasCaught()) - return; // TODO(abarth): What should we do with the exception? - } + PerContextData* data = PerContextData::From(isolate->GetCurrentContext()); + Runner* runner = data->runner(); + module = runner->Call(factory, runner->global(), argc, argv.data()); if (pending->id.empty()) ConvertFromV8(factory->GetScriptOrigin().ResourceName(), &pending->id); } diff --git a/gin/modules/module_runner_delegate.cc b/gin/modules/module_runner_delegate.cc index 3f2422c..9e0b762 100644 --- a/gin/modules/module_runner_delegate.cc +++ b/gin/modules/module_runner_delegate.cc @@ -41,8 +41,7 @@ void ModuleRunnerDelegate::DidCreateContext(Runner* runner) { } } -void ModuleRunnerDelegate::DidRunScript(Runner* runner, - v8::Handle<v8::Script> script) { +void ModuleRunnerDelegate::DidRunScript(Runner* runner) { ModuleRegistry* registry = ModuleRegistry::From(runner->context()); registry->AttemptToLoadMoreModules(runner->isolate()); module_provider_.AttempToLoadModules( diff --git a/gin/modules/module_runner_delegate.h b/gin/modules/module_runner_delegate.h index a66695f..efc9761 100644 --- a/gin/modules/module_runner_delegate.h +++ b/gin/modules/module_runner_delegate.h @@ -31,8 +31,7 @@ class ModuleRunnerDelegate : public RunnerDelegate { virtual v8::Handle<v8::ObjectTemplate> GetGlobalTemplate( Runner* runner) OVERRIDE; virtual void DidCreateContext(Runner* runner) OVERRIDE; - virtual void DidRunScript(Runner* runner, - v8::Handle<v8::Script> script) OVERRIDE; + virtual void DidRunScript(Runner* runner) OVERRIDE; BuiltinModuleMap builtin_modules_; FileModuleProvider module_provider_; |