toolkit/mozapps/extensions/test/browser/browser_bug562797.js

changeset 0
6474c204b198
equal deleted inserted replaced
-1:000000000000 0:b287862266fd
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 });

mercurial