Closed
Bug 929112
Opened 11 years ago
Closed 9 years ago
APIs exposed to Workers don't perform PrefEnabled() check
Categories
(Core :: DOM: Workers, defect)
Tracking
()
RESOLVED
WONTFIX
People
(Reporter: nsm, Unassigned)
References
(Blocks 1 open bug)
Details
Attachments
(1 file)
(deleted),
patch
|
bzbarsky
:
review-
|
Details | Diff | Splinter Review |
The code calls GetConstructorObject() without a pref check. As we port APIs that do have prefs deciding whether they are enabled/disabled, the check should be performed.
Kyle, anyway to automate this in Codegen or in dom/workers/?
Reporter | ||
Updated•11 years ago
|
Comment 1•11 years ago
|
||
This is also a little scary because it sounds like right now if you have a class on workers that specifies PrefEnabled, it will work, but just not check the pref. I guess we're protected to some extent by it being hard to implement things on workers. ;)
Blocks: ParisBindings
Reporter | ||
Comment 2•11 years ago
|
||
The easiest way out is, in WorkerScope.cpp, when various APIs are initialized, use the:
NotificationBinding::ConstructorEnabled(aCx, global) && !NotificationBinding::GetConstructorObject(aCx, global)
form. Also the corresponding API must ensure that it's PrefEnabled or custom function does thread safe operations. Using the Preferences service from the worker thread is not safe, but there is a SyncRunnable class that will allow blocking the worker thread while a custom runnable reads out the value on the main thread.
Comment 3•11 years ago
|
||
So this is specifically about interface object checks, not the checks for individual members, right? I would expect the latter _are_ performed on workers, but might not be safe to perform, right?
Comment 4•11 years ago
|
||
Comment 5•11 years ago
|
||
Hey guys,
I'm new in DOM/Workers.
I added the
NotificationBinding::ConstructorEnabled(aCx, global) &&
!NotificationBinding::GetConstructorObject(aCx, global)
but I didn't know how to use the SyncRunnable.
Do you mean by syncRunnable WorkerSyncRunnable?
I saw the code of classes that uses WorkerSyncRunnable like dom/workers/URL.cpp but it was really complicated (at least 4 classes were created to be able to use WorkerSyncRunnable)
I also saw the syncRunnable in xpcom/threads/SyncRunnable.h but no one seems to use it in dom/workers so I get confused.
Updated•11 years ago
|
Attachment #826287 -
Flags: review?(bzbarsky)
Comment 6•11 years ago
|
||
Comment on attachment 826287 [details] [diff] [review]
performCheck.diff
This is not OK, for the reasons described in comment 2. Please feel free to catch me on IRC on Monday if you'd like to talk about this in detail...
Attachment #826287 -
Flags: review?(bzbarsky) → review-
Reporter | ||
Comment 7•11 years ago
|
||
(In reply to Boris Zbarsky [:bz] from comment #3)
> So this is specifically about interface object checks, not the checks for
> individual members, right? I would expect the latter _are_ performed on
> workers, but might not be safe to perform, right?
I don't think these are done either, since of the top of my head I can't think of WebIDL implemented APIs currently exposed on workers that use per member PrefEnabled.
Reporter | ||
Comment 8•11 years ago
|
||
The notification patch in bug 916893 adds a thread safe version using SyncRunnable, but I'm not a fan of that re-engineering for every API. We should consider patching Preferences to allow a mutex protected opt-in for certain preferences, which would then read out the value in a thread safe manner. Let's talk on IRC or in the DOM meeting.
Comment 9•11 years ago
|
||
> I don't think these are done either,
Well, just because there is no IDL using them, right? If there were, they would be.
Reporter | ||
Comment 10•11 years ago
|
||
(In reply to Boris Zbarsky [:bz] from comment #9)
> > I don't think these are done either,
>
> Well, just because there is no IDL using them, right? If there were, they
> would be.
I'm assuming, if there was, it would be using the prefs in a non threadsafe manner too?
Comment 11•11 years ago
|
||
If it used prefs, yes.
Comment 13•9 years ago
|
||
I think this got effectively wontfixed or fixed or something in bug 1017988: if you use [Pref] on something exposed in a worker, codegen (well, webidl parser validation, but the effect is the same) will fail.
Status: NEW → RESOLVED
Closed: 9 years ago
Flags: needinfo?(bzbarsky)
Resolution: --- → WONTFIX
You need to log in
before you can comment on or make changes to this bug.
Description
•