mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-25 19:25:43 +00:00
bf17f21d5d
AudioDestinationNode, AudioContext, and Worklet are part of the same cycle. Any of these may be unlinked before another. The unlink process for this cycle is the notification that the worklet will no longer be used, but the worklet uses the destination stream to send a message to release graph thread objects and so must do this before the stream is destroyed. Differential Revision: https://phabricator.services.mozilla.com/D25351 --HG-- extra : moz-landing-system : lando
73 lines
2.1 KiB
C++
73 lines
2.1 KiB
C++
/* -*- 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_Worklet_h
|
|
#define mozilla_dom_Worklet_h
|
|
|
|
#include "mozilla/Attributes.h"
|
|
#include "mozilla/ErrorResult.h"
|
|
#include "nsRefPtrHashtable.h"
|
|
#include "nsWrapperCache.h"
|
|
#include "nsCOMPtr.h"
|
|
|
|
class nsPIDOMWindowInner;
|
|
|
|
namespace mozilla {
|
|
|
|
class WorkletImpl;
|
|
|
|
namespace dom {
|
|
|
|
class Promise;
|
|
class WorkletFetchHandler;
|
|
struct WorkletOptions;
|
|
enum class CallerType : uint32_t;
|
|
|
|
class Worklet final : public nsISupports, public nsWrapperCache {
|
|
public:
|
|
NS_DECL_CYCLE_COLLECTING_ISUPPORTS
|
|
NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(Worklet)
|
|
|
|
// |aOwnedObject| may be provided by the WorkletImpl as a parent thread
|
|
// object to keep alive and traverse for CC as long as the Worklet has
|
|
// references remaining.
|
|
Worklet(nsPIDOMWindowInner* aWindow, RefPtr<WorkletImpl> aImpl,
|
|
nsISupports* aOwnedObject = nullptr);
|
|
|
|
nsPIDOMWindowInner* GetParentObject() const { return mWindow; }
|
|
|
|
virtual JSObject* WrapObject(JSContext* aCx,
|
|
JS::Handle<JSObject*> aGivenProto) override;
|
|
|
|
already_AddRefed<Promise> AddModule(const nsAString& aModuleURL,
|
|
const WorkletOptions& aOptions,
|
|
CallerType aCallerType, ErrorResult& aRv);
|
|
|
|
WorkletImpl* Impl() const { return mImpl; }
|
|
|
|
private:
|
|
~Worklet();
|
|
|
|
WorkletFetchHandler* GetImportFetchHandler(const nsACString& aURI);
|
|
|
|
void AddImportFetchHandler(const nsACString& aURI,
|
|
WorkletFetchHandler* aHandler);
|
|
|
|
nsCOMPtr<nsPIDOMWindowInner> mWindow;
|
|
nsCOMPtr<nsISupports> mOwnedObject;
|
|
|
|
nsRefPtrHashtable<nsCStringHashKey, WorkletFetchHandler> mImportHandlers;
|
|
|
|
const RefPtr<WorkletImpl> mImpl;
|
|
|
|
friend class WorkletFetchHandler;
|
|
};
|
|
|
|
} // namespace dom
|
|
} // namespace mozilla
|
|
|
|
#endif // mozilla_dom_Worklet_h
|