diff -up firefox-50.0/modules/libpref/prefapi.cpp.440908 firefox-50.0/modules/libpref/prefapi.cpp --- firefox-50.0/modules/libpref/prefapi.cpp.440908 2016-10-31 21:15:26.000000000 +0100 +++ firefox-50.0/modules/libpref/prefapi.cpp 2016-11-10 10:32:48.796115692 +0100 @@ -997,8 +997,8 @@ void PREF_ReaderCallback(void *clo PrefValue value, PrefType type, bool isDefault, - bool isStickyDefault) - + bool isStickyDefault, + bool isLocked) { uint32_t flags = 0; if (isDefault) { @@ -1010,4 +1010,6 @@ void PREF_ReaderCallback(void *clo flags |= kPrefForceSet; } pref_HashPref(pref, value, type, flags); + if (isLocked) + PREF_LockPref(pref, true); } diff -up firefox-50.0/modules/libpref/prefapi.h.440908 firefox-50.0/modules/libpref/prefapi.h --- firefox-50.0/modules/libpref/prefapi.h.440908 2016-11-10 10:32:48.796115692 +0100 +++ firefox-50.0/modules/libpref/prefapi.h 2016-11-10 10:34:58.013159112 +0100 @@ -243,8 +243,8 @@ void PREF_ReaderCallback( void *closure, PrefValue value, PrefType type, bool isDefault, - bool isStickyDefault); - + bool isStickyDefault, + bool isLocked); /* * Callback whenever we change a preference diff -up firefox-50.0/modules/libpref/prefread.cpp.440908 firefox-50.0/modules/libpref/prefread.cpp --- firefox-50.0/modules/libpref/prefread.cpp.440908 2016-09-05 22:12:58.000000000 +0200 +++ firefox-50.0/modules/libpref/prefread.cpp 2016-11-10 10:32:48.796115692 +0100 @@ -43,6 +43,7 @@ enum { #define BITS_PER_HEX_DIGIT 4 static const char kUserPref[] = "user_pref"; +static const char kLockPref[] = "lockPref"; static const char kPref[] = "pref"; static const char kPrefSticky[] = "sticky_pref"; static const char kTrue[] = "true"; @@ -146,7 +147,7 @@ pref_DoCallback(PrefParseState *ps) break; } (*ps->reader)(ps->closure, ps->lb, value, ps->vtype, ps->fdefault, - ps->fstickydefault); + ps->fstickydefault, ps->flock); return true; } @@ -215,6 +216,7 @@ PREF_ParseBuf(PrefParseState *ps, const ps->vtype = PrefType::Invalid; ps->fdefault = false; ps->fstickydefault = false; + ps->flock = false; } switch (c) { case '/': /* begin comment block or line? */ @@ -225,11 +227,14 @@ PREF_ParseBuf(PrefParseState *ps, const break; case 'u': /* indicating user_pref */ case 's': /* indicating sticky_pref */ + case 'l': /* indicating lockPref */ case 'p': /* indicating pref */ if (c == 'u') { ps->smatch = kUserPref; } else if (c == 's') { ps->smatch = kPrefSticky; + } else if (c == 'l') { + ps->smatch = kLockPref; } else { ps->smatch = kPref; } @@ -277,8 +282,10 @@ PREF_ParseBuf(PrefParseState *ps, const /* name parsing */ case PREF_PARSE_UNTIL_NAME: if (c == '\"' || c == '\'') { - ps->fdefault = (ps->smatch == kPref || ps->smatch == kPrefSticky); + ps->fdefault = (ps->smatch == kPref || ps->smatch == kPrefSticky + || ps->smatch == kLockPref); ps->fstickydefault = (ps->smatch == kPrefSticky); + ps->flock = (ps->smatch == kLockPref); ps->quotechar = c; ps->nextstate = PREF_PARSE_UNTIL_COMMA; /* return here when done */ state = PREF_PARSE_QUOTED_STRING; diff -up firefox-50.0/modules/libpref/prefread.h.440908 firefox-50.0/modules/libpref/prefread.h --- firefox-50.0/modules/libpref/prefread.h.440908 2016-09-05 22:12:58.000000000 +0200 +++ firefox-50.0/modules/libpref/prefread.h 2016-11-10 10:32:48.796115692 +0100 @@ -34,7 +34,8 @@ typedef void (*PrefReader)(void *c PrefValue val, PrefType type, bool defPref, - bool stickyPref); + bool stickyPref, + bool lockPref); /** * Report any errors or warnings we encounter during parsing. @@ -62,6 +63,7 @@ typedef struct PrefParseState { PrefType vtype; /* PREF_STRING,INT,BOOL */ bool fdefault; /* true if (default) pref */ bool fstickydefault; /* true if (sticky) pref */ + bool flock; /* true if pref to be locked */ } PrefParseState; /** @@ -90,7 +92,7 @@ void PREF_InitParseState(PrefParseState * * @param ps * PrefParseState instance. - */ + */ void PREF_FinalizeParseState(PrefParseState *ps); /**