mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-10-07 15:57:31 +09:00
Issue #618 - Split SRI verification out from OnStreamComplete.
This commit is contained in:
parent
7e6cd5def1
commit
6c7ac2b844
2 changed files with 35 additions and 19 deletions
|
|
@ -2241,19 +2241,41 @@ ScriptLoader::OnStreamComplete(nsIIncrementalStreamLoader* aLoader,
|
||||||
nsresult aChannelStatus,
|
nsresult aChannelStatus,
|
||||||
nsresult aSRIStatus,
|
nsresult aSRIStatus,
|
||||||
mozilla::Vector<char16_t> &aString,
|
mozilla::Vector<char16_t> &aString,
|
||||||
mozilla::dom::SRICheckDataVerifier* aSRIDataVerifier)
|
SRICheckDataVerifier* aSRIDataVerifier)
|
||||||
{
|
{
|
||||||
ScriptLoadRequest* request = static_cast<ScriptLoadRequest*>(aContext);
|
ScriptLoadRequest* request = static_cast<ScriptLoadRequest*>(aContext);
|
||||||
NS_ASSERTION(request, "null request in stream complete handler");
|
NS_ASSERTION(request, "null request in stream complete handler");
|
||||||
NS_ENSURE_TRUE(request, NS_ERROR_FAILURE);
|
NS_ENSURE_TRUE(request, NS_ERROR_FAILURE);
|
||||||
|
|
||||||
|
nsresult rv = VerifySRI(request, aLoader, aSRIStatus, aSRIDataVerifier);
|
||||||
|
|
||||||
|
if (NS_SUCCEEDED(rv)) {
|
||||||
|
rv = PrepareLoadedRequest(request, aLoader, aChannelStatus, aString);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (NS_FAILED(rv)) {
|
||||||
|
HandleLoadError(request, rv);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Process our request and/or any pending ones
|
||||||
|
ProcessPendingRequests();
|
||||||
|
|
||||||
|
return NS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
nsresult
|
||||||
|
ScriptLoader::VerifySRI(ScriptLoadRequest* aRequest,
|
||||||
|
nsIIncrementalStreamLoader* aLoader,
|
||||||
|
nsresult aSRIStatus,
|
||||||
|
SRICheckDataVerifier* aSRIDataVerifier) const
|
||||||
|
{
|
||||||
nsCOMPtr<nsIRequest> channelRequest;
|
nsCOMPtr<nsIRequest> channelRequest;
|
||||||
aLoader->GetRequest(getter_AddRefs(channelRequest));
|
aLoader->GetRequest(getter_AddRefs(channelRequest));
|
||||||
nsCOMPtr<nsIChannel> channel;
|
nsCOMPtr<nsIChannel> channel;
|
||||||
channel = do_QueryInterface(channelRequest);
|
channel = do_QueryInterface(channelRequest);
|
||||||
|
|
||||||
nsresult rv = NS_OK;
|
nsresult rv = NS_OK;
|
||||||
if (!request->mIntegrity.IsEmpty() &&
|
if (!aRequest->mIntegrity.IsEmpty() &&
|
||||||
NS_SUCCEEDED((rv = aSRIStatus))) {
|
NS_SUCCEEDED((rv = aSRIStatus))) {
|
||||||
MOZ_ASSERT(aSRIDataVerifier);
|
MOZ_ASSERT(aSRIDataVerifier);
|
||||||
MOZ_ASSERT(mReporter);
|
MOZ_ASSERT(mReporter);
|
||||||
|
|
@ -2262,7 +2284,7 @@ ScriptLoader::OnStreamComplete(nsIIncrementalStreamLoader* aLoader,
|
||||||
if (mDocument && mDocument->GetDocumentURI()) {
|
if (mDocument && mDocument->GetDocumentURI()) {
|
||||||
mDocument->GetDocumentURI()->GetAsciiSpec(sourceUri);
|
mDocument->GetDocumentURI()->GetAsciiSpec(sourceUri);
|
||||||
}
|
}
|
||||||
rv = aSRIDataVerifier->Verify(request->mIntegrity, channel, sourceUri,
|
rv = aSRIDataVerifier->Verify(aRequest->mIntegrity, channel, sourceUri,
|
||||||
mReporter);
|
mReporter);
|
||||||
mReporter->FlushConsoleReports(mDocument);
|
mReporter->FlushConsoleReports(mDocument);
|
||||||
if (NS_FAILED(rv)) {
|
if (NS_FAILED(rv)) {
|
||||||
|
|
@ -2278,7 +2300,7 @@ ScriptLoader::OnStreamComplete(nsIIncrementalStreamLoader* aLoader,
|
||||||
loadInfo->LoadingPrincipal()->GetCsp(getter_AddRefs(csp));
|
loadInfo->LoadingPrincipal()->GetCsp(getter_AddRefs(csp));
|
||||||
nsAutoCString violationURISpec;
|
nsAutoCString violationURISpec;
|
||||||
mDocument->GetDocumentURI()->GetAsciiSpec(violationURISpec);
|
mDocument->GetDocumentURI()->GetAsciiSpec(violationURISpec);
|
||||||
uint32_t lineNo = request->mElement ? request->mElement->GetScriptLineNumber() : 0;
|
uint32_t lineNo = aRequest->mElement ? aRequest->mElement->GetScriptLineNumber() : 0;
|
||||||
csp->LogViolationDetails(
|
csp->LogViolationDetails(
|
||||||
nsIContentSecurityPolicy::VIOLATION_TYPE_REQUIRE_SRI_FOR_SCRIPT,
|
nsIContentSecurityPolicy::VIOLATION_TYPE_REQUIRE_SRI_FOR_SCRIPT,
|
||||||
NS_ConvertUTF8toUTF16(violationURISpec),
|
NS_ConvertUTF8toUTF16(violationURISpec),
|
||||||
|
|
@ -2287,18 +2309,7 @@ ScriptLoader::OnStreamComplete(nsIIncrementalStreamLoader* aLoader,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (NS_SUCCEEDED(rv)) {
|
return rv;
|
||||||
rv = PrepareLoadedRequest(request, aLoader, aChannelStatus, aString);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (NS_FAILED(rv)) {
|
|
||||||
HandleLoadError(request, rv);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Process our request and/or any pending ones
|
|
||||||
ProcessPendingRequests();
|
|
||||||
|
|
||||||
return NS_OK;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
|
||||||
|
|
@ -407,8 +407,6 @@ public:
|
||||||
mozilla::Vector<char16_t> &aString,
|
mozilla::Vector<char16_t> &aString,
|
||||||
mozilla::dom::SRICheckDataVerifier* aSRIDataVerifier);
|
mozilla::dom::SRICheckDataVerifier* aSRIDataVerifier);
|
||||||
|
|
||||||
void HandleLoadError(ScriptLoadRequest *aRequest, nsresult aResult);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Processes any pending requests that are ready for processing.
|
* Processes any pending requests that are ready for processing.
|
||||||
*/
|
*/
|
||||||
|
|
@ -510,6 +508,8 @@ private:
|
||||||
nsresult StartLoad(ScriptLoadRequest *aRequest, const nsAString &aType,
|
nsresult StartLoad(ScriptLoadRequest *aRequest, const nsAString &aType,
|
||||||
bool aScriptFromHead);
|
bool aScriptFromHead);
|
||||||
|
|
||||||
|
void HandleLoadError(ScriptLoadRequest *aRequest, nsresult aResult);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Process any pending requests asynchronously (i.e. off an event) if there
|
* Process any pending requests asynchronously (i.e. off an event) if there
|
||||||
* are any. Note that this is a no-op if there aren't any currently pending
|
* are any. Note that this is a no-op if there aren't any currently pending
|
||||||
|
|
@ -544,6 +544,11 @@ private:
|
||||||
return mEnabled && !mBlockerCount;
|
return mEnabled && !mBlockerCount;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
nsresult VerifySRI(ScriptLoadRequest *aRequest,
|
||||||
|
nsIIncrementalStreamLoader* aLoader,
|
||||||
|
nsresult aSRIStatus,
|
||||||
|
SRICheckDataVerifier* aSRIDataVerifier) const;
|
||||||
|
|
||||||
nsresult AttemptAsyncScriptCompile(ScriptLoadRequest* aRequest);
|
nsresult AttemptAsyncScriptCompile(ScriptLoadRequest* aRequest);
|
||||||
nsresult ProcessRequest(ScriptLoadRequest* aRequest);
|
nsresult ProcessRequest(ScriptLoadRequest* aRequest);
|
||||||
nsresult CompileOffThreadOrProcessRequest(ScriptLoadRequest* aRequest);
|
nsresult CompileOffThreadOrProcessRequest(ScriptLoadRequest* aRequest);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue