123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152 |
- /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
- /* 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/. */
- #ifndef mozilla_dom_workers_serviceworkerinfo_h
- #define mozilla_dom_workers_serviceworkerinfo_h
- #include "mozilla/dom/ServiceWorkerBinding.h" // For ServiceWorkerState
- #include "nsIServiceWorkerManager.h"
- #include "Workers.h"
- namespace mozilla {
- namespace dom {
- namespace workers {
- class ServiceWorker;
- class ServiceWorkerPrivate;
- /*
- * Wherever the spec treats a worker instance and a description of said worker
- * as the same thing; i.e. "Resolve foo with
- * _GetNewestWorker(serviceWorkerRegistration)", we represent the description
- * by this class and spawn a ServiceWorker in the right global when required.
- */
- class ServiceWorkerInfo final : public nsIServiceWorkerInfo
- {
- private:
- nsCOMPtr<nsIPrincipal> mPrincipal;
- const nsCString mScope;
- const nsCString mScriptSpec;
- const nsString mCacheName;
- ServiceWorkerState mState;
- PrincipalOriginAttributes mOriginAttributes;
- // This id is shared with WorkerPrivate to match requests issued by service
- // workers to their corresponding serviceWorkerInfo.
- uint64_t mServiceWorkerID;
- // We hold rawptrs since the ServiceWorker constructor and destructor ensure
- // addition and removal.
- // There is a high chance of there being at least one ServiceWorker
- // associated with this all the time.
- AutoTArray<ServiceWorker*, 1> mInstances;
- RefPtr<ServiceWorkerPrivate> mServiceWorkerPrivate;
- bool mSkipWaitingFlag;
- ~ServiceWorkerInfo();
- // Generates a unique id for the service worker, with zero being treated as
- // invalid.
- uint64_t
- GetNextID() const;
- public:
- NS_DECL_ISUPPORTS
- NS_DECL_NSISERVICEWORKERINFO
- class ServiceWorkerPrivate*
- WorkerPrivate() const
- {
- MOZ_ASSERT(mServiceWorkerPrivate);
- return mServiceWorkerPrivate;
- }
- nsIPrincipal*
- GetPrincipal() const
- {
- return mPrincipal;
- }
- const nsCString&
- ScriptSpec() const
- {
- return mScriptSpec;
- }
- const nsCString&
- Scope() const
- {
- return mScope;
- }
- bool SkipWaitingFlag() const
- {
- AssertIsOnMainThread();
- return mSkipWaitingFlag;
- }
- void SetSkipWaitingFlag()
- {
- AssertIsOnMainThread();
- mSkipWaitingFlag = true;
- }
- ServiceWorkerInfo(nsIPrincipal* aPrincipal,
- const nsACString& aScope,
- const nsACString& aScriptSpec,
- const nsAString& aCacheName);
- ServiceWorkerState
- State() const
- {
- return mState;
- }
- const PrincipalOriginAttributes&
- GetOriginAttributes() const
- {
- return mOriginAttributes;
- }
- const nsString&
- CacheName() const
- {
- return mCacheName;
- }
- uint64_t
- ID() const
- {
- return mServiceWorkerID;
- }
- void
- UpdateState(ServiceWorkerState aState);
- // Only used to set initial state when loading from disk!
- void
- SetActivateStateUncheckedWithoutEvent(ServiceWorkerState aState)
- {
- AssertIsOnMainThread();
- mState = aState;
- }
- void
- AppendWorker(ServiceWorker* aWorker);
- void
- RemoveWorker(ServiceWorker* aWorker);
- already_AddRefed<ServiceWorker>
- GetOrCreateInstance(nsPIDOMWindowInner* aWindow);
- };
- } // namespace workers
- } // namespace dom
- } // namespace mozilla
- #endif // mozilla_dom_workers_serviceworkerinfo_h
|