diff --git a/atom/browser/api/atom_api_web_contents.cc b/atom/browser/api/atom_api_web_contents.cc index dd3e1e2499..1be932a0b5 100644 --- a/atom/browser/api/atom_api_web_contents.cc +++ b/atom/browser/api/atom_api_web_contents.cc @@ -276,6 +276,9 @@ content::ServiceWorkerContext* GetServiceWorkerContext( void OnCapturePageDone(const base::Callback& callback, const SkBitmap& bitmap, content::ReadbackResponse response) { + // Hack to enable transparency in captured image + // TODO(nitsakh) Remove hack once fixed in chromium + const_cast(bitmap).setAlphaType(kPremul_SkAlphaType); callback.Run(gfx::Image::CreateFrom1xBitmap(bitmap)); } diff --git a/spec/api-browser-window-spec.js b/spec/api-browser-window-spec.js index d272203a87..4a3853fc0b 100644 --- a/spec/api-browser-window-spec.js +++ b/spec/api-browser-window-spec.js @@ -442,6 +442,29 @@ describe('BrowserWindow module', () => { done() }) }) + + it('preserves transparency', (done) => { + w.close() + const width = 400 + const height = 400 + w = new BrowserWindow({ + show: false, + width: width, + height: height, + transparent: true + }) + w.loadURL('data:text/html,') + w.once('ready-to-show', () => { + w.show() + w.capturePage((image) => { + let imgBuffer = image.toPNG() + // Check 25th byte in the PNG + // Values can be 0,2,3,4, or 6. We want 6, which is RGB + Alpha + assert.equal(imgBuffer[25], 6) + done() + }) + }) + }) }) describe('BrowserWindow.setSize(width, height)', () => {