コード例 #1
0
ファイル: ResourceLoader.cpp プロジェクト: home201448/webkit
void ResourceLoader::loadDataURL()
{
    auto url = m_request.url();
    ASSERT(url.protocolIsData());

    RefPtr<ResourceLoader> loader(this);
    DataURLDecoder::decode(url, [loader, url] (Optional<DataURLDecoder::Result> decodeResult) {
        if (loader->reachedTerminalState())
            return;
        if (!decodeResult) {
            loader->didFail(ResourceError(errorDomainWebKitInternal, 0, url.string(), "Data URL decoding failed"));
            return;
        }
        auto& result = decodeResult.value();
        auto dataSize = result.data->size();

        ResourceResponse dataResponse { url, result.mimeType, dataSize, result.charset };
        loader->didReceiveResponse(dataResponse);

        if (!loader->reachedTerminalState() && dataSize)
            loader->didReceiveBuffer(result.data.get(), dataSize, DataPayloadWholeResource);

        if (!loader->reachedTerminalState())
            loader->didFinishLoading(currentTime());
    });
}
コード例 #2
0
void ResourceLoader::loadDataURL()
{
    auto url = m_request.url();
    ASSERT(url.protocolIsData());

    RefPtr<ResourceLoader> protectedThis(this);
    DataURLDecoder::ScheduleContext scheduleContext;
#if HAVE(RUNLOOP_TIMER)
    if (auto* scheduledPairs = m_frame->page()->scheduledRunLoopPairs())
        scheduleContext.scheduledPairs = *scheduledPairs;
#endif
    DataURLDecoder::decode(url, scheduleContext, [protectedThis, url](auto decodeResult) {
        if (protectedThis->reachedTerminalState())
            return;
        if (!decodeResult) {
            protectedThis->didFail(ResourceError(errorDomainWebKitInternal, 0, url, "Data URL decoding failed"));
            return;
        }
        if (protectedThis->wasCancelled())
            return;
        auto& result = decodeResult.value();
        auto dataSize = result.data ? result.data->size() : 0;

        ResourceResponse dataResponse { url, result.mimeType, dataSize, result.charset };
        protectedThis->didReceiveResponse(dataResponse);

        if (!protectedThis->reachedTerminalState() && dataSize)
            protectedThis->didReceiveBuffer(result.data.releaseNonNull(), dataSize, DataPayloadWholeResource);

        if (!protectedThis->reachedTerminalState())
            protectedThis->didFinishLoading(currentTime());
    });
}