Index: chrome/test/data/extensions/api_test/certificate_provider/basic.js |
diff --git a/chrome/test/data/extensions/api_test/certificate_provider/basic.js b/chrome/test/data/extensions/api_test/certificate_provider/basic.js |
new file mode 100644 |
index 0000000000000000000000000000000000000000..454a0ee0e497d18a2ac5b4b0f89424513fda362b |
--- /dev/null |
+++ b/chrome/test/data/extensions/api_test/certificate_provider/basic.js |
@@ -0,0 +1,110 @@ |
+// Copyright 2015 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+'use strict'; |
+ |
+var assertEq = chrome.test.assertEq; |
+var assertTrue = chrome.test.assertTrue; |
+var callbackPass = chrome.test.callbackPass; |
+var succeed = chrome.test.succeed; |
+ |
+// X.509 certificate in DER encoding issued by 'root.pem' which is set to be |
+// trusted by the test setup. |
+// Read from 'l1_leaf.der', generated by create_test_certs.sh . |
+var l1_leaf_cert = null; |
+ |
+// Reads the binary file at |path| and passes it as a Uint8Array to |callback|. |
+function readFile(path, callback) { |
+ var oReq = new XMLHttpRequest(); |
+ oReq.responseType = "arraybuffer"; |
+ oReq.open("GET", path, true /* asynchronous */); |
+ oReq.onload = function() { |
+ var arrayBuffer = oReq.response; |
+ if (arrayBuffer) { |
+ callback(new Uint8Array(arrayBuffer)); |
+ } else { |
+ callback(null); |
+ } |
+ }; |
+ oReq.send(null); |
+} |
+ |
+function compareBuffers(a, b) { |
+ if (a.length != b.length) |
+ return false; |
+ for (var i = 0; i < a.length; i++) { |
+ if (a[i] != b[i]) |
+ return false; |
+ } |
+ return true; |
+} |
+ |
+var signDigestRequest; |
+var signCallback; |
+ |
+function register() { |
+ assertTrue(!!chrome.certificateProvider); |
+ assertTrue(!!chrome.certificateProvider.onCertificatesRequested); |
+ assertTrue(!!chrome.certificateProvider.onSignDigestRequested); |
+ |
+ var validCertInfo = { |
+ certificate: l1_leaf_cert.buffer, |
+ supportedHashes: ['SHA1'] |
+ }; |
+ var invalidCert = new Uint8Array([1, 2, 3, 4, 5]); |
+ var invalidCertInfo = { |
+ certificate: invalidCert.buffer, |
+ supportedHashes: ['SHA256'] |
+ }; |
+ |
+ function checkResult(rejectedCerts) { |
+ assertEq(1, rejectedCerts.length); |
+ assertTrue(compareBuffers(invalidCert, new Uint8Array(rejectedCerts[0]))); |
+ } |
+ |
+ function reportCertificates(reportCallback) { |
+ reportCallback([validCertInfo, invalidCertInfo], callbackPass(checkResult)); |
+ } |
+ |
+ chrome.certificateProvider.onCertificatesRequested.addListener( |
+ callbackPass(reportCertificates)); |
+ |
+ chrome.certificateProvider.onSignDigestRequested.addListener(function( |
+ request, callback) { |
+ assertTrue( |
+ compareBuffers(l1_leaf_cert, new Uint8Array(request.certificate))); |
+ // The sign request must refer to the only hash that was declared to be |
+ // supported. |
+ assertEq(1, validCertInfo.supportedHashes.length); |
+ assertEq(validCertInfo.supportedHashes[0], request.hash); |
+ signCallback = callback; |
+ signDigestRequest = request; |
+ succeed(); |
+ }); |
+ |
+ succeed(); |
+} |
+ |
+function replyWithSignature(signature) { |
+ signCallback(signature.buffer); |
+} |
+ |
+function replyWithSignatureSecondTime() { |
+ var signature = new Uint8Array([1,2,3]); |
+ try { |
+ signCallback(signature.buffer); |
+ } catch (e) { |
+ return true; |
+ } |
+ return false; |
+} |
+ |
+function runTest() { |
+ chrome.test.runTests([register]); |
+} |
+ |
+readFile('l1_leaf.der', function(cert) { |
+ l1_leaf_cert = cert; |
+ runTest(); |
+}); |