mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-08 02:14:43 +00:00
Bug 1778510: Cut over Blob Timestamps to the new design r=smaug
Differential Revision: https://phabricator.services.mozilla.com/D156507
This commit is contained in:
parent
b548f43162
commit
8f9beca6dc
@ -64,12 +64,10 @@ void BaseBlobImpl::SetLastModificationDatePrecisely(int64_t aDate) {
|
||||
mLastModificationDate = aDate;
|
||||
}
|
||||
|
||||
void BaseBlobImpl::SetLastModificationDate(bool aCrossOriginIsolated,
|
||||
void BaseBlobImpl::SetLastModificationDate(RTPCallerType aRTPCallerType,
|
||||
int64_t aDate) {
|
||||
return SetLastModificationDatePrecisely(
|
||||
nsRFPService::ReduceTimePrecisionAsUSecs(aDate, 0,
|
||||
/* aIsSystemPrincipal */ false,
|
||||
aCrossOriginIsolated));
|
||||
nsRFPService::ReduceTimePrecisionAsUSecs(aDate, 0, aRTPCallerType));
|
||||
// mLastModificationDate is an absolute timestamp so we supply a zero
|
||||
// context mix-in
|
||||
}
|
||||
|
@ -7,6 +7,7 @@
|
||||
#ifndef mozilla_dom_BaseBlobImpl_h
|
||||
#define mozilla_dom_BaseBlobImpl_h
|
||||
|
||||
#include "nsIGlobalObject.h"
|
||||
#include "mozilla/dom/BlobImpl.h"
|
||||
#include "mozilla/ErrorResult.h"
|
||||
|
||||
@ -126,7 +127,7 @@ class BaseBlobImpl : public BlobImpl {
|
||||
*/
|
||||
static uint64_t NextSerialNumber();
|
||||
|
||||
void SetLastModificationDate(bool aCrossOriginIsolated, int64_t aDate);
|
||||
void SetLastModificationDate(RTPCallerType aRTPCallerType, int64_t aDate);
|
||||
void SetLastModificationDatePrecisely(int64_t aDate);
|
||||
|
||||
#ifdef DEBUG
|
||||
|
@ -148,9 +148,8 @@ already_AddRefed<File> Blob::ToFile(const nsAString& aName,
|
||||
nsAutoString contentType;
|
||||
mImpl->GetType(contentType);
|
||||
|
||||
RefPtr<MultipartBlobImpl> impl =
|
||||
MultipartBlobImpl::Create(std::move(blobImpls), aName, contentType,
|
||||
mGlobal->CrossOriginIsolated(), aRv);
|
||||
RefPtr<MultipartBlobImpl> impl = MultipartBlobImpl::Create(
|
||||
std::move(blobImpls), aName, contentType, mGlobal->RTPCallerType(), aRv);
|
||||
if (NS_WARN_IF(aRv.Failed())) {
|
||||
return nullptr;
|
||||
}
|
||||
@ -226,9 +225,9 @@ already_AddRefed<Blob> Blob::Constructor(
|
||||
MakeValidBlobType(type);
|
||||
impl->InitializeBlob(aData.Value(), type,
|
||||
aBag.mEndings == EndingType::Native,
|
||||
global->CrossOriginIsolated(), aRv);
|
||||
global->RTPCallerType(), aRv);
|
||||
} else {
|
||||
impl->InitializeBlob(global->CrossOriginIsolated(), aRv);
|
||||
impl->InitializeBlob(global->RTPCallerType(), aRv);
|
||||
}
|
||||
|
||||
if (NS_WARN_IF(aRv.Failed())) {
|
||||
|
@ -14,6 +14,7 @@
|
||||
#include "mozilla/dom/FileSystemUtils.h"
|
||||
#include "mozilla/dom/Promise.h"
|
||||
#include "nsIFile.h"
|
||||
#include "nsContentUtils.h"
|
||||
#include "nsXULAppAPI.h"
|
||||
|
||||
namespace mozilla::dom {
|
||||
@ -58,8 +59,7 @@ already_AddRefed<File> File::CreateMemoryFileWithLastModifiedNow(
|
||||
MOZ_ASSERT(aGlobal);
|
||||
|
||||
RefPtr<MemoryBlobImpl> blobImpl = MemoryBlobImpl::CreateWithLastModifiedNow(
|
||||
aMemoryBuffer, aLength, aName, aContentType,
|
||||
aGlobal->CrossOriginIsolated());
|
||||
aMemoryBuffer, aLength, aName, aContentType, aGlobal->RTPCallerType());
|
||||
MOZ_ASSERT(blobImpl);
|
||||
|
||||
RefPtr<File> file = File::Create(aGlobal, blobImpl);
|
||||
@ -143,7 +143,7 @@ already_AddRefed<File> File::Constructor(const GlobalObject& aGlobal,
|
||||
nsAutoString type(aBag.mType);
|
||||
MakeValidBlobType(type);
|
||||
impl->InitializeBlob(aData, type, aBag.mEndings == EndingType::Native,
|
||||
global->CrossOriginIsolated(), aRv);
|
||||
global->RTPCallerType(), aRv);
|
||||
if (aRv.Failed()) {
|
||||
return nullptr;
|
||||
}
|
||||
|
@ -28,10 +28,9 @@ already_AddRefed<MemoryBlobImpl> MemoryBlobImpl::CreateWithCustomLastModified(
|
||||
// static
|
||||
already_AddRefed<MemoryBlobImpl> MemoryBlobImpl::CreateWithLastModifiedNow(
|
||||
void* aMemoryBuffer, uint64_t aLength, const nsAString& aName,
|
||||
const nsAString& aContentType, bool aCrossOriginIsolated) {
|
||||
int64_t lastModificationDate = nsRFPService::ReduceTimePrecisionAsUSecs(
|
||||
PR_Now(), 0,
|
||||
/* aIsSystemPrincipal */ false, aCrossOriginIsolated);
|
||||
const nsAString& aContentType, RTPCallerType aRTPCallerType) {
|
||||
int64_t lastModificationDate =
|
||||
nsRFPService::ReduceTimePrecisionAsUSecs(PR_Now(), 0, aRTPCallerType);
|
||||
return CreateWithCustomLastModified(aMemoryBuffer, aLength, aName,
|
||||
aContentType, lastModificationDate);
|
||||
}
|
||||
|
@ -27,7 +27,7 @@ class MemoryBlobImpl final : public BaseBlobImpl {
|
||||
// File constructor.
|
||||
static already_AddRefed<MemoryBlobImpl> CreateWithLastModifiedNow(
|
||||
void* aMemoryBuffer, uint64_t aLength, const nsAString& aName,
|
||||
const nsAString& aContentType, bool aCrossOriginIsolated);
|
||||
const nsAString& aContentType, RTPCallerType aRTPCallerType);
|
||||
|
||||
// File constructor with custom lastModified attribue value. You should
|
||||
// probably use CreateWithLastModifiedNow() instead of this one.
|
||||
|
@ -10,6 +10,7 @@
|
||||
#include "mozilla/dom/FileBinding.h"
|
||||
#include "mozilla/dom/UnionTypes.h"
|
||||
#include "nsComponentManagerUtils.h"
|
||||
#include "nsIGlobalObject.h"
|
||||
#include "nsIMultiplexInputStream.h"
|
||||
#include "nsReadableUtils.h"
|
||||
#include "nsRFPService.h"
|
||||
@ -25,11 +26,11 @@ using namespace mozilla::dom;
|
||||
/* static */
|
||||
already_AddRefed<MultipartBlobImpl> MultipartBlobImpl::Create(
|
||||
nsTArray<RefPtr<BlobImpl>>&& aBlobImpls, const nsAString& aName,
|
||||
const nsAString& aContentType, bool aCrossOriginIsolated,
|
||||
const nsAString& aContentType, RTPCallerType aRTPCallerType,
|
||||
ErrorResult& aRv) {
|
||||
RefPtr<MultipartBlobImpl> blobImpl =
|
||||
new MultipartBlobImpl(std::move(aBlobImpls), aName, aContentType);
|
||||
blobImpl->SetLengthAndModifiedDate(Some(aCrossOriginIsolated), aRv);
|
||||
blobImpl->SetLengthAndModifiedDate(Some(aRTPCallerType), aRv);
|
||||
if (NS_WARN_IF(aRv.Failed())) {
|
||||
return nullptr;
|
||||
}
|
||||
@ -43,7 +44,7 @@ already_AddRefed<MultipartBlobImpl> MultipartBlobImpl::Create(
|
||||
ErrorResult& aRv) {
|
||||
RefPtr<MultipartBlobImpl> blobImpl =
|
||||
new MultipartBlobImpl(std::move(aBlobImpls), aContentType);
|
||||
blobImpl->SetLengthAndModifiedDate(/* aCrossOriginIsolated */ Nothing(), aRv);
|
||||
blobImpl->SetLengthAndModifiedDate(/* aRTPCallerType */ Nothing(), aRv);
|
||||
if (NS_WARN_IF(aRv.Failed())) {
|
||||
return nullptr;
|
||||
}
|
||||
@ -177,16 +178,16 @@ already_AddRefed<BlobImpl> MultipartBlobImpl::CreateSlice(
|
||||
return impl.forget();
|
||||
}
|
||||
|
||||
void MultipartBlobImpl::InitializeBlob(bool aCrossOriginIsolated,
|
||||
void MultipartBlobImpl::InitializeBlob(RTPCallerType aRTPCallerType,
|
||||
ErrorResult& aRv) {
|
||||
SetLengthAndModifiedDate(Some(aCrossOriginIsolated), aRv);
|
||||
SetLengthAndModifiedDate(Some(aRTPCallerType), aRv);
|
||||
NS_WARNING_ASSERTION(!aRv.Failed(), "SetLengthAndModifiedDate failed");
|
||||
}
|
||||
|
||||
void MultipartBlobImpl::InitializeBlob(const Sequence<Blob::BlobPart>& aData,
|
||||
const nsAString& aContentType,
|
||||
bool aNativeEOL,
|
||||
bool aCrossOriginIsolated,
|
||||
RTPCallerType aRTPCallerType,
|
||||
ErrorResult& aRv) {
|
||||
mContentType = aContentType;
|
||||
BlobSet blobSet;
|
||||
@ -233,12 +234,12 @@ void MultipartBlobImpl::InitializeBlob(const Sequence<Blob::BlobPart>& aData,
|
||||
}
|
||||
|
||||
mBlobImpls = blobSet.GetBlobImpls();
|
||||
SetLengthAndModifiedDate(Some(aCrossOriginIsolated), aRv);
|
||||
SetLengthAndModifiedDate(Some(aRTPCallerType), aRv);
|
||||
NS_WARNING_ASSERTION(!aRv.Failed(), "SetLengthAndModifiedDate failed");
|
||||
}
|
||||
|
||||
void MultipartBlobImpl::SetLengthAndModifiedDate(
|
||||
const Maybe<bool>& aCrossOriginIsolated, ErrorResult& aRv) {
|
||||
const Maybe<RTPCallerType>& aRTPCallerType, ErrorResult& aRv) {
|
||||
MOZ_ASSERT(mLength == MULTIPARTBLOBIMPL_UNKNOWN_LENGTH);
|
||||
MOZ_ASSERT_IF(mIsFile, IsLastModificationDateUnset());
|
||||
|
||||
@ -277,13 +278,13 @@ void MultipartBlobImpl::SetLengthAndModifiedDate(
|
||||
if (lastModifiedSet) {
|
||||
SetLastModificationDatePrecisely(lastModified);
|
||||
} else {
|
||||
MOZ_ASSERT(aCrossOriginIsolated.isSome());
|
||||
MOZ_ASSERT(aRTPCallerType.isSome());
|
||||
|
||||
// We cannot use PR_Now() because bug 493756 and, for this reason:
|
||||
// var x = new Date(); var f = new File(...);
|
||||
// x.getTime() < f.dateModified.getTime()
|
||||
// could fail.
|
||||
SetLastModificationDate(aCrossOriginIsolated.value(), JS_Now());
|
||||
SetLastModificationDate(aRTPCallerType.value(), JS_Now());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -10,6 +10,7 @@
|
||||
#include <utility>
|
||||
|
||||
#include "Blob.h"
|
||||
#include "nsContentUtils.h"
|
||||
#include "mozilla/Attributes.h"
|
||||
#include "mozilla/Maybe.h"
|
||||
#include "mozilla/dom/BaseBlobImpl.h"
|
||||
@ -31,7 +32,7 @@ class MultipartBlobImpl final : public BaseBlobImpl {
|
||||
// Create as a file
|
||||
static already_AddRefed<MultipartBlobImpl> Create(
|
||||
nsTArray<RefPtr<BlobImpl>>&& aBlobImpls, const nsAString& aName,
|
||||
const nsAString& aContentType, bool aCrossOriginIsolated,
|
||||
const nsAString& aContentType, RTPCallerType aRTPCallerType,
|
||||
ErrorResult& aRv);
|
||||
|
||||
// Create as a blob
|
||||
@ -48,11 +49,11 @@ class MultipartBlobImpl final : public BaseBlobImpl {
|
||||
MultipartBlobImpl()
|
||||
: BaseBlobImpl(u""_ns, MULTIPARTBLOBIMPL_UNKNOWN_LENGTH) {}
|
||||
|
||||
void InitializeBlob(bool aCrossOriginIsolated, ErrorResult& aRv);
|
||||
void InitializeBlob(RTPCallerType aRTPCallerType, ErrorResult& aRv);
|
||||
|
||||
void InitializeBlob(const Sequence<Blob::BlobPart>& aData,
|
||||
const nsAString& aContentType, bool aNativeEOL,
|
||||
bool aCrossOriginIsolated, ErrorResult& aRv);
|
||||
RTPCallerType aRTPCallerType, ErrorResult& aRv);
|
||||
|
||||
already_AddRefed<BlobImpl> CreateSlice(uint64_t aStart, uint64_t aLength,
|
||||
const nsAString& aContentType,
|
||||
@ -93,7 +94,7 @@ class MultipartBlobImpl final : public BaseBlobImpl {
|
||||
|
||||
~MultipartBlobImpl() override = default;
|
||||
|
||||
void SetLengthAndModifiedDate(const Maybe<bool>& aCrossOriginIsolated,
|
||||
void SetLengthAndModifiedDate(const Maybe<RTPCallerType>& aRTPCallerType,
|
||||
ErrorResult& aRv);
|
||||
|
||||
nsTArray<RefPtr<BlobImpl>> mBlobImpls;
|
||||
|
Loading…
Reference in New Issue
Block a user