1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130
|
/* -*- 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/. */
#ifndef mozilla_dom_workernavigator_h__
#define mozilla_dom_workernavigator_h__
#include <stdint.h>
#include "js/RootingAPI.h"
#include "mozilla/AlreadyAddRefed.h"
#include "mozilla/Assertions.h"
#include "mozilla/RefPtr.h"
#include "mozilla/StaticPrefs_privacy.h"
#include "mozilla/dom/BindingDeclarations.h"
#include "mozilla/dom/workerinternals/RuntimeService.h"
#include "nsCycleCollectionParticipant.h"
#include "nsISupports.h"
#include "nsStringFwd.h"
#include "nsTArray.h"
#include "nsWrapperCache.h"
namespace mozilla {
class ErrorResult;
namespace webgpu {
class Instance;
} // namespace webgpu
namespace dom {
class StorageManager;
class MediaCapabilities;
class LockManager;
class Permissions;
class ServiceWorkerContainer;
namespace network {
class Connection;
} // namespace network
class WorkerNavigator final : public nsWrapperCache {
using NavigatorProperties =
workerinternals::RuntimeService::NavigatorProperties;
NavigatorProperties mProperties;
RefPtr<StorageManager> mStorageManager;
RefPtr<network::Connection> mConnection;
RefPtr<dom::MediaCapabilities> mMediaCapabilities;
RefPtr<webgpu::Instance> mWebGpu;
RefPtr<dom::LockManager> mLocks;
RefPtr<dom::Permissions> mPermissions;
RefPtr<ServiceWorkerContainer> mServiceWorkerContainer;
bool mOnline;
WorkerNavigator(const NavigatorProperties& aProperties, bool aOnline);
~WorkerNavigator();
public:
NS_INLINE_DECL_CYCLE_COLLECTING_NATIVE_REFCOUNTING(WorkerNavigator)
NS_DECL_CYCLE_COLLECTION_NATIVE_WRAPPERCACHE_CLASS(WorkerNavigator)
static already_AddRefed<WorkerNavigator> Create(bool aOnLine);
void Invalidate();
virtual JSObject* WrapObject(JSContext* aCx,
JS::Handle<JSObject*> aGivenProto) override;
nsISupports* GetParentObject() const { return nullptr; }
void GetAppCodeName(nsString& aAppCodeName, ErrorResult& /* unused */) const {
aAppCodeName.AssignLiteral("Mozilla");
}
void GetAppName(nsString& aAppName) const {
aAppName.AssignLiteral("Netscape");
}
void GetAppVersion(nsString& aAppVersion, CallerType aCallerType,
ErrorResult& aRv) const;
void GetPlatform(nsString& aPlatform, CallerType aCallerType,
ErrorResult& aRv) const;
void GetProduct(nsString& aProduct) const { aProduct.AssignLiteral("Gecko"); }
bool TaintEnabled() const { return false; }
void GetLanguage(nsString& aLanguage) const {
MOZ_ASSERT(mProperties.mLanguages.Length() >= 1);
aLanguage.Assign(mProperties.mLanguages[0]);
}
void GetLanguages(nsTArray<nsString>& aLanguages) const {
aLanguages = mProperties.mLanguages.Clone();
}
void GetUserAgent(nsString& aUserAgent, CallerType aCallerType,
ErrorResult& aRv) const;
bool OnLine() const { return mOnline; }
// Worker thread only!
void SetOnLine(bool aOnline) { mOnline = aOnline; }
bool GlobalPrivacyControl() const;
void SetLanguages(const nsTArray<nsString>& aLanguages);
uint64_t HardwareConcurrency() const;
StorageManager* Storage();
network::Connection* GetConnection(ErrorResult& aRv);
dom::MediaCapabilities* MediaCapabilities();
webgpu::Instance* Gpu();
dom::LockManager* Locks();
dom::Permissions* Permissions();
already_AddRefed<ServiceWorkerContainer> ServiceWorker();
};
} // namespace dom
} // namespace mozilla
#endif // mozilla_dom_workernavigator_h__
|