1 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ 2 /* vim: set ts=8 sts=2 et sw=2 tw=80: */ 3 /* This Source Code Form is subject to the terms of the Mozilla Public 4 * License, v. 2.0. If a copy of the MPL was not distributed with this 5 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 6 #ifndef _mozilla_dom_ServiceWorkerRegistrationDescriptor_h 7 #define _mozilla_dom_ServiceWorkerRegistrationDescriptor_h 8 9 #include "mozilla/Maybe.h" 10 #include "mozilla/dom/ServiceWorkerDescriptor.h" 11 #include "mozilla/UniquePtr.h" 12 13 namespace mozilla { 14 15 namespace ipc { 16 class PrincipalInfo; 17 } // namespace ipc 18 19 namespace dom { 20 21 class IPCServiceWorkerRegistrationDescriptor; 22 class ServiceWorkerInfo; 23 enum class ServiceWorkerUpdateViaCache : uint8_t; 24 25 // This class represents a snapshot of a particular 26 // ServiceWorkerRegistrationInfo object. It is threadsafe and can be 27 // transferred across processes. 28 class ServiceWorkerRegistrationDescriptor final { 29 // This class is largely a wrapper wround an IPDL generated struct. We 30 // need the wrapper class since IPDL generated code includes windows.h 31 // which is in turn incompatible with bindings code. 32 UniquePtr<IPCServiceWorkerRegistrationDescriptor> mData; 33 34 Maybe<IPCServiceWorkerDescriptor> NewestInternal() const; 35 36 public: 37 ServiceWorkerRegistrationDescriptor( 38 uint64_t aId, uint64_t aVersion, nsIPrincipal* aPrincipal, 39 const nsACString& aScope, ServiceWorkerUpdateViaCache aUpdateViaCache); 40 41 ServiceWorkerRegistrationDescriptor( 42 uint64_t aId, uint64_t aVersion, 43 const mozilla::ipc::PrincipalInfo& aPrincipalInfo, 44 const nsACString& aScope, ServiceWorkerUpdateViaCache aUpdateViaCache); 45 46 explicit ServiceWorkerRegistrationDescriptor( 47 const IPCServiceWorkerRegistrationDescriptor& aDescriptor); 48 49 ServiceWorkerRegistrationDescriptor( 50 const ServiceWorkerRegistrationDescriptor& aRight); 51 52 ServiceWorkerRegistrationDescriptor& operator=( 53 const ServiceWorkerRegistrationDescriptor& aRight); 54 55 ServiceWorkerRegistrationDescriptor( 56 ServiceWorkerRegistrationDescriptor&& aRight); 57 58 ServiceWorkerRegistrationDescriptor& operator=( 59 ServiceWorkerRegistrationDescriptor&& aRight); 60 61 ~ServiceWorkerRegistrationDescriptor(); 62 63 bool operator==(const ServiceWorkerRegistrationDescriptor& aRight) const; 64 65 uint64_t Id() const; 66 67 uint64_t Version() const; 68 69 ServiceWorkerUpdateViaCache UpdateViaCache() const; 70 71 const mozilla::ipc::PrincipalInfo& PrincipalInfo() const; 72 73 Result<nsCOMPtr<nsIPrincipal>, nsresult> GetPrincipal() const; 74 75 const nsCString& Scope() const; 76 77 Maybe<ServiceWorkerDescriptor> GetInstalling() const; 78 79 Maybe<ServiceWorkerDescriptor> GetWaiting() const; 80 81 Maybe<ServiceWorkerDescriptor> GetActive() const; 82 83 Maybe<ServiceWorkerDescriptor> Newest() const; 84 85 bool HasWorker(const ServiceWorkerDescriptor& aDescriptor) const; 86 87 bool IsValid() const; 88 89 void SetUpdateViaCache(ServiceWorkerUpdateViaCache aUpdateViaCache); 90 91 void SetWorkers(ServiceWorkerInfo* aInstalling, ServiceWorkerInfo* aWaiting, 92 ServiceWorkerInfo* aActive); 93 94 void SetVersion(uint64_t aVersion); 95 96 // Expose the underlying IPC type so that it can be passed via IPC. 97 const IPCServiceWorkerRegistrationDescriptor& ToIPC() const; 98 }; 99 100 } // namespace dom 101 } // namespace mozilla 102 103 #endif // _mozilla_dom_ServiceWorkerRegistrationDescriptor_h 104