fix docs and update specs
authordeepak1556 <hop2deep@gmail.com>
Tue, 23 Aug 2016 05:59:21 +0000 (11:29 +0530)
committerdeepak1556 <hop2deep@gmail.com>
Wed, 31 Aug 2016 19:31:52 +0000 (01:01 +0530)
docs/api/protocol.md
docs/api/session.md
spec/api-session-spec.js

index 4605bc7..0f79f0a 100644 (file)
@@ -93,7 +93,7 @@ The `uploadData` is an array of `data` objects:
 * `data` Object
   * `bytes` Buffer - Content being sent.
   * `file` String - Path of file being uploaded.
-  * `blobUUId` String - UUID of blob data.
+  * `blobUUID` String - UUID of blob data.
 
 To handle the `request`, the `callback` should be called with either the file's
 path or an object that has a `path` property, e.g. `callback(filePath)` or
index 5fa4ba0..a691cb4 100644 (file)
@@ -326,13 +326,13 @@ This doesn't affect existing `WebContents`, and each `WebContents` can use
 
 Returns a `String` representing the user agent for this session.
 
-#### `ses.getBlobDataForUUID(uuid, callback)`
+#### `ses.getBlobData(identifier, callback)`
 
-* `uuid` String
+* `identifier` String - Valid UUID or public blob URL.
 * `callback` Function
   * `result` Buffer - Blob data.
 
-Returns the blob data associated with `uuid`.
+Returns the blob data associated with the `identifier`.
 
 ### Instance Properties
 
index 1caa08d..91f9777 100644 (file)
@@ -402,4 +402,68 @@ describe('session module', function () {
       })
     })
   })
+
+  describe('ses.getblobData(identifier, callback)', function () {
+    it('returns blob data for public url', function (done) {
+      let data = JSON.stringify({
+        type: 'blob',
+        value: 'hello'
+      })
+      let blob = new Blob([data], {type: 'application/json'})
+      let blobURL = URL.createObjectURL(blob)
+      session.defaultSession.getBlobData(blobURL, function (result) {
+        assert.equal(result.toString(), data)
+        done()
+      })
+    })
+
+    it('returns blob data for uuid', function (done) {
+      const scheme = 'temp'
+      const protocol = session.defaultSession.protocol
+      const url = scheme + '://host'
+      before(function () {
+        if (w != null) w.destroy()
+        w = new BrowserWindow({show: false})
+      })
+
+      after(function (done) {
+        protocol.unregisterProtocol(scheme, () => {
+          closeWindow(w).then(() => {
+            w = null
+            done()
+          })
+        })
+      })
+
+      const postData = JSON.stringify({
+        type: 'blob',
+        value: 'hello'
+      })
+      const content = `<html>
+                       <script>
+                       const {webFrame} = require('electron')
+                       webFrame.registerURLSchemeAsPrivileged('${scheme}')
+                       let fd = new FormData();
+                       fd.append('file', new Blob(['${postData}'], {type:'application/json'}));
+                       fetch('${url}', {method:'POST', body: fd });
+                       </script>
+                       </html>`
+
+      protocol.registerStringProtocol(scheme, function (request, callback) {
+        if (request.method === 'GET') {
+          callback({data: content, mimeType: 'text/html'})
+        } else if (request.method === 'POST') {
+          let uuid = request.uploadData[1].blobUUID
+          assert(uuid)
+          session.defaultSession.getBlobData(uuid, function (result) {
+            assert.equal(result.toString(), postData)
+            done()
+          })
+        }
+      }, function (error) {
+        if (error) return done(error)
+        w.loadURL(url)
+      })
+    })
+  })
 })