From ee04c7f7ee870f53050148ce842d1c6c1e4a9338 Mon Sep 17 00:00:00 2001 From: Samuel Attard Date: Wed, 26 Feb 2020 16:03:55 -0800 Subject: [PATCH] fix: allow persistent media salts (#22386) * fix: allow persistent media salts * chore: add regression test for persistent media device ids across reloads --- shell/browser/electron_browser_client.cc | 8 ++++++++ shell/browser/electron_browser_client.h | 5 +++++ spec-main/chromium-spec.ts | 18 ++++++++++++++++-- 3 files changed, 29 insertions(+), 2 deletions(-) diff --git a/shell/browser/electron_browser_client.cc b/shell/browser/electron_browser_client.cc index 3a4ab250817..eaca272fc6d 100644 --- a/shell/browser/electron_browser_client.cc +++ b/shell/browser/electron_browser_client.cc @@ -872,6 +872,14 @@ bool ElectronBrowserClient::ShouldUseProcessPerSite( #endif } +bool ElectronBrowserClient::ArePersistentMediaDeviceIDsAllowed( + content::BrowserContext* browser_context, + const GURL& scope, + const GURL& site_for_cookies, + const base::Optional& top_frame_origin) { + return true; +} + void ElectronBrowserClient::SiteInstanceDeleting( content::SiteInstance* site_instance) { // We are storing weak_ptr, is it fundamental to maintain the map up-to-date diff --git a/shell/browser/electron_browser_client.h b/shell/browser/electron_browser_client.h index 36f04a9982a..658cee355ce 100644 --- a/shell/browser/electron_browser_client.h +++ b/shell/browser/electron_browser_client.h @@ -246,6 +246,11 @@ class ElectronBrowserClient : public content::ContentBrowserClient, const GURL& site_url) override; bool ShouldUseProcessPerSite(content::BrowserContext* browser_context, const GURL& effective_url) override; + bool ArePersistentMediaDeviceIDsAllowed( + content::BrowserContext* browser_context, + const GURL& scope, + const GURL& site_for_cookies, + const base::Optional& top_frame_origin) override; // content::RenderProcessHostObserver: void RenderProcessHostDestroyed(content::RenderProcessHost* host) override; diff --git a/spec-main/chromium-spec.ts b/spec-main/chromium-spec.ts index d94439a0be9..4ceab1fcca2 100644 --- a/spec-main/chromium-spec.ts +++ b/spec-main/chromium-spec.ts @@ -694,6 +694,21 @@ describe('chromium features', () => { expect(labels.some((l: any) => l)).to.be.false() }) + it('returns the same device ids across reloads', async () => { + const ses = session.fromPartition('persist:media-device-id') + const w = new BrowserWindow({ + show: false, + webPreferences: { + nodeIntegration: true, + session: ses + } + }) + w.loadFile(path.join(fixturesPath, 'pages', 'media-id-reset.html')) + const [, firstDeviceIds] = await emittedOnce(ipcMain, 'deviceIds') + const [, secondDeviceIds] = await emittedOnce(ipcMain, 'deviceIds', () => w.webContents.reload()) + expect(firstDeviceIds).to.deep.equal(secondDeviceIds) + }) + it('can return new device id when cookie storage is cleared', async () => { const ses = session.fromPartition('persist:media-device-id') const w = new BrowserWindow({ @@ -706,8 +721,7 @@ describe('chromium features', () => { w.loadFile(path.join(fixturesPath, 'pages', 'media-id-reset.html')) const [, firstDeviceIds] = await emittedOnce(ipcMain, 'deviceIds') await ses.clearStorageData({ storages: ['cookies'] }) - w.webContents.reload() - const [, secondDeviceIds] = await emittedOnce(ipcMain, 'deviceIds') + const [, secondDeviceIds] = await emittedOnce(ipcMain, 'deviceIds', () => w.webContents.reload()) expect(firstDeviceIds).to.not.deep.equal(secondDeviceIds) }) })