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 buffer size change test for bindBufferBase/bindBufferRange</title><linkrel="stylesheet"href="../../resources/js-test-style.css"/><scriptsrc="../../js/js-test-pre.js"></script><scriptsrc="../../js/webgl-test-utils.js"></script></head><body><divid="description"></div><divid="console"></div><script>"use strict";description("WebGL buffer size change for bindings through bindBufferBase/bindBufferRange");// This test verifies the ES3 behavior, that the bound buffer range (offset, size) is not// limited by the actual buffer size, and the driver is responsible that no out-of-range// access may happen.varwtu=WebGLTestUtils;vargl=wtu.create3DContext(undefined,undefined,2);debug("");debug("bindBufferBase with TRANSFORM_FEEDBACK_BUFFER target");varbuffer1=gl.createBuffer();gl.bindBufferBase(gl.TRANSFORM_FEEDBACK_BUFFER,0,buffer1);wtu.glErrorShouldBe(gl,gl.NO_ERROR,"Calling bindBufferBase on a buffer where no storage is allocated should succeed.");shouldBe("gl.getParameter(gl.TRANSFORM_FEEDBACK_BUFFER_BINDING)","buffer1");shouldBe("gl.getIndexedParameter(gl.TRANSFORM_FEEDBACK_BUFFER_BINDING, 0)","buffer1");shouldBe("gl.getIndexedParameter(gl.TRANSFORM_FEEDBACK_BUFFER_SIZE, 0)","0");shouldBe("gl.getIndexedParameter(gl.TRANSFORM_FEEDBACK_BUFFER_START, 0)","0");gl.bufferData(gl.TRANSFORM_FEEDBACK_BUFFER,4,gl.STATIC_DRAW);shouldBe("gl.getIndexedParameter(gl.TRANSFORM_FEEDBACK_BUFFER_BINDING, 0)","buffer1");shouldBe("gl.getIndexedParameter(gl.TRANSFORM_FEEDBACK_BUFFER_SIZE, 0)","0");shouldBe("gl.getIndexedParameter(gl.TRANSFORM_FEEDBACK_BUFFER_START, 0)","0");wtu.glErrorShouldBe(gl,gl.NO_ERROR);debug("");debug("bindBufferBase with UNIFORM_BUFFER target");varbuffer2=gl.createBuffer();gl.bindBufferBase(gl.UNIFORM_BUFFER,1,buffer2);wtu.glErrorShouldBe(gl,gl.NO_ERROR,"Calling bindBufferBase on a buffer where no storage is allocated should succeed.");shouldBe("gl.getParameter(gl.UNIFORM_BUFFER_BINDING)","buffer2");shouldBe("gl.getIndexedParameter(gl.UNIFORM_BUFFER_BINDING, 1)","buffer2");shouldBe("gl.getIndexedParameter(gl.UNIFORM_BUFFER_SIZE, 1)","0");shouldBe("gl.getIndexedParameter(gl.UNIFORM_BUFFER_START, 1)","0");gl.bufferData(gl.UNIFORM_BUFFER,8,gl.STATIC_DRAW);shouldBe("gl.getIndexedParameter(gl.UNIFORM_BUFFER_BINDING, 1)","buffer2");shouldBe("gl.getIndexedParameter(gl.UNIFORM_BUFFER_SIZE, 1)","0");shouldBe("gl.getIndexedParameter(gl.UNIFORM_BUFFER_START, 1)","0");wtu.glErrorShouldBe(gl,gl.NO_ERROR);debug("");debug("bindBufferRange with TRANSFORM_FEEDBACK_BUFFER target");varbuffer3=gl.createBuffer();gl.bindBufferRange(gl.TRANSFORM_FEEDBACK_BUFFER,0,buffer3,4,8);wtu.glErrorShouldBe(gl,gl.NO_ERROR,"Calling bindBufferRange on a buffer where no storage is allocated should succeed.");shouldBe("gl.getParameter(gl.TRANSFORM_FEEDBACK_BUFFER_BINDING)","buffer3");shouldBe("gl.getIndexedParameter(gl.TRANSFORM_FEEDBACK_BUFFER_BINDING, 0)","buffer3");shouldBe("gl.getIndexedParameter(gl.TRANSFORM_FEEDBACK_BUFFER_SIZE, 0)","8");shouldBe("gl.getIndexedParameter(gl.TRANSFORM_FEEDBACK_BUFFER_START, 0)","4");gl.bufferData(gl.TRANSFORM_FEEDBACK_BUFFER,4,gl.STATIC_DRAW);shouldBe("gl.getIndexedParameter(gl.TRANSFORM_FEEDBACK_BUFFER_BINDING, 0)","buffer3");shouldBe("gl.getIndexedParameter(gl.TRANSFORM_FEEDBACK_BUFFER_SIZE, 0)","8");shouldBe("gl.getIndexedParameter(gl.TRANSFORM_FEEDBACK_BUFFER_START, 0)","4");gl.bufferData(gl.TRANSFORM_FEEDBACK_BUFFER,12,gl.STATIC_DRAW);shouldBe("gl.getIndexedParameter(gl.TRANSFORM_FEEDBACK_BUFFER_BINDING, 0)","buffer3");shouldBe("gl.getIndexedParameter(gl.TRANSFORM_FEEDBACK_BUFFER_SIZE, 0)","8");shouldBe("gl.getIndexedParameter(gl.TRANSFORM_FEEDBACK_BUFFER_START, 0)","4");wtu.glErrorShouldBe(gl,gl.NO_ERROR);debug("");debug("bindBufferRange with UNIFORM_BUFFER target");varbuffer4=gl.createBuffer();varoffset=gl.getParameter(gl.UNIFORM_BUFFER_OFFSET_ALIGNMENT);gl.bindBufferRange(gl.UNIFORM_BUFFER,1,buffer4,offset,12);wtu.glErrorShouldBe(gl,gl.NO_ERROR,"Calling bindBufferRange on a buffer where no storage is allocated should succeed.");shouldBe("gl.getParameter(gl.UNIFORM_BUFFER_BINDING)","buffer4");shouldBe("gl.getIndexedParameter(gl.UNIFORM_BUFFER_BINDING, 1)","buffer4");shouldBe("gl.getIndexedParameter(gl.UNIFORM_BUFFER_SIZE, 1)","12");shouldBe("gl.getIndexedParameter(gl.UNIFORM_BUFFER_START, 1)","offset");gl.bufferData(gl.UNIFORM_BUFFER,offset+8,gl.STATIC_DRAW);shouldBe("gl.getIndexedParameter(gl.UNIFORM_BUFFER_BINDING, 1)","buffer4");shouldBe("gl.getIndexedParameter(gl.UNIFORM_BUFFER_SIZE, 1)","12");shouldBe("gl.getIndexedParameter(gl.UNIFORM_BUFFER_START, 1)","offset");gl.bufferData(gl.UNIFORM_BUFFER,offset+12,gl.STATIC_DRAW);shouldBe("gl.getIndexedParameter(gl.UNIFORM_BUFFER_BINDING, 1)","buffer4");shouldBe("gl.getIndexedParameter(gl.UNIFORM_BUFFER_SIZE, 1)","12");shouldBe("gl.getIndexedParameter(gl.UNIFORM_BUFFER_START, 1)","offset");wtu.glErrorShouldBe(gl,gl.NO_ERROR);debug("");varsuccessfullyParsed=true;</script><scriptsrc="../../js/js-test-post.js"></script></body></html>