Bug 1376964 - Part 8: Add OMT wrapper for nsIPrincipals useful for font stuff. r=jfkthame
MozReview-Commit-ID: L6gUnvDx7D2
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',