Commit Graph

315 Commits

Author SHA1 Message Date
Tom Ritter
0a8b5b6e7c Bug 1424341 Add privacy.reduceTimerPrecision and privacy.reduceTimerPrecision.microseconds prefs r=bkelly,timhuang
This pref does not override privacy.resistFingerprinting, but when it is set (and
privacy.resistFingerprinting is not) we will still adjust the precision of almost
all timers. The adjustment amount is the second pref, which is defaulted to
20us but now dynamically adjustable (in the scale of microseconds.)

This patch does _not_ address the performance API, which privacy.resistFingerprinting
disables.

We are landing this preffed on at the current value we clamp performance.now() at
which is 20us.

MozReview-Commit-ID: ESZlSvH9w1D
2018-01-09 14:58:34 -06:00
Andrea Marchesini
6e2de4c558 Bug 1419771 - Introduce DOMPrefs, a thread-safe access to preferences for DOM - part 21 - Get rid of WorkerPrefs.h, r=asuth 2018-01-08 14:05:07 +01:00
Nicholas Nethercote
7df45b27d2 Bug 1426270 - Add telemetry for prefs loading. r=glandium.
This patch introduces three keyed histograms:

- PREFERENCES_FILE_LOAD_SIZE_B
- PREFERENCES_FILE_LOAD_NUM_PREFS
- PREFERENCES_FILE_LOAD_TIME_US

They are all keyed on the prefs file's name; in my local Linux64 build there
are 13 such files.

Because prefs start up earlier than telemetry, we have to save the measurements
and then pass them to telemetry later.

MozReview-Commit-ID: H6KD7oeK8O0
2017-12-21 16:36:16 +11:00
Nicholas Nethercote
6df3cf8ac8 Bug 1426331 - Make pref_ReadPrefFromJar() fail if parsing fails. r=glandium
Currently pref_ReadPrefFromJar() will return NS_OK if parsing fails. This is
weird, and inconsistent with openPrefFile().

MozReview-Commit-ID: 7cHSewQYymE
2017-12-20 20:37:17 +11:00
Nicholas Nethercote
dc41523f71 Bug 1422649 - Remove a bogus exception from the early pref access checking. r=billm
New content processes get prefs in three ways.

- They read them from greprefs.js, prefs.js and other such files.

- They get sent "early prefs" from the parent process via the command line
  (-intPrefs/-boolPrefs/-stringPrefs).

- They get sent "late prefs" from the parent process via IPC message.

(The latter two are necessary for communicating prefs that have been added or
modified in the parent process since the file reading occurred at startup.)

We have some machinery that detects if a late pref is accessed before the late
prefs are set, which is good. But it has a big exception in it; late pref
accesses that occur early via Add*VarCache() and RegisterCallbackAndCall() are
allowed.

This exception was added in bug 1341414. The description of that bug says "We
should change AddBoolVarCache so that it doesn't look at the pref in the
content process until prefs have been received from the parent." Unfortunately,
the patch in that bug added the exception to the checking without changing
Add*VarCache() in the suggested way!

This means it's possible for late prefs to be read early via VarCaches (or
RegisterCallbackAndCall()) when their values are incorrect, which is bad.

Changing Add*VarCache() to delay the reading as bug 1341414 originally
suggested seems difficult. A simpler fix is to just remove the exception in the
checking and extend the early prefs list as necessary. This patch does that,
lengthening the early prefs list from ~210 to ~300. Fortunately, most (all?) of
the added prefs are ints or bools rather than strings, so it doesn't increase
the size of the command line arguments for content processes by too much.
2017-12-04 12:08:43 +11:00
Nicholas Nethercote
e142bee515 Bug 1421541 - Overhaul the prefs phase code. r=glandium
This code is used to detect too-early accesses of prefs in content processes.

The patch makes the following changes.

- New terminology: "early" prefs are those sent via the command line; "late"
  prefs are those sent via IPC. Previously the former were "init" prefs and the
  latter didn't have a clear name.

- The phase tracking and checking is now almost completely encapsulated within
  Preferences.cpp. The only exposure to outside code is via the
  AreAllPrefsSetInContentProcess() method, which has a single use.

- The number of states tracked drops from 5 to 3. There's no need to track the
  beginning of the pref-setting operations, because we only need to know if
  they've finished. (This also avoids the weirdness where we could transition
  from END_INIT_PREFS back to BEGIN_INIT_PREFS because of the way -intPrefs,
  -boolPrefs and -stringPrefs were parsed separately.)

