|
1 <?xml version="1.0"?> |
|
2 <!-- This Source Code Form is subject to the terms of the Mozilla Public |
|
3 - License, v. 2.0. If a copy of the MPL was not distributed with this |
|
4 - file, You can obtain one at http://mozilla.org/MPL/2.0/. --> |
|
5 <!-- |
|
6 * Assure download manager can load valid list item as |
|
7 * "application/moz-x-file" |
|
8 |
|
9 https://bugzilla.mozilla.org/show_bug.cgi?id=462172 |
|
10 |
|
11 create a file with unique name |
|
12 create another file with unique name and delete it |
|
13 load into downloads database |
|
14 open download manager |
|
15 synthesize drag on both files |
|
16 missing file should not init drag |
|
17 real file should return transferdata with application/x-moz-file |
|
18 close window |
|
19 |
|
20 --> |
|
21 <window title="Mozilla Bug 462172" |
|
22 xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" |
|
23 onload="test();"> |
|
24 <script type="application/javascript" |
|
25 src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"/> |
|
26 <script type="application/javascript" |
|
27 src="utils.js"/> |
|
28 <script type="application/javascript" |
|
29 src="chrome://mochikit/content/tests/SimpleTest/EventUtils.js"></script> |
|
30 <script type="application/javascript" |
|
31 src="chrome://mochikit/content/tests/SimpleTest/ChromeUtils.js"></script> |
|
32 <script type="application/javascript"> |
|
33 <![CDATA[ |
|
34 |
|
35 /** Test for Bug 462172 **/ |
|
36 var missingFileElid; |
|
37 var realFileElid; |
|
38 const kFiller = "notApplicable"; |
|
39 const kFillerURL = "https://bugzilla.mozilla.org/show_bug.cgi?id=462172" |
|
40 var realFile = Cc["@mozilla.org/file/directory_service;1"]. |
|
41 getService(Ci.nsIProperties).get("CurWorkD", Ci.nsIFile); |
|
42 var missingFile = Cc["@mozilla.org/file/directory_service;1"]. |
|
43 getService(Ci.nsIProperties).get("CurWorkD", Ci.nsIFile); |
|
44 |
|
45 var ios = Cc["@mozilla.org/network/io-service;1"].getService(Ci.nsIIOService); |
|
46 |
|
47 realFile.append(kFiller); |
|
48 realFile.createUnique(Ci.nsIFile.NORMAL_FILE_TYPE, 0666); |
|
49 var realFilePath = ios.newFileURI(realFile).spec; |
|
50 |
|
51 missingFile.append(kFiller); |
|
52 missingFile.createUnique(Ci.nsIFile.NORMAL_FILE_TYPE, 0666); |
|
53 var missingFilePath = ios.newFileURI(missingFile).spec; |
|
54 missingFile.remove(false); |
|
55 |
|
56 // Dummy data for our files. |
|
57 // 'source' field must be in form of an URL. |
|
58 const DownloadData = [ |
|
59 { name: kFiller, |
|
60 source: kFillerURL, |
|
61 target: realFilePath, |
|
62 state: Ci.nsIDownloadManager.DOWNLOAD_FINISHED}, |
|
63 { name: kFiller, |
|
64 source: kFillerURL, |
|
65 target: missingFilePath, |
|
66 state: Ci.nsIDownloadManager.DOWNLOAD_FINISHED} |
|
67 ]; |
|
68 |
|
69 function compareStrFunc(actualData, expectedData) { |
|
70 return expectedData === actualData; |
|
71 } |
|
72 |
|
73 function compareFunc(actualData, expectedData) { |
|
74 return expectedData.equals(actualData); |
|
75 } |
|
76 |
|
77 var dragRealFile = [[ |
|
78 { type :"application/x-moz-file", |
|
79 data : realFile, |
|
80 eqTest : compareFunc }, |
|
81 { type : "text/uri-list", |
|
82 data : realFilePath, |
|
83 eqTest : compareStrFunc }, |
|
84 { type : "text/plain", |
|
85 data : realFilePath, |
|
86 eqTest : compareStrFunc } |
|
87 ]]; |
|
88 var dragMissingFile = [[ |
|
89 { type :"application/x-moz-file", |
|
90 data : missingFile, |
|
91 eqTest : compareFunc }, |
|
92 { type : "text/uri-list", |
|
93 data : missingFilePath, |
|
94 eqTest : compareStrFunc }, |
|
95 { type : "text/plain", |
|
96 data : missingFilePath, |
|
97 eqTest : compareStrFunc } |
|
98 ]]; |
|
99 |
|
100 function test() { |
|
101 |
|
102 var dmui = getDMUI(); |
|
103 if (!dmui) { |
|
104 todo(false, "skip test for toolkit download manager UI"); |
|
105 return; |
|
106 } |
|
107 |
|
108 // load files into db |
|
109 var dm = Cc["@mozilla.org/download-manager;1"]. |
|
110 getService(Ci.nsIDownloadManager); |
|
111 var db = dm.DBConnection; |
|
112 |
|
113 var stmt = db.createStatement( |
|
114 "INSERT INTO moz_downloads ( name, source, target, state)" + |
|
115 "VALUES (:name, :source, :target, :state)"); |
|
116 for each (var dl in DownloadData) { |
|
117 for (var prop in dl) |
|
118 stmt.params[prop] = dl[prop]; |
|
119 stmt.execute(); |
|
120 if (dl.target == missingFilePath) |
|
121 missingFileElid = "dl" + db.lastInsertRowID; |
|
122 else if (dl.target == realFilePath) |
|
123 realFileElid = "dl" + db.lastInsertRowID; |
|
124 } |
|
125 stmt.finalize(); |
|
126 |
|
127 // See if the DM is already open, and if it is, close it! |
|
128 var win = getDMWindow(); |
|
129 if (win) win.close(); |
|
130 |
|
131 var os = Cc["@mozilla.org/observer-service;1"]. |
|
132 getService(Ci.nsIObserverService); |
|
133 const DLMGR_UI_DONE = "download-manager-ui-done"; |
|
134 |
|
135 var testObs = { |
|
136 observe: function(aSubject, aTopic, aData) { |
|
137 if (aTopic != DLMGR_UI_DONE) |
|
138 return; |
|
139 |
|
140 var win = aSubject.QueryInterface(Ci.nsIDOMWindow); |
|
141 win.focus(); |
|
142 |
|
143 // Now we can run our tests |
|
144 var result = synthesizeDragStart(win.document.getElementById(realFileElid), dragRealFile, win); |
|
145 is(result, null, "Checking for Real file match"); |
|
146 result = synthesizeDragStart(win.document.getElementById(missingFileElid), dragMissingFile, win); |
|
147 isnot(result, null, "Drag start did not return item for missing file"); |
|
148 |
|
149 // Done. |
|
150 win.close(); |
|
151 realFile.remove(false); |
|
152 os.removeObserver(testObs, DLMGR_UI_DONE); |
|
153 SimpleTest.finish(); |
|
154 } |
|
155 }; |
|
156 |
|
157 // Register with the observer service |
|
158 os.addObserver(testObs, DLMGR_UI_DONE, false); |
|
159 |
|
160 // Show the Download Manager UI |
|
161 dmui.show(); |
|
162 |
|
163 SimpleTest.waitForExplicitFinish(); |
|
164 } |
|
165 |
|
166 ]]> |
|
167 </script> |
|
168 |
|
169 <body xmlns="http://www.w3.org/1999/xhtml"> |
|
170 <p id="display"></p> |
|
171 <div id="content" style="display:none;"></div> |
|
172 <pre id="test"></pre> |
|
173 </body> |
|
174 </window> |