| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2008 Apple Inc. All Rights Reserved. | 2 * Copyright (C) 2008 Apple Inc. All Rights Reserved. |
| 3 * Copyright (C) 2009 Google Inc. All Rights Reserved. | 3 * Copyright (C) 2009 Google Inc. All Rights Reserved. |
| 4 * | 4 * |
| 5 * Redistribution and use in source and binary forms, with or without | 5 * Redistribution and use in source and binary forms, with or without |
| 6 * modification, are permitted provided that the following conditions | 6 * modification, are permitted provided that the following conditions |
| 7 * are met: | 7 * are met: |
| 8 * 1. Redistributions of source code must retain the above copyright | 8 * 1. 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 * 2. Redistributions in binary form must reproduce the above copyright | 10 * 2. Redistributions in binary form must reproduce the above copyright |
| (...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 165 } | 165 } |
| 166 | 166 |
| 167 void WorkerMessagingProxy::reportException(const String& errorMessage, int lineN
umber, int columnNumber, const String& sourceURL) | 167 void WorkerMessagingProxy::reportException(const String& errorMessage, int lineN
umber, int columnNumber, const String& sourceURL) |
| 168 { | 168 { |
| 169 if (!m_workerObject) | 169 if (!m_workerObject) |
| 170 return; | 170 return; |
| 171 | 171 |
| 172 // We don't bother checking the askedToTerminate() flag here, because except
ions should *always* be reported even if the thread is terminated. | 172 // We don't bother checking the askedToTerminate() flag here, because except
ions should *always* be reported even if the thread is terminated. |
| 173 // This is intentionally different than the behavior in MessageWorkerTask, b
ecause terminated workers no longer deliver messages (section 4.6 of the WebWork
er spec), but they do report exceptions. | 173 // This is intentionally different than the behavior in MessageWorkerTask, b
ecause terminated workers no longer deliver messages (section 4.6 of the WebWork
er spec), but they do report exceptions. |
| 174 | 174 |
| 175 RefPtrWillBeRawPtr<ErrorEvent> event = ErrorEvent::create(errorMessage, sour
ceURL, lineNumber, columnNumber, 0); | 175 RefPtrWillBeRawPtr<ErrorEvent> event = ErrorEvent::create(errorMessage, sour
ceURL, lineNumber, columnNumber, nullptr); |
| 176 bool errorHandled = !m_workerObject->dispatchEvent(event); | 176 bool errorHandled = !m_workerObject->dispatchEvent(event); |
| 177 if (!errorHandled) | 177 if (!errorHandled) |
| 178 m_executionContext->reportException(event, 0, nullptr, NotSharableCrossO
rigin); | 178 m_executionContext->reportException(event, 0, nullptr, NotSharableCrossO
rigin); |
| 179 } | 179 } |
| 180 | 180 |
| 181 void WorkerMessagingProxy::reportConsoleMessage(MessageSource source, MessageLev
el level, const String& message, int lineNumber, const String& sourceURL) | 181 void WorkerMessagingProxy::reportConsoleMessage(MessageSource source, MessageLev
el level, const String& message, int lineNumber, const String& sourceURL) |
| 182 { | 182 { |
| 183 if (m_askedToTerminate) | 183 if (m_askedToTerminate) |
| 184 return; | 184 return; |
| 185 // FIXME: In case of nested workers, this should go directly to the root Doc
ument context. | 185 // FIXME: In case of nested workers, this should go directly to the root Doc
ument context. |
| 186 ASSERT(m_executionContext->isDocument()); | 186 ASSERT(m_executionContext->isDocument()); |
| 187 Document* document = toDocument(m_executionContext.get()); | 187 Document* document = toDocument(m_executionContext.get()); |
| 188 LocalFrame* frame = document->frame(); | 188 LocalFrame* frame = document->frame(); |
| 189 if (!frame) | 189 if (!frame) |
| 190 return; | 190 return; |
| 191 | 191 |
| 192 RefPtrWillBeRawPtr<ConsoleMessage> consoleMessage = ConsoleMessage::create(s
ource, level, message, sourceURL, lineNumber); | 192 RefPtrWillBeRawPtr<ConsoleMessage> consoleMessage = ConsoleMessage::create(s
ource, level, message, sourceURL, lineNumber); |
| 193 consoleMessage->setWorkerGlobalScopeProxy(this); | 193 consoleMessage->setWorkerGlobalScopeProxy(this); |
| 194 frame->console().addMessage(consoleMessage.release()); | 194 frame->console().addMessage(consoleMessage.release()); |
| 195 } | 195 } |
| 196 | 196 |
| 197 void WorkerMessagingProxy::workerThreadCreated(PassRefPtr<DedicatedWorkerThread>
workerThread) | 197 void WorkerMessagingProxy::workerThreadCreated(PassRefPtr<DedicatedWorkerThread>
workerThread) |
| 198 { | 198 { |
| 199 ASSERT(!m_askedToTerminate); | 199 ASSERT(!m_askedToTerminate); |
| 200 m_workerThread = workerThread; | 200 m_workerThread = workerThread; |
| 201 | 201 |
| 202 unsigned taskCount = m_queuedEarlyTasks.size(); | |
| 203 ASSERT(!m_unconfirmedMessageCount); | 202 ASSERT(!m_unconfirmedMessageCount); |
| 204 m_unconfirmedMessageCount = taskCount; | 203 m_unconfirmedMessageCount = m_queuedEarlyTasks.size(); |
| 205 m_workerThreadHadPendingActivity = true; // Worker initialization means a pe
nding activity. | 204 m_workerThreadHadPendingActivity = true; // Worker initialization means a pe
nding activity. |
| 206 | 205 |
| 207 for (unsigned i = 0; i < taskCount; ++i) | 206 for (auto& earlyTasks : m_queuedEarlyTasks) |
| 208 m_workerThread->postTask(m_queuedEarlyTasks[i].release()); | 207 m_workerThread->postTask(earlyTasks.release()); |
| 209 m_queuedEarlyTasks.clear(); | 208 m_queuedEarlyTasks.clear(); |
| 210 } | 209 } |
| 211 | 210 |
| 212 void WorkerMessagingProxy::workerObjectDestroyed() | 211 void WorkerMessagingProxy::workerObjectDestroyed() |
| 213 { | 212 { |
| 214 m_workerObject = 0; | 213 m_workerObject = nullptr; |
| 215 m_executionContext->postTask(createCrossThreadTask(&workerObjectDestroyedInt
ernal, AllowCrossThreadAccess(this))); | 214 m_executionContext->postTask(createCrossThreadTask(&workerObjectDestroyedInt
ernal, AllowCrossThreadAccess(this))); |
| 216 } | 215 } |
| 217 | 216 |
| 218 void WorkerMessagingProxy::workerObjectDestroyedInternal(ExecutionContext*, Work
erMessagingProxy* proxy) | 217 void WorkerMessagingProxy::workerObjectDestroyedInternal(ExecutionContext*, Work
erMessagingProxy* proxy) |
| 219 { | 218 { |
| 220 proxy->m_mayBeDestroyed = true; | 219 proxy->m_mayBeDestroyed = true; |
| 221 if (proxy->m_workerThread) | 220 if (proxy->m_workerThread) |
| 222 proxy->terminateWorkerGlobalScope(); | 221 proxy->terminateWorkerGlobalScope(); |
| 223 else | 222 else |
| 224 proxy->workerThreadTerminated(); | 223 proxy->workerThreadTerminated(); |
| (...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 286 | 285 |
| 287 // FIXME: This need to be revisited when we support nested worker one day | 286 // FIXME: This need to be revisited when we support nested worker one day |
| 288 ASSERT(m_executionContext->isDocument()); | 287 ASSERT(m_executionContext->isDocument()); |
| 289 Document* document = toDocument(m_executionContext.get()); | 288 Document* document = toDocument(m_executionContext.get()); |
| 290 LocalFrame* frame = document->frame(); | 289 LocalFrame* frame = document->frame(); |
| 291 if (frame) | 290 if (frame) |
| 292 frame->console().adoptWorkerMessagesAfterTermination(this); | 291 frame->console().adoptWorkerMessagesAfterTermination(this); |
| 293 } | 292 } |
| 294 | 293 |
| 295 } // namespace blink | 294 } // namespace blink |
| OLD | NEW |