Bug 1318618 - Support nsCString data type in gfxPrefs; r=dvander
authorDaosheng Mu <daoshengmu@gmail.com>
Wed, 23 Nov 2016 09:38:02 +0800
changeset 324026 a8dabadba0abc4467a03fa3778b93ea1dbe291d7
parent 324025 f4f6a59b53106e9ff550b18e374a401ecea78e2a
child 324027 fec45c20351f688a29bd4e635098fd91832002ca
push id24
push usermaklebus@msu.edu
push dateTue, 20 Dec 2016 03:11:33 +0000
reviewersdvander
bugs1318618
milestone53.0a1
Bug 1318618 - Support nsCString data type in gfxPrefs; r=dvander MozReview-Commit-ID: w5051nuVR5
gfx/ipc/PGPU.ipdl
gfx/thebes/gfxPrefs.cpp
gfx/thebes/gfxPrefs.h
--- a/gfx/ipc/PGPU.ipdl
+++ b/gfx/ipc/PGPU.ipdl
@@ -20,16 +20,17 @@ using mozilla::Telemetry::KeyedAccumulat
 namespace mozilla {
 namespace gfx {
 
 union GfxPrefValue {
   bool;
   int32_t;
   uint32_t;
   float;
+  nsCString;
 };
 
 struct GfxPrefSetting {
   int32_t index;
   GfxPrefValue value;
 };
 
 struct LayerTreeIdMapping {
--- a/gfx/thebes/gfxPrefs.cpp
+++ b/gfx/thebes/gfxPrefs.cpp
@@ -153,16 +153,24 @@ void gfxPrefs::PrefAddVarCache(uint32_t*
 void gfxPrefs::PrefAddVarCache(float* aVariable,
                                const char* aPref,
                                float aDefault)
 {
   MOZ_ASSERT(IsPrefsServiceAvailable());
   Preferences::AddFloatVarCache(aVariable, aPref, aDefault);
 }
 
+void gfxPrefs::PrefAddVarCache(std::string* aVariable,
+                               const char* aPref,
+                               std::string aDefault)
+{
+  MOZ_ASSERT(IsPrefsServiceAvailable());
+  Preferences::SetCString(aPref, aVariable->c_str());
+}
+
 bool gfxPrefs::PrefGet(const char* aPref, bool aDefault)
 {
   MOZ_ASSERT(IsPrefsServiceAvailable());
   return Preferences::GetBool(aPref, aDefault);
 }
 
 int32_t gfxPrefs::PrefGet(const char* aPref, int32_t aDefault)
 {
@@ -177,16 +185,26 @@ uint32_t gfxPrefs::PrefGet(const char* a
 }
 
 float gfxPrefs::PrefGet(const char* aPref, float aDefault)
 {
   MOZ_ASSERT(IsPrefsServiceAvailable());
   return Preferences::GetFloat(aPref, aDefault);
 }
 
+
+std::string gfxPrefs::PrefGet(const char* aPref, std::string aDefault)
+{
+  MOZ_ASSERT(IsPrefsServiceAvailable());
+
+  nsAdoptingCString result;
+  Preferences::GetCString(aPref, &result);
+  return result.get();
+}
+
 void gfxPrefs::PrefSet(const char* aPref, bool aValue)
 {
   MOZ_ASSERT(IsPrefsServiceAvailable());
   Preferences::SetBool(aPref, aValue);
 }
 
 void gfxPrefs::PrefSet(const char* aPref, int32_t aValue)
 {
@@ -201,16 +219,22 @@ void gfxPrefs::PrefSet(const char* aPref
 }
 
 void gfxPrefs::PrefSet(const char* aPref, float aValue)
 {
   MOZ_ASSERT(IsPrefsServiceAvailable());
   Preferences::SetFloat(aPref, aValue);
 }
 
+void gfxPrefs::PrefSet(const char* aPref, std::string aValue)
+{
+  MOZ_ASSERT(IsPrefsServiceAvailable());
+  Preferences::SetCString(aPref, aValue.c_str());
+}
+
 static void
 OnGfxPrefChanged(const char* aPrefname, void* aClosure)
 {
   reinterpret_cast<gfxPrefs::Pref*>(aClosure)->OnChange();
 }
 
 void gfxPrefs::WatchChanges(const char* aPrefname, Pref* aPref)
 {
@@ -241,16 +265,21 @@ void gfxPrefs::CopyPrefValue(const uint3
   *aOutValue = *aValue;
 }
 
 void gfxPrefs::CopyPrefValue(const float* aValue, GfxPrefValue* aOutValue)
 {
   *aOutValue = *aValue;
 }
 
+void gfxPrefs::CopyPrefValue(const std::string* aValue, GfxPrefValue* aOutValue)
+{
+  *aOutValue = nsCString(aValue->c_str());
+}
+
 void gfxPrefs::CopyPrefValue(const GfxPrefValue* aValue, bool* aOutValue)
 {
   *aOutValue = aValue->get_bool();
 }
 
 void gfxPrefs::CopyPrefValue(const GfxPrefValue* aValue, int32_t* aOutValue)
 {
   *aOutValue = aValue->get_int32_t();
@@ -260,8 +289,13 @@ void gfxPrefs::CopyPrefValue(const GfxPr
 {
   *aOutValue = aValue->get_uint32_t();
 }
 
 void gfxPrefs::CopyPrefValue(const GfxPrefValue* aValue, float* aOutValue)
 {
   *aOutValue = aValue->get_float();
 }
+
+void gfxPrefs::CopyPrefValue(const GfxPrefValue* aValue, std::string* aOutValue)
+{
+  *aOutValue = aValue->get_nsCString().get();
+}
--- a/gfx/thebes/gfxPrefs.h
+++ b/gfx/thebes/gfxPrefs.h
@@ -3,16 +3,17 @@
  * 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 GFX_PREFS_H
 #define GFX_PREFS_H
 
 #include <cmath>                 // for M_PI
 #include <stdint.h>
+#include <string>
 #include "mozilla/Assertions.h"
 #include "mozilla/Function.h"
 #include "mozilla/gfx/LoggingConstants.h"
 #include "nsTArray.h"
 
 // First time gfxPrefs::GetSingleton() needs to be called on the main thread,
 // before any of the methods accessing the values are used, but after
 // the Preferences system has been initialized.
@@ -637,35 +638,40 @@ private:
 
   static bool IsPrefsServiceAvailable();
   static bool IsParentProcess();
   // Creating these to avoid having to include Preferences.h in the .h
   static void PrefAddVarCache(bool*, const char*, bool);
   static void PrefAddVarCache(int32_t*, const char*, int32_t);
   static void PrefAddVarCache(uint32_t*, const char*, uint32_t);
   static void PrefAddVarCache(float*, const char*, float);
+  static void PrefAddVarCache(std::string*, const char*, std::string);
   static bool PrefGet(const char*, bool);
   static int32_t PrefGet(const char*, int32_t);
   static uint32_t PrefGet(const char*, uint32_t);
   static float PrefGet(const char*, float);
+  static std::string PrefGet(const char*, std::string);
   static void PrefSet(const char* aPref, bool aValue);
   static void PrefSet(const char* aPref, int32_t aValue);
   static void PrefSet(const char* aPref, uint32_t aValue);
   static void PrefSet(const char* aPref, float aValue);
+  static void PrefSet(const char* aPref, std::string aValue);
   static void WatchChanges(const char* aPrefname, Pref* aPref);
   static void UnwatchChanges(const char* aPrefname, Pref* aPref);
   // Creating these to avoid having to include PGPU.h in the .h
   static void CopyPrefValue(const bool* aValue, GfxPrefValue* aOutValue);
   static void CopyPrefValue(const int32_t* aValue, GfxPrefValue* aOutValue);
   static void CopyPrefValue(const uint32_t* aValue, GfxPrefValue* aOutValue);
   static void CopyPrefValue(const float* aValue, GfxPrefValue* aOutValue);
+  static void CopyPrefValue(const std::string* aValue, GfxPrefValue* aOutValue);
   static void CopyPrefValue(const GfxPrefValue* aValue, bool* aOutValue);
   static void CopyPrefValue(const GfxPrefValue* aValue, int32_t* aOutValue);
   static void CopyPrefValue(const GfxPrefValue* aValue, uint32_t* aOutValue);
   static void CopyPrefValue(const GfxPrefValue* aValue, float* aOutValue);
+  static void CopyPrefValue(const GfxPrefValue* aValue, std::string* aOutValue);
 
   static void AssertMainThread();
 
   gfxPrefs();
   ~gfxPrefs();
   gfxPrefs(const gfxPrefs&) = delete;
   gfxPrefs& operator=(const gfxPrefs&) = delete;
 };