Commit 34927b46 authored by Jan Varga's avatar Jan Varga
Browse files

Bug 1616003 - QM: Make it possible to verify initialization status from unit...

Bug 1616003 - QM: Make it possible to verify initialization status from unit tests; r=ttung,dom-workers-and-storage-reviewers

Differential Revision: https://phabricator.services.mozilla.com/D63052

--HG--
extra : moz-landing-system : lando
parent 36fd1ef4
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -304,6 +304,14 @@ mozilla::ipc::IPCResult QuotaRequestChild::Recv__delete__(
      HandleResponse(aResponse.get_nsresult());
      break;

    case RequestResponse::TStorageInitializedResponse:
      HandleResponse(aResponse.get_StorageInitializedResponse().initialized());
      break;

    case RequestResponse::TTemporaryStorageInitializedResponse:
      HandleResponse(aResponse.get_TemporaryStorageInitializedResponse().initialized());
      break;

    case RequestResponse::TInitResponse:
    case RequestResponse::TInitTemporaryStorageResponse:
    case RequestResponse::TClearOriginResponse:
+99 −1
Original line number Diff line number Diff line
@@ -1487,6 +1487,35 @@ class QuotaRequestBase : public NormalOriginOperationBase,
  virtual void ActorDestroy(ActorDestroyReason aWhy) override;
};

class InitializedRequestBase : public QuotaRequestBase {
 protected:
  bool mInitialized;

 public:
  bool Init(Quota* aQuota) override;

 protected:
  InitializedRequestBase();
};

class StorageInitializedOp final : public InitializedRequestBase {
 private:
  ~StorageInitializedOp() = default;

  nsresult DoDirectoryWork(QuotaManager* aQuotaManager) override;

  void GetResponse(RequestResponse& aResponse) override;
};

class TemporaryStorageInitializedOp final : public InitializedRequestBase {
 private:
  ~TemporaryStorageInitializedOp() = default;

  nsresult DoDirectoryWork(QuotaManager* aQuotaManager) override;

  void GetResponse(RequestResponse& aResponse) override;
};

class InitOp final : public QuotaRequestBase {
 public:
  InitOp() : QuotaRequestBase(/* aExclusive */ false) {
@@ -6234,7 +6263,7 @@ nsresult QuotaManager::UpgradeLocalStorageArchiveFrom4To5(

void QuotaManager::AssertStorageIsInitialized() const {
  AssertIsOnIOThread();
  MOZ_ASSERT(mStorageConnection);
  MOZ_ASSERT(IsStorageInitialized());
}

#endif  // DEBUG
@@ -8503,6 +8532,8 @@ bool Quota::VerifyRequestParams(const RequestParams& aParams) const {
  MOZ_ASSERT(aParams.type() != RequestParams::T__None);

  switch (aParams.type()) {
    case RequestParams::TStorageInitializedParams:
    case RequestParams::TTemporaryStorageInitializedParams:
    case RequestParams::TInitParams:
    case RequestParams::TInitTemporaryStorageParams:
      break;
@@ -8695,6 +8726,14 @@ PQuotaRequestParent* Quota::AllocPQuotaRequestParent(
  RefPtr<QuotaRequestBase> actor;

  switch (aParams.type()) {
    case RequestParams::TStorageInitializedParams:
      actor = new StorageInitializedOp();
      break;

    case RequestParams::TTemporaryStorageInitializedParams:
      actor = new TemporaryStorageInitializedOp();
      break;

    case RequestParams::TInitParams:
      actor = new InitOp();
      break;
@@ -9320,6 +9359,65 @@ void QuotaRequestBase::ActorDestroy(ActorDestroyReason aWhy) {
  NoteActorDestroyed();
}

InitializedRequestBase::InitializedRequestBase()
    : QuotaRequestBase(/* aExclusive */ false), mInitialized(false) {
  AssertIsOnOwningThread();

  // Overwrite NormalOriginOperationBase default values.
  mNeedsDirectoryLocking = false;

  // Overwrite OriginOperationBase default values.
  mNeedsQuotaManagerInit = true;
  mNeedsStorageInit = false;
}

bool InitializedRequestBase::Init(Quota* aQuota) {
  AssertIsOnOwningThread();
  MOZ_ASSERT(aQuota);

  return true;
}

nsresult StorageInitializedOp::DoDirectoryWork(QuotaManager* aQuotaManager) {
  AssertIsOnIOThread();

  AUTO_PROFILER_LABEL("StorageInitializedOp::DoDirectoryWork", OTHER);

  mInitialized = aQuotaManager->IsStorageInitialized();

  return NS_OK;
}

void StorageInitializedOp::GetResponse(RequestResponse& aResponse) {
  AssertIsOnOwningThread();

  StorageInitializedResponse storageInitializedResponse;

  storageInitializedResponse.initialized() = mInitialized;

  aResponse = storageInitializedResponse;
}

nsresult TemporaryStorageInitializedOp::DoDirectoryWork(QuotaManager* aQuotaManager) {
  AssertIsOnIOThread();

  AUTO_PROFILER_LABEL("TemporaryStorageInitializedOp::DoDirectoryWork", OTHER);

  mInitialized = aQuotaManager->IsTemporaryStorageInitialized();

  return NS_OK;
}

void TemporaryStorageInitializedOp::GetResponse(RequestResponse& aResponse) {
  AssertIsOnOwningThread();

  TemporaryStorageInitializedResponse temporaryStorageInitializedResponse;

  temporaryStorageInitializedResponse.initialized() = mInitialized;

  aResponse = temporaryStorageInitializedResponse;
}

nsresult InitOp::DoDirectoryWork(QuotaManager* aQuotaManager) {
  AssertIsOnIOThread();

+10 −0
Original line number Diff line number Diff line
@@ -26,6 +26,14 @@ namespace mozilla {
namespace dom {
namespace quota {

struct StorageInitializedParams
{
};

struct TemporaryStorageInitializedParams
{
};

struct InitParams
{
};
@@ -113,6 +121,8 @@ struct ListOriginsParams

union RequestParams
{
  StorageInitializedParams;
  TemporaryStorageInitializedParams;
  InitParams;
  InitTemporaryStorageParams;
  InitStorageAndOriginParams;
+12 −0
Original line number Diff line number Diff line
@@ -8,6 +8,16 @@ namespace mozilla {
namespace dom {
namespace quota {

struct StorageInitializedResponse
{
  bool initialized;
};

struct TemporaryStorageInitializedResponse
{
  bool initialized;
};

struct InitResponse
{
};
@@ -64,6 +74,8 @@ struct ListOriginsResponse
union RequestResponse
{
  nsresult;
  StorageInitializedResponse;
  TemporaryStorageInitializedResponse;
  InitResponse;
  InitTemporaryStorageResponse;
  InitStorageAndOriginResponse;
+5 −0
Original line number Diff line number Diff line
@@ -327,6 +327,11 @@ class QuotaManager final : public BackgroundThreadObject {
  template <typename P>
  void CollectPendingOriginsForListing(P aPredicate);

  bool IsStorageInitialized() const {
    AssertIsOnIOThread();
    return static_cast<bool>(mStorageConnection);
  }

  void AssertStorageIsInitialized() const
#ifdef DEBUG
      ;
Loading