MozReview-Commit-ID: IVJWiDxdsDV
2017-11-30 09:14:32 +11:00
Nicholas Nethercote
4f3e11acaf Bug 1421541 - Split Pref::SetValue() in two. r=glandium
The default path and the user path are entirely disjoint, and some of the
arguments only apply to one of the paths, so splitting it into two functions
makes things a bit clearer. The aForceSet arg is also renamed aFromFile.

MozReview-Commit-ID: LYtrwz5JHiN
2017-11-29 20:55:56 +11:00
Nicholas Nethercote
0b27ec13a0 Bug 1421541 - Inline and remove pref_LoadPrefsInDirList(). r=glandium
It has only one call site.

MozReview-Commit-ID: B0Qng6TI6PN
2017-11-22 14:42:54 +11:00
Nicholas Nethercote
c8482db15b Bug 1421541 - Tweak GetCStringValue(). r=glandium
It's not possible for a string value to be nullptr.

MozReview-Commit-ID: 13X28YObvwp
2017-11-29 18:49:08 +11:00
Nicholas Nethercote
51dfbb8cb0 Bug 1421541 - Make Preferences::HandleDirty() only work in the parent process. r=glandium
pref_SetPref() is now the only function that runs in the content process and
calls HandleDirty(). So this patch moves the parent process check out of
HandleDirty() into pref_SetPref().

The patch also adds assertions to a couple of other parent-process-only
functions.

MozReview-Commit-ID: KurXKMl4IIb
2017-11-29 18:48:10 +11:00
Nicholas Nethercote
d2d0bdc369 Bug 1421541 - Tweak some comments. r=glandium
This includes removing a bunch of low-value ones.

MozReview-Commit-ID: LGS9M9TCL4e
2017-11-29 18:47:19 +11:00
Nicholas Nethercote
a7b278778a Bug 1421547 - Remove remaining traces of the old toolkit.telemetry.enabledPreRelease pref. r=rnewman
The code to migrate from the toolkit.telemetry.enabledPreRelease pref to
toolkit.telemetry.enabled was added to Firefox 31 in bug 986582. It should be
safe to remove now.

MozReview-Commit-ID: JBkn20bUQXx
2017-12-01 22:23:49 +11:00
Cosmin Sabou
369f0175e7 Backed out 23 changesets (bug 1419771) for frequently failing service workers related devtools tests, e.g. devtools/client/aboutdebugging/test/browser_service_workers_push.js. r=backout on a CLOSED TREE
Backed out changeset 2242edc902a5 (bug 1419771)
Backed out changeset 9cc3c29a9e36 (bug 1419771)
Backed out changeset c39ee002c825 (bug 1419771)
Backed out changeset caf7428013f2 (bug 1419771)
Backed out changeset c03970363433 (bug 1419771)
Backed out changeset 7f9de012861e (bug 1419771)
Backed out changeset ed146ac42a7f (bug 1419771)
Backed out changeset a8154698f782 (bug 1419771)
Backed out changeset 8a54c1c8d45d (bug 1419771)
Backed out changeset e32cd55b4c96 (bug 1419771)
Backed out changeset b7f342f436ef (bug 1419771)
Backed out changeset 60464b3e468f (bug 1419771)
Backed out changeset 108806f14ad8 (bug 1419771)
Backed out changeset 65998b0740f3 (bug 1419771)
Backed out changeset 0d23880842d8 (bug 1419771)
Backed out changeset 862aeaa2fefd (bug 1419771)
Backed out changeset cbc192478bf5 (bug 1419771)
Backed out changeset c58ef2a91bad (bug 1419771)
Backed out changeset 2b0a4bfd654f (bug 1419771)
Backed out changeset f182eba574f9 (bug 1419771)
Backed out changeset d9999a624097 (bug 1419771)
Backed out changeset 4050a1b8db2b (bug 1419771)
Backed out changeset a1a68e6500d9 (bug 1419771)
2017-11-30 22:35:32 +02:00
Andrea Marchesini
3c517efafa Bug 1419771 - Introduce DOMPreferences, a thread-safe access to preferences for DOM - part 22 - Get rid of WorkerPrefs.h, r=asuth 2017-11-30 18:16:47 +01:00
Nicholas Nethercote
7c7cc8cc45 Bug 1394578 - Pass pref locked status to content processes. r=glandium
This makes the IPC messages a little bigger, but that's unavoidable.

