/* 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_BrowserElementAudioChannels_h #define mozilla_dom_BrowserElementAudioChannels_h #include "mozilla/dom/AudioChannelBinding.h" #include "mozilla/dom/BindingDeclarations.h" #include "mozilla/DOMEventTargetHelper.h" #include "mozilla/ErrorResult.h" #include "nsCycleCollectionParticipant.h" #include "nsIObserver.h" #include "nsIFrameLoader.h" #include "nsWeakReference.h" #include "nsWrapperCache.h" class nsIBrowserElementAPI; class nsITabParent; class nsPIDOMWindow; namespace mozilla { namespace dom { class DOMRequest; class BrowserElementAudioChannel final : public DOMEventTargetHelper , public nsSupportsWeakReference , public nsIObserver { public: NS_DECL_ISUPPORTS_INHERITED NS_DECL_NSIOBSERVER NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(BrowserElementAudioChannel, DOMEventTargetHelper) static already_AddRefed Create(nsPIDOMWindow* aWindow, nsIFrameLoader* aFrameLoader, nsIBrowserElementAPI* aAPI, AudioChannel aAudioChannel, const nsAString& aManifestURL, ErrorResult& aRv); // WebIDL methods virtual JSObject* WrapObject(JSContext *aCx, JS::Handle aGivenProto) override; AudioChannel Name() const; already_AddRefed GetVolume(ErrorResult& aRv); already_AddRefed SetVolume(float aVolume, ErrorResult& aRv); already_AddRefed GetMuted(ErrorResult& aRv); already_AddRefed SetMuted(bool aMuted, ErrorResult& aRv); already_AddRefed IsActive(ErrorResult& aRv); already_AddRefed NotifyChannel(const nsAString& aEvent, ErrorResult& aRv); IMPL_EVENT_HANDLER(activestatechanged); private: BrowserElementAudioChannel(nsPIDOMWindow* aWindow, nsIFrameLoader* aFrameLoader, nsIBrowserElementAPI* aAPI, AudioChannel aAudioChannel, const nsAString& aManifestURL); ~BrowserElementAudioChannel(); nsresult Initialize(); void ProcessStateChanged(const char16_t* aData); nsCOMPtr mFrameLoader; nsCOMPtr mBrowserElementAPI; nsCOMPtr mTabParent; nsCOMPtr mFrameWindow; AudioChannel mAudioChannel; nsString mManifestURL; enum { eStateActive, eStateInactive, eStateUnknown } mState; }; } // dom namespace } // mozilla namespace #endif // mozilla_dom_BrowserElementAudioChannels_h