Wed, 31 Dec 2014 06:09:35 +0100
Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.
1 /* Any copyright is dedicated to the Public Domain.
2 * http://creativecommons.org/publicdomain/zero/1.0/
3 */
5 /**
6 * Tests that history navigation works for the add-ons manager.
7 */
9 const MAIN_URL = "https://example.com/" + RELATIVE_DIR + "discovery.html";
10 const SECOND_URL = "https://example.com/" + RELATIVE_DIR + "releaseNotes.xhtml";
12 var gLoadCompleteCallback = null;
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;
21 if (gLoadCompleteCallback)
22 executeSoon(gLoadCompleteCallback);
23 gLoadCompleteCallback = null;
24 },
26 onLocationChange: function() { },
27 onSecurityChange: function() { },
28 onProgressChange: function() { },
29 onStatusChange: function() { },
31 QueryInterface: XPCOMUtils.generateQI([Ci.nsIWebProgressListener,
32 Ci.nsISupportsWeakReference]),
33 };
35 function waitForLoad(aManager, aCallback) {
36 var browser = aManager.document.getElementById("discover-browser");
37 browser.addProgressListener(gProgressListener);
39 gLoadCompleteCallback = function() {
40 browser.removeProgressListener(gProgressListener);
41 aCallback();
42 };
43 }
45 function clickLink(aManager, aId, aCallback) {
46 waitForLoad(aManager, aCallback);
48 var browser = aManager.document.getElementById("discover-browser");
50 var link = browser.contentDocument.getElementById(aId);
51 EventUtils.sendMouseEvent({type: "click"}, link);
52 }
54 function test() {
55 requestLongerTimeout(2);
57 waitForExplicitFinish();
59 Services.prefs.setCharPref(PREF_DISCOVERURL, MAIN_URL);
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 }]);
79 run_next_test();
80 }
82 function end_test() {
83 finish();
84 }
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 }
95 function go_back_backspace(aManager) {
96 EventUtils.synthesizeKey("VK_BACK_SPACE",{});
97 }
99 function go_forward_backspace(aManager) {
100 EventUtils.synthesizeKey("VK_BACK_SPACE",{shiftKey: true});
101 }
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 }
112 function check_state(aManager, canGoBack, canGoForward) {
113 var doc = aManager.document;
115 if (gUseInContentUI) {
116 is(gBrowser.canGoBack, canGoBack, "canGoBack should be correct");
117 is(gBrowser.canGoForward, canGoForward, "canGoForward should be correct");
118 }
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 }
126 function is_in_list(aManager, view, canGoBack, canGoForward) {
127 var doc = aManager.document;
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");
132 check_state(aManager, canGoBack, canGoForward);
133 }
135 function is_in_search(aManager, query, canGoBack, canGoForward) {
136 var doc = aManager.document;
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");
142 check_state(aManager, canGoBack, canGoForward);
143 }
145 function is_in_detail(aManager, view, canGoBack, canGoForward) {
146 var doc = aManager.document;
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");
151 check_state(aManager, canGoBack, canGoForward);
152 }
154 function is_in_discovery(aManager, url, canGoBack, canGoForward) {
155 var browser = aManager.document.getElementById("discover-browser");
157 is(aManager.document.getElementById("discover-view").selectedPanel, browser,
158 "Browser should be visible");
160 var spec = browser.currentURI.spec;
161 var pos = spec.indexOf("#");
162 if (pos != -1)
163 spec = spec.substring(0, pos);
165 is(spec, url, "Should have loaded the right url");
167 check_state(aManager, canGoBack, canGoForward);
168 }
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 }
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);
184 EventUtils.synthesizeMouseAtCenter(aManager.document.getElementById("category-plugin"), { }, aManager);
186 wait_for_view_load(aManager, function(aManager) {
187 info("Part 2");
188 is_in_list(aManager, "addons://list/plugin", true, false);
190 go_back(aManager);
192 wait_for_view_load(aManager, function(aManager) {
193 info("Part 3");
194 is_in_list(aManager, "addons://list/extension", false, true);
196 go_forward(aManager);
198 wait_for_view_load(aManager, function(aManager) {
199 info("Part 4");
200 is_in_list(aManager, "addons://list/plugin", true, false);
202 go_back(aManager);
204 wait_for_view_load(aManager, function(aManager) {
205 info("Part 5");
206 is_in_list(aManager, "addons://list/extension", false, true);
208 double_click_addon_element(aManager, "test1@tests.mozilla.org");
210 wait_for_view_load(aManager, function(aManager) {
211 info("Part 6");
212 is_in_detail(aManager, "addons://list/extension", true, false);
214 go_back(aManager);
216 wait_for_view_load(aManager, function(aManager) {
217 info("Part 7");
218 is_in_list(aManager, "addons://list/extension", false, true);
220 close_manager(aManager, run_next_test);
221 });
222 });
223 });
224 });
225 });
226 });
227 });
228 });
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 }
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);
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");
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);
258 wait_for_view_load(gBrowser.contentWindow.wrappedJSObject, function(aManager) {
259 info("Part 3");
260 is_in_list(aManager, "addons://list/extension", true, false);
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");
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);
277 close_manager(aManager, run_next_test);
278 });
279 }, false);
280 }, false);
281 });
282 }, true);
283 });
284 }, false);
285 });
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() {
293 if (!gUseInContentUI || (Services.prefs.getIntPref("browser.backspace_action") != 0)) {
294 run_next_test();
295 return;
296 }
298 open_manager("addons://list/extension", function(aManager) {
299 info("Part 1");
300 is_in_list(aManager, "addons://list/extension", false, false);
302 EventUtils.synthesizeMouseAtCenter(aManager.document.getElementById("category-plugin"), { }, aManager);
304 wait_for_view_load(aManager, function(aManager) {
305 info("Part 2");
306 is_in_list(aManager, "addons://list/plugin", true, false);
308 go_back_backspace(aManager);
310 wait_for_view_load(aManager, function(aManager) {
311 info("Part 3");
312 is_in_list(aManager, "addons://list/extension", false, true);
314 go_forward_backspace(aManager);
316 wait_for_view_load(aManager, function(aManager) {
317 info("Part 4");
318 is_in_list(aManager, "addons://list/plugin", true, false);
320 go_back_backspace(aManager);
322 wait_for_view_load(aManager, function(aManager) {
323 info("Part 5");
324 is_in_list(aManager, "addons://list/extension", false, true);
326 double_click_addon_element(aManager, "test1@tests.mozilla.org");
328 wait_for_view_load(aManager, function(aManager) {
329 info("Part 6");
330 is_in_detail(aManager, "addons://list/extension", true, false);
332 go_back_backspace(aManager);
334 wait_for_view_load(aManager, function(aManager) {
335 info("Part 7");
336 is_in_list(aManager, "addons://list/extension", false, true);
338 close_manager(aManager, run_next_test);
339 });
340 });
341 });
342 });
343 });
344 });
345 });
346 });
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);
355 EventUtils.synthesizeMouseAtCenter(aManager.document.getElementById("category-extension"), { }, aManager);
357 wait_for_view_load(aManager, function(aManager) {
358 info("Part 2");
359 is_in_list(aManager, "addons://list/extension", true, false);
361 go_back(aManager);
363 wait_for_view_load(aManager, function(aManager) {
364 info("Part 3");
365 is_in_list(aManager, "addons://list/plugin", false, true);
367 close_manager(aManager, run_next_test);
368 });
369 });
370 });
371 });
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);
381 aManager.loadView("addons://list/plugin");
383 wait_for_view_load(aManager, function(aManager) {
384 info("Part 2");
385 is_in_list(aManager, "addons://list/plugin", true, false);
387 go_back(aManager);
389 wait_for_view_load(aManager, function(aManager) {
390 info("Part 3");
391 is_in_list(aManager, "addons://list/extension", false, true);
393 go_forward(aManager);
395 wait_for_view_load(aManager, function(aManager) {
396 info("Part 4");
397 is_in_list(aManager, "addons://list/plugin", true, false);
399 close_manager(aManager, run_next_test);
400 });
401 });
402 });
403 });
404 });
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 }
415 open_manager("addons://list/plugin", function(aManager) {
416 info("Part 1");
417 is_in_list(aManager, "addons://list/plugin", false, false);
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");
426 executeSoon(function() {
427 ok(gBrowser.canGoBack, "Should be able to go back");
428 ok(!gBrowser.canGoForward, "Should not be able to go forward");
430 go_back(aManager);
432 gBrowser.addEventListener("pageshow", function(event) {
433 if (event.target.location != "about:addons")
434 return;
435 gBrowser.removeEventListener("pageshow", arguments.callee, false);
437 wait_for_view_load(gBrowser.contentWindow.wrappedJSObject, function(aManager) {
438 info("Part 3");
439 is_in_list(aManager, "addons://list/plugin", false, true);
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");
448 executeSoon(function() {
449 ok(gBrowser.canGoBack, "Should be able to go back");
450 ok(!gBrowser.canGoForward, "Should not be able to go forward");
452 go_back(aManager);
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);
462 close_manager(aManager, run_next_test);
463 });
464 }, false);
465 });
466 }, false);
467 });
468 }, false);
469 });
470 }, false);
471 });
472 });
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);
485 if (filterTarget) {
486 is(filterTarget instanceof Ci.nsIRDFLiteral, true,
487 "Filter should be a value");
488 store.Unassert(filterResource, filterProperty, filterTarget);
489 }
491 open_manager("addons://list/extension", function(aManager) {
492 info("Part 1");
493 is_in_list(aManager, "addons://list/extension", false, false);
495 var search = aManager.document.getElementById("header-search");
496 search.focus();
497 search.value = "bar";
498 EventUtils.synthesizeKey("VK_RETURN", {}, aManager);
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");
506 is(remoteFilter.selected, true, "Remote filter should be set by default");
508 var list = aManager.document.getElementById("search-list");
509 list.ensureElementIsVisible(localFilter);
510 EventUtils.synthesizeMouseAtCenter(localFilter, { }, aManager);
512 is(localFilter.selected, true, "Should have changed to local filter");
514 // Now we continue with the normal test.
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"]);
520 double_click_addon_element(aManager, "test2@tests.mozilla.org");
522 wait_for_view_load(aManager, function(aManager) {
523 info("Part 3");
524 is_in_detail(aManager, "addons://search/", true, false);
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"]);
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);
537 close_manager(aManager, run_next_test);
538 });
539 });
540 });
541 });
542 });
543 });
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 }
554 open_manager("addons://list/extension", function(aManager) {
555 info("Part 1");
556 is_in_list(aManager, "addons://list/extension", false, false);
558 var search = aManager.document.getElementById("header-search");
559 search.focus();
560 search.value = "bar";
561 EventUtils.synthesizeKey("VK_RETURN", {});
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"]);
568 double_click_addon_element(aManager, "test2@tests.mozilla.org");
570 wait_for_view_load(aManager, function(aManager) {
571 info("Part 3");
572 is_in_detail(aManager, "addons://search/", true, false);
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);
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");
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);
591 wait_for_view_load(gBrowser.contentWindow.wrappedJSObject, function(aManager) {
592 info("Part 5");
593 is_in_detail(aManager, "addons://search/", true, true);
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"]);
601 close_manager(aManager, run_next_test);
602 });
603 });
604 }, false);
605 });
606 }, false);
607 });
608 });
609 });
610 });
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 }
620 open_manager("addons://list/extension", function(aManager) {
621 info("Part 1");
622 is_in_list(aManager, "addons://list/extension", false, false);
624 EventUtils.synthesizeMouseAtCenter(aManager.document.getElementById("category-plugin"), { }, aManager);
626 wait_for_view_load(aManager, function(aManager) {
627 info("Part 2");
628 is_in_list(aManager, "addons://list/plugin", true, false);
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);
636 wait_for_view_load(gBrowser.contentWindow.wrappedJSObject, function(aManager) {
637 info("Part 3");
638 is_in_list(aManager, "addons://list/plugin", true, false);
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);
645 close_manager(aManager, run_next_test);
646 });
647 });
648 }, false);
649 });
650 });
651 });
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 }
661 open_manager(null, function(aManager) {
662 info("Part 1");
663 is_in_list(aManager, "addons://list/extension", false, false);
665 double_click_addon_element(aManager, "test1@tests.mozilla.org");
667 wait_for_view_load(aManager, function(aManager) {
668 info("Part 2");
669 is_in_detail(aManager, "addons://list/extension", true, false);
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);
677 wait_for_view_load(gBrowser.contentWindow.wrappedJSObject, function(aManager) {
678 info("Part 3");
679 is_in_detail(aManager, "addons://list/extension", true, false);
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);
686 close_manager(aManager, run_next_test);
687 });
688 });
689 }, false);
690 });
691 });
692 });
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);
701 double_click_addon_element(aManager, "test1@tests.mozilla.org");
703 wait_for_view_load(aManager, function(aManager) {
704 info("Part 2");
705 is_in_detail(aManager, "addons://list/extension", true, false);
707 EventUtils.synthesizeMouseAtCenter(aManager.document.getElementById("detail-uninstall-btn"),
708 { }, aManager);
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 }
719 close_manager(aManager, run_next_test);
720 });
721 });
722 });
723 });
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;
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 }
744 close_manager(aManager, run_next_test);
745 });
746 });
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);
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);
759 close_manager(aManager, run_next_test);
760 });
761 });
762 });
763 });
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);
771 clickLink(aManager, "link-good", function() {
772 info("2");
773 is_in_discovery(aManager, SECOND_URL, true, false);
775 waitForLoad(aManager, function() {
776 info("3");
777 is_in_discovery(aManager, MAIN_URL, false, true);
779 waitForLoad(aManager, function() {
780 is_in_discovery(aManager, SECOND_URL, true, false);
782 EventUtils.synthesizeMouseAtCenter(aManager.document.getElementById("category-plugin"), { }, aManager);
784 wait_for_view_load(aManager, function(aManager) {
785 is_in_list(aManager, "addons://list/plugin", true, false);
787 go_back(aManager);
789 wait_for_view_load(aManager, function(aManager) {
790 is_in_discovery(aManager, SECOND_URL, true, true);
792 go_back(aManager);
794 waitForLoad(aManager, function() {
795 is_in_discovery(aManager, MAIN_URL, false, true);
797 close_manager(aManager, run_next_test);
798 });
799 });
800 });
801 });
803 go_forward(aManager);
804 });
806 go_back(aManager);
807 });
808 });
809 });
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);
816 EventUtils.synthesizeMouseAtCenter(aManager.document.getElementById("category-discover"), { }, aManager);
818 wait_for_view_load(aManager, function(aManager) {
819 is_in_discovery(aManager, MAIN_URL, true, false);
821 clickLink(aManager, "link-good", function() {
822 is_in_discovery(aManager, SECOND_URL, true, false);
824 waitForLoad(aManager, function() {
825 is_in_discovery(aManager, MAIN_URL, true, true);
827 waitForLoad(aManager, function() {
828 is_in_discovery(aManager, SECOND_URL, true, false);
830 EventUtils.synthesizeMouseAtCenter(aManager.document.getElementById("category-plugin"), { }, aManager);
832 wait_for_view_load(aManager, function(aManager) {
833 is_in_list(aManager, "addons://list/plugin", true, false);
835 go_back(aManager);
837 wait_for_view_load(aManager, function(aManager) {
838 is_in_discovery(aManager, SECOND_URL, true, true);
840 go_back(aManager);
842 waitForLoad(aManager, function() {
843 is_in_discovery(aManager, MAIN_URL, true, true);
845 go_back(aManager);
847 wait_for_view_load(aManager, function(aManager) {
848 is_in_list(aManager, "addons://list/plugin", false, true);
850 go_forward(aManager);
852 wait_for_view_load(aManager, function(aManager) {
853 is_in_discovery(aManager, MAIN_URL, true, true);
855 waitForLoad(aManager, function() {
856 is_in_discovery(aManager, SECOND_URL, true, true);
858 close_manager(aManager, run_next_test);
859 });
861 go_forward(aManager);
862 });
863 });
864 });
865 });
866 });
867 });
869 go_forward(aManager);
870 });
872 go_back(aManager);
873 });
874 });
875 });
876 });
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 }
886 var tab = gBrowser.addTab("about:addons");
887 var browser = gBrowser.getBrowserForTab(tab);
889 browser.addEventListener("pageshow", function(event) {
890 if (event.target.location.href != "about:addons")
891 return;
892 browser.removeEventListener("pageshow", arguments.callee, true);
894 wait_for_manager_load(browser.contentWindow.wrappedJSObject, function() {
895 wait_for_view_load(browser.contentWindow.wrappedJSObject, function(aManager) {
896 gBrowser.selectedTab = tab;
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 }
908 close_manager(aManager, run_next_test);
909 });
910 });
911 }, true);
912 });
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);
919 EventUtils.synthesizeMouseAtCenter(aManager.document.getElementById("category-discover"), { }, aManager);
921 wait_for_view_load(aManager, function(aManager) {
922 is_in_discovery(aManager, MAIN_URL, true, false);
924 clickLink(aManager, "link-good", function() {
925 is_in_discovery(aManager, SECOND_URL, true, false);
927 EventUtils.synthesizeMouseAtCenter(aManager.document.getElementById("category-discover"), { }, aManager);
929 waitForLoad(aManager, function() {
930 is_in_discovery(aManager, MAIN_URL, true, false);
932 go_back(aManager);
934 waitForLoad(aManager, function() {
935 is_in_discovery(aManager, SECOND_URL, true, true);
937 go_back(aManager);
939 waitForLoad(aManager, function() {
940 is_in_discovery(aManager, MAIN_URL, true, true);
942 go_back(aManager);
944 wait_for_view_load(aManager, function(aManager) {
945 is_in_list(aManager, "addons://list/plugin", false, true);
947 go_forward(aManager);
949 wait_for_view_load(aManager, function(aManager) {
950 is_in_discovery(aManager, MAIN_URL, true, true);
952 waitForLoad(aManager, function() {
953 is_in_discovery(aManager, SECOND_URL, true, true);
955 waitForLoad(aManager, function() {
956 is_in_discovery(aManager, MAIN_URL, true, false);
958 close_manager(aManager, run_next_test);
959 });
960 go_forward(aManager);
961 });
963 go_forward(aManager);
964 });
965 });
966 });
967 });
968 });
969 });
970 });
971 });
972 });