Commit 81f6573f authored by Guido Urdaneta's avatar Guido Urdaneta Committed by Commit Bot

[EnumerateDevices] Do not reset salt on same-document navigation

Media Device ID salts should be reset for every new document, but navigations
within the same document should not reset the salt since it causes
problems for some applications.

Bug: 1127548
Change-Id: I88e6af831fd8e5b02136d415e371b01d4dfd512e
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2432028
Commit-Queue: Guido Urdaneta <guidou@chromium.org>
Reviewed-by: default avatarAvi Drissman <avi@chromium.org>
Cr-Commit-Position: refs/heads/master@{#810953}
parent 29335f75
...@@ -2434,12 +2434,14 @@ void RenderFrameHostImpl::DidNavigate( ...@@ -2434,12 +2434,14 @@ void RenderFrameHostImpl::DidNavigate(
if (!params.url_is_unreachable) if (!params.url_is_unreachable)
last_successful_url_ = params.url; last_successful_url_ = params.url;
// Reset the salt so that media device IDs are reset after the new navigation if (did_create_new_document) {
// if necessary.
media_device_id_salt_base_ = BrowserContext::CreateRandomMediaDeviceIDSalt();
if (did_create_new_document)
DidCommitNewDocument(params, navigation_request); DidCommitNewDocument(params, navigation_request);
// Reset the salt so that media device IDs are reset for the new document
// if necessary.
media_device_id_salt_base_ =
BrowserContext::CreateRandomMediaDeviceIDSalt();
}
} }
void RenderFrameHostImpl::SetLastCommittedOrigin(const url::Origin& origin) { void RenderFrameHostImpl::SetLastCommittedOrigin(const url::Origin& origin) {
......
...@@ -785,6 +785,14 @@ IN_PROC_BROWSER_TEST_F(WebRtcGetUserMediaBrowserTest, ...@@ -785,6 +785,14 @@ IN_PROC_BROWSER_TEST_F(WebRtcGetUserMediaBrowserTest,
"getUserMediaEchoCancellationOnAndOffAndVideo()"); "getUserMediaEchoCancellationOnAndOffAndVideo()");
} }
IN_PROC_BROWSER_TEST_F(WebRtcGetUserMediaBrowserTest,
EnumerationAfterSameDocumentNavigation) {
ASSERT_TRUE(embedded_test_server()->Start());
GURL url(embedded_test_server()->GetURL("/media/getusermedia.html"));
EXPECT_TRUE(NavigateToURL(shell(), url));
ExecuteJavascriptAndWaitForOk("enumerationAfterSameDocumentNaviagtion()");
}
IN_PROC_BROWSER_TEST_F(WebRtcGetUserMediaBrowserTest, IN_PROC_BROWSER_TEST_F(WebRtcGetUserMediaBrowserTest,
RecoverFromCrashInAudioService) { RecoverFromCrashInAudioService) {
// This test only makes sense with the audio service running out of process, // This test only makes sense with the audio service running out of process,
......
...@@ -964,6 +964,21 @@ ...@@ -964,6 +964,21 @@
} }
} }
async function enumerationAfterSameDocumentNaviagtion() {
let stream = await navigator.mediaDevices.getUserMedia({ audio:true, video:true });
stream.getTracks().forEach(t => t.stop());
let devices1 = await navigator.mediaDevices.enumerateDevices();
// Navigate within the same document and enumerate again.
window.location = "#navigate";
let devices2 = await navigator.mediaDevices.enumerateDevices();
assertEquals(devices1.length, devices2.length);
for (let i=0; i<devices1.length; i++) {
assertEquals(devices1[i].deviceId, devices2[i].deviceId);
}
reportTestSuccess();
}
</script> </script>
</head> </head>
<body> <body>
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment