Bug 1976779 - rsclientcerts: make each backend responsible for rate-limiting calls to find_objects r=jschanck
Before this patch, `rsclientcerts::manager` would rate-limit calls to
`find_objects` to once every 3 seconds because the underlying operation can be
time-consuming (in particular, on macOS and Windows, if there are many
certificates/keys available). On Android, keys aren't available until the user
selects one, which means that if a call to `find_objects` happened before the
selection prompt was shown (which is what happens) and the user chose one in
less than 3 seconds, the backend wouldn't search again, thus making it seem like
no keys were available, which would cause Firefox to not send a client
certificate. This patch makes each backend implementation responsible for this
rate-limiting, because only they know if it's appropriate to do so (in particular,
on Android, `find_objects` doesn't have the same performance concern as
on macOS and Windows because rather than searching for certificates and
keys, it asks `ClientAuthCertificateManager` for the cached list of certificates
and keys that have already been approved for use by the user).
Differential Revision: https://phabricator.services.mozilla.com/D257065
<!DOCTYPE html><html><head><metacharset="utf-8"/><title>Basic mathematical alphanumeric symbols with default font</title><metaname="assert"content="Verify whether the default font contains italic/bold/bold-italic characters from the Mathematical Alphanumeric Symbols block."><scriptsrc="/resources/testharness.js"></script><scriptsrc="/resources/testharnessreport.js"></script><style>span[data-name]{font-size:100px;background:lightblue;display:inline-block;}</style></head><body><divid="log"></div><p><spanid="frakturL"data-name="U+1D529 MATHEMATICAL FRAKTUR SMALL L">𝔩</span></p><p><spanid="emSpace"data-name="U+2003 EM SPACE"> </span></p><p><spandata-test="Bold"data-name="U+1D416 MATHEMATICAL BOLD CAPITAL W">𝐖</span></p><p><spandata-test="Italic"data-name="U+1D44A MATHEMATICAL ITALIC CAPITAL W">𝑊</span></p><p><spandata-test="Bold-italic"data-name="U+1D47E MATHEMATICAL BOLD ITALIC CAPITAL">𝑾</span></p><script>constfrakturLWidth=document.getElementById("frakturL").getBoundingClientRect().width;constemSpaceWidth=document.getElementById("emSpace").getBoundingClientRect().width;Array.from(document.querySelectorAll('span[data-test]')).forEach(span=>{test(function(){letspanWidth=span.getBoundingClientRect().width;// This test expects the default font to provide a fraktur l than is much thiner than a bold/italic/bold-italic W.// If the font lacks bold/italic/bold-italic W then a fortiori it is likely that its lacks fraktur l, so browsers// will display "Tofu characters" for all of them (e.g. gray boxes or boxes containing the Unicode code points)// with very similar widths, so the test is likely to fail.assert_greater_than(spanWidth,frakturLWidth+emSpaceWidth/4,`Width of '${span.dataset.name}' is much larger than '${frakturL.dataset.name}'`);},`${span.dataset.test} mathematical alphanumeric symbol with the default font`);});</script></body></html>