|
1 /* Any copyright is dedicated to the Public Domain. |
|
2 * http://creativecommons.org/publicdomain/zero/1.0/ |
|
3 */ |
|
4 |
|
5 /** |
|
6 * Tests that history navigation works for the add-ons manager. |
|
7 */ |
|
8 |
|
9 const MAIN_URL = "https://example.com/" + RELATIVE_DIR + "discovery.html"; |
|
10 const SECOND_URL = "https://example.com/" + RELATIVE_DIR + "releaseNotes.xhtml"; |
|
11 |
|
12 var gLoadCompleteCallback = null; |
|
13 |
|
14 var gProgressListener = { |
|
15 onStateChange: function(aWebProgress, aRequest, aStateFlags, aStatus) { |
|
16 // Only care about the network stop status events |
|
17 if (!(aStateFlags & (Ci.nsIWebProgressListener.STATE_IS_NETWORK)) || |
|
18 !(aStateFlags & (Ci.nsIWebProgressListener.STATE_STOP))) |
|
19 return; |
|
20 |
|
21 if (gLoadCompleteCallback) |
|
22 executeSoon(gLoadCompleteCallback); |
|
23 gLoadCompleteCallback = null; |
|
24 }, |
|
25 |
|
26 onLocationChange: function() { }, |
|
27 onSecurityChange: function() { }, |
|
28 onProgressChange: function() { }, |
|
29 onStatusChange: function() { }, |
|
30 |
|
31 QueryInterface: XPCOMUtils.generateQI([Ci.nsIWebProgressListener, |
|
32 Ci.nsISupportsWeakReference]), |
|
33 }; |
|
34 |
|
35 function waitForLoad(aManager, aCallback) { |
|
36 var browser = aManager.document.getElementById("discover-browser"); |
|
37 browser.addProgressListener(gProgressListener); |
|
38 |
|
39 gLoadCompleteCallback = function() { |
|
40 browser.removeProgressListener(gProgressListener); |
|
41 aCallback(); |
|
42 }; |
|
43 } |
|
44 |
|
45 function clickLink(aManager, aId, aCallback) { |
|
46 waitForLoad(aManager, aCallback); |
|
47 |
|
48 var browser = aManager.document.getElementById("discover-browser"); |
|
49 |
|
50 var link = browser.contentDocument.getElementById(aId); |
|
51 EventUtils.sendMouseEvent({type: "click"}, link); |
|
52 } |
|
53 |
|
54 function test() { |
|
55 requestLongerTimeout(2); |
|
56 |
|
57 waitForExplicitFinish(); |
|
58 |
|
59 Services.prefs.setCharPref(PREF_DISCOVERURL, MAIN_URL); |
|
60 |
|
61 var gProvider = new MockProvider(); |
|
62 gProvider.createAddons([{ |
|
63 id: "test1@tests.mozilla.org", |
|
64 name: "Test add-on 1", |
|
65 description: "foo" |
|
66 }, |
|
67 { |
|
68 id: "test2@tests.mozilla.org", |
|
69 name: "Test add-on 2", |
|
70 description: "bar" |
|
71 }, |
|
72 { |
|
73 id: "test3@tests.mozilla.org", |
|
74 name: "Test add-on 3", |
|
75 type: "theme", |
|
76 description: "bar" |
|
77 }]); |
|
78 |
|
79 run_next_test(); |
|
80 } |
|
81 |
|
82 function end_test() { |
|
83 finish(); |
|
84 } |
|
85 |
|
86 function go_back(aManager) { |
|
87 if (gUseInContentUI) { |
|
88 gBrowser.goBack(); |
|
89 } else { |
|
90 EventUtils.synthesizeMouseAtCenter(aManager.document.getElementById("back-btn"), |
|
91 { }, aManager); |
|
92 } |
|
93 } |
|
94 |
|
95 function go_back_backspace(aManager) { |
|
96 EventUtils.synthesizeKey("VK_BACK_SPACE",{}); |
|
97 } |
|
98 |
|
99 function go_forward_backspace(aManager) { |
|
100 EventUtils.synthesizeKey("VK_BACK_SPACE",{shiftKey: true}); |
|
101 } |
|
102 |
|
103 function go_forward(aManager) { |
|
104 if (gUseInContentUI) { |
|
105 gBrowser.goForward(); |
|
106 } else { |
|
107 EventUtils.synthesizeMouseAtCenter(aManager.document.getElementById("forward-btn"), |
|
108 { }, aManager); |
|
109 } |
|
110 } |
|
111 |
|
112 function check_state(aManager, canGoBack, canGoForward) { |
|
113 var doc = aManager.document; |
|
114 |
|
115 if (gUseInContentUI) { |
|
116 is(gBrowser.canGoBack, canGoBack, "canGoBack should be correct"); |
|
117 is(gBrowser.canGoForward, canGoForward, "canGoForward should be correct"); |
|
118 } |
|
119 |
|
120 if (!is_hidden(doc.getElementById("back-btn"))) { |
|
121 is(!doc.getElementById("back-btn").disabled, canGoBack, "Back button should have the right state"); |
|
122 is(!doc.getElementById("forward-btn").disabled, canGoForward, "Forward button should have the right state"); |
|
123 } |
|
124 } |
|
125 |
|
126 function is_in_list(aManager, view, canGoBack, canGoForward) { |
|
127 var doc = aManager.document; |
|
128 |
|
129 is(doc.getElementById("categories").selectedItem.value, view, "Should be on the right category"); |
|
130 is(doc.getElementById("view-port").selectedPanel.id, "list-view", "Should be on the right view"); |
|
131 |
|
132 check_state(aManager, canGoBack, canGoForward); |
|
133 } |
|
134 |
|
135 function is_in_search(aManager, query, canGoBack, canGoForward) { |
|
136 var doc = aManager.document; |
|
137 |
|
138 is(doc.getElementById("categories").selectedItem.value, "addons://search/", "Should be on the right category"); |
|
139 is(doc.getElementById("view-port").selectedPanel.id, "search-view", "Should be on the right view"); |
|
140 is(doc.getElementById("header-search").value, query, "Should have used the right query"); |
|
141 |
|
142 check_state(aManager, canGoBack, canGoForward); |
|
143 } |
|
144 |
|
145 function is_in_detail(aManager, view, canGoBack, canGoForward) { |
|
146 var doc = aManager.document; |
|
147 |
|
148 is(doc.getElementById("categories").selectedItem.value, view, "Should be on the right category"); |
|
149 is(doc.getElementById("view-port").selectedPanel.id, "detail-view", "Should be on the right view"); |
|
150 |
|
151 check_state(aManager, canGoBack, canGoForward); |
|
152 } |
|
153 |
|
154 function is_in_discovery(aManager, url, canGoBack, canGoForward) { |
|
155 var browser = aManager.document.getElementById("discover-browser"); |
|
156 |
|
157 is(aManager.document.getElementById("discover-view").selectedPanel, browser, |
|
158 "Browser should be visible"); |
|
159 |
|
160 var spec = browser.currentURI.spec; |
|
161 var pos = spec.indexOf("#"); |
|
162 if (pos != -1) |
|
163 spec = spec.substring(0, pos); |
|
164 |
|
165 is(spec, url, "Should have loaded the right url"); |
|
166 |
|
167 check_state(aManager, canGoBack, canGoForward); |
|
168 } |
|
169 |
|
170 function double_click_addon_element(aManager, aId) { |
|
171 var addon = get_addon_element(aManager, aId); |
|
172 addon.parentNode.ensureElementIsVisible(addon); |
|
173 EventUtils.synthesizeMouseAtCenter(addon, { clickCount: 1 }, aManager); |
|
174 EventUtils.synthesizeMouseAtCenter(addon, { clickCount: 2 }, aManager); |
|
175 } |
|
176 |
|
177 // Tests simple forward and back navigation and that the right heading and |
|
178 // category is selected |
|
179 add_test(function() { |
|
180 open_manager("addons://list/extension", function(aManager) { |
|
181 info("Part 1"); |
|
182 is_in_list(aManager, "addons://list/extension", false, false); |
|
183 |
|
184 EventUtils.synthesizeMouseAtCenter(aManager.document.getElementById("category-plugin"), { }, aManager); |
|
185 |
|
186 wait_for_view_load(aManager, function(aManager) { |
|
187 info("Part 2"); |
|
188 is_in_list(aManager, "addons://list/plugin", true, false); |
|
189 |
|
190 go_back(aManager); |
|
191 |
|
192 wait_for_view_load(aManager, function(aManager) { |
|
193 info("Part 3"); |
|
194 is_in_list(aManager, "addons://list/extension", false, true); |
|
195 |
|
196 go_forward(aManager); |
|
197 |
|
198 wait_for_view_load(aManager, function(aManager) { |
|
199 info("Part 4"); |
|
200 is_in_list(aManager, "addons://list/plugin", true, false); |
|
201 |
|
202 go_back(aManager); |
|
203 |
|
204 wait_for_view_load(aManager, function(aManager) { |
|
205 info("Part 5"); |
|
206 is_in_list(aManager, "addons://list/extension", false, true); |
|
207 |
|
208 double_click_addon_element(aManager, "test1@tests.mozilla.org"); |
|
209 |
|
210 wait_for_view_load(aManager, function(aManager) { |
|
211 info("Part 6"); |
|
212 is_in_detail(aManager, "addons://list/extension", true, false); |
|
213 |
|
214 go_back(aManager); |
|
215 |
|
216 wait_for_view_load(aManager, function(aManager) { |
|
217 info("Part 7"); |
|
218 is_in_list(aManager, "addons://list/extension", false, true); |
|
219 |
|
220 close_manager(aManager, run_next_test); |
|
221 }); |
|
222 }); |
|
223 }); |
|
224 }); |
|
225 }); |
|
226 }); |
|
227 }); |
|
228 }); |
|
229 |
|
230 // Tests that browsing to the add-ons manager from a website and going back works |
|
231 // Only relevant for in-content UI |
|
232 add_test(function() { |
|
233 if (!gUseInContentUI) { |
|
234 run_next_test(); |
|
235 return; |
|
236 } |
|
237 |
|
238 info("Part 1"); |
|
239 gBrowser.selectedTab = gBrowser.addTab(); |
|
240 gBrowser.loadURI("http://example.com/"); |
|
241 gBrowser.addEventListener("pageshow", function(event) { |
|
242 if (event.target.location != "http://example.com/") |
|
243 return; |
|
244 gBrowser.removeEventListener("pageshow", arguments.callee, false); |
|
245 |
|
246 //Must let the load complete for it to go into the session history |
|
247 executeSoon(function() { |
|
248 info("Part 2"); |
|
249 ok(!gBrowser.canGoBack, "Should not be able to go back"); |
|
250 ok(!gBrowser.canGoForward, "Should not be able to go forward"); |
|
251 |
|
252 gBrowser.loadURI("about:addons"); |
|
253 gBrowser.addEventListener("pageshow", function(event) { |
|
254 if (event.target.location != "about:addons") |
|
255 return; |
|
256 gBrowser.removeEventListener("pageshow", arguments.callee, true); |
|
257 |
|
258 wait_for_view_load(gBrowser.contentWindow.wrappedJSObject, function(aManager) { |
|
259 info("Part 3"); |
|
260 is_in_list(aManager, "addons://list/extension", true, false); |
|
261 |
|
262 go_back(aManager); |
|
263 gBrowser.addEventListener("pageshow", function() { |
|
264 gBrowser.removeEventListener("pageshow", arguments.callee, false); |
|
265 info("Part 4"); |
|
266 is(gBrowser.currentURI.spec, "http://example.com/", "Should be showing the webpage"); |
|
267 ok(!gBrowser.canGoBack, "Should not be able to go back"); |
|
268 ok(gBrowser.canGoForward, "Should be able to go forward"); |
|
269 |
|
270 go_forward(aManager); |
|
271 gBrowser.addEventListener("pageshow", function() { |
|
272 gBrowser.removeEventListener("pageshow", arguments.callee, false); |
|
273 wait_for_view_load(gBrowser.contentWindow.wrappedJSObject, function(aManager) { |
|
274 info("Part 5"); |
|
275 is_in_list(aManager, "addons://list/extension", true, false); |
|
276 |
|
277 close_manager(aManager, run_next_test); |
|
278 }); |
|
279 }, false); |
|
280 }, false); |
|
281 }); |
|
282 }, true); |
|
283 }); |
|
284 }, false); |
|
285 }); |
|
286 |
|
287 // Tests simple forward and back navigation and that the right heading and |
|
288 // category is selected -- Keyboard navigation [Bug 565359] |
|
289 // Only add the test if the backspace key navigates back and addon-manager |
|
290 // loaded in a tab |
|
291 add_test(function() { |
|
292 |
|
293 if (!gUseInContentUI || (Services.prefs.getIntPref("browser.backspace_action") != 0)) { |
|
294 run_next_test(); |
|
295 return; |
|
296 } |
|
297 |
|
298 open_manager("addons://list/extension", function(aManager) { |
|
299 info("Part 1"); |
|
300 is_in_list(aManager, "addons://list/extension", false, false); |
|
301 |
|
302 EventUtils.synthesizeMouseAtCenter(aManager.document.getElementById("category-plugin"), { }, aManager); |
|
303 |
|
304 wait_for_view_load(aManager, function(aManager) { |
|
305 info("Part 2"); |
|
306 is_in_list(aManager, "addons://list/plugin", true, false); |
|
307 |
|
308 go_back_backspace(aManager); |
|
309 |
|
310 wait_for_view_load(aManager, function(aManager) { |
|
311 info("Part 3"); |
|
312 is_in_list(aManager, "addons://list/extension", false, true); |
|
313 |
|
314 go_forward_backspace(aManager); |
|
315 |
|
316 wait_for_view_load(aManager, function(aManager) { |
|
317 info("Part 4"); |
|
318 is_in_list(aManager, "addons://list/plugin", true, false); |
|
319 |
|
320 go_back_backspace(aManager); |
|
321 |
|
322 wait_for_view_load(aManager, function(aManager) { |
|
323 info("Part 5"); |
|
324 is_in_list(aManager, "addons://list/extension", false, true); |
|
325 |
|
326 double_click_addon_element(aManager, "test1@tests.mozilla.org"); |
|
327 |
|
328 wait_for_view_load(aManager, function(aManager) { |
|
329 info("Part 6"); |
|
330 is_in_detail(aManager, "addons://list/extension", true, false); |
|
331 |
|
332 go_back_backspace(aManager); |
|
333 |
|
334 wait_for_view_load(aManager, function(aManager) { |
|
335 info("Part 7"); |
|
336 is_in_list(aManager, "addons://list/extension", false, true); |
|
337 |
|
338 close_manager(aManager, run_next_test); |
|
339 }); |
|
340 }); |
|
341 }); |
|
342 }); |
|
343 }); |
|
344 }); |
|
345 }); |
|
346 }); |
|
347 |
|
348 |
|
349 // Tests that opening a custom first view only stores a single history entry |
|
350 add_test(function() { |
|
351 open_manager("addons://list/plugin", function(aManager) { |
|
352 info("Part 1"); |
|
353 is_in_list(aManager, "addons://list/plugin", false, false); |
|
354 |
|
355 EventUtils.synthesizeMouseAtCenter(aManager.document.getElementById("category-extension"), { }, aManager); |
|
356 |
|
357 wait_for_view_load(aManager, function(aManager) { |
|
358 info("Part 2"); |
|
359 is_in_list(aManager, "addons://list/extension", true, false); |
|
360 |
|
361 go_back(aManager); |
|
362 |
|
363 wait_for_view_load(aManager, function(aManager) { |
|
364 info("Part 3"); |
|
365 is_in_list(aManager, "addons://list/plugin", false, true); |
|
366 |
|
367 close_manager(aManager, run_next_test); |
|
368 }); |
|
369 }); |
|
370 }); |
|
371 }); |
|
372 |
|
373 |
|
374 // Tests that opening a view while the manager is already open adds a new |
|
375 // history entry |
|
376 add_test(function() { |
|
377 open_manager("addons://list/extension", function(aManager) { |
|
378 info("Part 1"); |
|
379 is_in_list(aManager, "addons://list/extension", false, false); |
|
380 |
|
381 aManager.loadView("addons://list/plugin"); |
|
382 |
|
383 wait_for_view_load(aManager, function(aManager) { |
|
384 info("Part 2"); |
|
385 is_in_list(aManager, "addons://list/plugin", true, false); |
|
386 |
|
387 go_back(aManager); |
|
388 |
|
389 wait_for_view_load(aManager, function(aManager) { |
|
390 info("Part 3"); |
|
391 is_in_list(aManager, "addons://list/extension", false, true); |
|
392 |
|
393 go_forward(aManager); |
|
394 |
|
395 wait_for_view_load(aManager, function(aManager) { |
|
396 info("Part 4"); |
|
397 is_in_list(aManager, "addons://list/plugin", true, false); |
|
398 |
|
399 close_manager(aManager, run_next_test); |
|
400 }); |
|
401 }); |
|
402 }); |
|
403 }); |
|
404 }); |
|
405 |
|
406 // Tests than navigating to a website and then going back returns to the |
|
407 // previous view |
|
408 // Only relevant for in-content UI |
|
409 add_test(function() { |
|
410 if (!gUseInContentUI) { |
|
411 run_next_test(); |
|
412 return; |
|
413 } |
|
414 |
|
415 open_manager("addons://list/plugin", function(aManager) { |
|
416 info("Part 1"); |
|
417 is_in_list(aManager, "addons://list/plugin", false, false); |
|
418 |
|
419 gBrowser.loadURI("http://example.com/"); |
|
420 gBrowser.addEventListener("pageshow", function(event) { |
|
421 if (event.target.location != "http://example.com/") |
|
422 return; |
|
423 gBrowser.removeEventListener("pageshow", arguments.callee, false); |
|
424 info("Part 2"); |
|
425 |
|
426 executeSoon(function() { |
|
427 ok(gBrowser.canGoBack, "Should be able to go back"); |
|
428 ok(!gBrowser.canGoForward, "Should not be able to go forward"); |
|
429 |
|
430 go_back(aManager); |
|
431 |
|
432 gBrowser.addEventListener("pageshow", function(event) { |
|
433 if (event.target.location != "about:addons") |
|
434 return; |
|
435 gBrowser.removeEventListener("pageshow", arguments.callee, false); |
|
436 |
|
437 wait_for_view_load(gBrowser.contentWindow.wrappedJSObject, function(aManager) { |
|
438 info("Part 3"); |
|
439 is_in_list(aManager, "addons://list/plugin", false, true); |
|
440 |
|
441 go_forward(aManager); |
|
442 gBrowser.addEventListener("pageshow", function(event) { |
|
443 if (event.target.location != "http://example.com/") |
|
444 return; |
|
445 gBrowser.removeEventListener("pageshow", arguments.callee, false); |
|
446 info("Part 4"); |
|
447 |
|
448 executeSoon(function() { |
|
449 ok(gBrowser.canGoBack, "Should be able to go back"); |
|
450 ok(!gBrowser.canGoForward, "Should not be able to go forward"); |
|
451 |
|
452 go_back(aManager); |
|
453 |
|
454 gBrowser.addEventListener("pageshow", function(event) { |
|
455 if (event.target.location != "about:addons") |
|
456 return; |
|
457 gBrowser.removeEventListener("pageshow", arguments.callee, false); |
|
458 wait_for_view_load(gBrowser.contentWindow.wrappedJSObject, function(aManager) { |
|
459 info("Part 5"); |
|
460 is_in_list(aManager, "addons://list/plugin", false, true); |
|
461 |
|
462 close_manager(aManager, run_next_test); |
|
463 }); |
|
464 }, false); |
|
465 }); |
|
466 }, false); |
|
467 }); |
|
468 }, false); |
|
469 }); |
|
470 }, false); |
|
471 }); |
|
472 }); |
|
473 |
|
474 // Tests that going back to search results works |
|
475 add_test(function() { |
|
476 // Before we open the add-ons manager, we should make sure that no filter |
|
477 // has been set. If one is set, we remove it. |
|
478 // This is for the check below, from bug 611459. |
|
479 let RDF = Cc["@mozilla.org/rdf/rdf-service;1"].getService(Ci.nsIRDFService); |
|
480 let store = RDF.GetDataSource("rdf:local-store"); |
|
481 let filterResource = RDF.GetResource("about:addons#search-filter-radiogroup"); |
|
482 let filterProperty = RDF.GetResource("value"); |
|
483 let filterTarget = store.GetTarget(filterResource, filterProperty, true); |
|
484 |
|
485 if (filterTarget) { |
|
486 is(filterTarget instanceof Ci.nsIRDFLiteral, true, |
|
487 "Filter should be a value"); |
|
488 store.Unassert(filterResource, filterProperty, filterTarget); |
|
489 } |
|
490 |
|
491 open_manager("addons://list/extension", function(aManager) { |
|
492 info("Part 1"); |
|
493 is_in_list(aManager, "addons://list/extension", false, false); |
|
494 |
|
495 var search = aManager.document.getElementById("header-search"); |
|
496 search.focus(); |
|
497 search.value = "bar"; |
|
498 EventUtils.synthesizeKey("VK_RETURN", {}, aManager); |
|
499 |
|
500 wait_for_view_load(aManager, function(aManager) { |
|
501 // Remote search is meant to be checked by default (bug 611459), so we |
|
502 // confirm that and then switch to a local search. |
|
503 var localFilter = aManager.document.getElementById("search-filter-local"); |
|
504 var remoteFilter = aManager.document.getElementById("search-filter-remote"); |
|
505 |
|
506 is(remoteFilter.selected, true, "Remote filter should be set by default"); |
|
507 |
|
508 var list = aManager.document.getElementById("search-list"); |
|
509 list.ensureElementIsVisible(localFilter); |
|
510 EventUtils.synthesizeMouseAtCenter(localFilter, { }, aManager); |
|
511 |
|
512 is(localFilter.selected, true, "Should have changed to local filter"); |
|
513 |
|
514 // Now we continue with the normal test. |
|
515 |
|
516 info("Part 2"); |
|
517 is_in_search(aManager, "bar", true, false); |
|
518 check_all_in_list(aManager, ["test2@tests.mozilla.org", "test3@tests.mozilla.org"]); |
|
519 |
|
520 double_click_addon_element(aManager, "test2@tests.mozilla.org"); |
|
521 |
|
522 wait_for_view_load(aManager, function(aManager) { |
|
523 info("Part 3"); |
|
524 is_in_detail(aManager, "addons://search/", true, false); |
|
525 |
|
526 go_back(aManager); |
|
527 wait_for_view_load(aManager, function(aManager) { |
|
528 info("Part 4"); |
|
529 is_in_search(aManager, "bar", true, true); |
|
530 check_all_in_list(aManager, ["test2@tests.mozilla.org", "test3@tests.mozilla.org"]); |
|
531 |
|
532 go_forward(aManager); |
|
533 wait_for_view_load(aManager, function(aManager) { |
|
534 info("Part 5"); |
|
535 is_in_detail(aManager, "addons://search/", true, false); |
|
536 |
|
537 close_manager(aManager, run_next_test); |
|
538 }); |
|
539 }); |
|
540 }); |
|
541 }); |
|
542 }); |
|
543 }); |
|
544 |
|
545 // Tests that going back from a webpage to a detail view loaded from a search |
|
546 // result works |
|
547 // Only relevant for in-content UI |
|
548 add_test(function() { |
|
549 if (!gUseInContentUI) { |
|
550 run_next_test(); |
|
551 return; |
|
552 } |
|
553 |
|
554 open_manager("addons://list/extension", function(aManager) { |
|
555 info("Part 1"); |
|
556 is_in_list(aManager, "addons://list/extension", false, false); |
|
557 |
|
558 var search = aManager.document.getElementById("header-search"); |
|
559 search.focus(); |
|
560 search.value = "bar"; |
|
561 EventUtils.synthesizeKey("VK_RETURN", {}); |
|
562 |
|
563 wait_for_view_load(aManager, function(aManager) { |
|
564 info("Part 2"); |
|
565 is_in_search(aManager, "bar", true, false); |
|
566 check_all_in_list(aManager, ["test2@tests.mozilla.org", "test3@tests.mozilla.org"]); |
|
567 |
|
568 double_click_addon_element(aManager, "test2@tests.mozilla.org"); |
|
569 |
|
570 wait_for_view_load(aManager, function(aManager) { |
|
571 info("Part 3"); |
|
572 is_in_detail(aManager, "addons://search/", true, false); |
|
573 |
|
574 gBrowser.loadURI("http://example.com/"); |
|
575 gBrowser.addEventListener("pageshow", function(event) { |
|
576 if (event.target.location != "http://example.com/") |
|
577 return; |
|
578 gBrowser.removeEventListener("pageshow", arguments.callee, false); |
|
579 |
|
580 info("Part 4"); |
|
581 executeSoon(function() { |
|
582 ok(gBrowser.canGoBack, "Should be able to go back"); |
|
583 ok(!gBrowser.canGoForward, "Should not be able to go forward"); |
|
584 |
|
585 go_back(aManager); |
|
586 gBrowser.addEventListener("pageshow", function(event) { |
|
587 if (event.target.location != "about:addons") |
|
588 return; |
|
589 gBrowser.removeEventListener("pageshow", arguments.callee, false); |
|
590 |
|
591 wait_for_view_load(gBrowser.contentWindow.wrappedJSObject, function(aManager) { |
|
592 info("Part 5"); |
|
593 is_in_detail(aManager, "addons://search/", true, true); |
|
594 |
|
595 go_back(aManager); |
|
596 wait_for_view_load(aManager, function(aManager) { |
|
597 info("Part 6"); |
|
598 is_in_search(aManager, "bar", true, true); |
|
599 check_all_in_list(aManager, ["test2@tests.mozilla.org", "test3@tests.mozilla.org"]); |
|
600 |
|
601 close_manager(aManager, run_next_test); |
|
602 }); |
|
603 }); |
|
604 }, false); |
|
605 }); |
|
606 }, false); |
|
607 }); |
|
608 }); |
|
609 }); |
|
610 }); |
|
611 |
|
612 // Tests that refreshing a list view does not affect the history |
|
613 // Only relevant for in-content UI |
|
614 add_test(function() { |
|
615 if (!gUseInContentUI) { |
|
616 run_next_test(); |
|
617 return; |
|
618 } |
|
619 |
|
620 open_manager("addons://list/extension", function(aManager) { |
|
621 info("Part 1"); |
|
622 is_in_list(aManager, "addons://list/extension", false, false); |
|
623 |
|
624 EventUtils.synthesizeMouseAtCenter(aManager.document.getElementById("category-plugin"), { }, aManager); |
|
625 |
|
626 wait_for_view_load(aManager, function(aManager) { |
|
627 info("Part 2"); |
|
628 is_in_list(aManager, "addons://list/plugin", true, false); |
|
629 |
|
630 gBrowser.reload(); |
|
631 gBrowser.addEventListener("pageshow", function(event) { |
|
632 if (event.target.location != "about:addons") |
|
633 return; |
|
634 gBrowser.removeEventListener("pageshow", arguments.callee, false); |
|
635 |
|
636 wait_for_view_load(gBrowser.contentWindow.wrappedJSObject, function(aManager) { |
|
637 info("Part 3"); |
|
638 is_in_list(aManager, "addons://list/plugin", true, false); |
|
639 |
|
640 go_back(aManager); |
|
641 wait_for_view_load(aManager, function(aManager) { |
|
642 info("Part 4"); |
|
643 is_in_list(aManager, "addons://list/extension", false, true); |
|
644 |
|
645 close_manager(aManager, run_next_test); |
|
646 }); |
|
647 }); |
|
648 }, false); |
|
649 }); |
|
650 }); |
|
651 }); |
|
652 |
|
653 // Tests that refreshing a detail view does not affect the history |
|
654 // Only relevant for in-content UI |
|
655 add_test(function() { |
|
656 if (!gUseInContentUI) { |
|
657 run_next_test(); |
|
658 return; |
|
659 } |
|
660 |
|
661 open_manager(null, function(aManager) { |
|
662 info("Part 1"); |
|
663 is_in_list(aManager, "addons://list/extension", false, false); |
|
664 |
|
665 double_click_addon_element(aManager, "test1@tests.mozilla.org"); |
|
666 |
|
667 wait_for_view_load(aManager, function(aManager) { |
|
668 info("Part 2"); |
|
669 is_in_detail(aManager, "addons://list/extension", true, false); |
|
670 |
|
671 gBrowser.reload(); |
|
672 gBrowser.addEventListener("pageshow", function(event) { |
|
673 if (event.target.location != "about:addons") |
|
674 return; |
|
675 gBrowser.removeEventListener("pageshow", arguments.callee, false); |
|
676 |
|
677 wait_for_view_load(gBrowser.contentWindow.wrappedJSObject, function(aManager) { |
|
678 info("Part 3"); |
|
679 is_in_detail(aManager, "addons://list/extension", true, false); |
|
680 |
|
681 go_back(aManager); |
|
682 wait_for_view_load(aManager, function(aManager) { |
|
683 info("Part 4"); |
|
684 is_in_list(aManager, "addons://list/extension", false, true); |
|
685 |
|
686 close_manager(aManager, run_next_test); |
|
687 }); |
|
688 }); |
|
689 }, false); |
|
690 }); |
|
691 }); |
|
692 }); |
|
693 |
|
694 // Tests that removing an extension from the detail view goes back and doesn't |
|
695 // allow you to go forward again. |
|
696 add_test(function() { |
|
697 open_manager("addons://list/extension", function(aManager) { |
|
698 info("Part 1"); |
|
699 is_in_list(aManager, "addons://list/extension", false, false); |
|
700 |
|
701 double_click_addon_element(aManager, "test1@tests.mozilla.org"); |
|
702 |
|
703 wait_for_view_load(aManager, function(aManager) { |
|
704 info("Part 2"); |
|
705 is_in_detail(aManager, "addons://list/extension", true, false); |
|
706 |
|
707 EventUtils.synthesizeMouseAtCenter(aManager.document.getElementById("detail-uninstall-btn"), |
|
708 { }, aManager); |
|
709 |
|
710 wait_for_view_load(aManager, function() { |
|
711 if (gUseInContentUI) { |
|
712 // TODO until bug 590661 is fixed the back button will be enabled |
|
713 // when displaying in content |
|
714 is_in_list(aManager, "addons://list/extension", true, false); |
|
715 } else { |
|
716 is_in_list(aManager, "addons://list/extension", false, false); |
|
717 } |
|
718 |
|
719 close_manager(aManager, run_next_test); |
|
720 }); |
|
721 }); |
|
722 }); |
|
723 }); |
|
724 |
|
725 // Tests that the back and forward buttons only show up for windowed mode |
|
726 add_test(function() { |
|
727 open_manager(null, function(aManager) { |
|
728 var doc = aManager.document; |
|
729 |
|
730 if (gUseInContentUI) { |
|
731 var btn = document.getElementById("back-button"); |
|
732 if (!btn || is_hidden(btn)) { |
|
733 is_element_visible(doc.getElementById("back-btn"), "Back button should not be hidden"); |
|
734 is_element_visible(doc.getElementById("forward-btn"), "Forward button should not be hidden"); |
|
735 } else { |
|
736 is_element_hidden(doc.getElementById("back-btn"), "Back button should be hidden"); |
|
737 is_element_hidden(doc.getElementById("forward-btn"), "Forward button should be hidden"); |
|
738 } |
|
739 } else { |
|
740 is_element_visible(doc.getElementById("back-btn"), "Back button should not be hidden"); |
|
741 is_element_visible(doc.getElementById("forward-btn"), "Forward button should not be hidden"); |
|
742 } |
|
743 |
|
744 close_manager(aManager, run_next_test); |
|
745 }); |
|
746 }); |
|
747 |
|
748 // Tests that opening the manager opens the last view |
|
749 add_test(function() { |
|
750 open_manager("addons://list/plugin", function(aManager) { |
|
751 info("Part 1"); |
|
752 is_in_list(aManager, "addons://list/plugin", false, false); |
|
753 |
|
754 close_manager(aManager, function() { |
|
755 open_manager(null, function(aManager) { |
|
756 info("Part 2"); |
|
757 is_in_list(aManager, "addons://list/plugin", false, false); |
|
758 |
|
759 close_manager(aManager, run_next_test); |
|
760 }); |
|
761 }); |
|
762 }); |
|
763 }); |
|
764 |
|
765 // Tests that navigating the discovery page works when that was the first view |
|
766 add_test(function() { |
|
767 open_manager("addons://discover/", function(aManager) { |
|
768 info("1"); |
|
769 is_in_discovery(aManager, MAIN_URL, false, false); |
|
770 |
|
771 clickLink(aManager, "link-good", function() { |
|
772 info("2"); |
|
773 is_in_discovery(aManager, SECOND_URL, true, false); |
|
774 |
|
775 waitForLoad(aManager, function() { |
|
776 info("3"); |
|
777 is_in_discovery(aManager, MAIN_URL, false, true); |
|
778 |
|
779 waitForLoad(aManager, function() { |
|
780 is_in_discovery(aManager, SECOND_URL, true, false); |
|
781 |
|
782 EventUtils.synthesizeMouseAtCenter(aManager.document.getElementById("category-plugin"), { }, aManager); |
|
783 |
|
784 wait_for_view_load(aManager, function(aManager) { |
|
785 is_in_list(aManager, "addons://list/plugin", true, false); |
|
786 |
|
787 go_back(aManager); |
|
788 |
|
789 wait_for_view_load(aManager, function(aManager) { |
|
790 is_in_discovery(aManager, SECOND_URL, true, true); |
|
791 |
|
792 go_back(aManager); |
|
793 |
|
794 waitForLoad(aManager, function() { |
|
795 is_in_discovery(aManager, MAIN_URL, false, true); |
|
796 |
|
797 close_manager(aManager, run_next_test); |
|
798 }); |
|
799 }); |
|
800 }); |
|
801 }); |
|
802 |
|
803 go_forward(aManager); |
|
804 }); |
|
805 |
|
806 go_back(aManager); |
|
807 }); |
|
808 }); |
|
809 }); |
|
810 |
|
811 // Tests that navigating the discovery page works when that was the second view |
|
812 add_test(function() { |
|
813 open_manager("addons://list/plugin", function(aManager) { |
|
814 is_in_list(aManager, "addons://list/plugin", false, false); |
|
815 |
|
816 EventUtils.synthesizeMouseAtCenter(aManager.document.getElementById("category-discover"), { }, aManager); |
|
817 |
|
818 wait_for_view_load(aManager, function(aManager) { |
|
819 is_in_discovery(aManager, MAIN_URL, true, false); |
|
820 |
|
821 clickLink(aManager, "link-good", function() { |
|
822 is_in_discovery(aManager, SECOND_URL, true, false); |
|
823 |
|
824 waitForLoad(aManager, function() { |
|
825 is_in_discovery(aManager, MAIN_URL, true, true); |
|
826 |
|
827 waitForLoad(aManager, function() { |
|
828 is_in_discovery(aManager, SECOND_URL, true, false); |
|
829 |
|
830 EventUtils.synthesizeMouseAtCenter(aManager.document.getElementById("category-plugin"), { }, aManager); |
|
831 |
|
832 wait_for_view_load(aManager, function(aManager) { |
|
833 is_in_list(aManager, "addons://list/plugin", true, false); |
|
834 |
|
835 go_back(aManager); |
|
836 |
|
837 wait_for_view_load(aManager, function(aManager) { |
|
838 is_in_discovery(aManager, SECOND_URL, true, true); |
|
839 |
|
840 go_back(aManager); |
|
841 |
|
842 waitForLoad(aManager, function() { |
|
843 is_in_discovery(aManager, MAIN_URL, true, true); |
|
844 |
|
845 go_back(aManager); |
|
846 |
|
847 wait_for_view_load(aManager, function(aManager) { |
|
848 is_in_list(aManager, "addons://list/plugin", false, true); |
|
849 |
|
850 go_forward(aManager); |
|
851 |
|
852 wait_for_view_load(aManager, function(aManager) { |
|
853 is_in_discovery(aManager, MAIN_URL, true, true); |
|
854 |
|
855 waitForLoad(aManager, function() { |
|
856 is_in_discovery(aManager, SECOND_URL, true, true); |
|
857 |
|
858 close_manager(aManager, run_next_test); |
|
859 }); |
|
860 |
|
861 go_forward(aManager); |
|
862 }); |
|
863 }); |
|
864 }); |
|
865 }); |
|
866 }); |
|
867 }); |
|
868 |
|
869 go_forward(aManager); |
|
870 }); |
|
871 |
|
872 go_back(aManager); |
|
873 }); |
|
874 }); |
|
875 }); |
|
876 }); |
|
877 |
|
878 // Tests that when displaying in-content and opened in the background the back |
|
879 // and forward buttons still appear when switching tabs |
|
880 add_test(function() { |
|
881 if (!gUseInContentUI) { |
|
882 run_next_test(); |
|
883 return; |
|
884 } |
|
885 |
|
886 var tab = gBrowser.addTab("about:addons"); |
|
887 var browser = gBrowser.getBrowserForTab(tab); |
|
888 |
|
889 browser.addEventListener("pageshow", function(event) { |
|
890 if (event.target.location.href != "about:addons") |
|
891 return; |
|
892 browser.removeEventListener("pageshow", arguments.callee, true); |
|
893 |
|
894 wait_for_manager_load(browser.contentWindow.wrappedJSObject, function() { |
|
895 wait_for_view_load(browser.contentWindow.wrappedJSObject, function(aManager) { |
|
896 gBrowser.selectedTab = tab; |
|
897 |
|
898 var doc = aManager.document; |
|
899 var btn = document.getElementById("back-button"); |
|
900 if (!btn || is_hidden(btn)) { |
|
901 is_element_visible(doc.getElementById("back-btn"), "Back button should not be hidden"); |
|
902 is_element_visible(doc.getElementById("forward-btn"), "Forward button should not be hidden"); |
|
903 } else { |
|
904 is_element_hidden(doc.getElementById("back-btn"), "Back button should be hidden"); |
|
905 is_element_hidden(doc.getElementById("forward-btn"), "Forward button should be hidden"); |
|
906 } |
|
907 |
|
908 close_manager(aManager, run_next_test); |
|
909 }); |
|
910 }); |
|
911 }, true); |
|
912 }); |
|
913 |
|
914 // Tests that refreshing the disicovery pane integrates properly with history |
|
915 add_test(function() { |
|
916 open_manager("addons://list/plugin", function(aManager) { |
|
917 is_in_list(aManager, "addons://list/plugin", false, false); |
|
918 |
|
919 EventUtils.synthesizeMouseAtCenter(aManager.document.getElementById("category-discover"), { }, aManager); |
|
920 |
|
921 wait_for_view_load(aManager, function(aManager) { |
|
922 is_in_discovery(aManager, MAIN_URL, true, false); |
|
923 |
|
924 clickLink(aManager, "link-good", function() { |
|
925 is_in_discovery(aManager, SECOND_URL, true, false); |
|
926 |
|
927 EventUtils.synthesizeMouseAtCenter(aManager.document.getElementById("category-discover"), { }, aManager); |
|
928 |
|
929 waitForLoad(aManager, function() { |
|
930 is_in_discovery(aManager, MAIN_URL, true, false); |
|
931 |
|
932 go_back(aManager); |
|
933 |
|
934 waitForLoad(aManager, function() { |
|
935 is_in_discovery(aManager, SECOND_URL, true, true); |
|
936 |
|
937 go_back(aManager); |
|
938 |
|
939 waitForLoad(aManager, function() { |
|
940 is_in_discovery(aManager, MAIN_URL, true, true); |
|
941 |
|
942 go_back(aManager); |
|
943 |
|
944 wait_for_view_load(aManager, function(aManager) { |
|
945 is_in_list(aManager, "addons://list/plugin", false, true); |
|
946 |
|
947 go_forward(aManager); |
|
948 |
|
949 wait_for_view_load(aManager, function(aManager) { |
|
950 is_in_discovery(aManager, MAIN_URL, true, true); |
|
951 |
|
952 waitForLoad(aManager, function() { |
|
953 is_in_discovery(aManager, SECOND_URL, true, true); |
|
954 |
|
955 waitForLoad(aManager, function() { |
|
956 is_in_discovery(aManager, MAIN_URL, true, false); |
|
957 |
|
958 close_manager(aManager, run_next_test); |
|
959 }); |
|
960 go_forward(aManager); |
|
961 }); |
|
962 |
|
963 go_forward(aManager); |
|
964 }); |
|
965 }); |
|
966 }); |
|
967 }); |
|
968 }); |
|
969 }); |
|
970 }); |
|
971 }); |
|
972 }); |