| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2009 Google Inc. All rights reserved. | 2 * Copyright (C) 2009 Google Inc. All rights reserved. |
| 3 * | 3 * |
| 4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
| 5 * modification, are permitted provided that the following conditions are | 5 * modification, are permitted provided that the following conditions are |
| 6 * met: | 6 * met: |
| 7 * | 7 * |
| 8 * * Redistributions of source code must retain the above copyright | 8 * * Redistributions of source code must retain the above copyright |
| 9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
| 10 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
| (...skipping 198 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 209 // FIXME: when 'kill a worker' html5 spec algorithm is implemented, it | 209 // FIXME: when 'kill a worker' html5 spec algorithm is implemented, it |
| 210 // should be used here instead of 'terminate a worker'. | 210 // should be used here instead of 'terminate a worker'. |
| 211 terminateWorkerContext(); | 211 terminateWorkerContext(); |
| 212 } | 212 } |
| 213 | 213 |
| 214 void WebWorkerImpl::clientDestroyed() | 214 void WebWorkerImpl::clientDestroyed() |
| 215 { | 215 { |
| 216 m_client = 0; | 216 m_client = 0; |
| 217 } | 217 } |
| 218 | 218 |
| 219 void WebWorkerImpl::dispatchTaskToMainThread(PassRefPtr<ScriptExecutionContext::Task> task) | 219 void WebWorkerImpl::dispatchTaskToMainThread(PassOwnPtr<ScriptExecutionContext::Task> task) |
| 220 { | 220 { |
| 221 return callOnMainThread(invokeTaskMethod, task.releaseRef()); | 221 return callOnMainThread(invokeTaskMethod, task.release()); |
| 222 } | 222 } |
| 223 | 223 |
| 224 void WebWorkerImpl::invokeTaskMethod(void* param) | 224 void WebWorkerImpl::invokeTaskMethod(void* param) |
| 225 { | 225 { |
| 226 ScriptExecutionContext::Task* task = | 226 ScriptExecutionContext::Task* task = |
| 227 static_cast<ScriptExecutionContext::Task*>(param); | 227 static_cast<ScriptExecutionContext::Task*>(param); |
| 228 task->performTask(0); | 228 task->performTask(0); |
| 229 task->deref(); | 229 delete task; |
| 230 } | 230 } |
| 231 | 231 |
| 232 // WorkerObjectProxy ----------------------------------------------------------- | 232 // WorkerObjectProxy ----------------------------------------------------------- |
| 233 | 233 |
| 234 void WebWorkerImpl::postMessageToWorkerObject(PassRefPtr<SerializedScriptValue> message, | 234 void WebWorkerImpl::postMessageToWorkerObject(PassRefPtr<SerializedScriptValue> message, |
| 235 PassOwnPtr<MessagePortChannelArray> channels) | 235 PassOwnPtr<MessagePortChannelArray> channels) |
| 236 { | 236 { |
| 237 dispatchTaskToMainThread(createCallbackTask(&postMessageTask, this, | 237 dispatchTaskToMainThread(createCallbackTask(&postMessageTask, this, |
| 238 message->toString(), channels)); | 238 message->toString(), channels)); |
| 239 } | 239 } |
| (...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 339 } | 339 } |
| 340 | 340 |
| 341 void WebWorkerImpl::workerContextDestroyed() | 341 void WebWorkerImpl::workerContextDestroyed() |
| 342 { | 342 { |
| 343 dispatchTaskToMainThread(createCallbackTask(&workerContextDestroyedTask, | 343 dispatchTaskToMainThread(createCallbackTask(&workerContextDestroyedTask, |
| 344 this)); | 344 this)); |
| 345 } | 345 } |
| 346 | 346 |
| 347 // WorkerLoaderProxy ----------------------------------------------------------- | 347 // WorkerLoaderProxy ----------------------------------------------------------- |
| 348 | 348 |
| 349 void WebWorkerImpl::postTaskToLoader(PassRefPtr<ScriptExecutionContext::Task> task) | 349 void WebWorkerImpl::postTaskToLoader(PassOwnPtr<ScriptExecutionContext::Task> task) |
| 350 { | 350 { |
| 351 ASSERT(m_loadingDocument->isDocument()); | 351 ASSERT(m_loadingDocument->isDocument()); |
| 352 m_loadingDocument->postTask(task); | 352 m_loadingDocument->postTask(task); |
| 353 } | 353 } |
| 354 | 354 |
| 355 void WebWorkerImpl::postTaskForModeToWorkerContext( | 355 void WebWorkerImpl::postTaskForModeToWorkerContext( |
| 356 PassRefPtr<ScriptExecutionContext::Task> task, const String& mode) | 356 PassOwnPtr<ScriptExecutionContext::Task> task, const String& mode) |
| 357 { | 357 { |
| 358 m_workerThread->runLoop().postTaskForMode(task, mode); | 358 m_workerThread->runLoop().postTaskForMode(task, mode); |
| 359 } | 359 } |
| 360 | 360 |
| 361 void WebWorkerImpl::workerContextDestroyedTask(ScriptExecutionContext* context, | 361 void WebWorkerImpl::workerContextDestroyedTask(ScriptExecutionContext* context, |
| 362 WebWorkerImpl* thisPtr) | 362 WebWorkerImpl* thisPtr) |
| 363 { | 363 { |
| 364 if (thisPtr->m_client) | 364 if (thisPtr->m_client) |
| 365 thisPtr->m_client->workerContextDestroyed(); | 365 thisPtr->m_client->workerContextDestroyed(); |
| 366 // The lifetime of this proxy is controlled by the worker context. | 366 // The lifetime of this proxy is controlled by the worker context. |
| 367 delete thisPtr; | 367 delete thisPtr; |
| 368 } | 368 } |
| 369 | 369 |
| 370 | 370 |
| 371 #else | 371 #else |
| 372 | 372 |
| 373 WebWorker* WebWorker::create(WebWorkerClient* client) | 373 WebWorker* WebWorker::create(WebWorkerClient* client) |
| 374 { | 374 { |
| 375 return 0; | 375 return 0; |
| 376 } | 376 } |
| 377 | 377 |
| 378 #endif // ENABLE(WORKERS) | 378 #endif // ENABLE(WORKERS) |
| 379 | 379 |
| 380 } // namespace WebKit | 380 } // namespace WebKit |
| OLD | NEW |