Martin Stransky 4bed479
From: Mike Hommey <glandium@debian.org>
Martin Stransky 4bed479
Date: Sat, 21 Jun 2008 02:48:46 +0200
Martin Stransky 4bed479
Subject: Allow .js preference files to set locked prefs with lockPref()
Martin Stransky 4bed479
Martin Stransky 4bed479
---
Martin Stransky 4bed479
 modules/libpref/prefapi.cpp  |  5 ++++-
Martin Stransky 4bed479
 modules/libpref/prefapi.h    |  3 ++-
Martin Stransky 4bed479
 modules/libpref/prefread.cpp | 12 +++++++++---
Martin Stransky 4bed479
 modules/libpref/prefread.h   |  4 +++-
Martin Stransky 4bed479
 4 files changed, 18 insertions(+), 6 deletions(-)
Martin Stransky 4bed479
Martin Stransky 4bed479
diff --git a/modules/libpref/prefapi.cpp b/modules/libpref/prefapi.cpp
Martin Stransky 4bed479
index dd27769..bd3f8ea 100644
Martin Stransky 4bed479
--- a/modules/libpref/prefapi.cpp
Martin Stransky 4bed479
+++ b/modules/libpref/prefapi.cpp
Martin Stransky 4bed479
@@ -967,11 +967,14 @@ void PREF_ReaderCallback(void       *closure,
Martin Stransky 4bed479
                          PrefValue   value,
Martin Stransky 4bed479
                          PrefType    type,
Martin Stransky 4bed479
                          bool        isDefault,
Martin Stransky 4bed479
-                         bool        isStickyDefault)
Martin Stransky 4bed479
+                         bool        isStickyDefault,
Martin Stransky 4bed479
+                         bool        isLocked)
Martin Stransky 4bed479
 {
Martin Stransky 4bed479
     uint32_t flags = isDefault ? kPrefSetDefault : kPrefForceSet;
Martin Stransky 4bed479
     if (isDefault && isStickyDefault) {
Martin Stransky 4bed479
         flags |= kPrefStickyDefault;
Martin Stransky 4bed479
     }
Martin Stransky 4bed479
     pref_HashPref(pref, value, type, flags);
Martin Stransky 4bed479
+    if (isLocked)
Martin Stransky 4bed479
+        PREF_LockPref(pref, true);
Martin Stransky 4bed479
 }
Martin Stransky 4bed479
diff --git a/modules/libpref/prefapi.h b/modules/libpref/prefapi.h
Martin Stransky 4bed479
index 5bd8c43..0ab0d7c 100644
Martin Stransky 4bed479
--- a/modules/libpref/prefapi.h
Martin Stransky 4bed479
+++ b/modules/libpref/prefapi.h
Martin Stransky 4bed479
@@ -186,7 +186,8 @@ void PREF_ReaderCallback( void *closure,
Martin Stransky 4bed479
                           PrefValue   value,
Martin Stransky 4bed479
                           PrefType    type,
Martin Stransky 4bed479
                           bool        isDefault,
Martin Stransky 4bed479
-                          bool        isStickyDefault);
Martin Stransky 4bed479
+                          bool        isStickyDefault,
Martin Stransky 4bed479
+                          bool        isLocked);
Martin Stransky 4bed479
 
Martin Stransky 4bed479
 #ifdef __cplusplus
Martin Stransky 4bed479
 }
Martin Stransky 4bed479
diff --git a/modules/libpref/prefread.cpp b/modules/libpref/prefread.cpp
Martin Stransky 4bed479
index 6c4d339..16c5057 100644
Martin Stransky 4bed479
--- a/modules/libpref/prefread.cpp
Martin Stransky 4bed479
+++ b/modules/libpref/prefread.cpp
Martin Stransky 4bed479
@@ -43,6 +43,7 @@ enum {
Martin Stransky 4bed479
 #define BITS_PER_HEX_DIGIT      4
Martin Stransky 4bed479
 
Martin Stransky 4bed479
 static const char kUserPref[] = "user_pref";
Martin Stransky 4bed479
+static const char kLockPref[] = "lockPref";
Martin Stransky 4bed479
 static const char kPref[] = "pref";
Martin Stransky 4bed479
 static const char kPrefSticky[] = "sticky_pref";
Martin Stransky 4bed479
 static const char kTrue[] = "true";
Martin Stransky 4bed479
@@ -131,7 +132,7 @@ pref_DoCallback(PrefParseState *ps)
Martin Stransky 4bed479
         break;
Martin Stransky 4bed479
     }
Martin Stransky 4bed479
     (*ps->reader)(ps->closure, ps->lb, value, ps->vtype, ps->fdefault,
Martin Stransky 4bed479
-                  ps->fstickydefault);
Martin Stransky 4bed479
+                  ps->fstickydefault, ps->flock);
Martin Stransky 4bed479
     return true;
