| Index: chrome/browser/resources/cryptotoken/signer.js
|
| diff --git a/chrome/browser/resources/cryptotoken/signer.js b/chrome/browser/resources/cryptotoken/signer.js
|
| index 1e6e2313b342e11dd5e3bc09b33313ffd13fec65..b427fcc7968ce4029ae15e8a64474133c0a040dc 100644
|
| --- a/chrome/browser/resources/cryptotoken/signer.js
|
| +++ b/chrome/browser/resources/cryptotoken/signer.js
|
| @@ -15,16 +15,14 @@ var signRequestQueue = new OriginKeyedRequestQueue();
|
| * @param {!SignHelperFactory} factory Factory to create a sign helper.
|
| * @param {MessageSender} sender The sender of the message.
|
| * @param {Object} request The web page's sign request.
|
| - * @param {boolean} enforceAppIdValid Whether to enforce that the app id in the
|
| - * request matches the sender's origin.
|
| * @param {Function} sendResponse Called back with the result of the sign.
|
| * @param {boolean} toleratesMultipleResponses Whether the sendResponse
|
| * callback can be called more than once, e.g. for progress updates.
|
| * @return {Closeable} Request handler that should be closed when the browser
|
| * message channel is closed.
|
| */
|
| -function handleSignRequest(factory, sender, request, enforceAppIdValid,
|
| - sendResponse, toleratesMultipleResponses) {
|
| +function handleSignRequest(factory, sender, request, sendResponse,
|
| + toleratesMultipleResponses) {
|
| var sentResponse = false;
|
| function sendResponseOnce(r) {
|
| if (queuedSignRequest) {
|
| @@ -62,19 +60,6 @@ function handleSignRequest(factory, sender, request, enforceAppIdValid,
|
| sendResponseOnce(response);
|
| }
|
|
|
| - function sendNotification(code) {
|
| - console.log(UTIL_fmt('notification, code=' + code));
|
| - // Can the callback handle progress updates? If so, send one.
|
| - if (toleratesMultipleResponses) {
|
| - var response = formatWebPageResponse(
|
| - GnubbyMsgTypes.SIGN_WEB_NOTIFICATION, code);
|
| - if (request['requestId']) {
|
| - response['requestId'] = request['requestId'];
|
| - }
|
| - sendResponse(response);
|
| - }
|
| - }
|
| -
|
| var origin = getOriginFromUrl(/** @type {string} */ (sender.url));
|
| if (!origin) {
|
| sendErrorResponse(GnubbyCodeTypes.BAD_REQUEST);
|
| @@ -103,8 +88,8 @@ function handleSignRequest(factory, sender, request, enforceAppIdValid,
|
| // Queue sign requests from the same origin, to protect against simultaneous
|
| // sign-out on many tabs resulting in repeated sign-in requests.
|
| var queuedSignRequest = new QueuedSignRequest(signData, factory, timer,
|
| - nonNullOrigin, enforceAppIdValid, sendErrorResponse, sendSuccessResponse,
|
| - sendNotification, sender.tlsChannelId, logMsgUrl);
|
| + nonNullOrigin, sendErrorResponse, sendSuccessResponse,
|
| + sender.tlsChannelId, logMsgUrl);
|
| var requestToken = signRequestQueue.queueRequest(firstAppId, nonNullOrigin,
|
| queuedSignRequest.begin.bind(queuedSignRequest), timer);
|
| queuedSignRequest.setToken(requestToken);
|
| @@ -133,17 +118,15 @@ function isValidSignRequest(request) {
|
| * @param {!SignHelperFactory} factory Factory for SignHelper instances
|
| * @param {Countdown} timer Timeout timer
|
| * @param {string} origin Signature origin
|
| - * @param {boolean} enforceAppIdValid If to enforce appId validity
|
| * @param {function(number)} errorCb Error callback
|
| * @param {function(SignChallenge, string, string)} successCb Success callback
|
| - * @param {(function(number)|undefined)} opt_progressCb Progress callback
|
| * @param {string|undefined} opt_tlsChannelId TLS Channel Id
|
| * @param {string|undefined} opt_logMsgUrl Url to post log messages to
|
| * @constructor
|
| * @implements {Closeable}
|
| */
|
| -function QueuedSignRequest(signData, factory, timer, origin, enforceAppIdValid,
|
| - errorCb, successCb, opt_progressCb, opt_tlsChannelId, opt_logMsgUrl) {
|
| +function QueuedSignRequest(signData, factory, timer, origin, errorCb, successCb,
|
| + opt_tlsChannelId, opt_logMsgUrl) {
|
| /** @private {!SignData} */
|
| this.signData_ = signData;
|
| /** @private {!SignHelperFactory} */
|
| @@ -152,14 +135,10 @@ function QueuedSignRequest(signData, factory, timer, origin, enforceAppIdValid,
|
| this.timer_ = timer;
|
| /** @private {string} */
|
| this.origin_ = origin;
|
| - /** @private {boolean} */
|
| - this.enforceAppIdValid_ = enforceAppIdValid;
|
| /** @private {function(number)} */
|
| this.errorCb_ = errorCb;
|
| /** @private {function(SignChallenge, string, string)} */
|
| this.successCb_ = successCb;
|
| - /** @private {(function(number)|undefined)} */
|
| - this.progressCb_ = opt_progressCb;
|
| /** @private {string|undefined} */
|
| this.tlsChannelId_ = opt_tlsChannelId;
|
| /** @private {string|undefined} */
|
| @@ -198,8 +177,7 @@ QueuedSignRequest.prototype.begin = function(token) {
|
| this.begun_ = true;
|
| this.setToken(token);
|
| this.signer_ = new Signer(this.factory_, this.timer_, this.origin_,
|
| - this.enforceAppIdValid_, this.signerFailed_.bind(this),
|
| - this.signerSucceeded_.bind(this), this.progressCb_,
|
| + this.signerFailed_.bind(this), this.signerSucceeded_.bind(this),
|
| this.tlsChannelId_, this.logMsgUrl_);
|
| if (!this.signer_.setChallenges(this.signData_)) {
|
| token.complete();
|
| @@ -235,32 +213,24 @@ QueuedSignRequest.prototype.signerSucceeded_ =
|
| * @param {!SignHelperFactory} helperFactory Factory to create a sign helper.
|
| * @param {Countdown} timer Timer for sign request.
|
| * @param {string} origin The origin making the request.
|
| - * @param {boolean} enforceAppIdValid Whether to enforce that the appId in the
|
| - * request matches the sender's origin.
|
| * @param {function(number)} errorCb Called when the sign operation fails.
|
| * @param {function(SignChallenge, string, string)} successCb Called when the
|
| * sign operation succeeds.
|
| - * @param {(function(number)|undefined)} opt_progressCb Called with progress
|
| - * updates to the sign request.
|
| * @param {string=} opt_tlsChannelId the TLS channel ID, if any, of the origin
|
| * making the request.
|
| * @param {string=} opt_logMsgUrl The url to post log messages to.
|
| * @constructor
|
| */
|
| -function Signer(helperFactory, timer, origin, enforceAppIdValid,
|
| - errorCb, successCb, opt_progressCb, opt_tlsChannelId, opt_logMsgUrl) {
|
| +function Signer(helperFactory, timer, origin, errorCb, successCb,
|
| + opt_tlsChannelId, opt_logMsgUrl) {
|
| /** @private {Countdown} */
|
| this.timer_ = timer;
|
| /** @private {string} */
|
| this.origin_ = origin;
|
| - /** @private {boolean} */
|
| - this.enforceAppIdValid_ = enforceAppIdValid;
|
| /** @private {function(number)} */
|
| this.errorCb_ = errorCb;
|
| /** @private {function(SignChallenge, string, string)} */
|
| this.successCb_ = successCb;
|
| - /** @private {(function(number)|undefined)} */
|
| - this.progressCb_ = opt_progressCb;
|
| /** @private {string|undefined} */
|
| this.tlsChannelId_ = opt_tlsChannelId;
|
| /** @private {string|undefined} */
|
| @@ -287,7 +257,7 @@ function Signer(helperFactory, timer, origin, enforceAppIdValid,
|
| /** @private {SignHelper} */
|
| this.helper_ = helperFactory.createHelper(
|
| timer, this.helperError_.bind(this), this.helperSuccess_.bind(this),
|
| - this.helperProgress_.bind(this), this.logMsgUrl_);
|
| + this.logMsgUrl_);
|
| }
|
|
|
| /**
|
| @@ -321,15 +291,8 @@ Signer.prototype.setChallenges = function(signData) {
|
| /** @private {boolean} */
|
| this.challengesSet_ = true;
|
|
|
| - // If app id enforcing isn't in effect, go ahead and start the helper with
|
| - // all of the incoming challenges.
|
| - var success = true;
|
| - if (!this.enforceAppIdValid_) {
|
| - success = this.addChallenges(signData, true /* finalChallenges */);
|
| - }
|
| -
|
| this.checkAppIds_();
|
| - return success;
|
| + return true;
|
| };
|
|
|
| /**
|
| @@ -405,12 +368,8 @@ Signer.prototype.checkAppIds_ = function() {
|
| // Trivially allowed.
|
| this.fetchedAppIds_++;
|
| this.validAppIds_++;
|
| - // Only add challenges if in enforcing mode, i.e. they weren't added
|
| - // earlier.
|
| - if (this.enforceAppIdValid_) {
|
| - this.addChallenges(requests,
|
| - this.fetchedAppIds_ == this.orderedRequests_.length);
|
| - }
|
| + this.addChallenges(requests,
|
| + this.fetchedAppIds_ == this.orderedRequests_.length);
|
| } else {
|
| var start = new Date();
|
| fetchAllowedOriginsForAppId(appId, this.allowHttp_,
|
| @@ -449,23 +408,18 @@ Signer.prototype.fetchedAllowedOriginsForAppId_ = function(appId, start,
|
| var finalChallenges = (this.fetchedAppIds_ == this.orderedRequests_.length);
|
| if (isValidAppIdForOrigin(appId, this.origin_, allowedOrigins)) {
|
| this.validAppIds_++;
|
| - // Only add challenges if in enforcing mode, i.e. they weren't added
|
| - // earlier.
|
| - if (this.enforceAppIdValid_) {
|
| - this.addChallenges(challenges, finalChallenges);
|
| - }
|
| + this.addChallenges(challenges, finalChallenges);
|
| } else {
|
| logInvalidOriginForAppId(this.origin_, appId, this.logMsgUrl_);
|
| - // If in enforcing mode and this is the final request, sign the valid
|
| - // challenges.
|
| - if (this.enforceAppIdValid_ && finalChallenges) {
|
| + // If this is the final request, sign the valid challenges.
|
| + if (finalChallenges) {
|
| if (!this.helper_.doSign(this.pendingChallenges_)) {
|
| this.notifyError_(GnubbyCodeTypes.BAD_REQUEST);
|
| return;
|
| }
|
| }
|
| }
|
| - if (this.enforceAppIdValid_ && finalChallenges && !this.validAppIds_) {
|
| + if (finalChallenges && !this.validAppIds_) {
|
| // If all app ids are invalid, notify the caller, otherwise implicitly
|
| // allow the helper to report whether any of the valid challenges succeeded.
|
| this.notifyError_(GnubbyCodeTypes.BAD_APP_ID);
|
| @@ -517,25 +471,6 @@ Signer.prototype.notifySuccess_ = function(challenge, info, browserData) {
|
| };
|
|
|
| /**
|
| - * Notifies the caller of progress with the error code.
|
| - * @param {number} code Status code
|
| - * @private
|
| - */
|
| -Signer.prototype.notifyProgress_ = function(code) {
|
| - if (this.done_)
|
| - return;
|
| - if (code != this.lastProgressUpdate_) {
|
| - this.lastProgressUpdate_ = code;
|
| - // If there is no progress callback, treat it like an error and clean up.
|
| - if (this.progressCb_) {
|
| - this.progressCb_(code);
|
| - } else {
|
| - this.notifyError_(code);
|
| - }
|
| - }
|
| -};
|
| -
|
| -/**
|
| * Maps a sign helper's error code namespace to the page's error code namespace.
|
| * @param {number} code Error code from DeviceStatusCodes namespace.
|
| * @param {boolean} anyGnubbies Whether any gnubbies were found.
|
| @@ -586,12 +521,18 @@ Signer.prototype.helperError_ = function(code, anyGnubbies) {
|
| * Called by helper upon success.
|
| * @param {SignHelperChallenge} challenge The challenge that was signed.
|
| * @param {string} info The sign result.
|
| + * @param {string=} opt_source The source, if any, if the signature.
|
| * @private
|
| */
|
| -Signer.prototype.helperSuccess_ = function(challenge, info) {
|
| +Signer.prototype.helperSuccess_ = function(challenge, info, opt_source) {
|
| // Got a good reply, kill timer.
|
| this.clearTimeout_();
|
|
|
| + if (this.logMsgUrl_ && opt_source) {
|
| + var logMsg = 'signed&source=' + opt_source;
|
| + logMessage(logMsg, this.logMsgUrl_);
|
| + }
|
| +
|
| var key = challenge['keyHandle'] + challenge['challengeHash'];
|
| var browserData = this.browserData_[key];
|
| // Notify with server-provided challenge, not the encoded one: the
|
| @@ -601,19 +542,6 @@ Signer.prototype.helperSuccess_ = function(challenge, info) {
|
| };
|
|
|
| /**
|
| - * Called by helper to notify progress.
|
| - * @param {number} code Status code
|
| - * @param {boolean} anyGnubbies If any gnubbies were found
|
| - * @private
|
| - */
|
| -Signer.prototype.helperProgress_ = function(code, anyGnubbies) {
|
| - var reportedError = Signer.mapError_(code, anyGnubbies);
|
| - console.log(UTIL_fmt('helper notified ' + code.toString(16) +
|
| - ', returning ' + reportedError));
|
| - this.notifyProgress_(reportedError);
|
| -};
|
| -
|
| -/**
|
| * Clears the timeout for this signer.
|
| * @private
|
| */
|
|
|