summaryrefslogtreecommitdiff
path: root/chromium/chrome/browser/resources/feedback/js/take_screenshot.js
blob: 830fd726004d425132f27399eb81981bca7ddd55 (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
// Copyright 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

/**
 * Function to take the screenshot of the current screen.
 * @param {function(HTMLCanvasElement)} callback Callback for returning the
 *     canvas with the screenshot. Called with null if the screenshot failed.
 */
function takeScreenshot(callback) {
  var screenshotStream = null;
  var video = document.createElement('video');

  video.addEventListener('canplay', function(e) {
    if (screenshotStream) {
      var canvas = document.createElement('canvas');
      canvas.setAttribute('width', video.videoWidth);
      canvas.setAttribute('height', video.videoHeight);
      canvas.getContext('2d').drawImage(
          video, 0, 0, video.videoWidth, video.videoHeight);

      video.pause();
      video.src = '';

      screenshotStream.getVideoTracks()[0].stop();
      screenshotStream = null;

      callback(canvas);
    }
  }, false);

  navigator.webkitGetUserMedia(
      {
        video: {
          mandatory:
              {chromeMediaSource: 'screen', maxWidth: 4096, maxHeight: 2560}
        }
      },
      function(stream) {
        if (stream) {
          screenshotStream = stream;
          video.src = window.URL.createObjectURL(screenshotStream);
          video.play();
        }
      },
      function(err) {
        console.error(
            'takeScreenshot failed: ' + err.name + '; ' + err.message + '; ' +
            err.constraintName);
        callback(null);
      });
}