ThreadableLoader.cpp [plain text]
#include "config.h"
#include "ThreadableLoader.h"
#include "CachedResourceRequestInitiators.h"
#include "Document.h"
#include "DocumentThreadableLoader.h"
#include "ResourceError.h"
#include "ScriptExecutionContext.h"
#include "SecurityOrigin.h"
#include "WorkerGlobalScope.h"
#include "WorkerRunLoop.h"
#include "WorkerThreadableLoader.h"
namespace WebCore {
ThreadableLoaderOptions::ThreadableLoaderOptions()
{
mode = FetchOptions::Mode::SameOrigin;
}
ThreadableLoaderOptions::~ThreadableLoaderOptions()
{
}
ThreadableLoaderOptions::ThreadableLoaderOptions(const ResourceLoaderOptions& baseOptions, PreflightPolicy preflightPolicy, ContentSecurityPolicyEnforcement contentSecurityPolicyEnforcement, String&& initiator, OpaqueResponseBodyPolicy opaqueResponse, ResponseFilteringPolicy filteringPolicy)
: ResourceLoaderOptions(baseOptions)
, preflightPolicy(preflightPolicy)
, contentSecurityPolicyEnforcement(contentSecurityPolicyEnforcement)
, initiator(WTFMove(initiator))
, opaqueResponse(opaqueResponse)
, filteringPolicy(filteringPolicy)
{
}
RefPtr<ThreadableLoader> ThreadableLoader::create(ScriptExecutionContext& context, ThreadableLoaderClient& client, ResourceRequest&& request, const ThreadableLoaderOptions& options, String&& referrer)
{
if (is<WorkerGlobalScope>(context))
return WorkerThreadableLoader::create(downcast<WorkerGlobalScope>(context), client, WorkerRunLoop::defaultMode(), WTFMove(request), options, referrer);
return DocumentThreadableLoader::create(downcast<Document>(context), client, WTFMove(request), options, WTFMove(referrer));
}
void ThreadableLoader::loadResourceSynchronously(ScriptExecutionContext& context, ResourceRequest&& request, ThreadableLoaderClient& client, const ThreadableLoaderOptions& options)
{
if (is<WorkerGlobalScope>(context))
WorkerThreadableLoader::loadResourceSynchronously(downcast<WorkerGlobalScope>(context), WTFMove(request), client, options);
else
DocumentThreadableLoader::loadResourceSynchronously(downcast<Document>(context), WTFMove(request), client, options);
context.didLoadResourceSynchronously();
}
void ThreadableLoader::logError(ScriptExecutionContext& context, const ResourceError& error, const String& initiator)
{
if (initiator != cachedResourceRequestInitiators().fetch)
return;
if (error.isCancellation())
return;
if (error.failingURL().isNull())
return;
if (error.domain() != errorDomainWebKitInternal && !error.isAccessControl())
return;
const char* messageStart;
if (initiator == cachedResourceRequestInitiators().fetch)
messageStart = "Fetch API cannot load ";
else
messageStart = "Cannot load ";
const char* messageMiddle = ". ";
String description = error.localizedDescription();
if (description.isEmpty()) {
if (error.isAccessControl())
messageMiddle = ASCIILiteral(" due to access control checks.");
else
messageMiddle = ".";
}
context.addConsoleMessage(MessageSource::JS, MessageLevel::Error, makeString(messageStart, error.failingURL().string(), messageMiddle, description));
}
}