| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 /** | 5 /** |
| 6 * Set of MetadataCacheItem. | 6 * Set of MetadataCacheItem. |
| 7 * @param {!MetadataCacheSetStorage} items Storage object containing | 7 * @param {!MetadataCacheSetStorage} items Storage object containing |
| 8 * MetadataCacheItem. | 8 * MetadataCacheItem. |
| 9 * @extends {cr.EventTarget} | 9 * @extends {cr.EventTarget} |
| 10 * @constructor | 10 * @constructor |
| (...skipping 12 matching lines...) Expand all Loading... |
| 23 | 23 |
| 24 MetadataCacheSet.prototype.__proto__ = cr.EventTarget.prototype; | 24 MetadataCacheSet.prototype.__proto__ = cr.EventTarget.prototype; |
| 25 | 25 |
| 26 /** | 26 /** |
| 27 * Creates list of MetadataRequest based on the cache state. | 27 * Creates list of MetadataRequest based on the cache state. |
| 28 * @param {!Array<!Entry>} entries | 28 * @param {!Array<!Entry>} entries |
| 29 * @param {!Array<string>} names | 29 * @param {!Array<string>} names |
| 30 * @return {!Array<!MetadataRequest>} | 30 * @return {!Array<!MetadataRequest>} |
| 31 */ | 31 */ |
| 32 MetadataCacheSet.prototype.createRequests = function(entries, names) { | 32 MetadataCacheSet.prototype.createRequests = function(entries, names) { |
| 33 var urls = util.entriesToURLs(entries); |
| 33 var requests = []; | 34 var requests = []; |
| 34 for (var i = 0; i < entries.length; i++) { | 35 for (var i = 0; i < entries.length; i++) { |
| 35 var item = this.items_.peek(entries[i].toURL()); | 36 var item = this.items_.peek(urls[i]); |
| 36 var requestedNames = item ? item.createRequests(names) : names; | 37 var requestedNames = item ? item.createRequests(names) : names; |
| 37 if (requestedNames.length) | 38 if (requestedNames.length) |
| 38 requests.push(new MetadataRequest(entries[i], requestedNames)); | 39 requests.push(new MetadataRequest(entries[i], requestedNames)); |
| 39 } | 40 } |
| 40 return requests; | 41 return requests; |
| 41 }; | 42 }; |
| 42 | 43 |
| 43 /** | 44 /** |
| 44 * Updates cache states to start the given requests. | 45 * Updates cache states to start the given requests. |
| 45 * @param {number} requestId | 46 * @param {number} requestId |
| 46 * @param {!Array<!MetadataRequest>} requests | 47 * @param {!Array<!MetadataRequest>} requests |
| 47 */ | 48 */ |
| 48 MetadataCacheSet.prototype.startRequests = function(requestId, requests) { | 49 MetadataCacheSet.prototype.startRequests = function(requestId, requests) { |
| 49 for (var i = 0; i < requests.length; i++) { | 50 for (var i = 0; i < requests.length; i++) { |
| 50 var request = requests[i]; | 51 var request = requests[i]; |
| 51 var url = request.entry.toURL(); | 52 var url = requests[i].entry.cachedUrl || requests[i].entry.toURL(); |
| 52 var item = this.items_.peek(url); | 53 var item = this.items_.peek(url); |
| 53 if (!item) { | 54 if (!item) { |
| 54 item = new MetadataCacheItem(); | 55 item = new MetadataCacheItem(); |
| 55 this.items_.put(url, item); | 56 this.items_.put(url, item); |
| 56 } | 57 } |
| 57 item.startRequests(requestId, request.names); | 58 item.startRequests(requestId, request.names); |
| 58 } | 59 } |
| 59 }; | 60 }; |
| 60 | 61 |
| 61 /** | 62 /** |
| 62 * Stores results from NewMetadataProvider with the request Id. | 63 * Stores results from NewMetadataProvider with the request Id. |
| 63 * @param {number} requestId Request ID. If a newer operation has already been | 64 * @param {number} requestId Request ID. If a newer operation has already been |
| 64 * done, the results must be ingored. | 65 * done, the results must be ingored. |
| 65 * @param {!Array<!Entry>} entries | 66 * @param {!Array<!Entry>} entries |
| 66 * @param {!Array<!MetadataItem>} results | 67 * @param {!Array<!MetadataItem>} results |
| 67 * @return {boolean} Whether at least one result is stored or not. | 68 * @return {boolean} Whether at least one result is stored or not. |
| 68 */ | 69 */ |
| 69 MetadataCacheSet.prototype.storeProperties = function( | 70 MetadataCacheSet.prototype.storeProperties = function( |
| 70 requestId, entries, results) { | 71 requestId, entries, results) { |
| 71 var changedEntries = []; | 72 var changedEntries = []; |
| 73 var urls = util.entriesToURLs(entries); |
| 72 for (var i = 0; i < entries.length; i++) { | 74 for (var i = 0; i < entries.length; i++) { |
| 73 var url = entries[i].toURL(); | 75 var url = urls[i]; |
| 74 var item = this.items_.peek(url); | 76 var item = this.items_.peek(url); |
| 75 if (item && item.storeProperties(requestId, results[i])) | 77 if (item && item.storeProperties(requestId, results[i])) |
| 76 changedEntries.push(entries[i]); | 78 changedEntries.push(entries[i]); |
| 77 } | 79 } |
| 78 if (changedEntries.length) { | 80 if (changedEntries.length) { |
| 79 var event = new Event('update'); | 81 var event = new Event('update'); |
| 80 event.entries = changedEntries; | 82 event.entries = changedEntries; |
| 81 this.dispatchEvent(event); | 83 this.dispatchEvent(event); |
| 82 return true; | 84 return true; |
| 83 } else { | 85 } else { |
| 84 return false; | 86 return false; |
| 85 } | 87 } |
| 86 }; | 88 }; |
| 87 | 89 |
| 88 /** | 90 /** |
| 89 * Obtains cached properties for entries and names. | 91 * Obtains cached properties for entries and names. |
| 90 * Note that it returns invalidated properties also. | 92 * Note that it returns invalidated properties also. |
| 91 * @param {!Array<!Entry>} entries Entries. | 93 * @param {!Array<!Entry>} entries Entries. |
| 92 * @param {!Array<string>} names Property names. | 94 * @param {!Array<string>} names Property names. |
| 93 */ | 95 */ |
| 94 MetadataCacheSet.prototype.get = function(entries, names) { | 96 MetadataCacheSet.prototype.get = function(entries, names) { |
| 95 var results = []; | 97 var results = []; |
| 98 var urls = util.entriesToURLs(entries); |
| 96 for (var i = 0; i < entries.length; i++) { | 99 for (var i = 0; i < entries.length; i++) { |
| 97 var item = this.items_.get(entries[i].toURL()); | 100 var item = this.items_.get(urls[i]); |
| 98 results.push(item ? item.get(names) : {}); | 101 results.push(item ? item.get(names) : {}); |
| 99 } | 102 } |
| 100 return results; | 103 return results; |
| 101 }; | 104 }; |
| 102 | 105 |
| 103 /** | 106 /** |
| 104 * Marks the caches of entries as invalidates and forces to reload at the next | 107 * Marks the caches of entries as invalidates and forces to reload at the next |
| 105 * time of startRequests. | 108 * time of startRequests. |
| 106 * @param {number} requestId Request ID of the invalidation request. This must | 109 * @param {number} requestId Request ID of the invalidation request. This must |
| 107 * be larger than other requets ID passed to the set before. | 110 * be larger than other requets ID passed to the set before. |
| 108 * @param {!Array<!Entry>} entries | 111 * @param {!Array<!Entry>} entries |
| 109 */ | 112 */ |
| 110 MetadataCacheSet.prototype.invalidate = function(requestId, entries) { | 113 MetadataCacheSet.prototype.invalidate = function(requestId, entries) { |
| 114 var urls = util.entriesToURLs(entries); |
| 111 for (var i = 0; i < entries.length; i++) { | 115 for (var i = 0; i < entries.length; i++) { |
| 112 var item = this.items_.peek(entries[i].toURL()); | 116 var item = this.items_.peek(urls[i]); |
| 113 if (item) | 117 if (item) |
| 114 item.invalidate(requestId); | 118 item.invalidate(requestId); |
| 115 } | 119 } |
| 116 }; | 120 }; |
| 117 | 121 |
| 118 /** | 122 /** |
| 119 * Clears the caches of entries. | 123 * Clears the caches of entries. |
| 120 * @param {!Array<string>} urls | 124 * @param {!Array<string>} urls |
| 121 */ | 125 */ |
| 122 MetadataCacheSet.prototype.clear = function(urls) { | 126 MetadataCacheSet.prototype.clear = function(urls) { |
| 123 for (var i = 0; i < urls.length; i++) { | 127 for (var i = 0; i < urls.length; i++) { |
| 124 this.items_.remove(urls[i]); | 128 this.items_.remove(urls[i]); |
| 125 } | 129 } |
| 126 }; | 130 }; |
| 127 | 131 |
| 128 /** | 132 /** |
| 129 * Clears all cache. | 133 * Clears all cache. |
| 130 */ | 134 */ |
| 131 MetadataCacheSet.prototype.clearAll = function() { | 135 MetadataCacheSet.prototype.clearAll = function() { |
| 132 this.items_.removeAll(); | 136 this.items_.removeAll(); |
| 133 }; | 137 }; |
| 134 | 138 |
| 135 /** | 139 /** |
| 136 * Creates snapshot of the cache for entries. | 140 * Creates snapshot of the cache for entries. |
| 137 * @param {!Array<!Entry>} entries | 141 * @param {!Array<!Entry>} entries |
| 138 */ | 142 */ |
| 139 MetadataCacheSet.prototype.createSnapshot = function(entries) { | 143 MetadataCacheSet.prototype.createSnapshot = function(entries) { |
| 140 var items = {}; | 144 var items = {}; |
| 145 var urls = util.entriesToURLs(entries); |
| 141 for (var i = 0; i < entries.length; i++) { | 146 for (var i = 0; i < entries.length; i++) { |
| 142 var url = entries[i].toURL(); | 147 var url = urls[i]; |
| 143 var item = this.items_.peek(url); | 148 var item = this.items_.peek(url); |
| 144 if (item) | 149 if (item) |
| 145 items[url] = item.clone(); | 150 items[url] = item.clone(); |
| 146 } | 151 } |
| 147 return new MetadataCacheSet(new MetadataCacheSetStorageForObject(items)); | 152 return new MetadataCacheSet(new MetadataCacheSetStorageForObject(items)); |
| 148 }; | 153 }; |
| 149 | 154 |
| 150 /** | 155 /** |
| 151 * Returns whether all the given properties are fulfilled. | 156 * Returns whether all the given properties are fulfilled. |
| 152 * @param {!Array<!Entry>} entries Entries. | 157 * @param {!Array<!Entry>} entries Entries. |
| 153 * @param {!Array<string>} names Property names. | 158 * @param {!Array<string>} names Property names. |
| 154 * @return {boolean} | 159 * @return {boolean} |
| 155 */ | 160 */ |
| 156 MetadataCacheSet.prototype.hasFreshCache = function(entries, names) { | 161 MetadataCacheSet.prototype.hasFreshCache = function(entries, names) { |
| 157 if (!names.length) | 162 if (!names.length) |
| 158 return true; | 163 return true; |
| 164 var urls = util.entriesToURLs(entries); |
| 159 for (var i = 0; i < entries.length; i++) { | 165 for (var i = 0; i < entries.length; i++) { |
| 160 var item = this.items_.peek(entries[i].toURL()); | 166 var item = this.items_.peek(urls[i]); |
| 161 if (!(item && item.hasFreshCache(names))) | 167 if (!(item && item.hasFreshCache(names))) |
| 162 return false; | 168 return false; |
| 163 } | 169 } |
| 164 return true; | 170 return true; |
| 165 }; | 171 }; |
| 166 | 172 |
| 167 /** | 173 /** |
| 168 * Interface of raw strage for MetadataCacheItem. | 174 * Interface of raw strage for MetadataCacheItem. |
| 169 * @interface | 175 * @interface |
| 170 */ | 176 */ |
| (...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 315 * @const | 321 * @const |
| 316 */ | 322 */ |
| 317 this.entry = entry; | 323 this.entry = entry; |
| 318 | 324 |
| 319 /** | 325 /** |
| 320 * @public {!Array<string>} | 326 * @public {!Array<string>} |
| 321 * @const | 327 * @const |
| 322 */ | 328 */ |
| 323 this.names = names; | 329 this.names = names; |
| 324 } | 330 } |
| OLD | NEW |