Commit 1d40b542 authored by criss's avatar criss
Browse files

Backed out 3 changesets (bug 1752209, bug 1752212) for causing build bustages...

Backed out 3 changesets (bug 1752209, bug 1752212) for causing build bustages on  nsXULPrototypeCache.cpp. CLOSED TREE

Backed out changeset 8f10b666008a (bug 1752209)
Backed out changeset 557c428fb6bc (bug 1752212)
Backed out changeset e38fbd381ed3 (bug 1752212)
parent 7bad4079
Loading
Loading
Loading
Loading
+2 −12
Original line number Diff line number Diff line
@@ -69,7 +69,6 @@
#include "mozilla/dom/MessageManagerCallback.h"
#include "mozilla/dom/ipc/SharedMap.h"
#include "mozilla/dom/ipc/StructuredCloneData.h"
#include "mozilla/scache/StartupCacheUtils.h"
#include "nsASCIIMask.h"
#include "nsBaseHashtable.h"
#include "nsCOMPtr.h"
@@ -131,8 +130,6 @@ using namespace mozilla;
using namespace mozilla::dom;
using namespace mozilla::dom::ipc;

#define CACHE_PREFIX(type) "mm/" type

nsFrameMessageManager::nsFrameMessageManager(MessageManagerCallback* aCallback,
                                             MessageManagerFlags aFlags)
    : mChrome(aFlags & MessageManagerFlags::MM_CHROME),
