JSValue jsWorkerContextOnmessage(ExecState* exec, const Identifier&, const PropertySlot& slot) { UNUSED_PARAM(exec); WorkerContext* imp = static_cast<WorkerContext*>(static_cast<JSWorkerContext*>(asObject(slot.slotBase()))->impl()); if (EventListener* listener = imp->onmessage()) { if (JSObject* jsFunction = listener->jsFunction()) return jsFunction; } return jsNull(); }
virtual void performTask(ScriptExecutionContext* scriptContext) { ASSERT(scriptContext->isWorkerContext()); WorkerContext* context = static_cast<WorkerContext*>(scriptContext); RefPtr<Event> evt = MessageEvent::create(m_message, "", "", 0, 0); if (context->onmessage()) { evt->setTarget(context); evt->setCurrentTarget(context); context->onmessage()->handleEvent(evt.get(), false); } ExceptionCode ec = 0; context->dispatchEvent(evt.release(), ec); ASSERT(!ec); context->thread()->messagingProxy()->confirmWorkerThreadMessage(context->hasPendingActivity()); }