* Add a screen_api_id parameter to the desktopCapturer API. When using the DirectX capturer on Windows, there was previously no way to associate desktopCapturer/getUserMedia and electron.screen API screens. This new parameter provides the association. * Fix non-Windows build. * Fix Mac. * Fix Mac harder. * JS lint * clang-format C++ code. * IWYU * display_id, Linux comment, better test * lint * Fix tests on Linux. * Add display_id documentation.
		
			
				
	
	
		
			83 lines
		
	
	
	
		
			2.5 KiB
			
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			83 lines
		
	
	
	
		
			2.5 KiB
			
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
const assert = require('assert')
 | 
						|
const {desktopCapturer, remote, screen} = require('electron')
 | 
						|
 | 
						|
const isCI = remote.getGlobal('isCi')
 | 
						|
 | 
						|
describe('desktopCapturer', () => {
 | 
						|
  before(function () {
 | 
						|
    if (isCI && process.platform === 'win32') {
 | 
						|
      this.skip()
 | 
						|
    }
 | 
						|
  })
 | 
						|
 | 
						|
  it('should return a non-empty array of sources', (done) => {
 | 
						|
    desktopCapturer.getSources({
 | 
						|
      types: ['window', 'screen']
 | 
						|
    }, (error, sources) => {
 | 
						|
      assert.equal(error, null)
 | 
						|
      assert.notEqual(sources.length, 0)
 | 
						|
      done()
 | 
						|
    })
 | 
						|
  })
 | 
						|
 | 
						|
  it('throws an error for invalid options', (done) => {
 | 
						|
    desktopCapturer.getSources(['window', 'screen'], (error) => {
 | 
						|
      assert.equal(error.message, 'Invalid options')
 | 
						|
      done()
 | 
						|
    })
 | 
						|
  })
 | 
						|
 | 
						|
  it('does not throw an error when called more than once (regression)', (done) => {
 | 
						|
    let callCount = 0
 | 
						|
    const callback = (error, sources) => {
 | 
						|
      callCount++
 | 
						|
      assert.equal(error, null)
 | 
						|
      assert.notEqual(sources.length, 0)
 | 
						|
      if (callCount === 2) done()
 | 
						|
    }
 | 
						|
 | 
						|
    desktopCapturer.getSources({types: ['window', 'screen']}, callback)
 | 
						|
    desktopCapturer.getSources({types: ['window', 'screen']}, callback)
 | 
						|
  })
 | 
						|
 | 
						|
  it('responds to subsequent calls of different options', (done) => {
 | 
						|
    let callCount = 0
 | 
						|
    const callback = (error, sources) => {
 | 
						|
      callCount++
 | 
						|
      assert.equal(error, null)
 | 
						|
      if (callCount === 2) done()
 | 
						|
    }
 | 
						|
 | 
						|
    desktopCapturer.getSources({types: ['window']}, callback)
 | 
						|
    desktopCapturer.getSources({types: ['screen']}, callback)
 | 
						|
  })
 | 
						|
 | 
						|
  it('returns an empty display_id for window sources on Windows and Mac', (done) => {
 | 
						|
    // Linux doesn't return any window sources.
 | 
						|
    if (process.platform !== 'win32' && process.platform !== 'darwin') {
 | 
						|
      return done()
 | 
						|
    }
 | 
						|
    desktopCapturer.getSources({types: ['window']}, (error, sources) => {
 | 
						|
      assert.equal(error, null)
 | 
						|
      assert.notEqual(sources.length, 0)
 | 
						|
      sources.forEach((source) => { assert.equal(source.display_id.length, 0) })
 | 
						|
      done()
 | 
						|
    })
 | 
						|
  })
 | 
						|
 | 
						|
  it('returns display_ids matching the Screen API on Windows and Mac', (done) => {
 | 
						|
    if (process.platform !== 'win32' && process.platform !== 'darwin') {
 | 
						|
      return done()
 | 
						|
    }
 | 
						|
    const displays = screen.getAllDisplays()
 | 
						|
    desktopCapturer.getSources({types: ['screen']}, (error, sources) => {
 | 
						|
      assert.equal(error, null)
 | 
						|
      assert.notEqual(sources.length, 0)
 | 
						|
      assert.equal(sources.length, displays.length)
 | 
						|
      for (let i = 0; i < sources.length; i++) {
 | 
						|
        assert.equal(sources[i].display_id, displays[i].id)
 | 
						|
      }
 | 
						|
      done()
 | 
						|
    })
 | 
						|
  })
 | 
						|
})
 |