Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2092)

Unified Diff: Source/devtools/front_end/bindings/TempFile.js

Issue 705063004: DevTools: Promisify WebInspector.TempFile (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: a few more promises were added Created 6 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | Source/devtools/front_end/profiler/CPUProfileView.js » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/devtools/front_end/bindings/TempFile.js
diff --git a/Source/devtools/front_end/bindings/TempFile.js b/Source/devtools/front_end/bindings/TempFile.js
index a9674a87f2ae9005f86aae2d7f3ea849e5940e1c..5342db0312e6c8658ba9ad3fb03b319239e17692 100644
--- a/Source/devtools/front_end/bindings/TempFile.js
+++ b/Source/devtools/front_end/bindings/TempFile.js
@@ -32,90 +32,96 @@ window.requestFileSystem = window.requestFileSystem || window.webkitRequestFileS
/**
* @constructor
- * @param {!string} dirPath
- * @param {!string} name
- * @param {!function(?WebInspector.TempFile)} callback
*/
-WebInspector.TempFile = function(dirPath, name, callback)
+WebInspector.TempFile = function()
{
this._fileEntry = null;
this._writer = null;
+}
+
+/**
+ * @param {!string} dirPath
+ * @param {!string} name
+ * @return {!Promise}
+ */
+WebInspector.TempFile.create = function(dirPath, name)
+{
+ var file = new WebInspector.TempFile();
+
+ function requestTempFileSystem()
+ {
+ return new Promise(window.requestFileSystem.bind(window, window.TEMPORARY, 10));
+ }
/**
* @param {!FileSystem} fs
- * @this {WebInspector.TempFile}
*/
- function didInitFs(fs)
+ function getDirectoryEntry(fs)
{
- fs.root.getDirectory(dirPath, { create: true }, didGetDir.bind(this), errorHandler);
+ return new Promise(fs.root.getDirectory.bind(fs.root, dirPath, { create: true }));
}
/**
* @param {!DirectoryEntry} dir
- * @this {WebInspector.TempFile}
*/
- function didGetDir(dir)
+ function getFileEntry(dir)
{
- dir.getFile(name, { create: true }, didCreateFile.bind(this), errorHandler);
+ return new Promise(dir.getFile.bind(dir, name, { create: true }));
}
/**
* @param {!FileEntry} fileEntry
- * @this {WebInspector.TempFile}
*/
- function didCreateFile(fileEntry)
+ function createFileWriter(fileEntry)
{
- this._fileEntry = fileEntry;
- fileEntry.createWriter(didCreateWriter.bind(this), errorHandler);
+ file._fileEntry = fileEntry;
+ return new Promise(fileEntry.createWriter.bind(fileEntry));
}
/**
* @param {!FileWriter} writer
- * @this {WebInspector.TempFile}
*/
- function didCreateWriter(writer)
+ function truncateFile(writer)
{
- /**
- * @this {WebInspector.TempFile}
- */
+ if (!writer.length) {
+ file._writer = writer;
+ return Promise.resolve(file);
+ }
+
+ function truncate(fulfill, reject)
+ {
+ writer.onwriteend = fulfill;
+ writer.onerror = reject;
+ writer.truncate(0);
+ }
+
function didTruncate(e)
{
- this._writer = writer;
+ file._writer = writer;
writer.onwriteend = null;
writer.onerror = null;
- callback(this);
+ return Promise.resolve(file);
}
function onTruncateError(e)
{
+ writer.onwriteend = null;
+ writer.onerror = null;
WebInspector.console.error("Failed to truncate temp file " + e.code + " : " + e.message);
- callback(null);
+ return Promise.reject(e);
}
- if (writer.length) {
- writer.onwriteend = didTruncate.bind(this);
- writer.onerror = onTruncateError;
- writer.truncate(0);
- } else {
- this._writer = writer;
- callback(this);
- }
+ return new Promise(truncate)
+ .then(didTruncate)
+ .catch(onTruncateError);
}
- function errorHandler(e)
- {
- WebInspector.console.error("Failed to create temp file " + e.code + " : " + e.message);
- callback(null);
- }
-
- /**
- * @this {WebInspector.TempFile}
- */
- function didClearTempStorage()
- {
- window.requestFileSystem(window.TEMPORARY, 10, didInitFs.bind(this), errorHandler);
- }
- WebInspector.TempFile._ensureTempStorageCleared(didClearTempStorage.bind(this));
+ return WebInspector.TempFile.ensureTempStorageCleared()
+ .then(requestTempFileSystem)
+ .then(getDirectoryEntry)
+ .then(getFileEntry)
+ .then(createFileWriter)
+ .then(truncateFile);
}
WebInspector.TempFile.prototype = {
@@ -233,7 +239,8 @@ WebInspector.DeferredTempFile = function(dirPath, name)
this._finishedWriting = false;
this._callsPendingOpen = [];
this._pendingReads = [];
- new WebInspector.TempFile(dirPath, name, this._didCreateTempFile.bind(this));
+ WebInspector.TempFile.create(dirPath, name)
+ .then(this._didCreateTempFile.bind(this), this._failToCreateTempFile.bind(this));
}
WebInspector.DeferredTempFile.prototype = {
@@ -263,6 +270,13 @@ WebInspector.DeferredTempFile.prototype = {
this._notifyFinished();
},
+ _failToCreateTempFile: function(e)
+ {
+ WebInspector.console.error("Failed to create temp file " + e.code + " : " + e.message);
+ this._chunks = null;
+ this._notifyFinished();
+ },
+
_didCreateTempFile: function(tempFile)
{
this._tempFile = tempFile;
@@ -270,11 +284,6 @@ WebInspector.DeferredTempFile.prototype = {
this._callsPendingOpen = null;
for (var i = 0; i < callsPendingOpen.length; ++i)
callsPendingOpen[i]();
- if (!tempFile) {
- this._chunks = null;
- this._notifyFinished();
- return;
- }
if (this._chunks.length)
this._writeNextChunk();
},
@@ -358,60 +367,39 @@ WebInspector.DeferredTempFile.prototype = {
}
}
-/**
- * @constructor
- */
-WebInspector.TempStorageCleaner = function()
+WebInspector.TempFile._clearTempStorage = function(fulfill, reject)
{
- this._worker = Runtime.startSharedWorker("temp_storage_shared_worker", "TempStorage");
- this._worker.onerror = this._handleError.bind(this);
- this._callbacks = [];
- this._worker.port.onmessage = this._handleMessage.bind(this);
- this._worker.port.onerror = this._handleError.bind(this);
-}
+ var worker = Runtime.startSharedWorker("temp_storage_shared_worker", "TempStorage");
apavlov 2014/11/07 11:06:03 I'm about to promisify the worker startup (see htt
-WebInspector.TempStorageCleaner.prototype = {
- /**
- * @param {!function()} callback
- */
- ensureStorageCleared: function(callback)
+ function handleError(event)
apavlov 2014/11/07 11:06:03 Please annotate things while you are here
loislo 2014/11/10 08:56:30 Done.
{
- if (this._callbacks)
- this._callbacks.push(callback);
- else
- callback();
- },
+ WebInspector.console.error(WebInspector.UIString("Failed to clear temp storage: %s", event.data));
+ reject(event.data);
+ }
- _handleMessage: function(event)
+ function handleMessage(event)
{
if (event.data.type === "tempStorageCleared") {
if (event.data.error)
WebInspector.console.error(event.data.error);
- this._notifyCallbacks();
+ else
+ fulfill();
+ return;
}
- },
-
- _handleError: function(event)
- {
- WebInspector.console.error(WebInspector.UIString("Failed to clear temp storage: %s", event.data));
- this._notifyCallbacks();
- },
-
- _notifyCallbacks: function()
- {
- var callbacks = this._callbacks;
- this._callbacks = null;
- for (var i = 0; i < callbacks.length; i++)
- callbacks[i]();
+ reject(event.data);
}
+
+ worker.onerror = handleError;
+ worker.port.onmessage = handleMessage;
+ worker.port.onerror = handleError;
}
/**
- * @param {!function()} callback
+ * @return {!Promise}
*/
-WebInspector.TempFile._ensureTempStorageCleared = function(callback)
+WebInspector.TempFile.ensureTempStorageCleared = function()
{
- if (!WebInspector.TempFile._storageCleaner)
- WebInspector.TempFile._storageCleaner = new WebInspector.TempStorageCleaner();
- WebInspector.TempFile._storageCleaner.ensureStorageCleared(callback);
+ if (!WebInspector.TempFile._storageCleanerPromise)
+ WebInspector.TempFile._storageCleanerPromise = new Promise(WebInspector.TempFile._clearTempStorage);
+ return WebInspector.TempFile._storageCleanerPromise;
}
« no previous file with comments | « no previous file | Source/devtools/front_end/profiler/CPUProfileView.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698