1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/browser/modules/test/browser_taskbar_preview.js Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,139 @@ 1.4 +function test() { 1.5 + var isWin7OrHigher = false; 1.6 + try { 1.7 + let version = Cc["@mozilla.org/system-info;1"] 1.8 + .getService(Ci.nsIPropertyBag2) 1.9 + .getProperty("version"); 1.10 + isWin7OrHigher = (parseFloat(version) >= 6.1); 1.11 + } catch (ex) { } 1.12 + 1.13 + is(!!Win7Features, isWin7OrHigher, "Win7Features available when it should be"); 1.14 + if (!isWin7OrHigher) 1.15 + return; 1.16 + 1.17 + const ENABLE_PREF_NAME = "browser.taskbar.previews.enable"; 1.18 + 1.19 + let temp = {}; 1.20 + Cu.import("resource:///modules/WindowsPreviewPerTab.jsm", temp); 1.21 + let AeroPeek = temp.AeroPeek; 1.22 + 1.23 + waitForExplicitFinish(); 1.24 + 1.25 + gPrefService.setBoolPref(ENABLE_PREF_NAME, true); 1.26 + 1.27 + is(1, AeroPeek.windows.length, "Got the expected number of windows"); 1.28 + 1.29 + checkPreviews(1, "Browser starts with one preview"); 1.30 + 1.31 + gBrowser.addTab(); 1.32 + gBrowser.addTab(); 1.33 + gBrowser.addTab(); 1.34 + 1.35 + checkPreviews(4, "Correct number of previews after adding"); 1.36 + 1.37 + for each (let preview in AeroPeek.previews) 1.38 + ok(preview.visible, "Preview is shown as expected"); 1.39 + 1.40 + gPrefService.setBoolPref(ENABLE_PREF_NAME, false); 1.41 + checkPreviews(4, "Previews are unchanged when disabling"); 1.42 + 1.43 + for each (let preview in AeroPeek.previews) 1.44 + ok(!preview.visible, "Preview is not shown as expected after disabling"); 1.45 + 1.46 + gPrefService.setBoolPref(ENABLE_PREF_NAME, true); 1.47 + checkPreviews(4, "Previews are unchanged when re-enabling"); 1.48 + for each (let preview in AeroPeek.previews) 1.49 + ok(preview.visible, "Preview is shown as expected after re-enabling"); 1.50 + 1.51 + [1,2,3,4].forEach(function (idx) { 1.52 + gBrowser.selectedTab = gBrowser.tabs[idx]; 1.53 + ok(checkSelectedTab(), "Current tab is correctly selected"); 1.54 + }); 1.55 + 1.56 + let currentSelectedTab = gBrowser.selectedTab; 1.57 + for each (let idx in [1,2,3,4]) { 1.58 + let preview = getPreviewForTab(gBrowser.tabs[0]); 1.59 + let canvas = createThumbnailSurface(preview); 1.60 + let ctx = canvas.getContext("2d"); 1.61 + preview.controller.drawThumbnail(ctx, canvas.width, canvas.height); 1.62 + ok(currentSelectedTab.selected, "Drawing thumbnail does not change selection"); 1.63 + canvas = getCanvas(preview.controller.width, preview.controller.height); 1.64 + ctx = canvas.getContext("2d"); 1.65 + preview.controller.drawPreview(ctx); 1.66 + ok(currentSelectedTab.selected, "Drawing preview does not change selection"); 1.67 + } 1.68 + 1.69 + // Close #4 1.70 + getPreviewForTab(gBrowser.selectedTab).controller.onClose(); 1.71 + checkPreviews(3, "Expected number of previews after closing selected tab via controller"); 1.72 + ok(gBrowser.tabs.length == 3, "Successfully closed a tab"); 1.73 + 1.74 + // Select #1 1.75 + ok(getPreviewForTab(gBrowser.tabs[0]).controller.onActivate(), "Activation was accepted"); 1.76 + ok(gBrowser.tabs[0].selected, "Correct tab was selected"); 1.77 + checkSelectedTab(); 1.78 + 1.79 + // Remove #3 (non active) 1.80 + gBrowser.removeTab(gBrowser.tabContainer.lastChild); 1.81 + checkPreviews(2, "Expected number of previews after closing unselected via browser"); 1.82 + 1.83 + // Remove #1 (active) 1.84 + gBrowser.removeTab(gBrowser.tabContainer.firstChild); 1.85 + checkPreviews(1, "Expected number of previews after closing selected tab via browser"); 1.86 + 1.87 + // Add a new tab 1.88 + gBrowser.addTab(); 1.89 + checkPreviews(2); 1.90 + // Check default selection 1.91 + checkSelectedTab(); 1.92 + 1.93 + // Change selection 1.94 + gBrowser.selectedTab = gBrowser.tabs[0]; 1.95 + checkSelectedTab(); 1.96 + // Close nonselected tab via controller 1.97 + getPreviewForTab(gBrowser.tabs[1]).controller.onClose(); 1.98 + checkPreviews(1); 1.99 + 1.100 + if (gPrefService.prefHasUserValue(ENABLE_PREF_NAME)) 1.101 + gPrefService.clearUserPref(ENABLE_PREF_NAME); 1.102 + 1.103 + finish(); 1.104 + 1.105 + function checkPreviews(aPreviews, msg) { 1.106 + let nPreviews = AeroPeek.previews.length; 1.107 + is(aPreviews, gBrowser.tabs.length, "Browser has expected number of tabs"); 1.108 + is(nPreviews, gBrowser.tabs.length, "Browser has one preview per tab"); 1.109 + is(nPreviews, aPreviews, msg || "Got expected number of previews"); 1.110 + } 1.111 + 1.112 + function getPreviewForTab(tab) 1.113 + window.gTaskbarTabGroup.previewFromTab(tab); 1.114 + 1.115 + function checkSelectedTab() 1.116 + getPreviewForTab(gBrowser.selectedTab).active; 1.117 + 1.118 + function isTabSelected(idx) 1.119 + gBrowser.tabs[idx].selected; 1.120 + 1.121 + function createThumbnailSurface(p) { 1.122 + let thumbnailWidth = 200, 1.123 + thumbnailHeight = 120; 1.124 + let ratio = p.controller.thumbnailAspectRatio; 1.125 + 1.126 + if (thumbnailWidth/thumbnailHeight > ratio) 1.127 + thumbnailWidth = thumbnailHeight * ratio; 1.128 + else 1.129 + thumbnailHeight = thumbnailWidth / ratio; 1.130 + 1.131 + return getCanvas(thumbnailWidth, thumbnailHeight); 1.132 + } 1.133 + 1.134 + function getCanvas(width, height) { 1.135 + let win = window.QueryInterface(Ci.nsIDOMWindow); 1.136 + let doc = win.document; 1.137 + let canvas = doc.createElementNS("http://www.w3.org/1999/xhtml", "canvas"); 1.138 + canvas.width = width; 1.139 + canvas.height = height; 1.140 + return canvas; 1.141 + } 1.142 +}