Files
Nika Layzell 5f0f9dd22a Bug 2020817 - Part 4: Annotate & clean up nsACString callers of BeginReading/Data, r=xpcom-reviewers,media-playback-reviewers,webrtc-reviewers,cookie-reviewers,profiler-reviewers,win-reviewers,dom-storage-reviewers,permissions-reviewers,toolkit-telemetry-reviewers-rotation,layout-reviewers,dom-worker-reviewers,gfx-reviewers,webgpu-reviewers,necko-reviewers,dom-core,smaug,handyman,emilio,pehrsons,kershaw,timhuang,edenchuang,padenot,bradwerth
This is a large number of largely mechanical changes. When possible, the code
was called to directly call `.get()` instead, performing the assertions
manually. In many places PromiseFlatCString() calls were added to dynamically
copy the strings into null terminated buffers if the string was not null
terminated.

Differential Revision: https://phabricator.services.mozilla.com/D286158
2026-03-25 08:23:04 +00:00

83 lines
2.1 KiB
C++

/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
#include "ResourceHasher.h"
#include <cinttypes>
#include "WAICTUtils.h"
#include "nsComponentManagerUtils.h"
#include "nsNetCID.h"
static mozilla::LazyLogModule gResourceHasherLog("ResourceHasher");
namespace mozilla::dom {
using mozilla::waict::gWaictLog;
ResourceHasher::ResourceHasher(nsICryptoHash* aCrypto)
: mCrypto(aCrypto), mFinalized(false) {}
already_AddRefed<ResourceHasher> ResourceHasher::Init() {
nsCOMPtr<nsICryptoHash> crypto = do_CreateInstance(NS_CRYPTO_HASH_CONTRACTID);
if (!crypto) {
MOZ_LOG(gWaictLog, LogLevel::Warning,
("ResourceHasher::Create -- "
"Failed to create nsICryptoHash\n"));
return nullptr;
}
nsresult rv = crypto->Init(nsICryptoHash::SHA256);
if (NS_FAILED(rv)) {
MOZ_LOG(gResourceHasherLog, LogLevel::Warning,
("ResourceHasher::Create -- Init failed: 0x%08x",
static_cast<uint32_t>(rv)));
return nullptr;
}
RefPtr<ResourceHasher> hasher = new ResourceHasher(crypto);
return hasher.forget();
}
nsresult ResourceHasher::Update(const uint8_t* aData, uint32_t aLength) {
if (mFinalized) {
return NS_ERROR_FAILURE;
}
if (!mCrypto) {
return NS_ERROR_NOT_INITIALIZED;
}
return mCrypto->Update(aData, aLength);
}
nsresult ResourceHasher::Finish() {
if (mFinalized) {
return NS_ERROR_FAILURE;
}
if (!mCrypto) {
return NS_ERROR_NOT_INITIALIZED;
}
mFinalized = true;
nsresult rv = mCrypto->Finish(/* aASCII = */ true, mComputedHash);
if (NS_SUCCEEDED(rv)) {
MOZ_LOG(gWaictLog, LogLevel::Debug,
("[this=%p] ResourceHasher::Finish -- "
"Hash computed successfully: %s\n",
this, mComputedHash.get()));
} else {
MOZ_LOG(gWaictLog, LogLevel::Error,
("[this=%p] ResourceHasher::Finish -- "
"Failed to finalize hash rv %" PRIu32 "\n",
this, static_cast<uint32_t>(rv)));
}
return rv;
}
} // namespace mozilla::dom