зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1329989 - Simplify the ServiceWorkerRegistrationWorkerThread runnables. r=baku
MozReview-Commit-ID: MPxbX3vNpT
This commit is contained in:
Родитель
c1307c4da8
Коммит
798b98749f
|
@ -923,19 +923,13 @@ public:
|
|||
GetPushManager(JSContext* aCx, ErrorResult& aRv) override;
|
||||
|
||||
private:
|
||||
enum Reason
|
||||
{
|
||||
RegistrationIsGoingAway = 0,
|
||||
WorkerIsGoingAway,
|
||||
};
|
||||
|
||||
~ServiceWorkerRegistrationWorkerThread();
|
||||
|
||||
void
|
||||
InitListener();
|
||||
|
||||
void
|
||||
ReleaseListener(Reason aReason);
|
||||
ReleaseListener();
|
||||
|
||||
WorkerPrivate* mWorkerPrivate;
|
||||
RefPtr<WorkerListener> mListener;
|
||||
|
@ -1076,7 +1070,7 @@ NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
|
|||
NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN_INHERITED(ServiceWorkerRegistrationWorkerThread,
|
||||
ServiceWorkerRegistration)
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK(mPushManager)
|
||||
tmp->ReleaseListener(RegistrationIsGoingAway);
|
||||
tmp->ReleaseListener();
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK_END
|
||||
|
||||
ServiceWorkerRegistrationWorkerThread::ServiceWorkerRegistrationWorkerThread(WorkerPrivate* aWorkerPrivate,
|
||||
|
@ -1089,7 +1083,7 @@ ServiceWorkerRegistrationWorkerThread::ServiceWorkerRegistrationWorkerThread(Wor
|
|||
|
||||
ServiceWorkerRegistrationWorkerThread::~ServiceWorkerRegistrationWorkerThread()
|
||||
{
|
||||
ReleaseListener(RegistrationIsGoingAway);
|
||||
ReleaseListener();
|
||||
MOZ_ASSERT(!mListener);
|
||||
}
|
||||
|
||||
|
@ -1178,22 +1172,6 @@ ServiceWorkerRegistrationWorkerThread::Unregister(ErrorResult& aRv)
|
|||
return promise.forget();
|
||||
}
|
||||
|
||||
class StartListeningRunnable final : public Runnable
|
||||
{
|
||||
RefPtr<WorkerListener> mListener;
|
||||
public:
|
||||
explicit StartListeningRunnable(WorkerListener* aListener)
|
||||
: mListener(aListener)
|
||||
{}
|
||||
|
||||
NS_IMETHOD
|
||||
Run() override
|
||||
{
|
||||
mListener->StartListeningForEvents();
|
||||
return NS_OK;
|
||||
}
|
||||
};
|
||||
|
||||
void
|
||||
ServiceWorkerRegistrationWorkerThread::InitListener()
|
||||
{
|
||||
|
@ -1209,48 +1187,13 @@ ServiceWorkerRegistrationWorkerThread::InitListener()
|
|||
return;
|
||||
}
|
||||
|
||||
RefPtr<StartListeningRunnable> r =
|
||||
new StartListeningRunnable(mListener);
|
||||
nsCOMPtr<nsIRunnable> r =
|
||||
NewRunnableMethod(mListener, &WorkerListener::StartListeningForEvents);
|
||||
MOZ_ALWAYS_SUCCEEDS(worker->DispatchToMainThread(r.forget()));
|
||||
}
|
||||
|
||||
class AsyncStopListeningRunnable final : public Runnable
|
||||
{
|
||||
RefPtr<WorkerListener> mListener;
|
||||
public:
|
||||
explicit AsyncStopListeningRunnable(WorkerListener* aListener)
|
||||
: mListener(aListener)
|
||||
{}
|
||||
|
||||
NS_IMETHOD
|
||||
Run() override
|
||||
{
|
||||
mListener->StopListeningForEvents();
|
||||
return NS_OK;
|
||||
}
|
||||
};
|
||||
|
||||
class SyncStopListeningRunnable final : public WorkerMainThreadRunnable
|
||||
{
|
||||
RefPtr<WorkerListener> mListener;
|
||||
public:
|
||||
SyncStopListeningRunnable(WorkerPrivate* aWorkerPrivate,
|
||||
WorkerListener* aListener)
|
||||
: WorkerMainThreadRunnable(aWorkerPrivate,
|
||||
NS_LITERAL_CSTRING("ServiceWorkerRegistration :: StopListening"))
|
||||
, mListener(aListener)
|
||||
{}
|
||||
|
||||
bool
|
||||
MainThreadRun() override
|
||||
{
|
||||
mListener->StopListeningForEvents();
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
void
|
||||
ServiceWorkerRegistrationWorkerThread::ReleaseListener(Reason aReason)
|
||||
ServiceWorkerRegistrationWorkerThread::ReleaseListener()
|
||||
{
|
||||
if (!mListener) {
|
||||
return;
|
||||
|
@ -1266,23 +1209,10 @@ ServiceWorkerRegistrationWorkerThread::ReleaseListener(Reason aReason)
|
|||
|
||||
mListener->ClearRegistration();
|
||||
|
||||
if (aReason == RegistrationIsGoingAway) {
|
||||
RefPtr<AsyncStopListeningRunnable> r =
|
||||
new AsyncStopListeningRunnable(mListener);
|
||||
MOZ_ALWAYS_SUCCEEDS(mWorkerPrivate->DispatchToMainThread(r.forget()));
|
||||
} else if (aReason == WorkerIsGoingAway) {
|
||||
RefPtr<SyncStopListeningRunnable> r =
|
||||
new SyncStopListeningRunnable(mWorkerPrivate, mListener);
|
||||
ErrorResult rv;
|
||||
r->Dispatch(Killing, rv);
|
||||
if (rv.Failed()) {
|
||||
NS_ERROR("Failed to dispatch stop listening runnable!");
|
||||
// And now what?
|
||||
rv.SuppressException();
|
||||
}
|
||||
} else {
|
||||
MOZ_CRASH("Bad reason");
|
||||
}
|
||||
nsCOMPtr<nsIRunnable> r =
|
||||
NewRunnableMethod(mListener, &WorkerListener::StopListeningForEvents);
|
||||
MOZ_ALWAYS_SUCCEEDS(mWorkerPrivate->DispatchToMainThread(r.forget()));
|
||||
|
||||
mListener = nullptr;
|
||||
mWorkerPrivate = nullptr;
|
||||
}
|
||||
|
@ -1290,7 +1220,7 @@ ServiceWorkerRegistrationWorkerThread::ReleaseListener(Reason aReason)
|
|||
bool
|
||||
ServiceWorkerRegistrationWorkerThread::Notify(Status aStatus)
|
||||
{
|
||||
ReleaseListener(WorkerIsGoingAway);
|
||||
ReleaseListener();
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче