author Gregory Szorc <>
Fri, 22 Apr 2016 12:51:23 -0700
changeset 294591 d6ea7c8e2449d9b34882650490383ee86b8bb164
parent 282426 e22b3043887ed36bf2c634c2924a7c8d39d226b1
child 295771 8f31424a9d07a81574ad59b415a97e289ffb5fb0
permissions -rw-r--r--
Bug 1259782 - Build with Visual Studio 2015 Update 2; r=ted Should be a drop-in replacement for VS2015u1. MozReview-Commit-ID: HSmdikYPR0j

/* -*- 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 */

#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"


class nsITVService;
class nsITVTunerData;

namespace mozilla {

class DOMMediaStream;

namespace dom {

class Promise;
class TVSource;

class TVTuner final : public DOMEventTargetHelper

  static already_AddRefed<TVTuner> Create(nsPIDOMWindowInner* aWindow,
                                          nsITVTunerData* aData);
  nsresult NotifyImageSizeChanged(uint32_t aWidth, uint32_t aHeight);

  // WebIDL (internal functions)

  virtual JSObject* WrapObject(JSContext *aCx, JS::Handle<JSObject*> aGivenProto) override;

  nsresult SetCurrentSource(TVSourceType aSourceType);

  nsresult DispatchTVEvent(nsIDOMEvent* aEvent);

  // WebIDL (public APIs)

  void GetSupportedSourceTypes(nsTArray<TVSourceType>& aSourceTypes,
                               ErrorResult& aRv) const;

  already_AddRefed<Promise> GetSources(ErrorResult& aRv);

  already_AddRefed<Promise> SetCurrentSource(const TVSourceType aSourceType,
                                             ErrorResult& aRv);

  void GetId(nsAString& aId) const;

  already_AddRefed<TVSource> GetCurrentSource() const;

  already_AddRefed<DOMMediaStream> GetStream() const;


  nsresult ReloadMediaStream();

  explicit TVTuner(nsPIDOMWindowInner* aWindow);


  bool Init(nsITVTunerData* aData);

  nsresult InitMediaStream();

  already_AddRefed<DOMMediaStream> CreateSimulatedMediaStream();

  nsresult DispatchCurrentSourceChangedEvent(TVSource* aSource);

  nsCOMPtr<nsITVService> mTVService;
  RefPtr<DOMMediaStream> mStream;
  uint16_t mStreamType;
  RefPtr<TVSource> mCurrentSource;
  nsTArray<RefPtr<TVSource>> mSources;
  nsString mId;
  nsTArray<TVSourceType> mSupportedSourceTypes;

} // namespace dom
} // namespace mozilla

#endif // mozilla_dom_TVTuner_h