tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

ScriptProcessorNode.h (4469B)


      1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
      2 /* vim:set ts=2 sw=2 sts=2 et cindent: */
      3 /* This Source Code Form is subject to the terms of the Mozilla Public
      4 * License, v. 2.0. If a copy of the MPL was not distributed with this
      5 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
      6 
      7 #ifndef ScriptProcessorNode_h_
      8 #define ScriptProcessorNode_h_
      9 
     10 #include "AudioNode.h"
     11 #include "mozilla/ErrorResult.h"
     12 
     13 namespace mozilla::dom {
     14 
     15 class AudioContext;
     16 class SharedBuffers;
     17 
     18 class ScriptProcessorNode final : public AudioNode {
     19 public:
     20  ScriptProcessorNode(AudioContext* aContext, uint32_t aBufferSize,
     21                      uint32_t aNumberOfInputChannels,
     22                      uint32_t aNumberOfOutputChannels);
     23 
     24  NS_INLINE_DECL_REFCOUNTING_INHERITED(ScriptProcessorNode, AudioNode)
     25 
     26  IMPL_EVENT_HANDLER(audioprocess)
     27 
     28  using EventTarget::EventListenerAdded;
     29  void EventListenerAdded(nsAtom* aType) override;
     30 
     31  using EventTarget::EventListenerRemoved;
     32  void EventListenerRemoved(nsAtom* aType) override;
     33 
     34  JSObject* WrapObject(JSContext* aCx,
     35                       JS::Handle<JSObject*> aGivenProto) override;
     36 
     37  AudioNode* Connect(AudioNode& aDestination, uint32_t aOutput, uint32_t aInput,
     38                     ErrorResult& aRv) override {
     39    AudioNode* node = AudioNode::Connect(aDestination, aOutput, aInput, aRv);
     40    if (!aRv.Failed()) {
     41      UpdateConnectedStatus();
     42    }
     43    return node;
     44  }
     45 
     46  void Connect(AudioParam& aDestination, uint32_t aOutput,
     47               ErrorResult& aRv) override {
     48    AudioNode::Connect(aDestination, aOutput, aRv);
     49    if (!aRv.Failed()) {
     50      UpdateConnectedStatus();
     51    }
     52  }
     53  void Disconnect(ErrorResult& aRv) override {
     54    AudioNode::Disconnect(aRv);
     55    UpdateConnectedStatus();
     56  }
     57  void Disconnect(uint32_t aOutput, ErrorResult& aRv) override {
     58    AudioNode::Disconnect(aOutput, aRv);
     59    UpdateConnectedStatus();
     60  }
     61  void NotifyInputsChanged() override { UpdateConnectedStatus(); }
     62  void NotifyHasPhantomInput() override {
     63    mHasPhantomInput = true;
     64    // No need to UpdateConnectedStatus() because there was previously an
     65    // input in InputNodes().
     66  }
     67  void Disconnect(AudioNode& aDestination, ErrorResult& aRv) override {
     68    AudioNode::Disconnect(aDestination, aRv);
     69    UpdateConnectedStatus();
     70  }
     71  void Disconnect(AudioNode& aDestination, uint32_t aOutput,
     72                  ErrorResult& aRv) override {
     73    AudioNode::Disconnect(aDestination, aOutput, aRv);
     74    UpdateConnectedStatus();
     75  }
     76  void Disconnect(AudioNode& aDestination, uint32_t aOutput, uint32_t aInput,
     77                  ErrorResult& aRv) override {
     78    AudioNode::Disconnect(aDestination, aOutput, aInput, aRv);
     79    UpdateConnectedStatus();
     80  }
     81  void Disconnect(AudioParam& aDestination, ErrorResult& aRv) override {
     82    AudioNode::Disconnect(aDestination, aRv);
     83    UpdateConnectedStatus();
     84  }
     85  void Disconnect(AudioParam& aDestination, uint32_t aOutput,
     86                  ErrorResult& aRv) override {
     87    AudioNode::Disconnect(aDestination, aOutput, aRv);
     88    UpdateConnectedStatus();
     89  }
     90  void SetChannelCount(uint32_t aChannelCount, ErrorResult& aRv) override {
     91    if (aChannelCount != ChannelCount()) {
     92      // Spec says to throw InvalidStateError, but see
     93      // https://github.com/WebAudio/web-audio-api/issues/2153
     94      aRv.ThrowNotSupportedError(
     95          "Cannot change channel count of ScriptProcessorNode");
     96    }
     97  }
     98  void SetChannelCountModeValue(ChannelCountMode aMode,
     99                                ErrorResult& aRv) override {
    100    if (aMode != ChannelCountMode::Explicit) {
    101      // Spec says to throw InvalidStateError, but see
    102      // https://github.com/WebAudio/web-audio-api/issues/2154
    103      aRv.ThrowNotSupportedError(
    104          "Cannot change channel count mode of ScriptProcessorNode");
    105    }
    106  }
    107 
    108  uint32_t BufferSize() const { return mBufferSize; }
    109 
    110  uint32_t NumberOfOutputChannels() const { return mNumberOfOutputChannels; }
    111 
    112  using DOMEventTargetHelper::DispatchTrustedEvent;
    113 
    114  const char* NodeType() const override { return "ScriptProcessorNode"; }
    115 
    116  size_t SizeOfExcludingThis(MallocSizeOf aMallocSizeOf) const override;
    117  size_t SizeOfIncludingThis(MallocSizeOf aMallocSizeOf) const override;
    118 
    119 private:
    120  virtual ~ScriptProcessorNode();
    121 
    122  void UpdateConnectedStatus();
    123 
    124  const uint32_t mBufferSize;
    125  const uint32_t mNumberOfOutputChannels;
    126  bool mHasPhantomInput = false;
    127 };
    128 
    129 }  // namespace mozilla::dom
    130 
    131 #endif