| Index: chrome/test/data/webui/net_internals/hsts_view.js
 | 
| diff --git a/chrome/test/data/webui/net_internals/hsts_view.js b/chrome/test/data/webui/net_internals/hsts_view.js
 | 
| index 56e4bf88787b680e02efec63abdb2b686f095558..161908ca8cd62a8386e1e4771f37cd4bc5d83967 100644
 | 
| --- a/chrome/test/data/webui/net_internals/hsts_view.js
 | 
| +++ b/chrome/test/data/webui/net_internals/hsts_view.js
 | 
| @@ -40,6 +40,8 @@ var QueryResultType = {
 | 
|   * @param {bool} pkpSubdomains Whether or not the pkpSubdomains flag is expected
 | 
|   *     to be set in the returned results.  Ignored on error and not found
 | 
|   *     results.
 | 
| + * @param {number} stsObserved The time the STS policy was observed.
 | 
| + * @param {number} pkpObserved The time the PKP policy was observed.
 | 
|   * @param {string} publicKeyHashes Expected public key hashes.  Ignored on error
 | 
|   *     error and not found results.
 | 
|   * @param {QueryResultType} queryResultType The expected result type of the
 | 
| @@ -47,10 +49,13 @@ var QueryResultType = {
 | 
|   * @extends {NetInternalsTest.Task}
 | 
|   */
 | 
|  function CheckQueryResultTask(domain, stsSubdomains, pkpSubdomains,
 | 
| -                              publicKeyHashes, queryResultType) {
 | 
| +                              stsObserved, pkpObserved, publicKeyHashes,
 | 
| +                              queryResultType) {
 | 
|    this.domain_ = domain;
 | 
|    this.stsSubdomains_ = stsSubdomains;
 | 
|    this.pkpSubdomains_ = pkpSubdomains;
 | 
| +  this.stsObserved_ = stsObserved;
 | 
| +  this.pkpObserved_ = pkpObserved;
 | 
|    this.publicKeyHashes_ = publicKeyHashes;
 | 
|    this.queryResultType_ = queryResultType;
 | 
|    NetInternalsTest.Task.call(this);
 | 
| @@ -119,6 +124,8 @@ CheckQueryResultTask.prototype = {
 | 
|      expectEquals(QueryResultType.SUCCESS, this.queryResultType_);
 | 
|      expectEquals(this.stsSubdomains_, result.sts_subdomains);
 | 
|      expectEquals(this.pkpSubdomains_, result.pkp_subdomains);
 | 
| +    expectLE(this.stsObserved_, result.sts_observed);
 | 
| +    expectLE(this.pkpObserved_, result.pkp_observed);
 | 
|  
 | 
|      // |public_key_hashes| is an old synonym for what is now
 | 
|      // |preloaded_spki_hashes|, which in turn is a legacy synonym for
 | 
| @@ -162,6 +169,8 @@ CheckQueryResultTask.prototype = {
 | 
|   * @param {bool} pkpSubdomains Whether the pinning subdomain checkbox should be
 | 
|   *     selected. Also the corresponding expected return value, in the success
 | 
|   *     case.
 | 
| + * @param {number} stsObserved The time the STS policy was observed.
 | 
| + * @param {number} pkpObserved The time the PKP policy was observed.
 | 
|   * @param {string} publicKeyHashes Public key hash to send.  Also the
 | 
|   *     corresponding expected return value, on success.  When this is the string
 | 
|   *     INVALID_HASH, an empty string is expected to be received instead.
 | 
| @@ -169,12 +178,13 @@ CheckQueryResultTask.prototype = {
 | 
|   * @extends {CheckQueryResultTask}
 | 
|   */
 | 
|  function AddTask(domain, stsSubdomains, pkpSubdomains, publicKeyHashes,
 | 
| -                 queryResultType) {
 | 
| +                 stsObserved, pkpObserved, queryResultType) {
 | 
|    this.requestedPublicKeyHashes_ = publicKeyHashes;
 | 
|    if (publicKeyHashes == INVALID_HASH)
 | 
|      publicKeyHashes = '';
 | 
|    CheckQueryResultTask.call(this, domain, stsSubdomains, pkpSubdomains,
 | 
| -                            publicKeyHashes, queryResultType);
 | 
| +                            stsObserved, pkpObserved, publicKeyHashes,
 | 
| +                            queryResultType);
 | 
|  }
 | 
|  
 | 
|  AddTask.prototype = {
 | 
| @@ -200,10 +210,11 @@ AddTask.prototype = {
 | 
|   * query.
 | 
|   * @extends {CheckQueryResultTask}
 | 
|   */
 | 
| -function QueryTask(domain, stsSubdomains, pkpSubdomains, publicKeyHashes,
 | 
| -                   queryResultType) {
 | 
| +function QueryTask(domain, stsSubdomains, pkpSubdomains, stsObserved,
 | 
| +                   pkpObserved, publicKeyHashes, queryResultType) {
 | 
|    CheckQueryResultTask.call(this, domain, stsSubdomains, pkpSubdomains,
 | 
| -                            publicKeyHashes, queryResultType);
 | 
| +                            stsObserved, pkpObserved, publicKeyHashes,
 | 
| +                            queryResultType);
 | 
|  }
 | 
|  
 | 
|  QueryTask.prototype = {
 | 
| @@ -231,7 +242,7 @@ QueryTask.prototype = {
 | 
|  function DeleteTask(domain, queryResultType) {
 | 
|    expectNotEquals(queryResultType, QueryResultType.SUCCESS);
 | 
|    this.domain_ = domain;
 | 
| -  QueryTask.call(this, domain, false, false, '', queryResultType);
 | 
| +  QueryTask.call(this, domain, false, false, '', 0, 0, queryResultType);
 | 
|  }
 | 
|  
 | 
|  DeleteTask.prototype = {
 | 
| @@ -254,7 +265,8 @@ DeleteTask.prototype = {
 | 
|  TEST_F('NetInternalsTest', 'netInternalsHSTSViewQueryNotFound', function() {
 | 
|    NetInternalsTest.switchToView('hsts');
 | 
|    taskQueue = new NetInternalsTest.TaskQueue(true);
 | 
| -  taskQueue.addTask(new QueryTask('somewhere.com', false, false, '',
 | 
| +  var now = new Date().getTime() / 1000.0;
 | 
| +  taskQueue.addTask(new QueryTask('somewhere.com', false, false, now, now, '',
 | 
|                                    QueryResultType.NOT_FOUND));
 | 
|    taskQueue.run();
 | 
|  });
 | 
| @@ -265,7 +277,8 @@ TEST_F('NetInternalsTest', 'netInternalsHSTSViewQueryNotFound', function() {
 | 
|  TEST_F('NetInternalsTest', 'netInternalsHSTSViewQueryError', function() {
 | 
|    NetInternalsTest.switchToView('hsts');
 | 
|    taskQueue = new NetInternalsTest.TaskQueue(true);
 | 
| -  taskQueue.addTask(new QueryTask('\u3024', false, false, '',
 | 
| +  var now = new Date().getTime() / 1000.0;
 | 
| +  taskQueue.addTask(new QueryTask('\u3024', false, false, now, now, '',
 | 
|                                    QueryResultType.ERROR));
 | 
|    taskQueue.run();
 | 
|  });
 | 
| @@ -296,8 +309,9 @@ TEST_F('NetInternalsTest', 'netInternalsHSTSViewDeleteError', function() {
 | 
|  TEST_F('NetInternalsTest', 'netInternalsHSTSViewAddDelete', function() {
 | 
|    NetInternalsTest.switchToView('hsts');
 | 
|    taskQueue = new NetInternalsTest.TaskQueue(true);
 | 
| +  var now = new Date().getTime() / 1000.0;
 | 
|    taskQueue.addTask(new AddTask('somewhere.com', false, false, VALID_HASH,
 | 
| -                                QueryResultType.SUCCESS));
 | 
| +                                now, now, QueryResultType.SUCCESS));
 | 
|    taskQueue.addTask(new DeleteTask('somewhere.com', QueryResultType.NOT_FOUND));
 | 
|    taskQueue.run();
 | 
|  });
 | 
| @@ -308,9 +322,11 @@ TEST_F('NetInternalsTest', 'netInternalsHSTSViewAddDelete', function() {
 | 
|  TEST_F('NetInternalsTest', 'netInternalsHSTSViewAddFail', function() {
 | 
|    NetInternalsTest.switchToView('hsts');
 | 
|    taskQueue = new NetInternalsTest.TaskQueue(true);
 | 
| +  var now = new Date().getTime() / 1000.0;
 | 
|    taskQueue.addTask(new AddTask('0123456789012345678901234567890' +
 | 
|                                  '012345678901234567890123456789012345',
 | 
| -                                false, false, '', QueryResultType.NOT_FOUND));
 | 
| +                                false, false, '', now, now,
 | 
| +                                QueryResultType.NOT_FOUND));
 | 
|    taskQueue.run();
 | 
|  });
 | 
|  
 | 
| @@ -321,7 +337,8 @@ TEST_F('NetInternalsTest', 'netInternalsHSTSViewAddFail', function() {
 | 
|  TEST_F('NetInternalsTest', 'netInternalsHSTSViewAddError', function() {
 | 
|    NetInternalsTest.switchToView('hsts');
 | 
|    taskQueue = new NetInternalsTest.TaskQueue(true);
 | 
| -  taskQueue.addTask(new AddTask('\u3024', false, false, '',
 | 
| +  var now = new Date().getTime() / 1000.0;
 | 
| +  taskQueue.addTask(new AddTask('\u3024', false, false, '', now, now,
 | 
|                                  QueryResultType.ERROR));
 | 
|    taskQueue.run();
 | 
|  });
 | 
| @@ -332,8 +349,9 @@ TEST_F('NetInternalsTest', 'netInternalsHSTSViewAddError', function() {
 | 
|  TEST_F('NetInternalsTest', 'netInternalsHSTSViewAddInvalidHash', function() {
 | 
|    NetInternalsTest.switchToView('hsts');
 | 
|    taskQueue = new NetInternalsTest.TaskQueue(true);
 | 
| +  var now = new Date().getTime() / 1000.0;
 | 
|    taskQueue.addTask(new AddTask('somewhere.com', true, true, INVALID_HASH,
 | 
| -                                QueryResultType.SUCCESS));
 | 
| +                                now, now, QueryResultType.SUCCESS));
 | 
|    taskQueue.addTask(new DeleteTask('somewhere.com', QueryResultType.NOT_FOUND));
 | 
|    taskQueue.run();
 | 
|  });
 | 
| @@ -344,10 +362,11 @@ TEST_F('NetInternalsTest', 'netInternalsHSTSViewAddInvalidHash', function() {
 | 
|  TEST_F('NetInternalsTest', 'netInternalsHSTSViewAddOverwrite', function() {
 | 
|    NetInternalsTest.switchToView('hsts');
 | 
|    taskQueue = new NetInternalsTest.TaskQueue(true);
 | 
| +  var now = new Date().getTime() / 1000.0;
 | 
|    taskQueue.addTask(new AddTask('somewhere.com', true, true, VALID_HASH,
 | 
| -                                QueryResultType.SUCCESS));
 | 
| +                                now, now, QueryResultType.SUCCESS));
 | 
|    taskQueue.addTask(new AddTask('somewhere.com', false, false, '',
 | 
| -                                QueryResultType.SUCCESS));
 | 
| +                                now, now, QueryResultType.SUCCESS));
 | 
|    taskQueue.addTask(new DeleteTask('somewhere.com', QueryResultType.NOT_FOUND));
 | 
|    taskQueue.run();
 | 
|  });
 | 
| @@ -358,16 +377,17 @@ TEST_F('NetInternalsTest', 'netInternalsHSTSViewAddOverwrite', function() {
 | 
|  TEST_F('NetInternalsTest', 'netInternalsHSTSViewAddTwice', function() {
 | 
|    NetInternalsTest.switchToView('hsts');
 | 
|    taskQueue = new NetInternalsTest.TaskQueue(true);
 | 
| +  var now = new Date().getTime() / 1000.0;
 | 
|    taskQueue.addTask(new AddTask('somewhere.com', false, false, VALID_HASH,
 | 
| -                                QueryResultType.SUCCESS));
 | 
| -  taskQueue.addTask(new QueryTask('somewhereelse.com', false, false, '',
 | 
| -                                  QueryResultType.NOT_FOUND));
 | 
| +                                now, now, QueryResultType.SUCCESS));
 | 
| +  taskQueue.addTask(new QueryTask('somewhereelse.com', false, false, now, now,
 | 
| +                                  '', QueryResultType.NOT_FOUND));
 | 
|    taskQueue.addTask(new AddTask('somewhereelse.com', true, true, '',
 | 
| -                                QueryResultType.SUCCESS));
 | 
| -  taskQueue.addTask(new QueryTask('somewhere.com', false, false, VALID_HASH,
 | 
| -                                  QueryResultType.SUCCESS));
 | 
| +                                now, now, QueryResultType.SUCCESS));
 | 
| +  taskQueue.addTask(new QueryTask('somewhere.com', false, false, now, now,
 | 
| +                                  VALID_HASH, QueryResultType.SUCCESS));
 | 
|    taskQueue.addTask(new DeleteTask('somewhere.com', QueryResultType.NOT_FOUND));
 | 
| -  taskQueue.addTask(new QueryTask('somewhereelse.com', true, true, '',
 | 
| +  taskQueue.addTask(new QueryTask('somewhereelse.com', true, true, now, now, '',
 | 
|                                    QueryResultType.SUCCESS));
 | 
|    taskQueue.addTask(new DeleteTask('somewhereelse.com',
 | 
|                                     QueryResultType.NOT_FOUND));
 | 
| 
 |