2016-04-06 23:27:22 +03:00
|
|
|
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
|
|
|
/* vim: set ts=8 sts=2 et sw=2 tw=80: */
|
|
|
|
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
|
2018-01-27 00:08:59 +03:00
|
|
|
#ifndef mozilla_dom_serviceworkerupdatejob_h
|
|
|
|
#define mozilla_dom_serviceworkerupdatejob_h
|
2016-04-06 23:27:22 +03:00
|
|
|
|
|
|
|
#include "ServiceWorkerJob.h"
|
2017-08-16 09:18:52 +03:00
|
|
|
#include "ServiceWorkerRegistration.h"
|
2016-04-06 23:27:22 +03:00
|
|
|
|
|
|
|
namespace mozilla {
|
|
|
|
namespace dom {
|
|
|
|
|
2018-04-02 17:50:22 +03:00
|
|
|
namespace serviceWorkerScriptCache {
|
|
|
|
enum class OnFailure : uint8_t;
|
|
|
|
} // namespace serviceWorkerScriptCache
|
|
|
|
|
2017-01-13 01:00:36 +03:00
|
|
|
class ServiceWorkerManager;
|
2018-06-25 17:03:18 +03:00
|
|
|
class ServiceWorkerRegistrationInfo;
|
2017-01-13 01:00:36 +03:00
|
|
|
|
2016-04-06 23:27:22 +03:00
|
|
|
// A job class that performs the Update and Install algorithms from the
|
|
|
|
// service worker spec. This class is designed to be inherited and customized
|
|
|
|
// as a different job type. This is necessary because the register job
|
|
|
|
// performs largely the same operations as the update job, but has a few
|
|
|
|
// different starting steps.
|
2016-04-06 23:27:23 +03:00
|
|
|
class ServiceWorkerUpdateJob : public ServiceWorkerJob {
|
2016-04-06 23:27:22 +03:00
|
|
|
public:
|
|
|
|
// Construct an update job to be used only for updates.
|
2016-04-06 23:27:23 +03:00
|
|
|
ServiceWorkerUpdateJob(nsIPrincipal* aPrincipal, const nsACString& aScope,
|
|
|
|
const nsACString& aScriptSpec,
|
2017-08-16 09:18:52 +03:00
|
|
|
ServiceWorkerUpdateViaCache aUpdateViaCache);
|
2016-04-06 23:27:22 +03:00
|
|
|
|
|
|
|
already_AddRefed<ServiceWorkerRegistrationInfo> GetRegistration() const;
|
|
|
|
|
|
|
|
protected:
|
|
|
|
// Construct an update job that is overriden as another job type.
|
2016-04-06 23:27:23 +03:00
|
|
|
ServiceWorkerUpdateJob(Type aType, nsIPrincipal* aPrincipal,
|
|
|
|
const nsACString& aScope,
|
|
|
|
const nsACString& aScriptSpec,
|
2017-08-16 09:18:52 +03:00
|
|
|
ServiceWorkerUpdateViaCache aUpdateViaCache);
|
2016-04-06 23:27:22 +03:00
|
|
|
|
2016-04-06 23:27:23 +03:00
|
|
|
virtual ~ServiceWorkerUpdateJob();
|
2016-04-06 23:27:22 +03:00
|
|
|
|
|
|
|
// FailUpdateJob() must be called if an update job needs Finish() with
|
|
|
|
// an error.
|
|
|
|
void FailUpdateJob(ErrorResult& aRv);
|
|
|
|
|
|
|
|
void FailUpdateJob(nsresult aRv);
|
|
|
|
|
|
|
|
// The entry point when the update job is being used directly. Job
|
|
|
|
// types overriding this class should override this method to
|
|
|
|
// customize behavior.
|
|
|
|
virtual void AsyncExecute() override;
|
|
|
|
|
|
|
|
// Set the registration to be operated on by Update() or to be immediately
|
|
|
|
// returned as a result of the job. This must be called before Update().
|
|
|
|
void SetRegistration(ServiceWorkerRegistrationInfo* aRegistration);
|
|
|
|
|
|
|
|
// Execute the bulk of the update job logic using the registration defined
|
|
|
|
// by a previous SetRegistration() call. This can be called by the overriden
|
|
|
|
// AsyncExecute() to complete the job. The Update() method will always call
|
|
|
|
// Finish(). This method corresponds to the spec Update algorithm.
|
|
|
|
void Update();
|
|
|
|
|
2017-08-16 09:18:52 +03:00
|
|
|
ServiceWorkerUpdateViaCache GetUpdateViaCache() const;
|
2017-01-04 12:08:58 +03:00
|
|
|
|
2016-04-06 23:27:22 +03:00
|
|
|
private:
|
|
|
|
class CompareCallback;
|
|
|
|
class ContinueUpdateRunnable;
|
|
|
|
class ContinueInstallRunnable;
|
|
|
|
|
|
|
|
// Utility method called after a script is loaded and compared to
|
|
|
|
// our current cached script.
|
|
|
|
void ComparisonResult(nsresult aStatus, bool aInCacheAndEqual,
|
2018-04-02 17:50:22 +03:00
|
|
|
serviceWorkerScriptCache::OnFailure aOnFailure,
|
2016-04-06 23:27:22 +03:00
|
|
|
const nsAString& aNewCacheName,
|
2017-06-07 08:59:48 +03:00
|
|
|
const nsACString& aMaxScope, nsLoadFlags aLoadFlags);
|
2016-04-06 23:27:22 +03:00
|
|
|
|
|
|
|
// Utility method called after evaluating the worker script.
|
|
|
|
void ContinueUpdateAfterScriptEval(bool aScriptEvaluationResult);
|
|
|
|
|
|
|
|
// Utility method corresponding to the spec Install algorithm.
|
2018-07-02 17:44:19 +03:00
|
|
|
void Install();
|
2016-04-06 23:27:22 +03:00
|
|
|
|
|
|
|
// Utility method called after the install event is handled.
|
|
|
|
void ContinueAfterInstallEvent(bool aInstallEventSuccess);
|
|
|
|
|
2018-04-02 17:50:22 +03:00
|
|
|
RefPtr<ServiceWorkerRegistrationInfo> mRegistration;
|
2017-08-16 09:18:52 +03:00
|
|
|
ServiceWorkerUpdateViaCache mUpdateViaCache;
|
2018-04-02 17:50:22 +03:00
|
|
|
serviceWorkerScriptCache::OnFailure mOnFailure;
|
2016-04-06 23:27:22 +03:00
|
|
|
};
|
|
|
|
|
|
|
|
} // namespace dom
|
|
|
|
} // namespace mozilla
|
|
|
|
|
2018-01-27 00:08:59 +03:00
|
|
|
#endif // mozilla_dom_serviceworkerupdatejob_h
|