michael@0: /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ michael@0: /* This Source Code Form is subject to the terms of the Mozilla Public michael@0: * License, v. 2.0. If a copy of the MPL was not distributed with this michael@0: * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ michael@0: michael@0: // This tests taskbar jump list functionality available on win7 and up. michael@0: michael@0: const Cc = Components.classes; michael@0: const Ci = Components.interfaces; michael@0: michael@0: function test_basics() michael@0: { michael@0: var item = Cc["@mozilla.org/windows-jumplistitem;1"]. michael@0: createInstance(Ci.nsIJumpListItem); michael@0: michael@0: var sep = Cc["@mozilla.org/windows-jumplistseparator;1"]. michael@0: createInstance(Ci.nsIJumpListSeparator); michael@0: michael@0: var shortcut = Cc["@mozilla.org/windows-jumplistshortcut;1"]. michael@0: createInstance(Ci.nsIJumpListShortcut); michael@0: michael@0: var link = Cc["@mozilla.org/windows-jumplistlink;1"]. michael@0: createInstance(Ci.nsIJumpListLink); michael@0: michael@0: do_check_false(item.equals(sep)); michael@0: do_check_false(item.equals(shortcut)); michael@0: do_check_false(item.equals(link)); michael@0: michael@0: do_check_false(sep.equals(item)); michael@0: do_check_false(sep.equals(shortcut)); michael@0: do_check_false(sep.equals(link)); michael@0: michael@0: do_check_false(shortcut.equals(item)); michael@0: do_check_false(shortcut.equals(sep)); michael@0: do_check_false(shortcut.equals(link)); michael@0: michael@0: do_check_false(link.equals(item)); michael@0: do_check_false(link.equals(sep)); michael@0: do_check_false(link.equals(shortcut)); michael@0: michael@0: do_check_true(item.equals(item)); michael@0: do_check_true(sep.equals(sep)); michael@0: do_check_true(link.equals(link)); michael@0: do_check_true(shortcut.equals(shortcut)); michael@0: } michael@0: michael@0: function test_separator() michael@0: { michael@0: // separators: michael@0: michael@0: var item = Cc["@mozilla.org/windows-jumplistseparator;1"]. michael@0: createInstance(Ci.nsIJumpListSeparator); michael@0: michael@0: do_check_true(item.type == Ci.nsIJumpListItem.JUMPLIST_ITEM_SEPARATOR); michael@0: } michael@0: michael@0: function test_hashes() michael@0: { michael@0: var link = Cc["@mozilla.org/windows-jumplistlink;1"] michael@0: .createInstance(Ci.nsIJumpListLink); michael@0: var uri1 = Cc["@mozilla.org/network/simple-uri;1"] michael@0: .createInstance(Ci.nsIURI); michael@0: var uri2 = Cc["@mozilla.org/network/simple-uri;1"] michael@0: .createInstance(Ci.nsIURI); michael@0: michael@0: uri1.spec = "http://www.123.com/"; michael@0: uri2.spec = "http://www.123.com/"; michael@0: michael@0: link.uri = uri1; michael@0: michael@0: do_check_true(link.compareHash(uri2)) michael@0: uri2.spec = "http://www.456.com/"; michael@0: do_check_false(link.compareHash(uri2)) michael@0: uri2.spec = "http://www.123.com/"; michael@0: do_check_true(link.compareHash(uri2)) michael@0: uri2.spec = "https://www.123.com/"; michael@0: do_check_false(link.compareHash(uri2)) michael@0: uri2.spec = "http://www.123.com/test/"; michael@0: do_check_false(link.compareHash(uri2)) michael@0: uri1.spec = "http://www.123.com/test/"; michael@0: uri2.spec = "http://www.123.com/test/"; michael@0: do_check_true(link.compareHash(uri2)) michael@0: uri1.spec = "https://www.123.com/test/"; michael@0: uri2.spec = "https://www.123.com/test/"; michael@0: do_check_true(link.compareHash(uri2)) michael@0: uri2.spec = "ftp://www.123.com/test/"; michael@0: do_check_false(link.compareHash(uri2)) michael@0: uri2.spec = "http://123.com/test/"; michael@0: do_check_false(link.compareHash(uri2)) michael@0: uri1.spec = "https://www.123.com/test/"; michael@0: uri2.spec = "https://www.123.com/Test/"; michael@0: do_check_false(link.compareHash(uri2)) michael@0: michael@0: uri1.spec = "http://www.123.com/"; michael@0: do_check_eq(link.uriHash, "QGLmWuwuTozr3tOfXSf5mg=="); michael@0: uri1.spec = "http://www.123.com/test/"; michael@0: do_check_eq(link.uriHash, "AG87Ls+GmaUYSUJFETRr3Q=="); michael@0: uri1.spec = "https://www.123.com/"; michael@0: do_check_eq(link.uriHash, "iSx6UH1a9enVPzUA9JZ42g=="); michael@0: michael@0: var uri3 = Cc["@mozilla.org/network/simple-uri;1"] michael@0: .createInstance(Ci.nsIURI); michael@0: link.uri = uri3; michael@0: do_check_eq(link.uriHash, "hTrpDwNRMkvXPqYV5kh1Fw=="); michael@0: } michael@0: michael@0: function test_links() michael@0: { michael@0: // links: michael@0: var link1 = Cc["@mozilla.org/windows-jumplistlink;1"] michael@0: .createInstance(Ci.nsIJumpListLink); michael@0: var link2 = Cc["@mozilla.org/windows-jumplistlink;1"] michael@0: .createInstance(Ci.nsIJumpListLink); michael@0: michael@0: var uri1 = Cc["@mozilla.org/network/simple-uri;1"] michael@0: .createInstance(Ci.nsIURI); michael@0: var uri2 = Cc["@mozilla.org/network/simple-uri;1"] michael@0: .createInstance(Ci.nsIURI); michael@0: michael@0: uri1.spec = "http://www.test.com/"; michael@0: uri2.spec = "http://www.test.com/"; michael@0: michael@0: link1.uri = uri1; michael@0: link1.uriTitle = "Test"; michael@0: link2.uri = uri2; michael@0: link2.uriTitle = "Test"; michael@0: michael@0: do_check_true(link1.equals(link2)); michael@0: michael@0: link2.uriTitle = "Testing"; michael@0: michael@0: do_check_false(link1.equals(link2)); michael@0: michael@0: link2.uriTitle = "Test"; michael@0: uri2.spec = "http://www.testing.com/"; michael@0: michael@0: do_check_false(link1.equals(link2)); michael@0: } michael@0: michael@0: function test_shortcuts() michael@0: { michael@0: // shortcuts: michael@0: var sc = Cc["@mozilla.org/windows-jumplistshortcut;1"] michael@0: .createInstance(Ci.nsIJumpListShortcut); michael@0: michael@0: var handlerApp = Cc["@mozilla.org/uriloader/local-handler-app;1"] michael@0: .createInstance(Ci.nsILocalHandlerApp); michael@0: michael@0: handlerApp.name = "TestApp"; michael@0: handlerApp.detailedDescription = "TestApp detailed description."; michael@0: handlerApp.appendParameter("-test"); michael@0: michael@0: sc.iconIndex = 1; michael@0: do_check_eq(sc.iconIndex, 1); michael@0: michael@0: var faviconPageUri = Cc["@mozilla.org/network/simple-uri;1"] michael@0: .createInstance(Ci.nsIURI); michael@0: faviconPageUri.spec = "http://www.123.com/"; michael@0: sc.faviconPageUri = faviconPageUri; michael@0: do_check_eq(sc.faviconPageUri, faviconPageUri); michael@0: michael@0: var dirSvc = Cc["@mozilla.org/file/directory_service;1"]. michael@0: getService(Ci.nsIProperties). michael@0: QueryInterface(Ci.nsIDirectoryService); michael@0: var notepad = dirSvc.get("WinD", Ci.nsIFile); michael@0: notepad.append("notepad.exe"); michael@0: if (notepad.exists()) { michael@0: handlerApp.executable = notepad; michael@0: sc.app = handlerApp; michael@0: do_check_eq(sc.app.detailedDescription, "TestApp detailed description."); michael@0: do_check_eq(sc.app.name, "TestApp"); michael@0: do_check_true(sc.app.parameterExists("-test")); michael@0: do_check_false(sc.app.parameterExists("-notset")); michael@0: } michael@0: } michael@0: michael@0: function test_jumplist() michael@0: { michael@0: // Jump lists can't register links unless the application is the default michael@0: // protocol handler for the protocol of the link, so we skip off testing michael@0: // those in these tests. We'll init the jump list for the xpc shell harness, michael@0: // add a task item, and commit it. michael@0: michael@0: // not compiled in michael@0: if (Ci.nsIWinTaskbar == null) michael@0: return; michael@0: michael@0: var taskbar = Cc["@mozilla.org/windows-taskbar;1"] michael@0: .getService(Ci.nsIWinTaskbar); michael@0: michael@0: var builder = taskbar.createJumpListBuilder(); michael@0: michael@0: do_check_neq(builder, null); michael@0: michael@0: // Win7 and up only michael@0: try { michael@0: var sysInfo = Cc["@mozilla.org/system-info;1"]. michael@0: getService(Ci.nsIPropertyBag2); michael@0: var ver = parseFloat(sysInfo.getProperty("version")); michael@0: if (ver < 6.1) { michael@0: do_check_false(builder.available, false); michael@0: return; michael@0: } michael@0: } catch (ex) { } michael@0: michael@0: do_check_true(taskbar.available); michael@0: michael@0: builder.deleteActiveList(); michael@0: michael@0: var items = Cc["@mozilla.org/array;1"] michael@0: .createInstance(Ci.nsIMutableArray); michael@0: michael@0: var sc = Cc["@mozilla.org/windows-jumplistshortcut;1"] michael@0: .createInstance(Ci.nsIJumpListShortcut); michael@0: michael@0: var handlerApp = Cc["@mozilla.org/uriloader/local-handler-app;1"] michael@0: .createInstance(Ci.nsILocalHandlerApp); michael@0: michael@0: handlerApp.name = "Notepad"; michael@0: handlerApp.detailedDescription = "Testing detailed description."; michael@0: michael@0: var dirSvc = Cc["@mozilla.org/file/directory_service;1"]. michael@0: getService(Ci.nsIProperties). michael@0: QueryInterface(Ci.nsIDirectoryService); michael@0: var notepad = dirSvc.get("WinD", Ci.nsIFile); michael@0: notepad.append("notepad.exe"); michael@0: if (notepad.exists()) { michael@0: handlerApp.executable = notepad; michael@0: sc.app = handlerApp; michael@0: items.appendElement(sc, false); michael@0: michael@0: var removed = Cc["@mozilla.org/array;1"] michael@0: .createInstance(Ci.nsIMutableArray); michael@0: do_check_true(builder.initListBuild(removed)); michael@0: do_check_true(builder.addListToBuild(builder.JUMPLIST_CATEGORY_TASKS, items)); michael@0: do_check_true(builder.addListToBuild(builder.JUMPLIST_CATEGORY_RECENT)); michael@0: do_check_true(builder.addListToBuild(builder.JUMPLIST_CATEGORY_FREQUENT)); michael@0: do_check_true(builder.commitListBuild()); michael@0: michael@0: builder.deleteActiveList(); michael@0: michael@0: do_check_true(builder.initListBuild(removed)); michael@0: do_check_true(builder.addListToBuild(builder.JUMPLIST_CATEGORY_CUSTOM, items, "Custom List")); michael@0: do_check_true(builder.commitListBuild()); michael@0: michael@0: builder.deleteActiveList(); michael@0: } michael@0: } michael@0: michael@0: function run_test() michael@0: { michael@0: var isWindows = ("@mozilla.org/windows-registry-key;1" in Components.classes); michael@0: if (!isWindows) michael@0: return; michael@0: michael@0: test_basics(); michael@0: test_separator(); michael@0: test_hashes(); michael@0: test_links(); michael@0: test_shortcuts(); michael@0: test_jumplist(); michael@0: }