• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1// Copyright 2013 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5/**
6 * Function to take the screenshot of the current screen.
7 * @param {function(HTMLCanvasElement)} callback Callback for returning the
8 *                                      canvas with the screenshot on it.
9 */
10function takeScreenshot(callback) {
11  var screenshotStream = null;
12  var video = document.createElement('video');
13
14  video.addEventListener('canplay', function(e) {
15    if (screenshotStream) {
16      var canvas = document.createElement('canvas');
17      canvas.setAttribute('width', video.videoWidth);
18      canvas.setAttribute('height', video.videoHeight);
19      canvas.getContext('2d').drawImage(
20          video, 0, 0, video.videoWidth, video.videoHeight);
21
22      video.pause();
23      video.src = '';
24
25      screenshotStream.stop();
26      screenshotStream = null;
27
28      callback(canvas);
29    }
30  }, false);
31
32  navigator.webkitGetUserMedia(
33    {
34      video: {
35        mandatory: {
36          chromeMediaSource: 'screen',
37          maxWidth: 4096,
38          maxHeight: 2560
39        }
40      }
41    },
42    function(stream) {
43      if (stream) {
44        screenshotStream = stream;
45        video.src = window.URL.createObjectURL(screenshotStream);
46        video.play();
47      }
48    },
49    function(err) {
50      console.error('takeScreenshot failed: ' +
51          err.name + '; ' + err.message + '; ' + err.constraintName);
52    }
53  );
54}
55