/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* 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/. */ #include "nsISupports.idl" #include "nsIThread.idl" #include "nsIPrincipal.idl" #include "nsIFile.idl" %{C++ #include "nsTArray.h" #include "nsStringGlue.h" class GMPAudioDecoderProxy; class GMPDecryptorProxy; class GMPVideoDecoderProxy; class GMPVideoEncoderProxy; class GMPVideoHost; %} [ptr] native GMPVideoDecoderProxy(GMPVideoDecoderProxy); [ptr] native GMPVideoEncoderProxy(GMPVideoEncoderProxy); [ptr] native GMPVideoHost(GMPVideoHost); [ptr] native MessageLoop(MessageLoop); [ptr] native TagArray(nsTArray); [ptr] native GMPDecryptorProxy(GMPDecryptorProxy); [ptr] native GMPAudioDecoderProxy(GMPAudioDecoderProxy); [scriptable, uuid(657443a4-6b5d-4181-98b0-56997b35bd57)] interface mozIGeckoMediaPluginService : nsISupports { /** * The GMP thread. Callable from any thread. */ readonly attribute nsIThread thread; /** * Get a plugin that supports the specified tags. * Callable on any thread */ [noscript] boolean hasPluginForAPI(in ACString api, in TagArray tags); /** * Get a video decoder that supports the specified tags. * The array of tags should at least contain a codec tag, and optionally * other tags such as for EME keysystem. * Callable only on GMP thread. */ [noscript] GMPVideoDecoderProxy getGMPVideoDecoder(in TagArray tags, [optional] in ACString nodeId, out GMPVideoHost outVideoHost); /** * Get a video encoder that supports the specified tags. * The array of tags should at least contain a codec tag, and optionally * other tags. * Callable only on GMP thread. */ [noscript] GMPVideoEncoderProxy getGMPVideoEncoder(in TagArray tags, [optional] in ACString nodeId, out GMPVideoHost outVideoHost); // Returns an audio decoder that supports the specified tags. // The array of tags should at least contain a codec tag, and optionally // other tags such as for EME keysystem. // Callable only on GMP thread. GMPAudioDecoderProxy getGMPAudioDecoder(in TagArray tags, [optional] in ACString nodeId); // Returns a decryption session manager that supports the specified tags. // The array of tags should at least contain a key system tag, and optionally // other tags. // Callable only on GMP thread. GMPDecryptorProxy getGMPDecryptor(in TagArray tags, in ACString nodeId); /** * Add a directory to scan for gecko media plugins. * @note Main-thread API. */ void addPluginDirectory(in AString directory); /** * Remove a directory for gecko media plugins. * @note Main-thread API. */ void removePluginDirectory(in AString directory); /** * Gets the NodeId for a (origin, urlbarOrigin, isInprivateBrowsing) tuple. */ ACString getNodeId(in AString origin, in AString topLevelOrigin, in bool inPrivateBrowsingMode); /** * Returns true if the given node id is allowed to store things * persistently on disk. Private Browsing and local content are not * allowed to store persistent data. */ bool isPersistentStorageAllowed(in ACString nodeId); /** * Returns the directory to use as the base for storing data about GMPs. */ nsIFile getStorageDir(); };