PipeWire capturer: make restore tokens re-usable more than one time
Do not automatically remove all tokens once we attempt to use them. This mitigates an issue with Google Meet where an additional instance of a DesktopCapturer is created and destroyed right away, taking away the token we would use otherwise. Also save the token under same SourceId once we get a new (but could be same) token from the restored session. Bug: webrtc:15544 Change-Id: I565b22f5bf6a4d8a3b7d6d757f9c1046c7a0557d Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/322621 Commit-Queue: Jan Grulich <grulja@gmail.com> Reviewed-by: Alexander Cooper <alcooper@chromium.org> Cr-Commit-Position: refs/heads/main@{#40892}
This commit is contained in:
parent
e3d8b22911
commit
01932ebaec
@ -82,8 +82,10 @@ void BaseCapturerPipeWire::OnScreenCastRequestResult(RequestResponse result,
|
||||
<< static_cast<uint>(result);
|
||||
} else if (ScreenCastPortal* screencast_portal = GetScreenCastPortal()) {
|
||||
if (!screencast_portal->RestoreToken().empty()) {
|
||||
const SourceId token_id =
|
||||
selected_source_id_ ? selected_source_id_ : source_id_;
|
||||
RestoreTokenManager::GetInstance().AddToken(
|
||||
source_id_, screencast_portal->RestoreToken());
|
||||
token_id, screencast_portal->RestoreToken());
|
||||
}
|
||||
}
|
||||
|
||||
@ -137,7 +139,7 @@ void BaseCapturerPipeWire::Start(Callback* callback) {
|
||||
ScreenCastPortal::PersistMode::kTransient);
|
||||
if (selected_source_id_) {
|
||||
screencast_portal->SetRestoreToken(
|
||||
RestoreTokenManager::GetInstance().TakeToken(selected_source_id_));
|
||||
RestoreTokenManager::GetInstance().GetToken(selected_source_id_));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -23,10 +23,8 @@ void RestoreTokenManager::AddToken(DesktopCapturer::SourceId id,
|
||||
restore_tokens_.insert({id, token});
|
||||
}
|
||||
|
||||
std::string RestoreTokenManager::TakeToken(DesktopCapturer::SourceId id) {
|
||||
std::string token = restore_tokens_[id];
|
||||
// Remove the token as it cannot be used anymore
|
||||
restore_tokens_.erase(id);
|
||||
std::string RestoreTokenManager::GetToken(DesktopCapturer::SourceId id) {
|
||||
const std::string token = restore_tokens_[id];
|
||||
return token;
|
||||
}
|
||||
|
||||
|
||||
@ -27,7 +27,7 @@ class RestoreTokenManager {
|
||||
static RestoreTokenManager& GetInstance();
|
||||
|
||||
void AddToken(DesktopCapturer::SourceId id, const std::string& token);
|
||||
std::string TakeToken(DesktopCapturer::SourceId id);
|
||||
std::string GetToken(DesktopCapturer::SourceId id);
|
||||
|
||||
// Returns a source ID which does not have any token associated with it yet.
|
||||
DesktopCapturer::SourceId GetUnusedId();
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user