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 | 5 * modification, are permitted provided that the following conditions |
6 * are met: | 6 * are met: |
7 * 1. Redistributions of source code must retain the above copyright | 7 * 1. Redistributions of source code must retain the above copyright |
8 * notice, this list of conditions and the following disclaimer. | 8 * notice, this list of conditions and the following disclaimer. |
9 * 2. Redistributions in binary form must reproduce the above copyright | 9 * 2. Redistributions in binary form must reproduce the above copyright |
10 * notice, this list of conditions and the following disclaimer in the | 10 * notice, this list of conditions and the following disclaimer in the |
(...skipping 219 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
230 v8::Local<v8::Value> error = V8HiddenValue::getHiddenValue(ScriptState::
current(isolate), obj, V8HiddenValue::error(isolate)); | 230 v8::Local<v8::Value> error = V8HiddenValue::getHiddenValue(ScriptState::
current(isolate), obj, V8HiddenValue::error(isolate)); |
231 if (!error.IsEmpty()) | 231 if (!error.IsEmpty()) |
232 exception = error; | 232 exception = error; |
233 } | 233 } |
234 | 234 |
235 int scriptId = 0; | 235 int scriptId = 0; |
236 int lineNumber = 0; | 236 int lineNumber = 0; |
237 int columnNumber = 0; | 237 int columnNumber = 0; |
238 String resourceName; | 238 String resourceName; |
239 String errorMessage; | 239 String errorMessage; |
| 240 AccessControlStatus corsStatus = NotSharableCrossOrigin; |
240 RefPtrWillBeRawPtr<ScriptCallStack> callStack = nullptr; | 241 RefPtrWillBeRawPtr<ScriptCallStack> callStack = nullptr; |
241 | 242 |
242 v8::Local<v8::Message> message = v8::Exception::CreateMessage(exception); | 243 v8::Local<v8::Message> message = v8::Exception::CreateMessage(isolate, excep
tion); |
243 if (!message.IsEmpty()) { | 244 if (!message.IsEmpty()) { |
244 if (v8Call(message->GetLineNumber(isolate->GetCurrentContext()), lineNum
ber) | 245 if (v8Call(message->GetLineNumber(isolate->GetCurrentContext()), lineNum
ber) |
245 && v8Call(message->GetStartColumn(isolate->GetCurrentContext()), col
umnNumber)) | 246 && v8Call(message->GetStartColumn(isolate->GetCurrentContext()), col
umnNumber)) |
246 ++columnNumber; | 247 ++columnNumber; |
247 resourceName = extractResourceName(message, window->document()); | 248 resourceName = extractResourceName(message, window->document()); |
248 errorMessage = toCoreStringWithNullCheck(message->Get()); | 249 errorMessage = toCoreStringWithNullCheck(message->Get()); |
249 callStack = extractCallStack(isolate, message, &scriptId); | 250 callStack = extractCallStack(isolate, message, &scriptId); |
250 } else if (!exception.IsEmpty() && exception->IsInt32()) { | 251 if (message->IsSharedCrossOrigin()) |
251 // For Smi's the message would be empty. | 252 corsStatus = SharableCrossOrigin; |
252 errorMessage = "Uncaught " + String::number(exception.As<v8::Integer>()-
>Value()); | |
253 } | 253 } |
254 | 254 |
255 String messageForConsole = extractMessageForConsole(isolate, data.GetValue()
); | 255 String messageForConsole = extractMessageForConsole(isolate, data.GetValue()
); |
256 if (!messageForConsole.isEmpty()) | 256 if (!messageForConsole.isEmpty()) |
257 errorMessage = "Uncaught " + messageForConsole; | 257 errorMessage = "Uncaught " + messageForConsole; |
258 | 258 |
259 ScriptState* scriptState = ScriptState::current(isolate); | 259 ScriptState* scriptState = ScriptState::current(isolate); |
260 rejectedPromisesOnMainThread().rejectedWithNoHandler(scriptState, data, erro
rMessage, resourceName, scriptId, lineNumber, columnNumber, callStack); | 260 rejectedPromisesOnMainThread().rejectedWithNoHandler(scriptState, data, erro
rMessage, resourceName, scriptId, lineNumber, columnNumber, callStack, corsStatu
s); |
261 } | 261 } |
262 | 262 |
263 static void promiseRejectHandlerInWorker(v8::PromiseRejectMessage data) | 263 static void promiseRejectHandlerInWorker(v8::PromiseRejectMessage data) |
264 { | 264 { |
265 v8::Local<v8::Promise> promise = data.GetPromise(); | 265 v8::Local<v8::Promise> promise = data.GetPromise(); |
266 | 266 |
267 // Bail out if called during context initialization. | 267 // Bail out if called during context initialization. |
268 v8::Isolate* isolate = promise->GetIsolate(); | 268 v8::Isolate* isolate = promise->GetIsolate(); |
269 ScriptState* scriptState = ScriptState::current(isolate); | 269 ScriptState* scriptState = ScriptState::current(isolate); |
270 if (!scriptState->contextIsValid()) | 270 if (!scriptState->contextIsValid()) |
(...skipping 12 matching lines...) Expand all Loading... |
283 return; | 283 return; |
284 } | 284 } |
285 | 285 |
286 ASSERT(data.GetEvent() == v8::kPromiseRejectWithNoHandler); | 286 ASSERT(data.GetEvent() == v8::kPromiseRejectWithNoHandler); |
287 | 287 |
288 int scriptId = 0; | 288 int scriptId = 0; |
289 int lineNumber = 0; | 289 int lineNumber = 0; |
290 int columnNumber = 0; | 290 int columnNumber = 0; |
291 String resourceName; | 291 String resourceName; |
292 String errorMessage; | 292 String errorMessage; |
| 293 AccessControlStatus corsStatus = NotSharableCrossOrigin; |
293 | 294 |
294 v8::Local<v8::Message> message = v8::Exception::CreateMessage(data.GetValue(
)); | 295 v8::Local<v8::Value> exception = data.GetValue(); |
| 296 v8::Local<v8::Message> message = v8::Exception::CreateMessage(isolate, excep
tion); |
295 if (!message.IsEmpty()) { | 297 if (!message.IsEmpty()) { |
296 TOSTRING_VOID(V8StringResource<>, resourceName, message->GetScriptOrigin
().ResourceName()); | 298 TOSTRING_VOID(V8StringResource<>, resourceName, message->GetScriptOrigin
().ResourceName()); |
297 scriptId = message->GetScriptOrigin().ScriptID()->Value(); | 299 scriptId = message->GetScriptOrigin().ScriptID()->Value(); |
298 if (v8Call(message->GetLineNumber(scriptState->context()), lineNumber) | 300 if (v8Call(message->GetLineNumber(scriptState->context()), lineNumber) |
299 && v8Call(message->GetStartColumn(scriptState->context()), columnNum
ber)) | 301 && v8Call(message->GetStartColumn(scriptState->context()), columnNum
ber)) |
300 ++columnNumber; | 302 ++columnNumber; |
301 // message->Get() can be empty here. https://crbug.com/450330 | 303 // message->Get() can be empty here. https://crbug.com/450330 |
302 errorMessage = toCoreStringWithNullCheck(message->Get()); | 304 errorMessage = toCoreStringWithNullCheck(message->Get()); |
| 305 if (message->IsSharedCrossOrigin()) |
| 306 corsStatus = SharableCrossOrigin; |
303 } | 307 } |
304 scriptController->rejectedPromises()->rejectedWithNoHandler(scriptState, dat
a, errorMessage, resourceName, scriptId, lineNumber, columnNumber, nullptr); | 308 scriptController->rejectedPromises()->rejectedWithNoHandler(scriptState, dat
a, errorMessage, resourceName, scriptId, lineNumber, columnNumber, nullptr, cors
Status); |
305 } | 309 } |
306 | 310 |
307 static void failedAccessCheckCallbackInMainThread(v8::Local<v8::Object> host, v8
::AccessType type, v8::Local<v8::Value> data) | 311 static void failedAccessCheckCallbackInMainThread(v8::Local<v8::Object> host, v8
::AccessType type, v8::Local<v8::Value> data) |
308 { | 312 { |
309 v8::Isolate* isolate = v8::Isolate::GetCurrent(); | 313 v8::Isolate* isolate = v8::Isolate::GetCurrent(); |
310 Frame* target = findFrame(isolate, host, data); | 314 Frame* target = findFrame(isolate, host, data); |
311 if (!target) | 315 if (!target) |
312 return; | 316 return; |
313 DOMWindow* targetWindow = target->domWindow(); | 317 DOMWindow* targetWindow = target->domWindow(); |
314 | 318 |
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
459 | 463 |
460 v8::V8::AddMessageListener(messageHandlerInWorker); | 464 v8::V8::AddMessageListener(messageHandlerInWorker); |
461 v8::V8::SetFatalErrorHandler(reportFatalErrorInWorker); | 465 v8::V8::SetFatalErrorHandler(reportFatalErrorInWorker); |
462 | 466 |
463 uint32_t here; | 467 uint32_t here; |
464 isolate->SetStackLimit(reinterpret_cast<uintptr_t>(&here - kWorkerMaxStackSi
ze / sizeof(uint32_t*))); | 468 isolate->SetStackLimit(reinterpret_cast<uintptr_t>(&here - kWorkerMaxStackSi
ze / sizeof(uint32_t*))); |
465 isolate->SetPromiseRejectCallback(promiseRejectHandlerInWorker); | 469 isolate->SetPromiseRejectCallback(promiseRejectHandlerInWorker); |
466 } | 470 } |
467 | 471 |
468 } // namespace blink | 472 } // namespace blink |
OLD | NEW |