michael@0: function test() { michael@0: var isWin7OrHigher = false; michael@0: try { michael@0: let version = Cc["@mozilla.org/system-info;1"] michael@0: .getService(Ci.nsIPropertyBag2) michael@0: .getProperty("version"); michael@0: isWin7OrHigher = (parseFloat(version) >= 6.1); michael@0: } catch (ex) { } michael@0: michael@0: is(!!Win7Features, isWin7OrHigher, "Win7Features available when it should be"); michael@0: if (!isWin7OrHigher) michael@0: return; michael@0: michael@0: const ENABLE_PREF_NAME = "browser.taskbar.previews.enable"; michael@0: michael@0: let temp = {}; michael@0: Cu.import("resource:///modules/WindowsPreviewPerTab.jsm", temp); michael@0: let AeroPeek = temp.AeroPeek; michael@0: michael@0: waitForExplicitFinish(); michael@0: michael@0: gPrefService.setBoolPref(ENABLE_PREF_NAME, true); michael@0: michael@0: is(1, AeroPeek.windows.length, "Got the expected number of windows"); michael@0: michael@0: checkPreviews(1, "Browser starts with one preview"); michael@0: michael@0: gBrowser.addTab(); michael@0: gBrowser.addTab(); michael@0: gBrowser.addTab(); michael@0: michael@0: checkPreviews(4, "Correct number of previews after adding"); michael@0: michael@0: for each (let preview in AeroPeek.previews) michael@0: ok(preview.visible, "Preview is shown as expected"); michael@0: michael@0: gPrefService.setBoolPref(ENABLE_PREF_NAME, false); michael@0: checkPreviews(4, "Previews are unchanged when disabling"); michael@0: michael@0: for each (let preview in AeroPeek.previews) michael@0: ok(!preview.visible, "Preview is not shown as expected after disabling"); michael@0: michael@0: gPrefService.setBoolPref(ENABLE_PREF_NAME, true); michael@0: checkPreviews(4, "Previews are unchanged when re-enabling"); michael@0: for each (let preview in AeroPeek.previews) michael@0: ok(preview.visible, "Preview is shown as expected after re-enabling"); michael@0: michael@0: [1,2,3,4].forEach(function (idx) { michael@0: gBrowser.selectedTab = gBrowser.tabs[idx]; michael@0: ok(checkSelectedTab(), "Current tab is correctly selected"); michael@0: }); michael@0: michael@0: let currentSelectedTab = gBrowser.selectedTab; michael@0: for each (let idx in [1,2,3,4]) { michael@0: let preview = getPreviewForTab(gBrowser.tabs[0]); michael@0: let canvas = createThumbnailSurface(preview); michael@0: let ctx = canvas.getContext("2d"); michael@0: preview.controller.drawThumbnail(ctx, canvas.width, canvas.height); michael@0: ok(currentSelectedTab.selected, "Drawing thumbnail does not change selection"); michael@0: canvas = getCanvas(preview.controller.width, preview.controller.height); michael@0: ctx = canvas.getContext("2d"); michael@0: preview.controller.drawPreview(ctx); michael@0: ok(currentSelectedTab.selected, "Drawing preview does not change selection"); michael@0: } michael@0: michael@0: // Close #4 michael@0: getPreviewForTab(gBrowser.selectedTab).controller.onClose(); michael@0: checkPreviews(3, "Expected number of previews after closing selected tab via controller"); michael@0: ok(gBrowser.tabs.length == 3, "Successfully closed a tab"); michael@0: michael@0: // Select #1 michael@0: ok(getPreviewForTab(gBrowser.tabs[0]).controller.onActivate(), "Activation was accepted"); michael@0: ok(gBrowser.tabs[0].selected, "Correct tab was selected"); michael@0: checkSelectedTab(); michael@0: michael@0: // Remove #3 (non active) michael@0: gBrowser.removeTab(gBrowser.tabContainer.lastChild); michael@0: checkPreviews(2, "Expected number of previews after closing unselected via browser"); michael@0: michael@0: // Remove #1 (active) michael@0: gBrowser.removeTab(gBrowser.tabContainer.firstChild); michael@0: checkPreviews(1, "Expected number of previews after closing selected tab via browser"); michael@0: michael@0: // Add a new tab michael@0: gBrowser.addTab(); michael@0: checkPreviews(2); michael@0: // Check default selection michael@0: checkSelectedTab(); michael@0: michael@0: // Change selection michael@0: gBrowser.selectedTab = gBrowser.tabs[0]; michael@0: checkSelectedTab(); michael@0: // Close nonselected tab via controller michael@0: getPreviewForTab(gBrowser.tabs[1]).controller.onClose(); michael@0: checkPreviews(1); michael@0: michael@0: if (gPrefService.prefHasUserValue(ENABLE_PREF_NAME)) michael@0: gPrefService.clearUserPref(ENABLE_PREF_NAME); michael@0: michael@0: finish(); michael@0: michael@0: function checkPreviews(aPreviews, msg) { michael@0: let nPreviews = AeroPeek.previews.length; michael@0: is(aPreviews, gBrowser.tabs.length, "Browser has expected number of tabs"); michael@0: is(nPreviews, gBrowser.tabs.length, "Browser has one preview per tab"); michael@0: is(nPreviews, aPreviews, msg || "Got expected number of previews"); michael@0: } michael@0: michael@0: function getPreviewForTab(tab) michael@0: window.gTaskbarTabGroup.previewFromTab(tab); michael@0: michael@0: function checkSelectedTab() michael@0: getPreviewForTab(gBrowser.selectedTab).active; michael@0: michael@0: function isTabSelected(idx) michael@0: gBrowser.tabs[idx].selected; michael@0: michael@0: function createThumbnailSurface(p) { michael@0: let thumbnailWidth = 200, michael@0: thumbnailHeight = 120; michael@0: let ratio = p.controller.thumbnailAspectRatio; michael@0: michael@0: if (thumbnailWidth/thumbnailHeight > ratio) michael@0: thumbnailWidth = thumbnailHeight * ratio; michael@0: else michael@0: thumbnailHeight = thumbnailWidth / ratio; michael@0: michael@0: return getCanvas(thumbnailWidth, thumbnailHeight); michael@0: } michael@0: michael@0: function getCanvas(width, height) { michael@0: let win = window.QueryInterface(Ci.nsIDOMWindow); michael@0: let doc = win.document; michael@0: let canvas = doc.createElementNS("http://www.w3.org/1999/xhtml", "canvas"); michael@0: canvas.width = width; michael@0: canvas.height = height; michael@0: return canvas; michael@0: } michael@0: }