Chromium Code Reviews| 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()) |
|
jochen (gone - plz use gerrit)
2015/11/26 13:06:06
no longer needed, the new CreateMessage() will als
| |
| 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 |