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>WebGL uniform blocks containing arrays conformance tests</title><linkrel="stylesheet"href="../../resources/js-test-style.css"/><scriptsrc="../../js/js-test-pre.js"></script><scriptsrc="../../js/webgl-test-utils.js"></script><scriptid="vshader"type="x-shader/x-vertex">#version300esinvec4vPosition;voidmain(){gl_Position=vPosition;}</script><scriptid="fshaderArraysOfStructs"type="x-shader/x-fragment">#version300esprecisionhighpfloat;outvec4my_FragColor;structlight_t{vec4intensity;};constintmaxLights=2;layout(std140)uniformlightData{light_tlights[maxLights];};vec4processLight(vec4lighting,light_tlight){returnlighting+light.intensity;}voidmain(){vec4lighting=vec4(0,1,0,1);for(intn=0;n<maxLights;n++)lighting=processLight(lighting,lights[n]);my_FragColor=lighting;}</script><scriptid="fshaderArraysOfStructsContainingArrays"type="x-shader/x-fragment">#version300esprecisionhighpfloat;outvec4my_FragColor;structlight_t{vec4intensity[3];};constintmaxLights=2;layout(std140)uniformlightData{light_tlights[maxLights];};vec4processLight(vec4lighting,light_tlight){returnlighting+light.intensity[1];}voidmain(){vec4lighting=vec4(0,1,0,1);for(intn=0;n<maxLights;n++)lighting=processLight(lighting,lights[n]);my_FragColor=lighting;}</script></head><body><divid="description"></div><divid="console"></div><script>"use strict";description();// GLSL ES 3.00.6 section 4.3.7:// "Otherwise, built-in types, previously declared structures, and arrays of these are allowed as the type of a declarator in the same manner they are allowed outside a block."varwtu=WebGLTestUtils;vargl=wtu.create3DContext(undefined,undefined,2);functionrunTest(fragShader,bufferFloatCount,shaderBlockDescription){debug('');debug('Testing fragment shader with an uniform block containing '+shaderBlockDescription);varprogram=wtu.setupProgram(gl,['vshader',fragShader],['vPosition'],undefined,true);if(!program){testFailed("Loading program failed");return;}varblockIndex=gl.getUniformBlockIndex(program,"lightData");varuniformBuffer=gl.createBuffer();gl.bindBuffer(gl.UNIFORM_BUFFER,uniformBuffer);gl.bufferData(gl.UNIFORM_BUFFER,newFloat32Array(bufferFloatCount),gl.DYNAMIC_READ);gl.bindBufferBase(gl.UNIFORM_BUFFER,0,uniformBuffer);gl.uniformBlockBinding(program,blockIndex,0);wtu.glErrorShouldBe(gl,gl.NO_ERROR,"No errors from uniform buffer setup");wtu.clearAndDrawUnitQuad(gl);wtu.glErrorShouldBe(gl,gl.NO_ERROR,"No errors from draw");wtu.checkCanvas(gl,[0,255,0,255],'should be green',1);}if(!gl){testFailed("WebGL context creation failed");}else{wtu.setupUnitQuad(gl);runTest("fshaderArraysOfStructs",2*4,'arrays of structs');runTest("fshaderArraysOfStructsContainingArrays",2*3*4,'arrays of structs containing arrays');}debug("");varsuccessfullyParsed=true;</script><scriptsrc="../../js/js-test-post.js"></script></body></html>