summaryrefslogtreecommitdiffstats
path: root/devtools/client/responsive.html/test/browser/browser_screenshot_button.js
blob: 60605c33b6d68c0e3acc501e74d94420ad6dd7ea (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
/* Any copyright is dedicated to the Public Domain.
   http://creativecommons.org/publicdomain/zero/1.0/ */

"use strict";

// Test global exit button

const TEST_URL = "data:text/html;charset=utf-8,";

const { OS } = require("resource://gre/modules/osfile.jsm");

function* waitUntilScreenshot() {
  return new Promise(Task.async(function* (resolve) {
    let { Downloads } = require("resource://gre/modules/Downloads.jsm");
    let list = yield Downloads.getList(Downloads.ALL);

    let view = {
      onDownloadAdded: download => {
        download.whenSucceeded().then(() => {
          resolve(download.target.path);
          list.removeView(view);
        });
      }
    };

    yield list.addView(view);
  }));
}

addRDMTask(TEST_URL, function* ({ ui: {toolWindow} }) {
  let { store, document } = toolWindow;

  // Wait until the viewport has been added
  yield waitUntilState(store, state => state.viewports.length == 1);

  info("Click the screenshot button");
  let screenshotButton = document.getElementById("global-screenshot-button");
  screenshotButton.click();

  let whenScreenshotSucceeded = waitUntilScreenshot();

  let filePath = yield whenScreenshotSucceeded;
  let image = new Image();
  image.src = OS.Path.toFileURI(filePath);

  yield once(image, "load");

  // We have only one viewport at the moment
  let viewport = store.getState().viewports[0];
  let ratio = window.devicePixelRatio;

  is(image.width, viewport.width * ratio,
    "screenshot width has the expected width");

  is(image.height, viewport.height * ratio,
    "screenshot width has the expected height");

  yield OS.File.remove(filePath);
});