| Index: mojo/public/js/validator.js | 
| diff --git a/mojo/public/js/validator.js b/mojo/public/js/validator.js | 
| index fee742d0c1b1c2761f99bd4494e587e5237965fd..283546d4f18803fc7fd75cb4c165ce4f2886c0d4 100644 | 
| --- a/mojo/public/js/validator.js | 
| +++ b/mojo/public/js/validator.js | 
| @@ -28,6 +28,49 @@ define("mojo/public/js/validator", [ | 
| }; | 
|  | 
| var NULL_MOJO_POINTER = "NULL_MOJO_POINTER"; | 
| +  var gValidationErrorObserver = null; | 
| + | 
| +  function reportValidationError(error) { | 
| +    if (gValidationErrorObserver) { | 
| +      gValidationErrorObserver.setLastError(error); | 
| +    } | 
| +  } | 
| + | 
| +  var ValidationErrorObserverForTesting = (function() { | 
| +    function Observer() { | 
| +      this.lastError = validationError.NONE; | 
| +      this.callback = null; | 
| +    } | 
| + | 
| +    Observer.prototype.setLastError = function(error) { | 
| +      this.lastError = error; | 
| +      if (this.callback) { | 
| +        this.callback(error); | 
| +      } | 
| +    }; | 
| + | 
| +    Observer.prototype.reset = function(error) { | 
| +      this.lastError = validationError.NONE; | 
| +      this.callback = null; | 
| +    }; | 
| + | 
| +    return { | 
| +      getInstance: function() { | 
| +        if (!gValidationErrorObserver) { | 
| +          gValidationErrorObserver = new Observer(); | 
| +        } | 
| +        return gValidationErrorObserver; | 
| +      } | 
| +    }; | 
| +  })(); | 
| + | 
| +  function isTestingMode() { | 
| +    return Boolean(gValidationErrorObserver); | 
| +  } | 
| + | 
| +  function clearTestingMode() { | 
| +    gValidationErrorObserver = null; | 
| +  } | 
|  | 
| function isEnumClass(cls) { | 
| return cls instanceof codec.Enum; | 
| @@ -180,6 +223,7 @@ define("mojo/public/js/validator", [ | 
| return fieldVersion <= structVersion; | 
| }; | 
|  | 
| +  // TODO(wangjimmy): Add support for v2 messages. | 
| Validator.prototype.validateMessageHeader = function() { | 
|  | 
| var err = this.validateStructHeader(0, codec.kMessageHeaderSize); | 
| @@ -508,5 +552,9 @@ define("mojo/public/js/validator", [ | 
| var exports = {}; | 
| exports.validationError = validationError; | 
| exports.Validator = Validator; | 
| +  exports.ValidationErrorObserverForTesting = ValidationErrorObserverForTesting; | 
| +  exports.reportValidationError = reportValidationError; | 
| +  exports.isTestingMode = isTestingMode; | 
| +  exports.clearTestingMode = clearTestingMode; | 
| return exports; | 
| }); | 
|  |