2 Any copyright is dedicated to the Public Domain.
3 http://creativecommons.org/publicdomain/zero/1.0/
7 https://bugzilla.mozilla.org/show_bug.cgi?id=717103
10 <title>Test for the device storage API
</title>
11 <script type=
"text/javascript" src=
"/tests/SimpleTest/SimpleTest.js"></script>
12 <script type=
"text/javascript" src=
"devicestorage_common.js"></script>
14 <link rel=
"stylesheet" type=
"text/css" href=
"/tests/SimpleTest/test.css" />
17 <a target=
"_blank" href=
"https://bugzilla.mozilla.org/show_bug.cgi?id=717103">Mozilla Bug
717103</a>
19 <div id=
"content" style=
"display: none">
23 <script class=
"testbody" type=
"text/javascript">
25 devicestorage_setup();
27 var gFileName =
"devicestorage/" + randomFilename(
12) +
"/hi.png";
28 var gData =
"My name is Doug Turner. My IRC nick is DougT. I like Maple cookies."
29 var gDataBlob = new Blob([gData], {type: 'image/png'});
30 var gFileReader = new FileReader();
32 function getAfterDeleteSuccess(e) {
33 ok(false,
"file was deleted not successfully");
34 devicestorage_cleanup();
37 function getAfterDeleteError(e) {
38 ok(true,
"file was deleted successfully");
39 devicestorage_cleanup();
42 function deleteSuccess(e) {
44 ok(e.target.result == gFileName,
"File name should match");
45 dump(e.target.result +
"\n")
47 // File was deleted using the sdcard stoage area. It should be gone
48 // from the pictures as well.
49 var storage = navigator.getDeviceStorage(
"pictures");
50 request = storage.get(e.target.result);
51 request.onsuccess = getAfterDeleteSuccess;
52 request.onerror = getAfterDeleteError;
55 function deleteError(e) {
56 ok(false,
"deleteError was called : " + e.target.error.name);
57 devicestorage_cleanup();
60 function getSuccess(e) {
61 // We wrote the file out using pictures type. Since we've over-ridden the
62 // root directory, we should be able to read it back using the sdcard
64 var storage = navigator.getDeviceStorage(
"sdcard");
65 ok(navigator.getDeviceStorage,
"Should have getDeviceStorage");
67 ok(e.target.result.name == gFileName,
"File name should match");
68 ok(e.target.result.size
> 0,
"File size be greater than zero");
69 ok(e.target.result.type,
"File should have a mime type");
70 ok(e.target.result.lastModifiedDate,
"File should have a last modified date");
72 var name = e.target.result.name;
74 gFileReader.readAsArrayBuffer(gDataBlob);
75 gFileReader.onload = function(e) {
78 request = storage.delete(name)
79 request.onsuccess = deleteSuccess;
80 request.onerror = deleteError;
84 function readerCallback(e) {
88 is(ab.byteLength, gData.length,
"wrong arraybuffer byteLength");
89 var u8v = new Uint8Array(ab);
90 is(String.fromCharCode.apply(String, u8v), gData,
"wrong values");
93 function getError(e) {
94 ok(false,
"getError was called : " + e.target.error.name);
95 devicestorage_cleanup();
98 function addSuccess(e) {
100 var filename = e.target.result;
101 if (filename[
0] ==
"/") {
102 // We got /storageName/prefix/filename
103 // Remove the storageName (this shows up on FirefoxOS)
104 filename = filename.substring(
1); // Remove leading slash
105 var slashIndex = filename.indexOf(
"/");
106 if (slashIndex
>=
0) {
107 filename = filename.substring(slashIndex +
1); // Remove storageName
110 ok(filename == gFileName,
"File name should match");
112 // Update gFileName to be the fully qualified name so that
113 // further checks will pass.
114 gFileName = e.target.result;
116 var storage = navigator.getDeviceStorage(
"pictures");
117 request = storage.get(gFileName);
118 request.onsuccess = getSuccess;
119 request.onerror = getError;
121 ok(true,
"addSuccess was called");
124 function addError(e) {
125 ok(false,
"addError was called : " + e.target.error.name);
126 devicestorage_cleanup();
129 function startTest() {
130 ok(navigator.getDeviceStorage,
"Should have getDeviceStorage");
132 var storage = navigator.getDeviceStorage(
"pictures");
133 ok(storage,
"Should have gotten a storage");
135 request = storage.addNamed(gDataBlob, gFileName);
136 ok(request,
"Should have a non-null request");
138 request.onsuccess = addSuccess;
139 request.onerror = addError;
143 const Cc = SpecialPowers.Cc;
144 const Ci = SpecialPowers.Ci;
145 var directoryService = Cc[
"@mozilla.org/file/directory_service;1"].getService(Ci.nsIProperties);
146 var f = directoryService.get(
"TmpD", Ci.nsIFile);
147 f.appendRelativePath(
"device-storage-sdcard");
149 // The remove will fail if the directory doesn't exist, which is fine.
152 SpecialPowers.pushPrefEnv({'set': [[
"device.storage.overrideRootDir", f.path],
153 [
"device.storage.testing", false]]},