123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392 |
- /* -*- 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_workerscope_h__
- #define mozilla_dom_workerscope_h__
- #include "Workers.h"
- #include "mozilla/DOMEventTargetHelper.h"
- #include "mozilla/dom/Headers.h"
- #include "mozilla/dom/RequestBinding.h"
- #include "nsWeakReference.h"
- #include "mozilla/dom/ImageBitmapSource.h"
- namespace mozilla {
- namespace dom {
- class AnyCallback;
- struct ChannelPixelLayout;
- class Console;
- class Crypto;
- class Function;
- class IDBFactory;
- enum class ImageBitmapFormat : uint32_t;
- class Performance;
- class Promise;
- class RequestOrUSVString;
- class ServiceWorkerRegistration;
- class WorkerLocation;
- class WorkerNavigator;
- namespace cache {
- class CacheStorage;
- } // namespace cache
- namespace workers {
- class ServiceWorkerClients;
- class WorkerPrivate;
- } // namespace workers
- class WorkerGlobalScope : public DOMEventTargetHelper,
- public nsIGlobalObject,
- public nsSupportsWeakReference
- {
- typedef mozilla::dom::IDBFactory IDBFactory;
- RefPtr<Console> mConsole;
- RefPtr<Crypto> mCrypto;
- RefPtr<WorkerLocation> mLocation;
- RefPtr<WorkerNavigator> mNavigator;
- RefPtr<Performance> mPerformance;
- RefPtr<IDBFactory> mIndexedDB;
- RefPtr<cache::CacheStorage> mCacheStorage;
- uint32_t mWindowInteractionsAllowed;
- protected:
- typedef mozilla::dom::workers::WorkerPrivate WorkerPrivate;
- WorkerPrivate* mWorkerPrivate;
- explicit WorkerGlobalScope(WorkerPrivate* aWorkerPrivate);
- virtual ~WorkerGlobalScope();
- public:
- virtual JSObject*
- WrapObject(JSContext* aCx, JS::Handle<JSObject*> aGivenProto) override;
- virtual bool
- WrapGlobalObject(JSContext* aCx, JS::MutableHandle<JSObject*> aReflector) = 0;
- virtual JSObject*
- GetGlobalJSObject(void) override
- {
- return GetWrapper();
- }
- NS_DECL_ISUPPORTS_INHERITED
- NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS_INHERITED(WorkerGlobalScope,
- DOMEventTargetHelper)
- WorkerGlobalScope*
- Self()
- {
- return this;
- }
- Console*
- GetConsole(ErrorResult& aRv);
- Console*
- GetConsoleIfExists() const
- {
- return mConsole;
- }
- Crypto*
- GetCrypto(ErrorResult& aError);
- already_AddRefed<WorkerLocation>
- Location();
- already_AddRefed<WorkerNavigator>
- Navigator();
- already_AddRefed<WorkerNavigator>
- GetExistingNavigator() const;
- void
- Close(JSContext* aCx, ErrorResult& aRv);
- OnErrorEventHandlerNonNull*
- GetOnerror();
- void
- SetOnerror(OnErrorEventHandlerNonNull* aHandler);
- void
- ImportScripts(const Sequence<nsString>& aScriptURLs, ErrorResult& aRv);
- int32_t
- SetTimeout(JSContext* aCx, Function& aHandler, const int32_t aTimeout,
- const Sequence<JS::Value>& aArguments, ErrorResult& aRv);
- int32_t
- SetTimeout(JSContext* aCx, const nsAString& aHandler, const int32_t aTimeout,
- const Sequence<JS::Value>& /* unused */, ErrorResult& aRv);
- void
- ClearTimeout(int32_t aHandle);
- int32_t
- SetInterval(JSContext* aCx, Function& aHandler,
- const Optional<int32_t>& aTimeout,
- const Sequence<JS::Value>& aArguments, ErrorResult& aRv);
- int32_t
- SetInterval(JSContext* aCx, const nsAString& aHandler,
- const Optional<int32_t>& aTimeout,
- const Sequence<JS::Value>& /* unused */, ErrorResult& aRv);
- void
- ClearInterval(int32_t aHandle);
- void
- Atob(const nsAString& aAtob, nsAString& aOutput, ErrorResult& aRv) const;
- void
- Btoa(const nsAString& aBtoa, nsAString& aOutput, ErrorResult& aRv) const;
- void
- GetOrigin(nsAString& aOrigin) const;
- IMPL_EVENT_HANDLER(online)
- IMPL_EVENT_HANDLER(offline)
- void
- Dump(const Optional<nsAString>& aString) const;
- Performance* GetPerformance();
- already_AddRefed<Promise>
- Fetch(const RequestOrUSVString& aInput, const RequestInit& aInit, ErrorResult& aRv);
- already_AddRefed<IDBFactory>
- GetIndexedDB(ErrorResult& aErrorResult);
- already_AddRefed<cache::CacheStorage>
- GetCaches(ErrorResult& aRv);
- bool IsSecureContext() const;
- already_AddRefed<Promise>
- CreateImageBitmap(const ImageBitmapSource& aImage, ErrorResult& aRv);
- already_AddRefed<Promise>
- CreateImageBitmap(const ImageBitmapSource& aImage,
- int32_t aSx, int32_t aSy, int32_t aSw, int32_t aSh,
- ErrorResult& aRv);
- already_AddRefed<mozilla::dom::Promise>
- CreateImageBitmap(const ImageBitmapSource& aImage,
- int32_t aOffset, int32_t aLength,
- mozilla::dom::ImageBitmapFormat aFormat,
- const mozilla::dom::Sequence<mozilla::dom::ChannelPixelLayout>& aLayout,
- mozilla::ErrorResult& aRv);
- bool
- WindowInteractionAllowed() const
- {
- return mWindowInteractionsAllowed > 0;
- }
- void
- AllowWindowInteraction()
- {
- mWindowInteractionsAllowed++;
- }
- void
- ConsumeWindowInteraction()
- {
- MOZ_ASSERT(mWindowInteractionsAllowed > 0);
- mWindowInteractionsAllowed--;
- }
- };
- class DedicatedWorkerGlobalScope final : public WorkerGlobalScope
- {
- ~DedicatedWorkerGlobalScope() { }
- public:
- explicit DedicatedWorkerGlobalScope(WorkerPrivate* aWorkerPrivate);
- virtual bool
- WrapGlobalObject(JSContext* aCx,
- JS::MutableHandle<JSObject*> aReflector) override;
- void
- PostMessage(JSContext* aCx, JS::Handle<JS::Value> aMessage,
- const Optional<Sequence<JS::Value>>& aTransferable,
- ErrorResult& aRv);
- IMPL_EVENT_HANDLER(message)
- };
- class SharedWorkerGlobalScope final : public WorkerGlobalScope
- {
- const nsCString mName;
- ~SharedWorkerGlobalScope() { }
- public:
- SharedWorkerGlobalScope(WorkerPrivate* aWorkerPrivate,
- const nsCString& aName);
- virtual bool
- WrapGlobalObject(JSContext* aCx,
- JS::MutableHandle<JSObject*> aReflector) override;
- void GetName(DOMString& aName) const
- {
- aName.AsAString() = NS_ConvertUTF8toUTF16(mName);
- }
- IMPL_EVENT_HANDLER(connect)
- };
- class ServiceWorkerGlobalScope final : public WorkerGlobalScope
- {
- const nsString mScope;
- RefPtr<workers::ServiceWorkerClients> mClients;
- RefPtr<ServiceWorkerRegistration> mRegistration;
- ~ServiceWorkerGlobalScope();
- public:
- NS_DECL_ISUPPORTS_INHERITED
- NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(ServiceWorkerGlobalScope,
- WorkerGlobalScope)
- IMPL_EVENT_HANDLER(notificationclick)
- IMPL_EVENT_HANDLER(notificationclose)
- ServiceWorkerGlobalScope(WorkerPrivate* aWorkerPrivate, const nsACString& aScope);
- virtual bool
- WrapGlobalObject(JSContext* aCx,
- JS::MutableHandle<JSObject*> aReflector) override;
- static bool
- OpenWindowEnabled(JSContext* aCx, JSObject* aObj);
- void
- GetScope(nsString& aScope) const
- {
- aScope = mScope;
- }
- workers::ServiceWorkerClients*
- Clients();
- ServiceWorkerRegistration*
- Registration();
- already_AddRefed<Promise>
- SkipWaiting(ErrorResult& aRv);
- IMPL_EVENT_HANDLER(activate)
- IMPL_EVENT_HANDLER(fetch)
- IMPL_EVENT_HANDLER(install)
- IMPL_EVENT_HANDLER(message)
- IMPL_EVENT_HANDLER(push)
- IMPL_EVENT_HANDLER(pushsubscriptionchange)
- };
- class WorkerDebuggerGlobalScope final : public DOMEventTargetHelper,
- public nsIGlobalObject
- {
- typedef mozilla::dom::workers::WorkerPrivate WorkerPrivate;
- WorkerPrivate* mWorkerPrivate;
- RefPtr<Console> mConsole;
- public:
- explicit WorkerDebuggerGlobalScope(WorkerPrivate* aWorkerPrivate);
- NS_DECL_ISUPPORTS_INHERITED
- NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS_INHERITED(WorkerDebuggerGlobalScope,
- DOMEventTargetHelper)
- virtual JSObject*
- WrapObject(JSContext* aCx, JS::Handle<JSObject*> aGivenProto) override
- {
- MOZ_CRASH("Shouldn't get here!");
- }
- virtual bool
- WrapGlobalObject(JSContext* aCx,
- JS::MutableHandle<JSObject*> aReflector);
- virtual JSObject*
- GetGlobalJSObject(void) override
- {
- return GetWrapper();
- }
- void
- GetGlobal(JSContext* aCx, JS::MutableHandle<JSObject*> aGlobal,
- ErrorResult& aRv);
- void
- CreateSandbox(JSContext* aCx, const nsAString& aName,
- JS::Handle<JSObject*> aPrototype,
- JS::MutableHandle<JSObject*> aResult,
- ErrorResult& aRv);
- void
- LoadSubScript(JSContext* aCx, const nsAString& aURL,
- const Optional<JS::Handle<JSObject*>>& aSandbox,
- ErrorResult& aRv);
- void
- EnterEventLoop();
- void
- LeaveEventLoop();
- void
- PostMessage(const nsAString& aMessage);
- IMPL_EVENT_HANDLER(message)
- void
- SetImmediate(Function& aHandler, ErrorResult& aRv);
- void
- ReportError(JSContext* aCx, const nsAString& aMessage);
- void
- RetrieveConsoleEvents(JSContext* aCx, nsTArray<JS::Value>& aEvents,
- ErrorResult& aRv);
- void
- SetConsoleEventHandler(JSContext* aCx, AnyCallback* aHandler,
- ErrorResult& aRv);
- Console*
- GetConsole(ErrorResult& aRv);
- Console*
- GetConsoleIfExists() const
- {
- return mConsole;
- }
- void
- Dump(JSContext* aCx, const Optional<nsAString>& aString) const;
- private:
- virtual ~WorkerDebuggerGlobalScope();
- };
- } // namespace dom
- } // namespace mozilla
- inline nsISupports*
- ToSupports(mozilla::dom::WorkerGlobalScope* aScope)
- {
- return static_cast<nsIDOMEventTarget*>(aScope);
- }
- #endif /* mozilla_dom_workerscope_h__ */
|