};
interface SuspendResumeManager {
- AddObserver(pending_remote<SuspendResumeObserver> receiver);
+ [Sync]
+ AddObserver(pending_remote<SuspendResumeObserver> receiver) => (State? state);
};
}
void SuspendResumeServiceImpl::AddObserver(
- mojo::PendingRemote<mojom::SuspendResumeObserver> pending_observer) {
+ mojo::PendingRemote<mojom::SuspendResumeObserver> pending_observer,
+ AddObserverCallback callback) {
+ base::AutoLock locker(lock_);
observers_.Add(std::move(pending_observer));
+ std::move(callback).Run(last_state_);
}
} // namespace suspend_resume
mojo::PendingReceiver<mojom::SuspendResumeManager> pending_receiver);
// mojom::SuspendResumeService implementation
- void AddObserver(mojo::PendingRemote<mojom::SuspendResumeObserver>
- pending_observer) override;
+ void AddObserver(
+ mojo::PendingRemote<mojom::SuspendResumeObserver> pending_observer,
+ AddObserverCallback callback) override;
private:
SuspendResumeServiceImpl() = default;
mojo::PendingRemote<suspend_resume::mojom::SuspendResumeManager>
pending_manager;
GetInterface(pending_manager.InitWithNewPipeAndPassReceiver());
+ absl::optional<suspend_resume::State> state;
mojo::Remote<suspend_resume::mojom::SuspendResumeManager>(
std::move(pending_manager))
- ->AddObserver(receiver_.BindNewPipeAndPassRemote());
+ ->AddObserver(receiver_.BindNewPipeAndPassRemote(), &state);
}
bool SwitchableVideoDecoderWrapper::Configure(