Chromium Code Reviews| Index: Source/devtools/front_end/TempStorageSharedWorker.js |
| diff --git a/Source/devtools/front_end/TempStorageSharedWorker.js b/Source/devtools/front_end/TempStorageSharedWorker.js |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..248d2b4abc35c0edfa92fc378e7911e25a262812 |
| --- /dev/null |
| +++ b/Source/devtools/front_end/TempStorageSharedWorker.js |
| @@ -0,0 +1,121 @@ |
| +/* |
| + * Copyright (C) 2014 Google Inc. All rights reserved. |
| + * |
| + * Redistribution and use in source and binary forms, with or without |
| + * modification, are permitted provided that the following conditions are |
| + * met: |
| + * |
| + * * Redistributions of source code must retain the above copyright |
| + * notice, this list of conditions and the following disclaimer. |
| + * * Redistributions in binary form must reproduce the above |
| + * copyright notice, this list of conditions and the following disclaimer |
| + * in the documentation and/or other materials provided with the |
| + * distribution. |
| + * * Neither the name of Google Inc. nor the names of its |
| + * contributors may be used to endorse or promote products derived from |
| + * this software without specific prior written permission. |
| + * |
| + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
| + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
| + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
| + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
| + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
| + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
| + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
| + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
| + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
| + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
| + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| + */ |
| + |
| +var ports = []; |
| +var isTempStorageCleared = false; |
| + |
| +self.onconnect = function (event) { |
|
pfeldman
2014/01/14 16:26:28
/**
* @param {Event} event
*/
self.onconnect = f
yurys
2014/01/15 08:30:11
Done.
|
| + var newPort = event.source; |
| + if (isTempStorageCleared) { |
| + notifyTempStorageCleared(newPort); |
| + return; |
| + } |
| + |
| + newPort.onmessage = handleMessage; |
| + newPort.onerror = handleError; |
| + ports.push(newPort); |
| + |
| + if (ports.length === 1) |
| + clearTempStorage(); |
| +} |
| + |
| +function clearTempStorage() |
| +{ |
| + function didFail(e) |
| + { |
| + console.error("Failed to clear temp storage: " + e.message + " " + e.name); |
| + didClearTempStorage(); |
|
pfeldman
2014/01/14 16:26:28
"Failed to clear temp storage: " + e.message + " "
yurys
2014/01/15 08:30:11
Done.
|
| + } |
| + function didGetFS(fs) |
|
pfeldman
2014/01/14 16:26:28
Annotate please
yurys
2014/01/15 08:30:11
Done.
|
| + { |
| + fs.root.createReader().readEntries(didReadEntries, didFail); |
| + } |
| + function didReadEntries(entries) |
|
pfeldman
2014/01/14 16:26:28
ditto
yurys
2014/01/15 08:30:11
Done.
|
| + { |
| + var remainingEntries = entries.length; |
| + if (!remainingEntries) { |
| + didClearTempStorage(); |
| + return; |
| + } |
| + function didDeleteEntry() |
| + { |
| + if (!--remainingEntries) |
| + didClearTempStorage(); |
|
alph
2014/01/14 15:46:34
Can you call the callback right after you enumerat
yurys
2014/01/14 15:58:59
This would result in a race when one of a clients
|
| + } |
| + function failedToDeleteEntry(e) |
| + { |
| + console.error("Failed to delete entry: " + e.message + " " + e.name); |
| + didDeleteEntry(); |
|
pfeldman
2014/01/14 16:26:28
ditto
yurys
2014/01/15 08:30:11
Done.
|
| + } |
| + for (var i = 0; i < entries.length; i++) { |
| + var entry = entries[i]; |
| + if (entry.isFile) |
| + entry.remove(didDeleteEntry, failedToDeleteEntry); |
| + else |
| + entry.removeRecursively(didDeleteEntry, failedToDeleteEntry); |
| + } |
| + } |
| + self.webkitRequestFileSystem(self.TEMPORARY, 10, didGetFS, didFail); |
| +} |
| + |
| +function didClearTempStorage() |
| +{ |
| + isTempStorageCleared = true; |
| + for (var i = 0; i < ports.length; i++) |
| + notifyTempStorageCleared(ports[i]); |
| + ports = null; |
| +} |
| + |
| +function notifyTempStorageCleared(port) |
| +{ |
| + port.postMessage({ |
| + type: "tempStorageCleared" |
| + }); |
| +} |
| + |
| +function handleMessage(event) |
| +{ |
| + if (event.data.type === "disconnect") |
| + removePort(event.target); |
| +} |
| + |
| +function handleError(event) |
| +{ |
| + console.error("Error: " + event.data); |
| + removePort(event.target); |
| +} |
| + |
| +function removePort(port) |
| +{ |
| + if (!ports) |
| + return; |
| + var index = ports.indexOf(port); |
| + ports.splice(index, 1); |
| +} |