| // 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 on it. |
| */ |
| 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.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); |
| } |
| ); |
| } |