Пример #1
0
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;
}
Пример #2
0
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);
}
Пример #3
0
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);
}
Пример #4
0
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);
}
Пример #5
0
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;
}