Bug 1440195 Add a random context seed for AudioContext and MediaStream r=baku

MozReview-Commit-ID: sHpVCgd8Fs

--HG--
extra : rebase_source : e1bbeab189b7a64c4ce051b74bc19a706b0fa1e8
This commit is contained in:
Tom Ritter 2018-03-01 11:00:12 -06:00
Родитель 16f0facaae
Коммит 3d9500b9f6
4 изменённых файлов: 18 добавлений и 6 удалений

Просмотреть файл

@ -572,8 +572,12 @@ DOMMediaStream::CurrentTime()
if (!mPlaybackStream) {
return 0.0;
}
// The value of a MediaStream's CurrentTime will always advance forward; it will never
// reset (even if one rewinds a video.) Therefore we can use a single Random Seed
// initialized at the same time as the object.
return nsRFPService::ReduceTimePrecisionAsSecs(mPlaybackStream->
StreamTimeToSeconds(mPlaybackStream->GetCurrentTime() - mLogicalStreamStartTime));
StreamTimeToSeconds(mPlaybackStream->GetCurrentTime() - mLogicalStreamStartTime),
GetRandomTimelineSeed());
}
already_AddRefed<Promise>

Просмотреть файл

@ -16,6 +16,7 @@
#include "nsIPrincipal.h"
#include "MediaTrackConstraints.h"
#include "mozilla/DOMEventTargetHelper.h"
#include "mozilla/RelativeTimeline.h"
#include "PrincipalChangeObserver.h"
// X11 has a #define for CurrentTime. Unbelievable :-(.
@ -202,7 +203,8 @@ protected:
* (pointing to t2 in A')
*/
class DOMMediaStream : public DOMEventTargetHelper,
public dom::PrincipalChangeObserver<dom::MediaStreamTrack>
public dom::PrincipalChangeObserver<dom::MediaStreamTrack>,
public RelativeTimeline
{
friend class DOMLocalMediaStream;
friend class dom::MediaStreamTrack;

Просмотреть файл

@ -650,11 +650,15 @@ AudioContext::DestinationStream() const
}
double
AudioContext::CurrentTime() const
AudioContext::CurrentTime()
{
MediaStream* stream = Destination()->Stream();
// The value of a MediaStream's CurrentTime will always advance forward; it will never
// reset (even if one rewinds a video.) Therefore we can use a single Random Seed
// initialized at the same time as the object.
return nsRFPService::ReduceTimePrecisionAsSecs(
stream->StreamTimeToSeconds(stream->GetCurrentTime()));
stream->StreamTimeToSeconds(stream->GetCurrentTime()),
GetRandomTimelineSeed());
}
void AudioContext::DisconnectFromOwner()

Просмотреть файл

@ -13,6 +13,7 @@
#include "mozilla/DOMEventTargetHelper.h"
#include "mozilla/MemoryReporting.h"
#include "mozilla/dom/TypedArray.h"
#include "mozilla/RelativeTimeline.h"
#include "mozilla/UniquePtr.h"
#include "nsCOMPtr.h"
#include "nsCycleCollectionParticipant.h"
@ -117,7 +118,8 @@ private:
enum class AudioContextOperation { Suspend, Resume, Close };
class AudioContext final : public DOMEventTargetHelper,
public nsIMemoryReporter
public nsIMemoryReporter,
public RelativeTimeline
{
AudioContext(nsPIDOMWindowInner* aParentWindow,
bool aIsOffline,
@ -181,7 +183,7 @@ public:
bool ShouldSuspendNewStream() const { return mSuspendCalled; }
double CurrentTime() const;
double CurrentTime();
AudioListener* Listener();