MozReview-Commit-ID: 1oPz2Yjjd9y
2017-11-29 09:29:07 +11:00
Nicholas Nethercote
b445e77165 Bug 1394578 - Rewrite Preferences::SetPreference(). r=glandium
Preferences::SetPreference() is used when setting prefs in the content process
from dom::Pref values that are passed from the parent process. Currently we
use the high-level Set*InAnyProcess() methods to do this -- basically the same
code path as sets done via the API -- but this has several problems.

- It is subtly broken. If the content process already has a pref of type T with
  a default value and then we get a SetPreference() call that tries to change
  it to type U, it will erroneously fail. In practice this never(?) happens,
  but it shows that things aren't arranged very well.

- SetPreference() also looks up the hashtable twice to get the same pref if
  both a default value and a user value are present in the dom::Pref.

- This happens in content processes, while all other pref set operations occur
  in the parent process. This is the main reason we have the Set*InAnyProcess()
  functions.

In short, the setting of prefs via IPC is quite different to the setting of
prefs via other means -- because it happens in content processes, and it's more
of a clobber that can set both values at once -- and so should be handled
differently.

The solution is to make Preferences::SetPreference() use lower-level operations
to do the update. It now does the hash table lookup/add itself, and then calls
the new Pref::FromDomPref() method. That method then possibly calls the new
PrefValue::FromDomPrefValue() method for both kinds of value, and overwrites
them as necessary. SetValueFromDom() is no longer used and the patch removes it.

MozReview-Commit-ID: 2Rg8VMOc0Cl
2017-11-23 18:03:02 +11:00
Nicholas Nethercote
327e979315 Bug 1394578 - Introduce PrefType::None. r=glandium
And remove the type argument from PrefValue's constructor. This is needed
for the next patch.

MozReview-Commit-ID: Ls8hEU2uRQQ
2017-11-23 16:35:38 +11:00
Nicholas Nethercote
4acd5d20d9 Bug 1394578 - Move Pref::AssignPrefValueToDomPrefVAlue() to PrefValue::ToDomPrefValue(). r=glandium
It's a bit nicer that way.

MozReview-Commit-ID: HpVaxje7XIP
2017-11-23 16:35:35 +11:00
Nicholas Nethercote
3aab259c79 Bug 1394578 - Move more operations into PrefValue. r=glandium
The nice thing about this is that the memory management of the strings
(moz_xstrdup() and free()) is now entirely within PrefValue.

MozReview-Commit-ID: KJjnURpmgfE
2017-11-23 16:34:42 +11:00
Nicholas Nethercote
80339fb41b Bug 1394578 - Remove the kPref* enum. r=glandium
It's something of an obfuscation, and it forces together various bool values
that don't necessarily have to be together (and won't be together after future
refactorings).

The patch also reorders some function arguments for consistency: PrefType, then
PrefValueKind, then PrefValue.

MozReview-Commit-ID: KNY0Pxo0Nxf
2017-11-23 13:07:04 +11:00
Nicholas Nethercote
7be25bd7d1 Bug 1394578 - PrefHashEntry as Pref. r=glandium
Although it is a subclass of PLDHashEntryHdr, it's the main representation of a
pref, so the name should reflect that.

MozReview-Commit-ID: 5qJNQtjbFmH
2017-11-23 10:52:08 +11:00
Nicholas Nethercote
cb19555028 Bug 1394578 - Use gHashTable->EntryCount() to size aDomPrefs, not aCapacity(). r=glandium
As is done in pref_SavePrefs().

The confusion here is because a Vector can fill 100% of its capacity, but a
hash table cannot go past 75% of its capacity.

MozReview-Commit-ID: 5JMbmtrxMGN
2017-11-22 21:21:19 +11:00
Nicholas Nethercote
862ce6e7d5 Bug 1394578 - Rename dom::PrefSetting as dom::Pref. r=glandium
It represents a pref, so `Pref` is a better name. Within Preferences.cpp the
patch uses domPref/aDomPref to distinguish it from PrefHashEntry values.

MozReview-Commit-ID: HXTl0GX4BtO
2017-11-22 21:21:19 +11:00
Nicholas Nethercote
e8270141c2 Bug 1394578 - Add PrefHashEntry::ValueMatches(). r=glandium
This factors out some common code from SetValue(), making it easier to read.
The patch also improves the comments in SetValue().

