Bug 1170543 P3 Expose ServiceWorker idle thread state to ServiceWorkerManager. r=asuth

This commit is contained in:
Ben Kelly 2016-07-27 20:36:10 -04:00
Родитель 23604e56e7
Коммит 1a8803ebd5
4 изменённых файлов: 25 добавлений и 0 удалений

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

@ -1292,6 +1292,13 @@ ServiceWorkerManager::NotifyUnregister(nsIPrincipal* aPrincipal,
return NS_OK;
}
void
ServiceWorkerManager::WorkerIsIdle(ServiceWorkerInfo* aWorker)
{
AssertIsOnMainThread();
MOZ_ASSERT(aWorker);
}
already_AddRefed<ServiceWorkerJobQueue>
ServiceWorkerManager::GetOrCreateJobQueue(const nsACString& aKey,
const nsACString& aScope)

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

@ -294,6 +294,9 @@ public:
nsresult
NotifyUnregister(nsIPrincipal* aPrincipal, const nsAString& aScope);
void
WorkerIsIdle(ServiceWorkerInfo* aWorker);
private:
ServiceWorkerManager();
~ServiceWorkerManager();

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

@ -1899,6 +1899,13 @@ ServiceWorkerPrivate::DetachDebugger()
return NS_OK;
}
bool
ServiceWorkerPrivate::IsIdle() const
{
AssertIsOnMainThread();
return mTokenCount == 0 || (mTokenCount == 1 && mIdleKeepAliveToken);
}
/* static */ void
ServiceWorkerPrivate::NoteIdleWorkerCallback(nsITimer* aTimer, void* aPrivate)
{
@ -1994,6 +2001,11 @@ ServiceWorkerPrivate::ReleaseToken()
--mTokenCount;
if (!mTokenCount) {
TerminateWorker();
} else if (IsIdle()) {
RefPtr<ServiceWorkerManager> swm = ServiceWorkerManager::GetInstance();
if (swm) {
swm->WorkerIsIdle(mInfo);
}
}
}

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

@ -146,6 +146,9 @@ public:
nsresult
DetachDebugger();
bool
IsIdle() const;
private:
enum WakeUpReason {
FetchEvent = 0,