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
<!--Copyright (c) 2019 The Khronos Group Inc.Use of this source code is governed by an MIT-style license that can befound in the LICENSE.txt file.--><!DOCTYPE html><html><head><metacharset="utf-8"><title>#version directive should be on the very first line of a OpenGL ES Shading Language 3.00 shader</title><linkrel="stylesheet"href="../../resources/js-test-style.css"/><linkrel="stylesheet"href="../../resources/glsl-feature-tests.css"/><scriptsrc="../../js/js-test-pre.js"></script><scriptsrc="../../js/webgl-test-utils.js"></script><scriptsrc="../../js/glsl-conformance-test.js"></script></head><body><divid="description"></div><divid="console"></div><!-- Version directive should be on the very first line in ESSL 3, see ESSL 3 section 3.3 --><scriptid="VertexShaderCommentBeforeVersion"type="x-shader/x-vertex">// This shader is wrong, this is the first line that should have version#version300esprecisionmediumpfloat;invec4aPosition;voidmain(){gl_Position=aPosition;}</script><scriptid="VertexShaderNewlineBeforeVersion"type="x-shader/x-vertex">#version300esprecisionmediumpfloat;invec4aPosition;voidmain(){gl_Position=aPosition;}</script><scriptid="CorrectVertexShader"type="x-shader/x-vertex">#version300esprecisionmediumpfloat;invec4aPosition;voidmain(){gl_Position=aPosition;}</script><scriptid="FragmentShaderCommentBeforeVersion"type="x-shader/x-fragment">// This shader is wrong, this is the first line that should have version#version300esprecisionmediumpfloat;outvec4my_FragColor;voidmain(){my_FragColor=vec4(0.0,1.0,0.0,1.0);}</script><scriptid="FragmentShaderNewlineBeforeVersion"type="x-shader/x-fragment">#version300esprecisionmediumpfloat;outvec4my_FragColor;voidmain(){my_FragColor=vec4(0.0,1.0,0.0,1.0);}</script><scriptid="CorrectFragmentShader"type="x-shader/x-fragment">#version300esprecisionmediumpfloat;outvec4my_FragColor;voidmain(){my_FragColor=vec4(0.0,1.0,0.0,1.0);}</script><scripttype="application/javascript">"use strict";description();GLSLConformanceTester.runTests([{vShaderId:"VertexShaderNewlineBeforeVersion",vShaderSuccess:false,fShaderId:"CorrectFragmentShader",fShaderSuccess:true,linkSuccess:false,passMsg:"Vertex shader with a newline before the version directive should fail."},{vShaderId:"VertexShaderCommentBeforeVersion",vShaderSuccess:false,fShaderId:"CorrectFragmentShader",fShaderSuccess:true,linkSuccess:false,passMsg:"Vertex shader with a comment before the version directive should fail."},{vShaderId:"CorrectVertexShader",vShaderSuccess:true,fShaderId:"FragmentShaderCommentBeforeVersion",fShaderSuccess:false,linkSuccess:false,passMsg:"Fragment shader with a comment before the version directive should fail."},{vShaderId:"CorrectVertexShader",vShaderSuccess:true,fShaderId:"FragmentShaderNewlineBeforeVersion",fShaderSuccess:false,linkSuccess:false,passMsg:"Fragment shader with a newline before the version directive should fail."}],2);varsuccessfullyParsed=true;</script></body></html>