@@ -1275,14 +1272,10 @@ nsMessageManagerScriptExecutor::TryCacheLoadAndCompileScript(

  RefPtr<JS::Stencil> stencil;
  if (useScriptPreloader) {
    nsAutoCString cachePath;
    rv = scache::PathifyURI(CACHE_PREFIX("script"), uri, cachePath);
    NS_ENSURE_SUCCESS(rv, nullptr);

    JS::DecodeOptions decodeOptions;
    ScriptPreloader::FillDecodeOptionsForCachedStencil(decodeOptions);
    stencil = ScriptPreloader::GetChildSingleton().GetCachedStencil(
        cx, decodeOptions, cachePath);
        cx, decodeOptions, url);
  }

  if (!stencil) {
@@ -1357,10 +1350,7 @@ nsMessageManagerScriptExecutor::TryCacheLoadAndCompileScript(
  MOZ_ASSERT(stencil);

  if (useScriptPreloader) {
    nsAutoCString cachePath;
    rv = scache::PathifyURI(CACHE_PREFIX("script"), uri, cachePath);
    NS_ENSURE_SUCCESS(rv, nullptr);
    ScriptPreloader::GetChildSingleton().NoteStencil(url, cachePath, stencil,
    ScriptPreloader::GetChildSingleton().NoteStencil(url, url, stencil,
                                                     isRunOnce);
  }

+1 −2
Original line number Diff line number Diff line
@@ -671,8 +671,7 @@ nsresult PrototypeDocumentContentSink::DoneWalking() {
  if (IsChromeURI(mDocumentURI) &&
      nsXULPrototypeCache::GetInstance()->IsEnabled()) {
    bool isCachedOnDisk;
    nsXULPrototypeCache::GetInstance()->HasPrototype(mDocumentURI,
                                                     &isCachedOnDisk);
    nsXULPrototypeCache::GetInstance()->HasData(mDocumentURI, &isCachedOnDisk);
    if (!isCachedOnDisk) {
      nsXULPrototypeCache::GetInstance()->WritePrototype(mCurrentPrototype);
    }
+5 −5
Original line number Diff line number Diff line
@@ -1670,7 +1670,7 @@ nsresult nsXULPrototypeScript::SerializeOutOfLine(
  NS_ASSERTION(cache->IsEnabled(),
               "writing to the cache file, but the XUL cache is off?");
  bool exists;
  cache->HasScript(mSrcURI, &exists);
  cache->HasData(mSrcURI, &exists);

  /* return will be NS_OK from GetAsciiSpec.
   * that makes no sense.
@@ -1680,14 +1680,14 @@ nsresult nsXULPrototypeScript::SerializeOutOfLine(
  if (exists) return NS_OK;

  nsCOMPtr<nsIObjectOutputStream> oos;
  nsresult rv = cache->GetScriptOutputStream(mSrcURI, getter_AddRefs(oos));
  nsresult rv = cache->GetOutputStream(mSrcURI, getter_AddRefs(oos));
  NS_ENSURE_SUCCESS(rv, rv);

  nsresult tmp = Serialize(oos, aProtoDoc, nullptr);
  if (NS_FAILED(tmp)) {
    rv = tmp;
  }
  tmp = cache->FinishScriptOutputStream(mSrcURI);
  tmp = cache->FinishOutputStream(mSrcURI);
  if (NS_FAILED(tmp)) {
    rv = tmp;
  }
@@ -1754,7 +1754,7 @@ nsresult nsXULPrototypeScript::DeserializeOutOfLine(

    if (!mStencil) {
      if (mSrcURI) {
        rv = cache->GetScriptInputStream(mSrcURI, getter_AddRefs(objectInput));
        rv = cache->GetInputStream(mSrcURI, getter_AddRefs(objectInput));
      }
      // If !mSrcURI, we have an inline script. We shouldn't have
      // to do anything else in that case, I think.
@@ -1772,7 +1772,7 @@ nsresult nsXULPrototypeScript::DeserializeOutOfLine(
        if (useXULCache && mSrcURI && mSrcURI->SchemeIs("chrome")) {
          cache->PutStencil(mSrcURI, GetStencil());
        }
        cache->FinishScriptInputStream(mSrcURI);
        cache->FinishInputStream(mSrcURI);
      } else {
        // If mSrcURI is not in the cache,
        // rv will be NS_ERROR_NOT_AVAILABLE and we'll try to
+13 −25
Original line number Diff line number Diff line
@@ -37,7 +37,7 @@ using namespace mozilla::scache;
using mozilla::intl::LocaleService;

static const char kXULCacheInfoKey[] = "nsXULPrototypeCache.startupCache";
#define CACHE_PREFIX(aCompilationTarget) "xulcache/" aCompilationTarget
static const char kXULCachePrefix[] = "xulcache";

static void DisableXULCacheChangedCallback(const char* aPref, void* aClosure) {
  if (nsXULPrototypeCache* cache = nsXULPrototypeCache::GetInstance()) {
@@ -110,7 +110,7 @@ nsXULPrototypeDocument* nsXULPrototypeCache::GetPrototype(nsIURI* aURI) {

  // No prototype in XUL memory cache. Spin up the cache Service.
  nsCOMPtr<nsIObjectInputStream> ois;
  rv = GetPrototypeInputStream(aURI, getter_AddRefs(ois));
  rv = GetInputStream(aURI, getter_AddRefs(ois));
  if (NS_FAILED(rv)) {
    return nullptr;
  }
@@ -197,29 +197,19 @@ nsresult nsXULPrototypeCache::WritePrototype(
  nsCOMPtr<nsIURI> protoURI = aPrototypeDocument->GetURI();

  nsCOMPtr<nsIObjectOutputStream> oos;
  rv = GetPrototypeOutputStream(protoURI, getter_AddRefs(oos));
  rv = GetOutputStream(protoURI, getter_AddRefs(oos));
  NS_ENSURE_SUCCESS(rv, rv);

  rv = aPrototypeDocument->Write(oos);
  NS_ENSURE_SUCCESS(rv, rv);
  FinishPrototypeOutputStream(protoURI);
  FinishOutputStream(protoURI);
  return NS_FAILED(rv) ? rv : rv2;
}

static nsresult PathifyURIForType(nsXULPrototypeCache::CacheType cacheType,
                                  nsIURI* in, nsACString& out) {
  switch (cacheType) {
    case nsXULPrototypeCache::CacheType::Prototype:
      return PathifyURI(CACHE_PREFIX("proto"), in, out);
    case nsXULPrototypeCache::CacheType::Script:
      return PathifyURI(CACHE_PREFIX("script"), in, out);
  }
}

nsresult nsXULPrototypeCache::GetInputStream(CacheType cacheType, nsIURI* uri,
nsresult nsXULPrototypeCache::GetInputStream(nsIURI* uri,
                                             nsIObjectInputStream** stream) {
  nsAutoCString spec;
  nsresult rv = PathifyURIForType(cacheType, uri, spec);
  nsAutoCString spec(kXULCachePrefix);
  nsresult rv = PathifyURI(uri, spec);
  if (NS_FAILED(rv)) return NS_ERROR_NOT_AVAILABLE;

  const char* buf;
@@ -271,8 +261,7 @@ nsresult nsXULPrototypeCache::GetOutputStream(nsIURI* uri,
  return NS_OK;
}

nsresult nsXULPrototypeCache::FinishOutputStream(CacheType cacheType,
                                                 nsIURI* uri) {
nsresult nsXULPrototypeCache::FinishOutputStream(nsIURI* uri) {
  nsresult rv;
  StartupCache* sc = StartupCache::GetSingleton();
  if (!sc) return NS_ERROR_NOT_AVAILABLE;
@@ -289,8 +278,8 @@ nsresult nsXULPrototypeCache::FinishOutputStream(CacheType cacheType,
  NS_ENSURE_SUCCESS(rv, rv);

  if (!mStartupCacheURITable.GetEntry(uri)) {
    nsAutoCString spec;
    rv = PathifyURIForType(cacheType, uri, spec);
    nsAutoCString spec(kXULCachePrefix);
    rv = PathifyURI(uri, spec);
    if (NS_FAILED(rv)) return NS_ERROR_NOT_AVAILABLE;
    rv = sc->PutBuffer(spec.get(), std::move(buf), len);
    if (NS_SUCCEEDED(rv)) {
@@ -304,14 +293,13 @@ nsresult nsXULPrototypeCache::FinishOutputStream(CacheType cacheType,

// We have data if we're in the middle of writing it or we already
// have it in the cache.
nsresult nsXULPrototypeCache::HasData(CacheType cacheType, nsIURI* uri,
                                      bool* exists) {
nsresult nsXULPrototypeCache::HasData(nsIURI* uri, bool* exists) {
  if (mOutputStreamTable.Get(uri, nullptr)) {
    *exists = true;
    return NS_OK;
  }
  nsAutoCString spec;
  nsresult rv = PathifyURIForType(cacheType, uri, spec);
  nsAutoCString spec(kXULCachePrefix);
  nsresult rv = PathifyURI(uri, spec);
  if (NS_FAILED(rv)) {
    *exists = false;
    return NS_OK;
+3 −45
Original line number Diff line number Diff line
@@ -34,8 +34,6 @@ class StyleSheet;
 */
class nsXULPrototypeCache : public nsIObserver {
 public:
  enum class CacheType { Prototype, Script };

  // nsISupports
  NS_DECL_THREADSAFE_ISUPPORTS
  NS_DECL_NSIOBSERVER
@@ -73,52 +71,12 @@ class nsXULPrototypeCache : public nsIObserver {
   * This interface allows partial reads and writes from the buffers in the
   * startupCache.
   */

  inline nsresult GetPrototypeInputStream(nsIURI* aURI,
                                          nsIObjectInputStream** objectInput) {
    return GetInputStream(CacheType::Prototype, aURI, objectInput);
  }
  inline nsresult GetScriptInputStream(nsIURI* aURI,
                                       nsIObjectInputStream** objectInput) {
    return GetInputStream(CacheType::Script, aURI, objectInput);
  }
  inline nsresult FinishScriptInputStream(nsIURI* aURI) {
    return FinishInputStream(aURI);
  }

  inline nsresult GetPrototypeOutputStream(
      nsIURI* aURI, nsIObjectOutputStream** objectOutput) {
    return GetOutputStream(aURI, objectOutput);
  }
  inline nsresult GetScriptOutputStream(nsIURI* aURI,
                                        nsIObjectOutputStream** objectOutput) {
    return GetOutputStream(aURI, objectOutput);
  }

  inline nsresult FinishPrototypeOutputStream(nsIURI* aURI) {
    return FinishOutputStream(CacheType::Prototype, aURI);
  }
  inline nsresult FinishScriptOutputStream(nsIURI* aURI) {
    return FinishOutputStream(CacheType::Script, aURI);
  }

  inline nsresult HasPrototype(nsIURI* aURI, bool* exists) {
    return HasData(CacheType::Prototype, aURI, exists);
  }
  inline nsresult HasScript(nsIURI* aURI, bool* exists) {
    return HasData(CacheType::Script, aURI, exists);
  }

 private:
  nsresult GetInputStream(CacheType cacheType, nsIURI* uri,
                          nsIObjectInputStream** stream);
  nsresult GetInputStream(nsIURI* aURI, nsIObjectInputStream** objectInput);
  nsresult FinishInputStream(nsIURI* aURI);

  nsresult GetOutputStream(nsIURI* aURI, nsIObjectOutputStream** objectOutput);
  nsresult FinishOutputStream(CacheType cacheType, nsIURI* aURI);
  nsresult HasData(CacheType cacheType, nsIURI* aURI, bool* exists);
  nsresult FinishOutputStream(nsIURI* aURI);
  nsresult HasData(nsIURI* aURI, bool* exists);

 public:
  static nsXULPrototypeCache* GetInstance();
  static nsXULPrototypeCache* MaybeGetInstance() { return sInstance; }

Loading