Martin Stransky 4bed479
 }
Martin Stransky 4bed479
 
Martin Stransky 4bed479
@@ -191,6 +192,7 @@ PREF_ParseBuf(PrefParseState *ps, const char *buf, int bufLen)
Martin Stransky 4bed479
                 ps->vtype = PREF_INVALID;
Martin Stransky 4bed479
                 ps->fdefault = false;
Martin Stransky 4bed479
                 ps->fstickydefault = false;
Martin Stransky 4bed479
+                ps->flock = false;
Martin Stransky 4bed479
             }
Martin Stransky 4bed479
             switch (c) {
Martin Stransky 4bed479
             case '/':       /* begin comment block or line? */
Martin Stransky 4bed479
@@ -202,8 +204,10 @@ PREF_ParseBuf(PrefParseState *ps, const char *buf, int bufLen)
Martin Stransky 4bed479
             case 'u':       /* indicating user_pref */
Martin Stransky 4bed479
             case 'p':       /* indicating pref */
Martin Stransky 4bed479
             case 's':       /* indicating sticky_pref */
Martin Stransky 4bed479
+            case 'l':       /* indicating lockPref */
Martin Stransky 4bed479
                 ps->smatch = (c == 'u' ? kUserPref :
Martin Stransky 4bed479
-                             (c == 's' ? kPrefSticky : kPref));
Martin Stransky 4bed479
+                             (c == 's' ? kPrefSticky :
Martin Stransky 4bed479
+                             (c == 'p' ? kPref : kLockPref)));
Martin Stransky 4bed479
                 ps->sindex = 1;
Martin Stransky 4bed479
                 ps->nextstate = PREF_PARSE_UNTIL_OPEN_PAREN;
Martin Stransky 4bed479
                 state = PREF_PARSE_MATCH_STRING;
Martin Stransky 4bed479
@@ -247,8 +251,10 @@ PREF_ParseBuf(PrefParseState *ps, const char *buf, int bufLen)
Martin Stransky 4bed479
         /* name parsing */
Martin Stransky 4bed479
         case PREF_PARSE_UNTIL_NAME:
Martin Stransky 4bed479
             if (c == '\"' || c == '\'') {
Martin Stransky 4bed479
-                ps->fdefault = (ps->smatch == kPref || ps->smatch == kPrefSticky);
Martin Stransky 4bed479
+                ps->fdefault = (ps->smatch == kPref || ps->smatch == kPrefSticky
Martin Stransky 4bed479
+                                || ps->smatch == kLockPref);
Martin Stransky 4bed479
                 ps->fstickydefault = (ps->smatch == kPrefSticky);
Martin Stransky 4bed479
+                ps->flock = (ps->smatch == kLockPref);
Martin Stransky 4bed479
                 ps->quotechar = c;
Martin Stransky 4bed479
                 ps->nextstate = PREF_PARSE_UNTIL_COMMA; /* return here when done */
Martin Stransky 4bed479
                 state = PREF_PARSE_QUOTED_STRING;
Martin Stransky 4bed479
diff --git a/modules/libpref/prefread.h b/modules/libpref/prefread.h
Martin Stransky 4bed479
index 3c317ff..0c13057 100644
Martin Stransky 4bed479
--- a/modules/libpref/prefread.h
Martin Stransky 4bed479
+++ b/modules/libpref/prefread.h
Martin Stransky 4bed479
@@ -34,7 +34,8 @@ typedef void (*PrefReader)(void       *closure,
Martin Stransky 4bed479
                            PrefValue   val,
Martin Stransky 4bed479
                            PrefType    type,
Martin Stransky 4bed479
                            bool        defPref,
Martin Stransky 4bed479
-                           bool        stickyPref);
Martin Stransky 4bed479
+                           bool        stickyPref,
Martin Stransky 4bed479
+                           bool        lockPref);
Martin Stransky 4bed479
 
Martin Stransky 4bed479
 /* structure fields are private */
Martin Stransky 4bed479
 typedef struct PrefParseState {
Martin Stransky 4bed479
@@ -56,6 +57,7 @@ typedef struct PrefParseState {
Martin Stransky 4bed479
     PrefType    vtype;      /* PREF_STRING,INT,BOOL          */
Martin Stransky 4bed479
     bool        fdefault;   /* true if (default) pref     */
Martin Stransky 4bed479
     bool        fstickydefault; /* true if (sticky) pref     */
Martin Stransky 4bed479
+    bool        flock;      /* true if pref to be locked     */
Martin Stransky 4bed479
 } PrefParseState;
Martin Stransky 4bed479
 
Martin Stransky 4bed479
 /**