Commit 65f88cc0 authored by Ben Kelly's avatar Ben Kelly
Browse files

Bug 1397128 P7 Add an OpenMode enumeration to control if individual Cache API...

Bug 1397128 P7 Add an OpenMode enumeration to control if individual Cache API requests eagerly or lazily opens bodies. r=tt
parent acf4cdb7
Loading
Loading
Loading
Loading
+9 −3
Original line number Diff line number Diff line
@@ -285,7 +285,9 @@ Cache::Match(JSContext* aCx, const RequestOrUSVString& aRequest,
  CacheQueryParams params;
  ToCacheQueryParams(params, aOptions);

  AutoChildOpArgs args(this, CacheMatchArgs(CacheRequest(), params), 1);
  AutoChildOpArgs args(this,
                       CacheMatchArgs(CacheRequest(), params, OpenMode::Eager),
                       1);

  args.Add(ir, IgnoreBody, IgnoreInvalidScheme, aRv);
  if (NS_WARN_IF(aRv.Failed())) {
@@ -309,7 +311,9 @@ Cache::MatchAll(JSContext* aCx, const Optional<RequestOrUSVString>& aRequest,
  CacheQueryParams params;
  ToCacheQueryParams(params, aOptions);

  AutoChildOpArgs args(this, CacheMatchAllArgs(void_t(), params), 1);
  AutoChildOpArgs args(this,
                       CacheMatchAllArgs(void_t(), params, OpenMode::Eager),
                       1);

  if (aRequest.WasPassed()) {
    RefPtr<InternalRequest> ir = ToInternalRequest(aCx, aRequest.Value(),
@@ -491,7 +495,9 @@ Cache::Keys(JSContext* aCx, const Optional<RequestOrUSVString>& aRequest,
  CacheQueryParams params;
  ToCacheQueryParams(params, aOptions);

  AutoChildOpArgs args(this, CacheKeysArgs(void_t(), params), 1);
  AutoChildOpArgs args(this,
                       CacheKeysArgs(void_t(), params, OpenMode::Eager),
                       1);

  if (aRequest.WasPassed()) {
    RefPtr<InternalRequest> ir =
+1 −1
Original line number Diff line number Diff line
@@ -333,7 +333,7 @@ CacheStorage::Match(JSContext* aCx, const RequestOrUSVString& aRequest,

  nsAutoPtr<Entry> entry(new Entry());
  entry->mPromise = promise;
  entry->mArgs = StorageMatchArgs(CacheRequest(), params);
  entry->mArgs = StorageMatchArgs(CacheRequest(), params, OpenMode::Eager);
  entry->mRequest = request;

  mPendingRequests.AppendElement(entry.forget());
+5 −0
Original line number Diff line number Diff line
@@ -10,6 +10,7 @@ include ChannelInfo;
include PBackgroundSharedTypes;

using HeadersGuardEnum from "mozilla/dom/FetchIPCTypes.h";
using OpenMode from "mozilla/dom/cache/IPCUtils.h";
using ReferrerPolicy from "mozilla/dom/FetchIPCTypes.h";
using RequestCredentials from "mozilla/dom/FetchIPCTypes.h";
using RequestMode from "mozilla/dom/FetchIPCTypes.h";
@@ -106,12 +107,14 @@ struct CacheMatchArgs
{
  CacheRequest request;
  CacheQueryParams params;
  OpenMode openMode;
};

struct CacheMatchAllArgs
{
  CacheRequestOrVoid requestOrVoid;
  CacheQueryParams params;
  OpenMode openMode;
};

struct CachePutAllArgs
@@ -129,12 +132,14 @@ struct CacheKeysArgs
{
  CacheRequestOrVoid requestOrVoid;
  CacheQueryParams params;
  OpenMode openMode;
};

struct StorageMatchArgs
{
  CacheRequest request;
  CacheQueryParams params;
  OpenMode openMode;
};

struct StorageHasArgs
+7 −0
Original line number Diff line number Diff line
@@ -18,6 +18,13 @@ namespace IPC {
                                    mozilla::dom::cache::DEFAULT_NAMESPACE,
                                    mozilla::dom::cache::NUMBER_OF_NAMESPACES>
  {};

  template<>
  struct ParamTraits<mozilla::dom::cache::OpenMode> :
    public ContiguousEnumSerializer<mozilla::dom::cache::OpenMode,
                                    mozilla::dom::cache::OpenMode::Eager,
                                    mozilla::dom::cache::OpenMode::NumTypes>
  {};
} // namespace IPC

#endif // mozilla_dom_cache_IPCUtils_h
+23 −15
Original line number Diff line number Diff line
@@ -544,9 +544,11 @@ public:
    }

    nsCOMPtr<nsIInputStream> stream;
    if (mArgs.openMode() == OpenMode::Eager) {
      rv = BodyOpen(aQuotaInfo, aDBDir, mResponse.mBodyId, getter_AddRefs(stream));
      if (NS_WARN_IF(NS_FAILED(rv))) { return rv; }
      if (NS_WARN_IF(!stream)) { return NS_ERROR_FILE_NOT_FOUND; }
    }

    mStreamList->Add(mResponse.mBodyId, Move(stream));

@@ -609,10 +611,12 @@ public:
      }

      nsCOMPtr<nsIInputStream> stream;
      if (mArgs.openMode() == OpenMode::Eager) {
        rv = BodyOpen(aQuotaInfo, aDBDir, mSavedResponses[i].mBodyId,
                      getter_AddRefs(stream));
        if (NS_WARN_IF(NS_FAILED(rv))) { return rv; }
        if (NS_WARN_IF(!stream)) { return NS_ERROR_FILE_NOT_FOUND; }
      }

      mStreamList->Add(mSavedResponses[i].mBodyId, Move(stream));
    }
@@ -1157,10 +1161,12 @@ public:
      }

      nsCOMPtr<nsIInputStream> stream;
      if (mArgs.openMode() == OpenMode::Eager) {
        rv = BodyOpen(aQuotaInfo, aDBDir, mSavedRequests[i].mBodyId,
                      getter_AddRefs(stream));
        if (NS_WARN_IF(NS_FAILED(rv))) { return rv; }
        if (NS_WARN_IF(!stream)) { return NS_ERROR_FILE_NOT_FOUND; }
      }

      mStreamList->Add(mSavedRequests[i].mBodyId, Move(stream));
    }
@@ -1221,10 +1227,12 @@ public:
    }

    nsCOMPtr<nsIInputStream> stream;
    if (mArgs.openMode() == OpenMode::Eager) {
      rv = BodyOpen(aQuotaInfo, aDBDir, mSavedResponse.mBodyId,
                    getter_AddRefs(stream));
      if (NS_WARN_IF(NS_FAILED(rv))) { return rv; }
      if (NS_WARN_IF(!stream)) { return NS_ERROR_FILE_NOT_FOUND; }
    }

    mStreamList->Add(mSavedResponse.mBodyId, Move(stream));

Loading