In ThreadActor._getAllEventListeners, we construct a list of handler functions
for each target in the event target chain of a given event target. If a handler
is an event handler object, we obtain the handler function from its handleEvent
property. Otherwise, the handler function is assumed to be the handler itself.
To detect whether a handler is an event handler object, we would check its class
name property. This approach is fragile for several reasons: if the handler is
a proxy, accessing its class name may cause the debuggee to run. Moreover,
since accessing a proxy's class name requires us to enter the compartment of the
proxy's handler, if the latter is a security wrapper, accessing its class name
will cause security warnings in debug mode.
Since a handler is either an event handler object or a function, it should be
safe to assume that a handler is an event handler object if and only if it is
not callable. Checking whether a proxy is callable cannot cause the debuggee to
run. Moreover, it does not require us to enter the compartment of the proxy's
handler, thus avoiding the security warnings we mentioned earlier.
This moves the eyedropper button from the toolbar into the inspector,
therefore the old eyedropper command isn't needed anymore,
or at least not as it was.
The button in the inspector simply uses the pickColorFromPage inspector
actor method.
And to preserve a eyedropper gcli command, a new simpler one was added.
MozReview-Commit-ID: B1yr1EqLFBD
--HG--
extra : rebase_source : 47c2effe193f4d1a64a8d16ea3609ff5ae1f793b
The inspector actor now has a new method that can be used to pick a
color from the page. This method just instantiates the eye-dropper
highlighter and shows it on the page.
The method doesn't return the color because this requires user interaction.
Instead, it returns immediately and an event is sent later, when the user
has selected a color or escaped.
MozReview-Commit-ID: cjadLyNXQd
--HG--
extra : rebase_source : 392a3cbfce7b81518cd7e4c90a44bae17d96e8de
This is mostly porting code from the XUL eye-dropper over to a new
highlighter file.
While I have tested this locally, this highlighter isn't yet used
in devtools.
This will come in later patches.
MozReview-Commit-ID: IF0puLu5Yc7
--HG--
rename : devtools/client/shared/css-color-db.js => devtools/shared/css-color-db.js
rename : devtools/client/shared/css-color.js => devtools/shared/css-color.js
extra : rebase_source : 72431a9148d1c688987a5693a619769837c774c7
::before and ::after pseudo-elements are visible in the markup-view today
but if, for some reason, they aren't generated, we still want to know that
the CSS rule exists.
This may happen if you use display:none on the pseudo-element CSS rule itself.
When that happens, the pseudo-element won't be generated and therefore there
will be no possibility to see the rule in the rule-view (you'd have to go to
the style-editor for that).
This change keeps the pseudo-elements in the markup-view, but also adds the
corresponding CSS rules in the rule-view.
MozReview-Commit-ID: tx5IpmtE7b
--HG--
extra : rebase_source : 19979672561e55fc5713900b83dd6d40ac33d2a3
Also contains folded version of the following patches that have to land at the same time with enabling the new implementation (or be backed out at the same time, if it comes to that):
Add Promise checks to test_xrayToJS.xul. r=bholley
Change Promise debugger hook tests to use Promise ctor instead of makeFakePromise. r=shu
Change DOM interface tests to assume Promise is an ES builtin, not a DOM one. r=bz
Remove some PromiseDebugging references. r=bz
Adapt promise rejections test to new xray-unwrapping error. r=bz
Fix expectations in browser_timelineMarkers tests. r=tromey
Also contains folded version of the following patches that have to land at the same time with enabling the new implementation (or be backed out at the same time, if it comes to that):
Add Promise checks to test_xrayToJS.xul. r=bholley
Change Promise debugger hook tests to use Promise ctor instead of makeFakePromise. r=shu
Change DOM interface tests to assume Promise is an ES builtin, not a DOM one. r=bz
Remove some PromiseDebugging references. r=bz
Adapt promise rejections test to new xray-unwrapping error. r=bz
Fix expectations in browser_timelineMarkers tests. r=tromey