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><title>Box Shadow Border Radius (Inset)</title><linkrel="author"title="Elika J. Etemad"href="http://fantasai.inkedblade.net/contact"><linkrel="help"href="https://www.w3.org/TR/css-backgrounds-3/#shadow-shape"><linkrel="match"href="box-shadow-radius-001-ref.html"><style>body>div{/* Isolate tests from each other */position:relative;width:100px;height:100px;float:left;}div>div{position:absolute;box-sizing:border-box;/* opacity: 0.7; /* uncomment this line for debugging */}.floor>.test{color:silver;}.trap>.test{color:red;}.test{width:60px;height:60px;top:20px;left:20px;}.floor>.ref{border:8pxred;border-style:solidnonenonesolid;top:21px;left:21px;width:59px;height:59px;}.trap>.ref{border:31pxsilver;border-style:solidnonenonesolid;width:81px;height:81px;}/* Keep tests consistent by offset - spread = 10 Trap radius = 32px + shadow radius (round up) Floor radius = 8px + shadow radius (round down) */.once>.test{border-top-left-radius:10px;box-shadow:20px20px0-10pxinset;/* shadow radius = 20px */}.once.floor>.ref{border-top-left-radius:28px;}.once.trap>.ref{border-top-left-radius:52px;}.twice>.test{border-top-left-radius:10px;box-shadow:15px15px0-5pxinset;/* shadow radius = 15 */}.twice.floor>.ref{border-top-left-radius:23px;}.twice.trap>.ref{border-top-left-radius:47px;}.half>.test{border-top-left-radius:8px;box-shadow:26px26px0-16pxinset;/* shadow radius = 21px */}.half.floor>.ref{border-top-left-radius:29px;}.half.trap>.ref{border-top-left-radius:53px;}.fourth>.test{border-top-left-radius:5px;box-shadow:30px30px0-20pxinset;/* shadow radius = 14.45 */}.fourth.floor>.ref{border-top-left-radius:22px;}.fourth.trap>.ref{border-top-left-radius:47px;}.eighth>.test{border-top-left-radius:2px;box-shadow:26px26px0-16pxinset;/* shadow radius = 5.28 */}.eighth.floor>.ref{border-top-left-radius:12px;}.eighth.trap>.ref{border-top-left-radius:38px;}</style><p>Test passes if there is no red.<divclass="once floor"><divclass="ref"></div><divclass="test"></div></div><divclass="once trap"><divclass="test"></div><divclass="ref"></div></div><divclass="twice floor"><divclass="ref"></div><divclass="test"></div></div><divclass="twice trap"><divclass="test"></div><divclass="ref"></div></div><divclass="half floor"><divclass="ref"></div><divclass="test"></div></div><divclass="half trap"><divclass="test"></div><divclass="ref"></div></div><divclass="fourth floor"><divclass="ref"></div><divclass="test"></div></div><divclass="fourth trap"><divclass="test"></div><divclass="ref"></div></div><divclass="eighth floor"><divclass="ref"></div><divclass="test"></div></div><divclass="eighth trap"><divclass="test"></div><divclass="ref"></div></div>