Index: chrome/common/extensions/api/certificate_provider.idl |
diff --git a/chrome/common/extensions/api/certificate_provider.idl b/chrome/common/extensions/api/certificate_provider.idl |
index 4062d0445b3a48d68be9c5f97b3a383d372e9416..ff2c40784e8aaff44197e82272a5959778595fe6 100644 |
--- a/chrome/common/extensions/api/certificate_provider.idl |
+++ b/chrome/common/extensions/api/certificate_provider.idl |
@@ -13,6 +13,18 @@ namespace certificateProvider { |
SHA512 |
}; |
+ enum PinRequestType { |
+ PIN, |
+ PUK |
Devlin
2016/10/20 21:20:44
nit: add a trailing comma here and below
igorcov
2016/10/25 16:38:36
The compiler doesn't like it:
[3/37] ACTION //chro
|
+ }; |
+ |
+ enum PinRequestErrorType { |
+ INVALID_PIN, |
+ INVALID_PUK, |
+ MAX_ATTEMPTS_EXCEEDED, |
+ UNKNOWN_ERROR |
+ }; |
+ |
[noinline_doc] dictionary CertificateInfo { |
// Must be the DER encoding of a X.509 certificate. Currently, only |
// certificates of RSA keys are supported. |
@@ -25,6 +37,10 @@ namespace certificateProvider { |
}; |
[noinline_doc] dictionary SignRequest { |
+ // The unique ID to be used by the extension should it need to call a method |
+ // that requires it, e.g. requestPin. |
+ long signRequestId; |
+ |
// The digest that must be signed. |
ArrayBuffer digest; |
@@ -36,6 +52,45 @@ namespace certificateProvider { |
ArrayBuffer certificate; |
}; |
+ dictionary RequestPinDetails { |
+ // The ID given by Chrome in SignRequest. |
+ long signRequestId; |
+ |
+ // The type of code requested. Default is PIN. |
+ PinRequestType? requestType; |
+ |
+ // The error template displayed to the user. This should be set if the |
+ // previous request failed, to notify the user of the failure reason. |
+ PinRequestErrorType? errorType; |
+ |
+ // The number of attempts left. This is provided so that any UI can present |
+ // this information to the user. Chrome is not expected to enforce this, |
+ // instead stopPinRequest should be called by the extension with |
+ // errorType = MAX_ATTEMPTS_EXCEEDED when the number of pin requests is |
+ // exceeded. |
+ long? attemptsLeft; |
+ }; |
+ |
+ dictionary StopPinRequestDetails { |
+ // The ID given by Chrome in SignRequest. |
+ long signRequestId; |
+ |
+ // The error template. If present it is displayed to user. Intended to |
+ // contain the reason for stopping the flow if it was caused by an error, |
+ // e.g. MAX_ATTEMPTS_EXCEEDED. |
+ PinRequestErrorType? errorType; |
+ }; |
+ |
+ dictionary PinResponseDetails { |
+ // The code provided by the user. Empty if user closed the dialog or some |
+ // other error occurred. |
+ DOMString? userInput; |
+ }; |
+ |
+ callback RequestPinCallback = void (optional PinResponseDetails details); |
+ |
+ callback StopPinRequestCallback = void (); |
+ |
// The callback provided by the extension that Chrome uses to report back |
// rejected certificates. See <code>CertificatesCallback</code>. |
callback ResultCallback = void (ArrayBuffer[] rejectedCertificates); |
@@ -76,4 +131,22 @@ namespace certificateProvider { |
static void onSignDigestRequested(SignRequest request, |
SignCallback reportCallback); |
}; |
+ |
+ interface Functions { |
+ // Requests the PIN from user. Only one ongoing request at a time is |
Devlin
2016/10/20 21:20:44
"from the user"
igorcov
2016/10/25 16:38:35
Done.
|
+ // allowed. The requests issued while another flow is ongoing are rejected. |
+ // It's the extension's responsibility to try again later if another flow is |
+ // in progress. <code>callback</code> is called when the dialog gets |
Devlin
2016/10/20 21:20:44
s/gets/is
Devlin
2016/10/20 21:20:44
Instead of referencing variables in the main descr
igorcov
2016/10/25 16:38:35
Done.
igorcov
2016/10/25 16:38:36
Done.
|
+ // resolved with the user input, or when the dialog request finishes |
+ // unsuccessfully (e.g. the dialog was canceled by the user or was not |
+ // allowed to be shown). |
+ static void requestPin(RequestPinDetails details, |
+ RequestPinCallback callback); |
+ |
+ // Stops the pin request started by the $(ref:requestPin) function. |
+ // <code>callback</code> to be used by Chrome to send to the extension the |
+ // status from their request to close PIN dialog for user. |
+ static void stopPinRequest(StopPinRequestDetails details, |
+ StopPinRequestCallback callback); |
+ }; |
}; |