diff options
author | hansmuller <hansmuller@chromium.org> | 2014-11-25 13:43:32 -0800 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2014-11-25 21:43:58 +0000 |
commit | 5d47befc56fecf4b7ff3e3ccc1197089d5a2bd0a (patch) | |
tree | 38f842fc7308ea42a89ebf7e066faca45cf2eb0e /gin | |
parent | 7ece42be9a0733fb7b477cfa9228af885993bed0 (diff) | |
download | chromium_src-5d47befc56fecf4b7ff3e3ccc1197089d5a2bd0a.zip chromium_src-5d47befc56fecf4b7ff3e3ccc1197089d5a2bd0a.tar.gz chromium_src-5d47befc56fecf4b7ff3e3ccc1197089d5a2bd0a.tar.bz2 |
gin: ModuleRegistry::LoadModule() shouldn't extend the ModuleRegistry unsatisfied_dependencies set for a pending module.
BUG=
Review URL: https://codereview.chromium.org/759003002
Cr-Commit-Position: refs/heads/master@{#305700}
Diffstat (limited to 'gin')
-rw-r--r-- | gin/modules/module_registry.cc | 6 | ||||
-rw-r--r-- | gin/modules/module_registry_unittest.cc | 28 |
2 files changed, 34 insertions, 0 deletions
diff --git a/gin/modules/module_registry.cc b/gin/modules/module_registry.cc index a92a5461..8341337 100644 --- a/gin/modules/module_registry.cc +++ b/gin/modules/module_registry.cc @@ -168,6 +168,12 @@ void ModuleRegistry::LoadModule(Isolate* isolate, return; } waiting_callbacks_.insert(std::make_pair(id, callback)); + + for (size_t i = 0; i < pending_modules_.size(); ++i) { + if (pending_modules_[i]->id == id) + return; + } + unsatisfied_dependencies_.insert(id); } diff --git a/gin/modules/module_registry_unittest.cc b/gin/modules/module_registry_unittest.cc index 3d784dc..ed725fc 100644 --- a/gin/modules/module_registry_unittest.cc +++ b/gin/modules/module_registry_unittest.cc @@ -70,6 +70,10 @@ void OnModuleLoaded(TestHelper* helper, ->LoadModule(isolate, "two", base::Bind(NestedCallback)); } +void OnModuleLoadedNoOp(v8::Handle<v8::Value> value) { + ASSERT_TRUE(value->IsNumber()); +} + } // namespace typedef V8Test ModuleRegistryTest; @@ -133,4 +137,28 @@ TEST_F(ModuleRegistryTest, LoadModuleTest) { EXPECT_EQ(3, counter); } +// Verifies that explicitly loading a module that's already pending does +// not cause the ModuleRegistry's unsatisfied_dependency set to grow. +TEST_F(ModuleRegistryTest, UnsatisfiedDependenciesTest) { + TestHelper helper(instance_->isolate()); + std::string source = + "define('one', ['no_such_module'], function(nsm) {" + " return 1;" + "});"; + ModuleRegistry* registry = + ModuleRegistry::From(helper.runner->GetContextHolder()->context()); + + std::set<std::string> no_such_module_set; + no_such_module_set.insert("no_such_module"); + + // Adds one unsatisfied dependency on "no-such-module". + helper.runner->Run(source, "script"); + EXPECT_EQ(no_such_module_set, registry->unsatisfied_dependencies()); + + // Should have no effect on the unsatisfied_dependencies set. + ModuleRegistry::LoadModuleCallback callback = base::Bind(OnModuleLoadedNoOp); + registry->LoadModule(instance_->isolate(), "one", callback); + EXPECT_EQ(no_such_module_set, registry->unsatisfied_dependencies()); +} + } // namespace gin |