OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 #include "chrome/renderer/module_system.h" | 5 #include "chrome/renderer/module_system.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "third_party/WebKit/Source/WebKit/chromium/public/WebScopedMicrotaskSup
pression.h" |
8 | 9 |
9 namespace { | 10 namespace { |
10 | 11 |
11 const char* kModuleSystem = "module_system"; | 12 const char* kModuleSystem = "module_system"; |
12 const char* kModuleName = "module_name"; | 13 const char* kModuleName = "module_name"; |
13 const char* kModuleField = "module_field"; | 14 const char* kModuleField = "module_field"; |
14 | 15 |
15 } // namespace | 16 } // namespace |
16 | 17 |
17 ModuleSystem::ModuleSystem(SourceMap* source_map) | 18 ModuleSystem::ModuleSystem(SourceMap* source_map) |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
67 v8::Handle<v8::String>::Cast(source))); | 68 v8::Handle<v8::String>::Cast(source))); |
68 v8::Handle<v8::Function> func = | 69 v8::Handle<v8::Function> func = |
69 v8::Handle<v8::Function>::Cast(RunString(wrapped_source, module_name)); | 70 v8::Handle<v8::Function>::Cast(RunString(wrapped_source, module_name)); |
70 exports = v8::Object::New(); | 71 exports = v8::Object::New(); |
71 v8::Handle<v8::Object> natives(NewInstance()); | 72 v8::Handle<v8::Object> natives(NewInstance()); |
72 v8::Handle<v8::Value> args[] = { | 73 v8::Handle<v8::Value> args[] = { |
73 natives->Get(v8::String::NewSymbol("require")), | 74 natives->Get(v8::String::NewSymbol("require")), |
74 natives->Get(v8::String::NewSymbol("requireNative")), | 75 natives->Get(v8::String::NewSymbol("requireNative")), |
75 exports, | 76 exports, |
76 }; | 77 }; |
77 func->Call(global, 3, args); | 78 { |
| 79 WebKit::WebScopedMicrotaskSuppression suppression; |
| 80 func->Call(global, 3, args); |
| 81 } |
78 modules->Set(module_name, exports); | 82 modules->Set(module_name, exports); |
79 return handle_scope.Close(exports); | 83 return handle_scope.Close(exports); |
80 } | 84 } |
81 | 85 |
82 void ModuleSystem::RegisterNativeHandler(const std::string& name, | 86 void ModuleSystem::RegisterNativeHandler(const std::string& name, |
83 scoped_ptr<NativeHandler> native_handler) { | 87 scoped_ptr<NativeHandler> native_handler) { |
84 native_handler_map_[name] = | 88 native_handler_map_[name] = |
85 linked_ptr<NativeHandler>(native_handler.release()); | 89 linked_ptr<NativeHandler>(native_handler.release()); |
86 } | 90 } |
87 | 91 |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
129 | 133 |
130 object->SetAccessor(v8::String::New(field.c_str()), | 134 object->SetAccessor(v8::String::New(field.c_str()), |
131 &ModuleSystem::LazyFieldGetter, | 135 &ModuleSystem::LazyFieldGetter, |
132 NULL, | 136 NULL, |
133 parameters); | 137 parameters); |
134 } | 138 } |
135 | 139 |
136 v8::Handle<v8::Value> ModuleSystem::RunString(v8::Handle<v8::String> code, | 140 v8::Handle<v8::Value> ModuleSystem::RunString(v8::Handle<v8::String> code, |
137 v8::Handle<v8::String> name) { | 141 v8::Handle<v8::String> name) { |
138 v8::HandleScope handle_scope; | 142 v8::HandleScope handle_scope; |
| 143 WebKit::WebScopedMicrotaskSuppression suppression; |
139 return handle_scope.Close(v8::Script::New(code, name)->Run()); | 144 return handle_scope.Close(v8::Script::New(code, name)->Run()); |
140 } | 145 } |
141 | 146 |
142 v8::Handle<v8::Value> ModuleSystem::GetSource( | 147 v8::Handle<v8::Value> ModuleSystem::GetSource( |
143 v8::Handle<v8::String> source_name) { | 148 v8::Handle<v8::String> source_name) { |
144 v8::HandleScope handle_scope; | 149 v8::HandleScope handle_scope; |
145 std::string module_name = *v8::String::AsciiValue(source_name); | 150 std::string module_name = *v8::String::AsciiValue(source_name); |
146 if (!source_map_->Contains(module_name)) | 151 if (!source_map_->Contains(module_name)) |
147 return v8::Undefined(); | 152 return v8::Undefined(); |
148 return handle_scope.Close(source_map_->GetSource(module_name)); | 153 return handle_scope.Close(source_map_->GetSource(module_name)); |
(...skipping 15 matching lines...) Expand all Loading... |
164 v8::Handle<v8::String> left = | 169 v8::Handle<v8::String> left = |
165 v8::String::New("(function(require, requireNative, exports) {"); | 170 v8::String::New("(function(require, requireNative, exports) {"); |
166 v8::Handle<v8::String> right = v8::String::New("\n})"); | 171 v8::Handle<v8::String> right = v8::String::New("\n})"); |
167 return handle_scope.Close( | 172 return handle_scope.Close( |
168 v8::String::Concat(left, v8::String::Concat(source, right))); | 173 v8::String::Concat(left, v8::String::Concat(source, right))); |
169 } | 174 } |
170 | 175 |
171 v8::Handle<v8::Value> ModuleSystem::ThrowException(const std::string& message) { | 176 v8::Handle<v8::Value> ModuleSystem::ThrowException(const std::string& message) { |
172 return v8::ThrowException(v8::String::New(message.c_str())); | 177 return v8::ThrowException(v8::String::New(message.c_str())); |
173 } | 178 } |
OLD | NEW |