Bug 1376964 - Part 8: Add OMT wrapper for nsIPrincipals useful for font stuff. r=jfkthame draft
authorCameron McCormack <cam@mcc.id.au>
Sat, 08 Jul 2017 17:20:28 +0800
changeset 608080 29db939d9161f7dd86bbc4374ee125230cb8e53d
parent 608079 6120ec007d7a9f21c6cdf441fd99232ae596af91
child 608081 ff6010ec77d9cba408941c5c31365c381aa3e79e
push id68174
push userbmo:cam@mcc.id.au
push dateThu, 13 Jul 2017 06:08:51 +0000
reviewersjfkthame
bugs1376964
milestone56.0a1
Bug 1376964 - Part 8: Add OMT wrapper for nsIPrincipals useful for font stuff. r=jfkthame MozReview-Commit-ID: L6gUnvDx7D2
gfx/thebes/gfxFontSrcPrincipal.cpp
gfx/thebes/gfxFontSrcPrincipal.h
gfx/thebes/moz.build
new file mode 100644
--- /dev/null
+++ b/gfx/thebes/gfxFontSrcPrincipal.cpp
@@ -0,0 +1,34 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
+ * 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 http://mozilla.org/MPL/2.0/. */
+
+#include "gfxFontSrcPrincipal.h"
+
+#include "nsProxyRelease.h"
+#include "nsURIHashKey.h"
+
+gfxFontSrcPrincipal::gfxFontSrcPrincipal(nsIPrincipal* aPrincipal)
+{
+  MOZ_ASSERT(NS_IsMainThread());
+  MOZ_ASSERT(aPrincipal);
+
+  mPrincipal = aPrincipal;
+
+  uint32_t hash = 0;
+  mPrincipal->GetHashValue(&hash);
+  mHash = hash;
+}
+
+gfxFontSrcPrincipal::~gfxFontSrcPrincipal()
+{
+  NS_ReleaseOnMainThread("gfxFontSrcPrincipal::mPrincipal",
+                         mPrincipal.forget());
+}
+
+bool
+gfxFontSrcPrincipal::Equals(gfxFontSrcPrincipal* aOther)
+{
+  return BasePrincipal::Cast(mPrincipal)->
+           FastEquals(BasePrincipal::Cast(aOther->mPrincipal));
+}
new file mode 100644
--- /dev/null
+++ b/gfx/thebes/gfxFontSrcPrincipal.h
@@ -0,0 +1,46 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
+ * 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 http://mozilla.org/MPL/2.0/. */
+
+#ifndef MOZILLA_GFX_FONTSRCPRINCIPAL_H
+#define MOZILLA_GFX_FONTSRCPRINCIPAL_H
+
+#include "nsCOMPtr.h"
+#include "nsIPrincipal.h"
+#include "PLDHashTable.h"
+
+namespace mozilla {
+namespace net {
+class nsSimpleURI;
+} // namespace net
+} // namespace mozilla
+
+/**
+ * A wrapper for an nsIPrincipal that can be used OMT, which has cached
+ * information useful for the gfxUserFontSet.
+ */
+class gfxFontSrcPrincipal
+{
+public:
+  explicit gfxFontSrcPrincipal(nsIPrincipal* aPrincipal);
+
+  NS_INLINE_DECL_THREADSAFE_REFCOUNTING(gfxFontSrcPrincipal)
+
+  nsIPrincipal* get() { return mPrincipal; }
+
+  bool Equals(gfxFontSrcPrincipal* aOther);
+
+  PLDHashNumber Hash() const { return mHash; }
+
+private:
+  ~gfxFontSrcPrincipal();
+
+  // The principal.
+  nsCOMPtr<nsIPrincipal> mPrincipal;
+
+  // Precomputed hash for mPrincipal.
+  PLDHashNumber mHash;
+};
+
+#endif // MOZILLA_GFX_FONTSRCPRINCIPAL_H
--- a/gfx/thebes/moz.build
+++ b/gfx/thebes/moz.build
@@ -25,16 +25,17 @@ EXPORTS += [
     'gfxFailure.h',
     'gfxFont.h',
     'gfxFontConstants.h',
     'gfxFontEntry.h',
     'gfxFontFamilyList.h',
     'gfxFontFeatures.h',
     'gfxFontInfoLoader.h',
     'gfxFontPrefLangList.h',
+    'gfxFontSrcPrincipal.h',
     'gfxFontSrcURI.h',
     'gfxFontUtils.h',
     'gfxFontVariations.h',
     'gfxGradientCache.h',
     'gfxImageSurface.h',
     'gfxLineSegment.h',
     'gfxMathTable.h',
     'gfxMatrix.h',
@@ -188,16 +189,17 @@ UNIFIED_SOURCES += [
     'gfxBaseSharedMemorySurface.cpp',
     'gfxBlur.cpp',
     'gfxContext.cpp',
     'gfxFont.cpp',
     'gfxFontEntry.cpp',
     'gfxFontFeatures.cpp',
     'gfxFontInfoLoader.cpp',
     'gfxFontMissingGlyphs.cpp',
+    'gfxFontSrcPrincipal.cpp',
     'gfxFontSrcURI.cpp',
     'gfxGlyphExtents.cpp',
     'gfxGradientCache.cpp',
     'gfxGraphiteShaper.cpp',
     'gfxHarfBuzzShaper.cpp',
     'gfxImageSurface.cpp',
     'gfxMathTable.cpp',
     'gfxPattern.cpp',