gecko-dev/dom/midi/MIDIAccess.h
Gabriele Svelto ace6d1063f Bug 1600545 - Remove useless inclusions of header files generated from IDL files in dom/ r=Ehsan
The inclusions were removed with the following very crude script and the
resulting breakage was fixed up by hand. The manual fixups did either
revert the changes done by the script, replace a generic header with a more
specific one or replace a header with a forward declaration.

find . -name "*.idl" | grep -v web-platform | grep -v third_party | while read path; do
    interfaces=$(grep "^\(class\|interface\).*:.*" "$path" | cut -d' ' -f2)
    if [ -n "$interfaces" ]; then
        if [[ "$interfaces" == *$'\n'* ]]; then
          regexp="\("
          for i in $interfaces; do regexp="$regexp$i\|"; done
          regexp="${regexp%%\\\|}\)"
        else
          regexp="$interfaces"
        fi
        interface=$(basename "$path")
        rg -l "#include.*${interface%%.idl}.h" . | while read path2; do
            hits=$(grep -v "#include.*${interface%%.idl}.h" "$path2" | grep -c "$regexp" )
            if [ $hits -eq 0 ]; then
                echo "Removing ${interface} from ${path2}"
                grep -v "#include.*${interface%%.idl}.h" "$path2" > "$path2".tmp
                mv -f "$path2".tmp "$path2"
            fi
        done
    fi
done

Differential Revision: https://phabricator.services.mozilla.com/D55442

--HG--
extra : moz-landing-system : lando
2019-12-06 09:24:56 +00:00

116 lines
4.0 KiB
C++

/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim:set ts=2 sw=2 sts=2 et cindent: */
/* 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_MIDIAccess_h
#define mozilla_dom_MIDIAccess_h
#include "mozilla/Attributes.h"
#include "mozilla/DOMEventTargetHelper.h"
#include "mozilla/ErrorResult.h"
#include "mozilla/Observer.h"
#include "nsCycleCollectionParticipant.h"
#include "nsWrapperCache.h"
struct JSContext;
namespace mozilla {
// Predeclare void_t here, as including IPCMessageUtils brings in windows.h and
// causes binding compilation problems.
struct void_t;
namespace dom {
class MIDIAccessManager;
class MIDIInputMap;
struct MIDIOptions;
class MIDIOutputMap;
class MIDIPermissionRequest;
class MIDIPort;
class MIDIPortChangeEvent;
class MIDIPortInfo;
class MIDIPortList;
class Promise;
typedef Observer<void_t> MIDIAccessDestructionObserver;
/**
* MIDIAccess is the DOM object that is handed to the user upon MIDI permissions
* being successfully granted. It manages access to MIDI ports, and fires events
* for device connection and disconnection.
*
* New MIDIAccess objects are created every time RequestMIDIAccess is called.
* MIDIAccess objects are managed via MIDIAccessManager.
*/
class MIDIAccess final : public DOMEventTargetHelper,
public Observer<MIDIPortList> {
// Use the Permission Request class in MIDIAccessManager for creating
// MIDIAccess objects.
friend class MIDIPermissionRequest;
friend class MIDIAccessManager;
public:
NS_DECL_ISUPPORTS_INHERITED
NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS_INHERITED(MIDIAccess,
DOMEventTargetHelper)
public:
virtual JSObject* WrapObject(JSContext* aCx,
JS::Handle<JSObject*> aGivenProto) override;
// Return map of MIDI Input Ports
MIDIInputMap* Inputs() const { return mInputMap; }
// Return map of MIDI Output Ports
MIDIOutputMap* Outputs() const { return mOutputMap; }
// Returns true if sysex permissions were given
bool SysexEnabled() const { return mSysexEnabled; }
// Observer implementation for receiving port connection updates
void Notify(const MIDIPortList& aEvent) override;
// All MIDIPort objects observe destruction of the MIDIAccess object that
// created them, as the port object receives disconnection events which then
// must be passed up to the MIDIAccess object. If the Port object dies before
// the MIDIAccess object, it needs to be removed from the observer list.
void RemovePortListener(MIDIAccessDestructionObserver* aPort);
// Fires DOM event on port connection/disconnection
void FireConnectionEvent(MIDIPort* aPort);
// Notify all MIDIPorts that were created by this MIDIAccess and are still
// alive, and detach from the MIDIAccessManager.
void Shutdown();
IMPL_EVENT_HANDLER(statechange);
private:
MIDIAccess(nsPIDOMWindowInner* aWindow, bool aSysexEnabled,
Promise* aAccessPromise);
~MIDIAccess();
// On receiving a connection event from MIDIAccessManager, create a
// corresponding MIDIPort object if we don't already have one.
void MaybeCreateMIDIPort(const MIDIPortInfo& aInfo, ErrorResult& aRv);
// Stores all known MIDIInput Ports
RefPtr<MIDIInputMap> mInputMap;
// Stores all known MIDIOutput Ports
RefPtr<MIDIOutputMap> mOutputMap;
// List of MIDIPort observers that need to be updated on destruction.
ObserverList<void_t> mDestructionObservers;
// True if user gave permissions for sysex usage to this object.
bool mSysexEnabled;
// Promise created by RequestMIDIAccess call, to be resolved after port
// populating is finished.
RefPtr<Promise> mAccessPromise;
// True if shutdown process has started, so we don't try to add more ports.
bool mHasShutdown;
};
} // namespace dom
} // namespace mozilla
#endif // mozilla_dom_MIDIAccess_h