void WorkerScriptController::initScript() { ASSERT(!m_workerContextWrapper); JSLock lock(SilenceAssertionsOnly); // Explicitly protect the global object's prototype so it isn't collected // when we allocate the global object. (Once the global object is fully // constructed, it can mark its own prototype.) Structure* workerContextPrototypeStructure = JSWorkerContextPrototype::createStructure(*m_globalData, jsNull()); Strong<JSWorkerContextPrototype> workerContextPrototype(*m_globalData, new (m_globalData.get()) JSWorkerContextPrototype(*m_globalData, 0, workerContextPrototypeStructure)); if (m_workerContext->isDedicatedWorkerContext()) { Structure* dedicatedContextPrototypeStructure = JSDedicatedWorkerContextPrototype::createStructure(*m_globalData, workerContextPrototype.get()); Strong<JSDedicatedWorkerContextPrototype> dedicatedContextPrototype(*m_globalData, new (m_globalData.get()) JSDedicatedWorkerContextPrototype(*m_globalData, 0, dedicatedContextPrototypeStructure)); Structure* structure = JSDedicatedWorkerContext::createStructure(*m_globalData, dedicatedContextPrototype.get()); m_workerContextWrapper.set(*m_globalData, new (m_globalData.get()) JSDedicatedWorkerContext(*m_globalData, structure, m_workerContext->toDedicatedWorkerContext())); workerContextPrototype->putAnonymousValue(*m_globalData, 0, m_workerContextWrapper.get()); dedicatedContextPrototype->putAnonymousValue(*m_globalData, 0, m_workerContextWrapper.get()); #if ENABLE(SHARED_WORKERS) } else { ASSERT(m_workerContext->isSharedWorkerContext()); Structure* sharedContextPrototypeStructure = JSSharedWorkerContextPrototype::createStructure(*m_globalData, workerContextPrototype.get()); Strong<JSSharedWorkerContextPrototype> sharedContextPrototype(*m_globalData, new (m_globalData.get()) JSSharedWorkerContextPrototype(*m_globalData, 0, sharedContextPrototypeStructure)); Structure* structure = JSSharedWorkerContext::createStructure(*m_globalData, sharedContextPrototype.get()); m_workerContextWrapper.set(*m_globalData, new (m_globalData.get()) JSSharedWorkerContext(*m_globalData, structure, m_workerContext->toSharedWorkerContext())); workerContextPrototype->putAnonymousValue(*m_globalData, 0, m_workerContextWrapper.get()); sharedContextPrototype->putAnonymousValue(*m_globalData, 0, m_workerContextWrapper.get()); #endif } }
void WorkerScriptController::initScript() { ASSERT(!m_workerContextWrapper); JSLockHolder lock(m_vm.get()); // Explicitly protect the global object's prototype so it isn't collected // when we allocate the global object. (Once the global object is fully // constructed, it can mark its own prototype.) Structure* workerContextPrototypeStructure = JSWorkerContextPrototype::createStructure(*m_vm, 0, jsNull()); Strong<JSWorkerContextPrototype> workerContextPrototype(*m_vm, JSWorkerContextPrototype::create(*m_vm, 0, workerContextPrototypeStructure)); if (m_workerContext->isDedicatedWorkerContext()) { Structure* dedicatedContextPrototypeStructure = JSDedicatedWorkerContextPrototype::createStructure(*m_vm, 0, workerContextPrototype.get()); Strong<JSDedicatedWorkerContextPrototype> dedicatedContextPrototype(*m_vm, JSDedicatedWorkerContextPrototype::create(*m_vm, 0, dedicatedContextPrototypeStructure)); Structure* structure = JSDedicatedWorkerContext::createStructure(*m_vm, 0, dedicatedContextPrototype.get()); m_workerContextWrapper.set(*m_vm, JSDedicatedWorkerContext::create(*m_vm, structure, static_cast<DedicatedWorkerContext*>(m_workerContext))); workerContextPrototypeStructure->setGlobalObject(*m_vm, m_workerContextWrapper.get()); dedicatedContextPrototypeStructure->setGlobalObject(*m_vm, m_workerContextWrapper.get()); ASSERT(structure->globalObject() == m_workerContextWrapper); ASSERT(m_workerContextWrapper->structure()->globalObject() == m_workerContextWrapper); workerContextPrototype->structure()->setGlobalObject(*m_vm, m_workerContextWrapper.get()); dedicatedContextPrototype->structure()->setGlobalObject(*m_vm, m_workerContextWrapper.get()); #if ENABLE(SHARED_WORKERS) } else { ASSERT(m_workerContext->isSharedWorkerContext()); Structure* sharedContextPrototypeStructure = JSSharedWorkerContextPrototype::createStructure(*m_vm, 0, workerContextPrototype.get()); Strong<JSSharedWorkerContextPrototype> sharedContextPrototype(*m_vm, JSSharedWorkerContextPrototype::create(*m_vm, 0, sharedContextPrototypeStructure)); Structure* structure = JSSharedWorkerContext::createStructure(*m_vm, 0, sharedContextPrototype.get()); m_workerContextWrapper.set(*m_vm, JSSharedWorkerContext::create(*m_vm, structure, static_cast<SharedWorkerContext*>(m_workerContext))); workerContextPrototype->structure()->setGlobalObject(*m_vm, m_workerContextWrapper.get()); sharedContextPrototype->structure()->setGlobalObject(*m_vm, m_workerContextWrapper.get()); #endif } ASSERT(m_workerContextWrapper->globalObject() == m_workerContextWrapper); ASSERT(asObject(m_workerContextWrapper->prototype())->globalObject() == m_workerContextWrapper); if (initScriptCallback()) initScriptCallback()(m_workerContextWrapper->globalExec(), m_workerContext->isDedicatedWorkerContext()); }