MozReview-Commit-ID: 60JnBlIS1q6
2017-11-22 09:53:23 +11:00
Florian Quèze
eed1a20000 Backed out changeset 1603e2488c32 as this patch for bug 1226616 didn't work 2017-11-25 00:01:07 +01:00
Nicholas Nethercote
e3a9315007 Bug 1419654 - Prevent possible pref default/user value type mismatches. r=glandium
Currently, you can create a pref that only has a user value, and then later
give it a default value with a different type. The entire pref is then recorded
as having this second type. This causes problems later when interpreting the
user value.

This patch makes SetValue() fail if it tries to set a default value whose type
differs from an existing user value. It also expands an existing test to cover
this case and some similar ones.

MozReview-Commit-ID: 89tvISQ7RNT
2017-11-21 16:00:23 +11:00
Gabriele Svelto
dd6aa8e458 Bug 1402519 - Remove MOZ_CRASHREPORTER directives from modules/libpref; r=njn
MozReview-Commit-ID: 3Jr4Cfe9Bn1
2017-09-29 16:27:44 +02:00
Florian Quèze
3d60dc7547 Bug 1226616 - The presence of the general.config.filename preference should be reported on telemetry. r=njn, data-review=francois 2017-11-23 00:59:38 +01:00
Nicholas Nethercote
e925faae0e Bug 1419648 - Remove and inline PREF_RegisterCallback(). r=glandium
This requires adding an aPriority argument (defaulting to false) to
Preferences::RegisterCallback(). And RegisterVarCacheCallback() is no longer
necessary.

MozReview-Commit-ID: BMDk3HuaQVV
2017-11-21 12:57:53 +11:00
Nicholas Nethercote
83de8069d6 Bug 1419648 - Inline and remove PREF_UnregisterCallback(). r=glandium
MozReview-Commit-ID: GLUdbRjxDLR
2017-11-21 12:57:53 +11:00
Nicholas Nethercote
92141a53b0 Bug 1419648 - Remove and inline PREF_{LockPref,UnlockPref,PrefIsLocked}(). r=glandium
MozReview-Commit-ID: 7HatftTQwHr
2017-11-16 09:05:43 +11:00
Nicholas Nethercote
e0d2ef15e4 Bug 1419648 - Inline and remove PREF_HasUserPref(). r=glandium
MozReview-Commit-ID: Dz2IgjrfEjQ
2017-11-15 17:01:15 +11:00
Nicholas Nethercote
3ddd9dc465 Bug 1419648 - Inline and remove PREF_ClearUserPref(). r=glandium
MozReview-Commit-ID: EBb9hxtIwPz
2017-11-15 17:01:15 +11:00
Nicholas Nethercote
71882e10e6 Bug 1419648 - Inline and remove PREF_ClearAllUserPrefs(). r=glandium
MozReview-Commit-ID: Eud92V7qFS4
2017-11-15 17:01:14 +11:00
shindli
f90a73f3c0 Backed out 16 changesets (bug 1402519) for conflicts during merge r=backout on a CLOSED TREE
Backed out changeset 07fcf163241a (bug 1402519)
Backed out changeset c6d2ad45d8e2 (bug 1402519)
Backed out changeset 8a3caca61294 (bug 1402519)
Backed out changeset 01425eae2c48 (bug 1402519)
Backed out changeset cf298d3815de (bug 1402519)
Backed out changeset e1964f4389cd (bug 1402519)
Backed out changeset f405337f3569 (bug 1402519)
Backed out changeset a76356fd3359 (bug 1402519)
Backed out changeset d3bb350d1c34 (bug 1402519)
Backed out changeset 9d3bfd9f932c (bug 1402519)
Backed out changeset e3dd6e5b073f (bug 1402519)
Backed out changeset e801b0c00134 (bug 1402519)
Backed out changeset 8a4139fa5dca (bug 1402519)
Backed out changeset 8d01c14ac1ca (bug 1402519)
Backed out changeset 24e0dcd01898 (bug 1402519)
Backed out changeset f8fdf450613f (bug 1402519)
2017-11-23 00:11:44 +02:00
Gabriele Svelto
234a0c893e Bug 1402519 - Remove MOZ_CRASHREPORTER directives from modules/libpref; r=njn
MozReview-Commit-ID: 3Jr4Cfe9Bn1
2017-09-29 16:27:44 +02:00
Nicholas Nethercote
e9a7b910bc Bug 1418847 - Move variable declarations within Parser::Parse(). r=glandium
MozReview-Commit-ID: FdgXKBKH4nr
2017-11-21 12:57:36 +11:00
Nicholas Nethercote
e4a9c14517 Bug 1418847 - Hardcode the value reader and error reporter in Parser. r=glandium
In practice we always use the same functions for these purposes.

