Browse Source

fix: IncrementCapturerCount doesn't increase the capturer count (#33371)

This regression was introduced by commit 22a70eb8.

Co-authored-by: Zeeker <[email protected]>
trop[bot] 3 years ago
parent
commit
700887d623

+ 3 - 2
shell/browser/api/electron_api_web_contents.cc

@@ -3103,8 +3103,9 @@ void WebContents::IncrementCapturerCount(gin::Arguments* args) {
   // get stayAwake arguments if they exist
   args->GetNext(&stay_awake);
 
-  std::ignore =
-      web_contents()->IncrementCapturerCount(size, stay_hidden, stay_awake);
+  std::ignore = web_contents()
+                    ->IncrementCapturerCount(size, stay_hidden, stay_awake)
+                    .Release();
 }
 
 void WebContents::DecrementCapturerCount(gin::Arguments* args) {

+ 62 - 0
spec-main/api-browser-view-spec.ts

@@ -302,4 +302,66 @@ describe('BrowserView module', () => {
       view.webContents.loadFile(path.join(fixtures, 'pages', 'window-open.html'));
     });
   });
+
+  describe('BrowserView.capturePage(rect)', () => {
+    it('returns a Promise with a Buffer', async () => {
+      view = new BrowserView({
+        webPreferences: {
+          backgroundThrottling: false
+        }
+      });
+      w.addBrowserView(view);
+      view.setBounds({
+        ...w.getBounds(),
+        x: 0,
+        y: 0
+      });
+      const image = await view.webContents.capturePage({
+        x: 0,
+        y: 0,
+        width: 100,
+        height: 100
+      });
+
+      expect(image.isEmpty()).to.equal(true);
+    });
+
+    xit('resolves after the window is hidden and capturer count is non-zero', async () => {
+      view = new BrowserView({
+        webPreferences: {
+          backgroundThrottling: false
+        }
+      });
+      w.setBrowserView(view);
+      view.setBounds({
+        ...w.getBounds(),
+        x: 0,
+        y: 0
+      });
+      await view.webContents.loadFile(path.join(fixtures, 'pages', 'a.html'));
+
+      view.webContents.incrementCapturerCount();
+      const image = await view.webContents.capturePage();
+      expect(image.isEmpty()).to.equal(false);
+    });
+
+    it('should increase the capturer count', () => {
+      view = new BrowserView({
+        webPreferences: {
+          backgroundThrottling: false
+        }
+      });
+      w.setBrowserView(view);
+      view.setBounds({
+        ...w.getBounds(),
+        x: 0,
+        y: 0
+      });
+
+      view.webContents.incrementCapturerCount();
+      expect(view.webContents.isBeingCaptured()).to.be.true();
+      view.webContents.decrementCapturerCount();
+      expect(view.webContents.isBeingCaptured()).to.be.false();
+    });
+  });
 });

+ 19 - 0
spec-main/api-browser-window-spec.ts

@@ -1452,6 +1452,17 @@ describe('BrowserWindow module', () => {
       expect(hiddenImage.isEmpty()).to.equal(isEmpty);
     });
 
+    it('resolves after the window is hidden and capturer count is non-zero', async () => {
+      const w = new BrowserWindow({ show: false });
+      w.webContents.setBackgroundThrottling(false);
+      w.loadFile(path.join(fixtures, 'pages', 'a.html'));
+      await emittedOnce(w, 'ready-to-show');
+
+      w.webContents.incrementCapturerCount();
+      const image = await w.capturePage();
+      expect(image.isEmpty()).to.equal(false);
+    });
+
     it('preserves transparency', async () => {
       const w = new BrowserWindow({ show: false, transparent: true });
       w.loadFile(path.join(fixtures, 'pages', 'theme-color.html'));
@@ -1465,6 +1476,14 @@ describe('BrowserWindow module', () => {
       // Values can be 0,2,3,4, or 6. We want 6, which is RGB + Alpha
       expect(imgBuffer[25]).to.equal(6);
     });
+
+    it('should increase the capturer count', () => {
+      const w = new BrowserWindow({ show: false });
+      w.webContents.incrementCapturerCount();
+      expect(w.webContents.isBeingCaptured()).to.be.true();
+      w.webContents.decrementCapturerCount();
+      expect(w.webContents.isBeingCaptured()).to.be.false();
+    });
   });
 
   describe('BrowserWindow.setProgressBar(progress)', () => {