/* 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 nsPIDOMWindowOuter; 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(nsPIDOMWindowInner* aWindow, nsIFrameLoader* aFrameLoader, nsIBrowserElementAPI* aAPI, AudioChannel aAudioChannel, 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); IMPL_EVENT_HANDLER(activestatechanged); private: BrowserElementAudioChannel(nsPIDOMWindowInner* aWindow, nsIFrameLoader* aFrameLoader, nsIBrowserElementAPI* aAPI, AudioChannel aAudioChannel); bool IsSystemAppWindow(nsPIDOMWindowOuter* aWindow) const; // This method is used to check whether we're in the nested-mozbrower-frame // situation, see bug1214148. nsresult IsFromNestedFrame(nsISupports* aSubject, bool& aIsNested) const; ~BrowserElementAudioChannel(); nsresult Initialize(); void ProcessStateChanged(const char16_t* aData); nsCOMPtr mFrameLoader; nsCOMPtr mBrowserElementAPI; nsCOMPtr mTabParent; nsCOMPtr mFrameWindow; AudioChannel mAudioChannel; enum { eStateActive, eStateInactive, eStateUnknown } mState; }; } // dom namespace } // mozilla namespace #endif // mozilla_dom_BrowserElementAudioChannels_h