MozReview-Commit-ID: 4Be9pRhUeff
2017-11-19 20:28:53 +11:00
Nicholas Nethercote
8c48a6806d Bug 1418847 - Move some constants into class Parser. r=glandium
MozReview-Commit-ID: 1eZiyrUWjFp
2017-11-19 20:10:39 +11:00
Nicholas Nethercote
880dcb7f03 Bug 1418847 - Refactor the Parser's state enum. r=glandium
MozReview-Commit-ID: 7csnknAAEtH
2017-11-19 20:10:10 +11:00
Nicholas Nethercote
00f8b6ce4d Bug 1418847 - Morph struct PrefParserState into class Parser. r=glandium
This patch makes it a proper class, and moves existing functions into it.

MozReview-Commit-ID: 5pbT3ljq44R
2017-11-19 20:10:07 +11:00
Nicholas Nethercote
c0595f34d2 Bug 1418846 - Give CallbackNode a constructor and destructor. r=glandium
And use new/delete for them. And make mDomain a unique pointer so it doesn't
need explicit deallocation.

MozReview-Commit-ID: E1jLccXaSwT
2017-11-19 14:55:40 +11:00
Nicholas Nethercote
907a5c717e Bug 1418846 - Remove PrefType::Invalid. r=glandium
Maybe<PrefType> is a better way of representing "no type".

MozReview-Commit-ID: Fnha5RxbNg4
2017-11-19 14:42:20 +11:00
Nicholas Nethercote
22fb1faf43 Bug 1418846 - Privatize GetRootLength(). r=glandium
MozReview-Commit-ID: JzZ2ot83YwJ
2017-11-18 20:36:56 +11:00
Nicholas Nethercote
44c6a3ea4d Bug 1418846 - Rename ENSURE_MAIN_PROCESS as ENSURE_PARENT_PROCESS. r=glandium
So it matches XRE_IsParentProcess().

MozReview-Commit-ID: E5ARalJhttX
2017-11-18 20:32:20 +11:00
Nicholas Nethercote
c88762f3d1 Bug 1418846 - Give PrefHashEntry a destructor. r=glandium
MozReview-Commit-ID: 84IJ25ItUuY
2017-11-18 20:29:03 +11:00
Nicholas Nethercote
4461a0f0c2 Bug 1418846 - Remove PrefHashEntry::mIsSticky's getter and setter. r=glandium
This field isn't accessed outside PrefHashEntry.

MozReview-Commit-ID: IvwQe5UtjjJ
2017-11-18 13:15:46 +11:00
Nicholas Nethercote
7d1a422bc2 Bug 1418846 - Remove PrefHasEntry()::SetHas{Default,User}Value(). r=glandium
We can move the setting into ReplaceValue() and ClearValue(), and then those
methods aren't needed any more.

The patch also removes some getter calls within PrefHashEntry by directly using
field names.

MozReview-Commit-ID: 42EAx1Kh9Et
2017-11-18 13:13:27 +11:00
Nicholas Nethercote
5c1ccf4f1a Bug 1418846 - Fix string value leaks in libpref. r=glandium
There's an "XXX" comment suggesting a possible leak when string user values are
cleared. Turns out a lot of the time there won't be a leak, because the string
pointer isn't overwritten and ClearEntry() frees the string when the pref is
destroyed. However, if the user value is subsequently overwritten with a
different string, there will be a leak. Also, even in the non-leak case, we
currently hold onto the string for longer than necessary.

This patch introduces ClearUserValue() -- which frees the string when
appropriate -- and uses it in all the places where values are cleared.

MozReview-Commit-ID: ARuWUNzPTfy
2017-11-18 13:05:02 +11:00
Nicholas Nethercote
d076dac573 Bug 1418846 - Overhaul pref_DoCallback. r=glandium
Specifically:

- rename it as NotifyCallbacks();

- remove the return value, because it is always NS_OK;

- some minor naming and declaration clean-ups.

MozReview-Commit-ID: GcH81owPLsp
2017-11-18 12:34:25 +11:00