/* -*- 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_TVTuner_h #define mozilla_dom_TVTuner_h #include "mozilla/DOMEventTargetHelper.h" // Include TVTunerBinding.h since enum TVSourceType can't be forward declared. #include "mozilla/dom/TVTunerBinding.h" #define VIDEO_TAG NS_LITERAL_STRING("video") class nsITVService; class nsITVTunerData; namespace mozilla { class DOMMediaStream; namespace dom { class Promise; class TVSource; class TVTuner final : public DOMEventTargetHelper { public: NS_DECL_ISUPPORTS_INHERITED NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(TVTuner, DOMEventTargetHelper) static already_AddRefed Create(nsPIDOMWindow* aWindow, nsITVTunerData* aData); nsresult NotifyImageSizeChanged(uint32_t aWidth, uint32_t aHeight); // WebIDL (internal functions) virtual JSObject* WrapObject(JSContext *aCx, JS::Handle aGivenProto) override; nsresult SetCurrentSource(TVSourceType aSourceType); nsresult DispatchTVEvent(nsIDOMEvent* aEvent); // WebIDL (public APIs) void GetSupportedSourceTypes(nsTArray& aSourceTypes, ErrorResult& aRv) const; already_AddRefed GetSources(ErrorResult& aRv); already_AddRefed SetCurrentSource(const TVSourceType aSourceType, ErrorResult& aRv); void GetId(nsAString& aId) const; already_AddRefed GetCurrentSource() const; already_AddRefed GetStream() const; IMPL_EVENT_HANDLER(currentsourcechanged); nsresult ReloadMediaStream(); private: explicit TVTuner(nsPIDOMWindow* aWindow); ~TVTuner(); bool Init(nsITVTunerData* aData); nsresult InitMediaStream(); already_AddRefed CreateSimulatedMediaStream(); nsresult DispatchCurrentSourceChangedEvent(TVSource* aSource); nsCOMPtr mTVService; RefPtr mStream; uint16_t mStreamType; RefPtr mCurrentSource; nsTArray> mSources; nsString mId; nsTArray mSupportedSourceTypes; }; } // namespace dom } // namespace mozilla #endif // mozilla_dom_TVTuner_h