void InspectorDOMStorageAgent::setDOMStorageItem(ErrorString* errorString, const RefPtr<InspectorObject>& storageId, const String& key, const String& value) { Frame* frame; RefPtr<StorageArea> storageArea = findStorageArea(nullptr, storageId, frame); if (!storageArea) { *errorString = "Storage not found"; return; } bool quotaException = false; storageArea->setItem(frame, key, value, quotaException); if (quotaException) *errorString = ExceptionCodeDescription(QUOTA_EXCEEDED_ERR).name; }
void FontFaceSet::faceFinished(CSSFontFace& face, CSSFontFace::Status newStatus) { auto iterator = m_pendingPromises.find(&face); if (iterator == m_pendingPromises.end()) return; for (auto& pendingPromise : iterator->value) { if (newStatus == CSSFontFace::Status::Success) { if (pendingPromise->hasOneRef() && !pendingPromise->hasReachedTerminalState) { pendingPromise->promise.resolve(pendingPromise->faces); pendingPromise->hasReachedTerminalState = true; } } else { ASSERT(newStatus == CSSFontFace::Status::Failure); if (!pendingPromise->hasReachedTerminalState) { pendingPromise->promise.reject(DOMCoreException::create(ExceptionCodeDescription(NETWORK_ERR))); pendingPromise->hasReachedTerminalState = true; } } } m_pendingPromises.remove(iterator); }
void FontFaceSet::load(JSC::ExecState& execState, const String& font, const String& text, DeferredWrapper&& promise, ExceptionCode& ec) { auto matchingFaces = m_backing->matchingFaces(font, text, ec); if (ec) return; if (matchingFaces.isEmpty()) { promise.resolve(Vector<RefPtr<FontFace>>()); return; } for (auto& face : matchingFaces) face.get().load(); auto pendingPromise = PendingPromise::create(WTFMove(promise)); bool waiting = false; for (auto& face : matchingFaces) { if (face.get().status() == CSSFontFace::Status::Failure) { pendingPromise->promise.reject(DOMCoreException::create(ExceptionCodeDescription(NETWORK_ERR))); return; } } for (auto& face : matchingFaces) { pendingPromise->faces.append(face.get().wrapper(execState)); if (face.get().status() == CSSFontFace::Status::Success) continue; waiting = true; auto& vector = m_pendingPromises.add(RefPtr<CSSFontFace>(&face.get()), Vector<Ref<PendingPromise>>()).iterator->value; vector.append(pendingPromise.copyRef()); } if (!waiting) pendingPromise->promise.resolve(pendingPromise->faces); }
void FontLoader::loadError(CSSFontFaceRule* rule, CSSFontFaceSource* source) { ASSERT(m_numLoadingFromCSS > 0); // FIXME: We should report NetworkError in case of timeout, etc. String errorName = (source && source->isDecodeError()) ? "InvalidFontDataError" : ExceptionCodeDescription(NOT_FOUND_ERR).name; scheduleEvent(CSSFontFaceLoadEvent::createForError(rule, DOMError::create(errorName))); --m_numLoadingFromCSS; if (!m_numLoadingFromCSS) m_loadingDoneEvent = CSSFontFaceLoadEvent::createForFontFaceRule(eventNames().loadingdoneEvent, rule); }
LONG WINAPI MyUnhandledExceptionFilter( _In_ struct _EXCEPTION_POINTERS *ExceptionInfo ) { DWORD code = ExceptionInfo->ExceptionRecord->ExceptionCode; if (enable_signal_print) TaskInfo("Caught UnhandledException %s(0x%x) %s", ExceptionCodeName(code), code, ExceptionCodeDescription(code)); // Translate from Windows Structured Exception to C signal. //C signals known in Windows: // http://msdn.microsoft.com/en-us/library/xdkz3x12(v=vs.110).aspx //#define SIGINT 2 /* interrupt */ //#define SIGILL 4 /* illegal instruction - invalid function image */ //#define SIGFPE 8 /* floating point exception */ //#define SIGSEGV 11 /* segment violation */ //#define SIGTERM 15 /* Software termination signal from kill */ //#define SIGBREAK 21 /* Ctrl-Break sequence */ //#define SIGABRT 22 /* abnormal termination triggered by abort call */ //#define SIGABRT_COMPAT 6 /* SIGABRT compatible with other platforms, same as SIGABRT */ // http://msdn.microsoft.com/en-us/library/windows/desktop/aa363082(v=vs.85).aspx int sig=0; switch (ExceptionInfo->ExceptionRecord->ExceptionCode) { case EXCEPTION_ACCESS_VIOLATION: case EXCEPTION_DATATYPE_MISALIGNMENT: case EXCEPTION_ARRAY_BOUNDS_EXCEEDED: case EXCEPTION_PRIV_INSTRUCTION: case EXCEPTION_IN_PAGE_ERROR: case EXCEPTION_NONCONTINUABLE_EXCEPTION: case EXCEPTION_STACK_OVERFLOW: case EXCEPTION_INVALID_DISPOSITION: case EXCEPTION_GUARD_PAGE: case EXCEPTION_INVALID_HANDLE: #ifdef STATUS_POSSIBLE_DEADLOCK case EXCEPTION_POSSIBLE_DEADLOCK: #endif case CONTROL_C_EXIT: sig = SIGSEGV; break; case EXCEPTION_ILLEGAL_INSTRUCTION: sig = SIGILL; break; case EXCEPTION_FLT_DENORMAL_OPERAND: case EXCEPTION_FLT_DIVIDE_BY_ZERO: case EXCEPTION_FLT_INEXACT_RESULT: case EXCEPTION_FLT_INVALID_OPERATION: case EXCEPTION_FLT_OVERFLOW: case EXCEPTION_FLT_STACK_CHECK: case EXCEPTION_FLT_UNDERFLOW: case EXCEPTION_INT_DIVIDE_BY_ZERO: case EXCEPTION_INT_OVERFLOW: sig = SIGFPE; break; case EXCEPTION_BREAKPOINT: case EXCEPTION_SINGLE_STEP: default: break; } if (sig) { fflush(stdout); fflush(stderr); if (enable_signal_print) Backtrace::malloc_free_log (); printSignalInfo(sig, false); // unreachable, printSignalInfo throws a C++ exception for SIGFPE, SIGSEGV and SIGILL } // carry on with default exception handling return EXCEPTION_CONTINUE_SEARCH; }