diff --git a/dom/workers/RuntimeService.cpp b/dom/workers/RuntimeService.cpp index b67ecbb5e..c10acd855 100644 --- a/dom/workers/RuntimeService.cpp +++ b/dom/workers/RuntimeService.cpp @@ -1636,6 +1636,8 @@ RuntimeService::RegisterWorker(WorkerPrivate* aWorkerPrivate) } else { if (!mNavigatorPropertiesLoaded) { + MutexAutoLock lock(mMutex); + Navigator::AppName(mNavigatorProperties.mAppName, false /* aUsePrefOverriddenValue */); if (NS_FAILED(Navigator::GetAppVersion(mNavigatorProperties.mAppVersion, @@ -2564,6 +2566,7 @@ void RuntimeService::UpdateAppVersionOverridePreference(const nsAString& aValue) { AssertIsOnMainThread(); + MutexAutoLock lock(mMutex); mNavigatorProperties.mAppVersionOverridden = aValue; } @@ -2571,6 +2574,7 @@ void RuntimeService::UpdatePlatformOverridePreference(const nsAString& aValue) { AssertIsOnMainThread(); + MutexAutoLock lock(mMutex); mNavigatorProperties.mPlatformOverridden = aValue; } @@ -2585,7 +2589,10 @@ RuntimeService::UpdateAllWorkerLanguages(const nsTArray& aLanguages) { MOZ_ASSERT(NS_IsMainThread()); - mNavigatorProperties.mLanguages = aLanguages; + { + MutexAutoLock lock(mMutex); + mNavigatorProperties.mLanguages = aLanguages; + } BROADCAST_ALL_WORKERS(UpdateLanguages, aLanguages); } diff --git a/dom/workers/RuntimeService.h b/dom/workers/RuntimeService.h index 2ab8cbabe..946a0200d 100644 --- a/dom/workers/RuntimeService.h +++ b/dom/workers/RuntimeService.h @@ -75,7 +75,7 @@ class RuntimeService final : public nsIObserver struct IdleThreadInfo; - mozilla::Mutex mMutex; + mutable mozilla::Mutex mMutex; // Protected by mMutex. nsClassHashtable mDomainMap; @@ -157,9 +157,10 @@ public: void ForgetSharedWorker(WorkerPrivate* aWorkerPrivate); - const NavigatorProperties& + NavigatorProperties GetNavigatorProperties() const { + MutexAutoLock lock(mMutex); return mNavigatorProperties; } diff --git a/dom/workers/WorkerNavigator.cpp b/dom/workers/WorkerNavigator.cpp index aaeb58703..7c6395959 100644 --- a/dom/workers/WorkerNavigator.cpp +++ b/dom/workers/WorkerNavigator.cpp @@ -51,7 +51,7 @@ WorkerNavigator::Create(bool aOnLine) RuntimeService* rts = RuntimeService::GetService(); MOZ_ASSERT(rts); - const RuntimeService::NavigatorProperties& properties = + RuntimeService::NavigatorProperties properties = rts->GetNavigatorProperties(); RefPtr navigator =