| 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) 2011 Google Inc. All Rights Reserved. |
| 3 * | 4 * |
| 4 * Redistribution and use in source and binary forms, with or without | 5 * Redistribution and use in source and binary forms, with or without |
| 5 * modification, are permitted provided that the following conditions | 6 * modification, are permitted provided that the following conditions |
| 6 * are met: | 7 * are met: |
| 7 * 1. Redistributions of source code must retain the above copyright | 8 * 1. Redistributions of source code must retain the above copyright |
| 8 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
| 9 * 2. Redistributions in binary form must reproduce the above copyright | 10 * 2. Redistributions in binary form must reproduce the above copyright |
| 10 * notice, this list of conditions and the following disclaimer in the | 11 * notice, this list of conditions and the following disclaimer in the |
| 11 * documentation and/or other materials provided with the distribution. | 12 * documentation and/or other materials provided with the distribution. |
| 12 * | 13 * |
| (...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 124 JSLock lock(SilenceAssertionsOnly); | 125 JSLock lock(SilenceAssertionsOnly); |
| 125 | 126 |
| 126 ExecState* exec = m_workerContextWrapper->globalExec(); | 127 ExecState* exec = m_workerContextWrapper->globalExec(); |
| 127 m_workerContextWrapper->globalData().timeoutChecker.start(); | 128 m_workerContextWrapper->globalData().timeoutChecker.start(); |
| 128 Completion comp = JSC::evaluate(exec, exec->dynamicGlobalObject()->globalSco
peChain(), sourceCode.jsSourceCode(), m_workerContextWrapper); | 129 Completion comp = JSC::evaluate(exec, exec->dynamicGlobalObject()->globalSco
peChain(), sourceCode.jsSourceCode(), m_workerContextWrapper); |
| 129 m_workerContextWrapper->globalData().timeoutChecker.stop(); | 130 m_workerContextWrapper->globalData().timeoutChecker.stop(); |
| 130 | 131 |
| 131 if (comp.complType() == Normal || comp.complType() == ReturnValue) | 132 if (comp.complType() == Normal || comp.complType() == ReturnValue) |
| 132 return comp.value(); | 133 return comp.value(); |
| 133 | 134 |
| 134 if (comp.complType() == Throw) | 135 if (comp.complType() == Throw) { |
| 135 *exception = comp.value(); | 136 String errorMessage; |
| 137 int lineNumber = 0; |
| 138 String sourceURL = sourceCode.url().string(); |
| 139 if (m_workerContext->sanitizeScriptError(errorMessage, lineNumber, sourc
eURL)) |
| 140 *exception = ScriptValue(throwError(exec, createError(exec, errorMes
sage.impl()))); |
| 141 else |
| 142 *exception = comp.value(); |
| 143 } |
| 136 return JSValue(); | 144 return JSValue(); |
| 137 } | 145 } |
| 138 | 146 |
| 139 void WorkerScriptController::setException(ScriptValue exception) | 147 void WorkerScriptController::setException(ScriptValue exception) |
| 140 { | 148 { |
| 141 throwError(m_workerContextWrapper->globalExec(), exception.jsValue()); | 149 throwError(m_workerContextWrapper->globalExec(), exception.jsValue()); |
| 142 } | 150 } |
| 143 | 151 |
| 144 void WorkerScriptController::forbidExecution(ForbidExecutionOption option) | 152 void WorkerScriptController::forbidExecution(ForbidExecutionOption option) |
| 145 { | 153 { |
| 146 // This function may be called from another thread. | 154 // This function may be called from another thread. |
| 147 // Mutex protection for m_executionForbidden is needed to guarantee that the
value is synchronized between processors, because | 155 // Mutex protection for m_executionForbidden is needed to guarantee that the
value is synchronized between processors, because |
| 148 // if it were not, the worker could re-enter JSC::evaluate(), but with timeo
ut already reset. | 156 // if it were not, the worker could re-enter JSC::evaluate(), but with timeo
ut already reset. |
| 149 // It is not critical for Terminator::m_shouldTerminate to be synchronized,
we just rely on it reaching the worker thread's processor sooner or later. | 157 // It is not critical for Terminator::m_shouldTerminate to be synchronized,
we just rely on it reaching the worker thread's processor sooner or later. |
| 150 MutexLocker lock(m_sharedDataMutex); | 158 MutexLocker lock(m_sharedDataMutex); |
| 151 m_executionForbidden = true; | 159 m_executionForbidden = true; |
| 152 if (option == TerminateRunningScript) | 160 if (option == TerminateRunningScript) |
| 153 m_globalData->terminator.terminateSoon(); | 161 m_globalData->terminator.terminateSoon(); |
| 154 } | 162 } |
| 155 | 163 |
| 156 } // namespace WebCore | 164 } // namespace WebCore |
| 157 | 165 |
| 158 #endif // ENABLE(WORKERS) | 166 #endif // ENABLE(WORKERS) |
| OLD | NEW |