summaryrefslogtreecommitdiffstats
path: root/dom/presentation/interfaces
diff options
context:
space:
mode:
Diffstat (limited to 'dom/presentation/interfaces')
-rw-r--r--dom/presentation/interfaces/moz.build30
-rw-r--r--dom/presentation/interfaces/nsIPresentationControlChannel.idl139
-rw-r--r--dom/presentation/interfaces/nsIPresentationControlService.idl156
-rw-r--r--dom/presentation/interfaces/nsIPresentationDevice.idl43
-rw-r--r--dom/presentation/interfaces/nsIPresentationDeviceManager.idl51
-rw-r--r--dom/presentation/interfaces/nsIPresentationDevicePrompt.idl58
-rw-r--r--dom/presentation/interfaces/nsIPresentationDeviceProvider.idl75
-rw-r--r--dom/presentation/interfaces/nsIPresentationListener.idl50
-rw-r--r--dom/presentation/interfaces/nsIPresentationLocalDevice.idl17
-rw-r--r--dom/presentation/interfaces/nsIPresentationNetworkHelper.idl36
-rw-r--r--dom/presentation/interfaces/nsIPresentationRequestUIGlue.idl29
-rw-r--r--dom/presentation/interfaces/nsIPresentationService.idl275
-rw-r--r--dom/presentation/interfaces/nsIPresentationSessionRequest.idl35
-rw-r--r--dom/presentation/interfaces/nsIPresentationSessionTransport.idl69
-rw-r--r--dom/presentation/interfaces/nsIPresentationSessionTransportBuilder.idl80
-rw-r--r--dom/presentation/interfaces/nsIPresentationTerminateRequest.idl33
16 files changed, 1176 insertions, 0 deletions
diff --git a/dom/presentation/interfaces/moz.build b/dom/presentation/interfaces/moz.build
new file mode 100644
index 000000000..935e39000
--- /dev/null
+++ b/dom/presentation/interfaces/moz.build
@@ -0,0 +1,30 @@
+# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*-
+# vim: set filetype=python:
+# 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/.
+
+XPIDL_SOURCES += [
+ 'nsIPresentationControlChannel.idl',
+ 'nsIPresentationControlService.idl',
+ 'nsIPresentationDevice.idl',
+ 'nsIPresentationDeviceManager.idl',
+ 'nsIPresentationDevicePrompt.idl',
+ 'nsIPresentationDeviceProvider.idl',
+ 'nsIPresentationListener.idl',
+ 'nsIPresentationLocalDevice.idl',
+ 'nsIPresentationRequestUIGlue.idl',
+ 'nsIPresentationService.idl',
+ 'nsIPresentationSessionRequest.idl',
+ 'nsIPresentationSessionTransport.idl',
+ 'nsIPresentationSessionTransportBuilder.idl',
+ 'nsIPresentationTerminateRequest.idl',
+]
+
+if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'android':
+ XPIDL_SOURCES += [
+ 'nsIPresentationNetworkHelper.idl',
+ ]
+
+XPIDL_MODULE = 'dom_presentation'
+
diff --git a/dom/presentation/interfaces/nsIPresentationControlChannel.idl b/dom/presentation/interfaces/nsIPresentationControlChannel.idl
new file mode 100644
index 000000000..669e4088e
--- /dev/null
+++ b/dom/presentation/interfaces/nsIPresentationControlChannel.idl
@@ -0,0 +1,139 @@
+/* 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"
+
+interface nsIArray;
+interface nsIInputStream;
+
+[scriptable, uuid(ae318e05-2a4e-4f85-95c0-e8b191ad812c)]
+interface nsIPresentationChannelDescription: nsISupports
+{
+ const unsigned short TYPE_TCP = 1;
+ const unsigned short TYPE_DATACHANNEL = 2;
+
+ // Type of transport channel.
+ readonly attribute uint8_t type;
+
+ // Addresses for TCP channel (as a list of nsISupportsCString).
+ // Should only be used while type == TYPE_TCP.
+ readonly attribute nsIArray tcpAddress;
+
+ // Port number for TCP channel.
+ // Should only be used while type == TYPE_TCP.
+ readonly attribute uint16_t tcpPort;
+
+ // SDP for Data Channel.
+ // Should only be used while type == TYPE_DATACHANNEL.
+ readonly attribute DOMString dataChannelSDP;
+};
+
+/*
+ * The callbacks for events on control channel.
+ */
+[scriptable, uuid(96dd548f-7d0f-43c1-b1ad-28e666cf1e82)]
+interface nsIPresentationControlChannelListener: nsISupports
+{
+ /*
+ * Callback for receiving offer from remote endpoint.
+ * @param offer The received offer.
+ */
+ void onOffer(in nsIPresentationChannelDescription offer);
+
+ /*
+ * Callback for receiving answer from remote endpoint.
+ * @param answer The received answer.
+ */
+ void onAnswer(in nsIPresentationChannelDescription answer);
+
+ /*
+ * Callback for receiving ICE candidate from remote endpoint.
+ * @param answer The received answer.
+ */
+ void onIceCandidate(in DOMString candidate);
+
+ /*
+ * The callback for notifying channel connected. This should be async called
+ * after nsIPresentationDevice::establishControlChannel.
+ */
+ void notifyConnected();
+
+ /*
+ * The callback for notifying channel disconnected.
+ * @param reason The reason of channel close, NS_OK represents normal close.
+ */
+ void notifyDisconnected(in nsresult reason);
+
+ /*
+ * The callback for notifying the reconnect command is acknowledged.
+ */
+ void notifyReconnected();
+};
+
+/*
+ * The control channel for establishing RTCPeerConnection for a presentation
+ * session. SDP Offer/Answer will be exchanged through this interface. The
+ * control channel should be in-order.
+ */
+[scriptable, uuid(e60e208c-a9f5-4bc6-9a3e-47f3e4ae9c57)]
+interface nsIPresentationControlChannel: nsISupports
+{
+ // The listener for handling events of this control channel.
+ // All the events should be pending until listener is assigned.
+ attribute nsIPresentationControlChannelListener listener;
+
+ /*
+ * Send offer to remote endpoint. |onOffer| should be invoked on remote
+ * endpoint.
+ * @param offer The offer to send.
+ * @throws NS_ERROR_FAILURE on failure
+ */
+ void sendOffer(in nsIPresentationChannelDescription offer);
+
+ /*
+ * Send answer to remote endpoint. |onAnswer| should be invoked on remote
+ * endpoint.
+ * @param answer The answer to send.
+ * @throws NS_ERROR_FAILURE on failure
+ */
+ void sendAnswer(in nsIPresentationChannelDescription answer);
+
+ /*
+ * Send ICE candidate to remote endpoint. |onIceCandidate| should be invoked
+ * on remote endpoint.
+ * @param candidate The candidate to send
+ * @throws NS_ERROR_FAILURE on failure
+ */
+ void sendIceCandidate(in DOMString candidate);
+
+ /*
+ * Launch a presentation on remote endpoint.
+ * @param presentationId The Id for representing this session.
+ * @param url The URL requested to open by remote device.
+ * @throws NS_ERROR_FAILURE on failure
+ */
+ void launch(in DOMString presentationId, in DOMString url);
+
+ /*
+ * Terminate a presentation on remote endpoint.
+ * @param presentationId The Id for representing this session.
+ * @throws NS_ERROR_FAILURE on failure
+ */
+ void terminate(in DOMString presentationId);
+
+ /*
+ * Disconnect the control channel.
+ * @param reason The reason of disconnecting channel; NS_OK represents normal.
+ */
+ void disconnect(in nsresult reason);
+
+ /*
+ * Reconnect a presentation on remote endpoint.
+ * Note that only controller is allowed to reconnect a session.
+ * @param presentationId The Id for representing this session.
+ * @param url The URL requested to open by remote device.
+ * @throws NS_ERROR_FAILURE on failure
+ */
+ void reconnect(in DOMString presentationId, in DOMString url);
+};
diff --git a/dom/presentation/interfaces/nsIPresentationControlService.idl b/dom/presentation/interfaces/nsIPresentationControlService.idl
new file mode 100644
index 000000000..d4b967b00
--- /dev/null
+++ b/dom/presentation/interfaces/nsIPresentationControlService.idl
@@ -0,0 +1,156 @@
+/* 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"
+
+interface nsIPresentationControlChannel;
+
+%{C++
+#define PRESENTATION_CONTROL_SERVICE_CONTACT_ID \
+ "@mozilla.org/presentation/control-service;1"
+%}
+
+/*
+ * The device information required for establishing control channel.
+ */
+[scriptable, uuid(296fd171-e4d0-4de0-99ff-ad8ed52ddef3)]
+interface nsITCPDeviceInfo: nsISupports
+{
+ readonly attribute AUTF8String id;
+ readonly attribute AUTF8String address;
+ readonly attribute uint16_t port;
+ // SHA-256 fingerprint of server certificate. Empty string represents
+ // server doesn't support TLS or not available.
+ readonly attribute AUTF8String certFingerprint;
+};
+
+[scriptable, uuid(09bddfaf-fcc2-4dc9-b33e-a509a1c2fb6d)]
+interface nsIPresentationControlServerListener: nsISupports
+{
+ /**
+ * Callback while the server is ready or restarted.
+ * @param aPort
+ * The port of the server socket.
+ * @param aCertFingerprint
+ * The SHA-256 fingerprint of TLS server certificate.
+ * Empty string represents server started without encryption.
+ */
+ void onServerReady(in uint16_t aPort, in AUTF8String aCertFingerprint);
+
+ /**
+ * Callback while the server is stopped or fails to start.
+ * @param aResult
+ * The error cause of server stopped or the reason of
+ * start failure.
+ * NS_OK means the server is stopped by close.
+ */
+ void onServerStopped(in nsresult aResult);
+
+ /**
+ * Callback while the remote host is requesting to start a presentation session.
+ * @param aDeviceInfo The device information related to the remote host.
+ * @param aUrl The URL requested to open by remote device.
+ * @param aPresentationId The Id for representing this session.
+ * @param aControlChannel The control channel for this session.
+ */
+ void onSessionRequest(in nsITCPDeviceInfo aDeviceInfo,
+ in DOMString aUrl,
+ in DOMString aPresentationId,
+ in nsIPresentationControlChannel aControlChannel);
+
+ /**
+ * Callback while the remote host is requesting to terminate a presentation session.
+ * @param aDeviceInfo The device information related to the remote host.
+ * @param aPresentationId The Id for representing this session.
+ * @param aControlChannel The control channel for this session.
+ * @param aIsFromReceiver true if termination is initiated by receiver.
+ */
+ void onTerminateRequest(in nsITCPDeviceInfo aDeviceInfo,
+ in DOMString aPresentationId,
+ in nsIPresentationControlChannel aControlChannel,
+ in boolean aIsFromReceiver);
+
+ /**
+ * Callback while the remote host is requesting to reconnect a presentation session.
+ * @param aDeviceInfo The device information related to the remote host.
+ * @param aUrl The URL requested to open by remote device.
+ * @param aPresentationId The Id for representing this session.
+ * @param aControlChannel The control channel for this session.
+ */
+ void onReconnectRequest(in nsITCPDeviceInfo aDeviceInfo,
+ in DOMString url,
+ in DOMString aPresentationId,
+ in nsIPresentationControlChannel aControlChannel);
+};
+
+/**
+ * Presentation control service which can be used for both presentation
+ * control client and server.
+ */
+[scriptable, uuid(55d6b605-2389-4aae-a8fe-60d4440540ea)]
+interface nsIPresentationControlService: nsISupports
+{
+ /**
+ * This method initializes server socket. Caller should set listener and
+ * monitor onServerReady event to get the correct server info.
+ * @param aEncrypted
+ * True for using TLS control channel.
+ * @param aPort
+ * The port of the server socket. Pass 0 or opt-out to indicate no
+ * preference, and a port will be selected automatically.
+ * @throws NS_ERROR_FAILURE if the server socket has been inited or the
+ * server socket can not be inited.
+ */
+ void startServer(in boolean aEncrypted, [optional] in uint16_t aPort);
+
+ /**
+ * Request connection to designated remote presentation control receiver.
+ * @param aDeviceInfo
+ * The remtoe device info for establish connection.
+ * @returns The control channel for this session.
+ * @throws NS_ERROR_FAILURE if the Id hasn't been inited.
+ */
+ nsIPresentationControlChannel connect(in nsITCPDeviceInfo aDeviceInfo);
+
+ /**
+ * Check the compatibility to remote presentation control server.
+ * @param aVersion
+ * The version of remote server.
+ */
+ boolean isCompatibleServer(in uint32_t aVersion);
+
+ /**
+ * Close server socket and call |listener.onClose(NS_OK)|
+ */
+ void close();
+
+ /**
+ * Get the listen port of the TCP socket, valid after the server is ready.
+ * 0 indicates the server socket is not ready or is closed.
+ */
+ readonly attribute uint16_t port;
+
+ /**
+ * The protocol version implemented by this server.
+ */
+ readonly attribute uint32_t version;
+
+ /**
+ * The id of the TCP presentation server. |requestSession| won't
+ * work until the |id| is set.
+ */
+ attribute AUTF8String id;
+
+ /**
+ * The fingerprint of the TLS server certificate.
+ * Empty string indicates the server is not ready or not encrypted.
+ */
+ attribute AUTF8String certFingerprint;
+
+ /**
+ * The listener for handling events of this presentation control server.
+ * Listener must be provided before invoke |startServer| and |close|.
+ */
+ attribute nsIPresentationControlServerListener listener;
+};
diff --git a/dom/presentation/interfaces/nsIPresentationDevice.idl b/dom/presentation/interfaces/nsIPresentationDevice.idl
new file mode 100644
index 000000000..63e4a52ef
--- /dev/null
+++ b/dom/presentation/interfaces/nsIPresentationDevice.idl
@@ -0,0 +1,43 @@
+/* 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"
+
+interface nsIPresentationControlChannel;
+
+/*
+ * Remote device.
+ */
+[scriptable, uuid(b1e0a7af-5936-4066-8f2e-f789fb9a7e8f)]
+interface nsIPresentationDevice : nsISupports
+{
+ // The unique Id for the device. UUID is recommanded.
+ readonly attribute AUTF8String id;
+
+ // The human-readable name of this device.
+ readonly attribute AUTF8String name;
+
+ // TODO expose more info in order to fulfill UX spec
+ // The category of this device, could be "wifi", "bluetooth", "hdmi", etc.
+ readonly attribute AUTF8String type;
+
+ /*
+ * Establish a control channel to this device.
+ * @returns The control channel for this session.
+ * @throws NS_ERROR_FAILURE if the establishment fails
+ */
+ nsIPresentationControlChannel establishControlChannel();
+
+ // Do something when presentation session is disconnected.
+ void disconnect();
+
+ /*
+ * Query if requested presentation URL is supported.
+ * @params requestedUrl the designated URL for a presentation request.
+ * @returns true if designated URL is supported.
+ */
+ boolean isRequestedUrlSupported(in DOMString requestedUrl);
+};
+
+
diff --git a/dom/presentation/interfaces/nsIPresentationDeviceManager.idl b/dom/presentation/interfaces/nsIPresentationDeviceManager.idl
new file mode 100644
index 000000000..adff9fc09
--- /dev/null
+++ b/dom/presentation/interfaces/nsIPresentationDeviceManager.idl
@@ -0,0 +1,51 @@
+/* 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"
+
+interface nsIArray;
+interface nsIPresentationDeviceProvider;
+
+%{C++
+#define PRESENTATION_DEVICE_MANAGER_CONTRACTID "@mozilla.org/presentation-device/manager;1"
+#define PRESENTATION_DEVICE_CHANGE_TOPIC "presentation-device-change"
+%}
+
+/*
+ * Manager for the device availability. User can observe "presentation-device-change"
+ * for any update of the available devices.
+ */
+[scriptable, uuid(beb61db5-3d5f-454f-a15a-dbfa0337c569)]
+interface nsIPresentationDeviceManager : nsISupports
+{
+ // true if there is any device available.
+ readonly attribute boolean deviceAvailable;
+
+ /*
+ * Register a device provider manually.
+ * @param provider The device provider to add.
+ */
+ void addDeviceProvider(in nsIPresentationDeviceProvider provider);
+
+ /*
+ * Unregister a device provider manually.
+ * @param provider The device provider to remove.
+ */
+ void removeDeviceProvider(in nsIPresentationDeviceProvider provider);
+
+ /*
+ * Force all registered device providers to update device information.
+ */
+ void forceDiscovery();
+
+ /*
+ * Retrieve all available devices or all available devices that supports
+ * designated presentation URLs, return a list of nsIPresentationDevice.
+ * The returned list is a cached device list and could be out-of-date.
+ * Observe device change events to get following updates.
+ * @param presentationUrls the target presentation URLs for device filtering
+ */
+ nsIArray getAvailableDevices([optional] in nsIArray presentationUrls);
+};
+
diff --git a/dom/presentation/interfaces/nsIPresentationDevicePrompt.idl b/dom/presentation/interfaces/nsIPresentationDevicePrompt.idl
new file mode 100644
index 000000000..2900eb59c
--- /dev/null
+++ b/dom/presentation/interfaces/nsIPresentationDevicePrompt.idl
@@ -0,0 +1,58 @@
+/* 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"
+
+interface nsIArray;
+interface nsIDOMEventTarget;
+interface nsIPresentationDevice;
+interface nsIPrincipal;
+
+%{C++
+#define PRESENTATION_DEVICE_PROMPT_CONTRACTID "@mozilla.org/presentation-device/prompt;1"
+%}
+
+/*
+ * The information and callbacks for device selection
+ */
+[scriptable, uuid(b2aa7f6a-9448-446a-bba4-9c29638b0ed4)]
+interface nsIPresentationDeviceRequest : nsISupports
+{
+ // The origin which initiate the request.
+ readonly attribute DOMString origin;
+
+ // The array of candidate URLs.
+ readonly attribute nsIArray requestURLs;
+
+ // The XUL browser element that the request was originated in.
+ readonly attribute nsIDOMEventTarget chromeEventHandler;
+
+ // The principal of the request.
+ readonly attribute nsIPrincipal principal;
+
+ /*
+ * Callback after selecting a device
+ * @param device The selected device.
+ */
+ void select(in nsIPresentationDevice device);
+
+ /*
+ * Callback after selection failed or canceled by user.
+ * @param reason The error cause for canceling this request.
+ */
+ void cancel(in nsresult reason);
+};
+
+/*
+ * UI prompt for device selection.
+ */
+[scriptable, uuid(ac1a7e44-de86-454f-a9f1-276de2539831)]
+interface nsIPresentationDevicePrompt : nsISupports
+{
+ /*
+ * Request a device selection.
+ * @param request The information and callbacks of this selection request.
+ */
+ void promptDeviceSelection(in nsIPresentationDeviceRequest request);
+};
diff --git a/dom/presentation/interfaces/nsIPresentationDeviceProvider.idl b/dom/presentation/interfaces/nsIPresentationDeviceProvider.idl
new file mode 100644
index 000000000..b2c5e530c
--- /dev/null
+++ b/dom/presentation/interfaces/nsIPresentationDeviceProvider.idl
@@ -0,0 +1,75 @@
+/* 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"
+
+interface nsIPresentationDevice;
+interface nsIPresentationControlChannel;
+
+%{C++
+#define PRESENTATION_DEVICE_PROVIDER_CATEGORY "presentation-device-provider"
+%}
+
+/*
+ * The callbacks for any device updates and session request.
+ */
+[scriptable, uuid(46fd372b-2e40-4179-9b36-0478d141e440)]
+interface nsIPresentationDeviceListener: nsISupports
+{
+ void addDevice(in nsIPresentationDevice device);
+ void removeDevice(in nsIPresentationDevice device);
+ void updateDevice(in nsIPresentationDevice device);
+
+ /*
+ * Callback while the remote device is requesting to start a presentation session.
+ * @param device The remote device that sent session request.
+ * @param url The URL requested to open by remote device.
+ * @param presentationId The Id for representing this session.
+ * @param controlChannel The control channel for this session.
+ */
+ void onSessionRequest(in nsIPresentationDevice device,
+ in DOMString url,
+ in DOMString presentationId,
+ in nsIPresentationControlChannel controlChannel);
+
+ /*
+ * Callback while the remote device is requesting to terminate a presentation session.
+ * @param device The remote device that sent session request.
+ * @param presentationId The Id for representing this session.
+ * @param controlChannel The control channel for this session.
+ * @param aIsFromReceiver true if termination is initiated by receiver.
+ */
+ void onTerminateRequest(in nsIPresentationDevice device,
+ in DOMString presentationId,
+ in nsIPresentationControlChannel controlChannel,
+ in boolean aIsFromReceiver);
+
+ /*
+ * Callback while the remote device is requesting to reconnect a presentation session.
+ * @param device The remote device that sent session request.
+ * @param aUrl The URL requested to open by remote device.
+ * @param presentationId The Id for representing this session.
+ * @param controlChannel The control channel for this session.
+ */
+ void onReconnectRequest(in nsIPresentationDevice device,
+ in DOMString url,
+ in DOMString presentationId,
+ in nsIPresentationControlChannel controlChannel);
+};
+
+/*
+ * Device provider for any device protocol, can be registered as default
+ * providers by adding its contractID to category "presentation-device-provider".
+ */
+[scriptable, uuid(3db2578a-0f50-44ad-b01b-28427b71b7bf)]
+interface nsIPresentationDeviceProvider: nsISupports
+{
+ // The listener for handling any device update.
+ attribute nsIPresentationDeviceListener listener;
+
+ /*
+ * Force to update device information.
+ */
+ void forceDiscovery();
+};
diff --git a/dom/presentation/interfaces/nsIPresentationListener.idl b/dom/presentation/interfaces/nsIPresentationListener.idl
new file mode 100644
index 000000000..546c2fd4b
--- /dev/null
+++ b/dom/presentation/interfaces/nsIPresentationListener.idl
@@ -0,0 +1,50 @@
+/* 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"
+
+[ref] native URLArrayRef(const nsTArray<nsString>);
+
+[uuid(0105f837-4279-4715-9d5b-2dc3f8b65353)]
+interface nsIPresentationAvailabilityListener : nsISupports
+{
+ /*
+ * Called when device availability changes.
+ */
+ [noscript] void notifyAvailableChange(in URLArrayRef urls,
+ in bool available);
+};
+
+[scriptable, uuid(7dd48df8-8f8c-48c7-ac37-7b9fd1acf2f8)]
+interface nsIPresentationSessionListener : nsISupports
+{
+ const unsigned short STATE_CONNECTING = 0;
+ const unsigned short STATE_CONNECTED = 1;
+ const unsigned short STATE_CLOSED = 2;
+ const unsigned short STATE_TERMINATED = 3;
+
+ /*
+ * Called when session state changes.
+ */
+ void notifyStateChange(in DOMString sessionId,
+ in unsigned short state,
+ in nsresult reason);
+
+ /*
+ * Called when receive messages.
+ */
+ void notifyMessage(in DOMString sessionId,
+ in ACString data,
+ in boolean isBinary);
+};
+
+[scriptable, uuid(27f101d7-9ed1-429e-b4f8-43b00e8e111c)]
+interface nsIPresentationRespondingListener : nsISupports
+{
+ /*
+ * Called when an incoming session connects.
+ */
+ void notifySessionConnect(in unsigned long long windowId,
+ in DOMString sessionId);
+};
diff --git a/dom/presentation/interfaces/nsIPresentationLocalDevice.idl b/dom/presentation/interfaces/nsIPresentationLocalDevice.idl
new file mode 100644
index 000000000..80e3b4041
--- /dev/null
+++ b/dom/presentation/interfaces/nsIPresentationLocalDevice.idl
@@ -0,0 +1,17 @@
+/* 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 "nsIPresentationDevice.idl"
+
+/*
+ * Local device.
+ * This device is used for 1-UA use case. The result for display is rendered by
+ * this host device.
+ */
+[scriptable, uuid(dd239720-cab6-4fb5-9025-cba23f1bbc2d)]
+interface nsIPresentationLocalDevice : nsIPresentationDevice
+{
+ // (1-UA only) The property is used to get the window ID of 1-UA device.
+ readonly attribute AUTF8String windowId;
+};
diff --git a/dom/presentation/interfaces/nsIPresentationNetworkHelper.idl b/dom/presentation/interfaces/nsIPresentationNetworkHelper.idl
new file mode 100644
index 000000000..514075dfa
--- /dev/null
+++ b/dom/presentation/interfaces/nsIPresentationNetworkHelper.idl
@@ -0,0 +1,36 @@
+/* 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"
+
+%{C++
+#define PRESENTATION_NETWORK_HELPER_CONTRACTID \
+ "@mozilla.org/presentation-device/networkHelper;1"
+%}
+
+[scriptable, uuid(0a7e134f-ff80-4e73-91e6-12b3134fe568)]
+interface nsIPresentationNetworkHelperListener : nsISupports
+{
+ /**
+ * Called when error occurs.
+ * @param aReason error message.
+ */
+ void onError(in AUTF8String aReason);
+
+ /**
+ * Called when get Wi-Fi IP address.
+ * @param aIPAddress the IP address of Wi-Fi interface.
+ */
+ void onGetWifiIPAddress(in AUTF8String aIPAddress);
+};
+
+[scriptable, uuid(650dc16b-3d9c-49a6-9037-1d6f2d18c90c)]
+interface nsIPresentationNetworkHelper : nsISupports
+{
+ /**
+ * Get IP address of Wi-Fi interface.
+ * @param aListener the callback interface.
+ */
+ void getWifiIPAddress(in nsIPresentationNetworkHelperListener aListener);
+};
diff --git a/dom/presentation/interfaces/nsIPresentationRequestUIGlue.idl b/dom/presentation/interfaces/nsIPresentationRequestUIGlue.idl
new file mode 100644
index 000000000..dab1991e4
--- /dev/null
+++ b/dom/presentation/interfaces/nsIPresentationRequestUIGlue.idl
@@ -0,0 +1,29 @@
+/* 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"
+
+interface nsIPresentationDevice;
+
+%{C++
+#define PRESENTATION_REQUEST_UI_GLUE_CONTRACTID \
+ "@mozilla.org/presentation/requestuiglue;1"
+%}
+
+[scriptable, uuid(faa45119-6fb5-496c-aa4c-f740177a38b5)]
+interface nsIPresentationRequestUIGlue : nsISupports
+{
+ /*
+ * This method is called to open the responding app/page when
+ * a presentation request comes in at receiver side.
+ *
+ * @param url The url of the request.
+ * @param sessionId The session ID of the request.
+ *
+ * @return A promise that resolves to the opening frame.
+ */
+ nsISupports sendRequest(in DOMString url,
+ in DOMString sessionId,
+ in nsIPresentationDevice device);
+};
diff --git a/dom/presentation/interfaces/nsIPresentationService.idl b/dom/presentation/interfaces/nsIPresentationService.idl
new file mode 100644
index 000000000..c3c15bb9f
--- /dev/null
+++ b/dom/presentation/interfaces/nsIPresentationService.idl
@@ -0,0 +1,275 @@
+/* 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"
+
+interface nsIDOMBlob;
+interface nsIDOMEventTarget;
+interface nsIInputStream;
+interface nsIPresentationAvailabilityListener;
+interface nsIPresentationRespondingListener;
+interface nsIPresentationSessionListener;
+interface nsIPresentationTransportBuilderConstructor;
+interface nsIPrincipal;
+
+%{C++
+#define PRESENTATION_SERVICE_CID \
+ { 0x1d9bb10c, 0xc0ab, 0x4fe8, \
+ { 0x9e, 0x4f, 0x40, 0x58, 0xb8, 0x51, 0x98, 0x32 } }
+#define PRESENTATION_SERVICE_CONTRACTID \
+ "@mozilla.org/presentation/presentationservice;1"
+
+#include "nsTArray.h"
+
+class nsString;
+%}
+
+[ref] native URLArrayRef(const nsTArray<nsString>);
+
+[scriptable, uuid(12073206-0065-4b10-9488-a6eb9b23e65b)]
+interface nsIPresentationServiceCallback : nsISupports
+{
+ /*
+ * Called when the operation succeeds.
+ *
+ * @param url: the selected request url used to start or reconnect a session.
+ */
+ void notifySuccess(in DOMString url);
+
+ /*
+ * Called when the operation fails.
+ *
+ * @param error: error message.
+ */
+ void notifyError(in nsresult error);
+};
+
+[scriptable, uuid(de42b741-5619-4650-b961-c2cebb572c95)]
+interface nsIPresentationService : nsISupports
+{
+ const unsigned short ROLE_CONTROLLER = 0x1;
+ const unsigned short ROLE_RECEIVER = 0x2;
+
+ const unsigned short CLOSED_REASON_ERROR = 0x1;
+ const unsigned short CLOSED_REASON_CLOSED = 0x2;
+ const unsigned short CLOSED_REASON_WENTAWAY = 0x3;
+
+ /*
+ * Start a new presentation session and display a prompt box which asks users
+ * to select a device.
+ *
+ * @param urls: The candidate Urls of presenting page. Only one url would be used.
+ * @param sessionId: An ID to identify presentation session.
+ * @param origin: The url of requesting page.
+ * @param deviceId: The specified device of handling this request, null string
+ * for prompt device selection dialog.
+ * @param windowId: The inner window ID associated with the presentation
+ * session. (0 implies no window ID since no actual window
+ * uses 0 as its ID. Generally it's the case the window is
+ * located in different process from this service)
+ * @param eventTarget: The chrome event handler, in particular XUL browser
+ * element in parent process, that the request was
+ * originated in.
+ * @param principal: The principal that initiated the session.
+ * @param callback: Invoke the callback when the operation is completed.
+ * NotifySuccess() is called with |id| if a session is
+ * established successfully with the selected device.
+ * Otherwise, NotifyError() is called with a error message.
+ * @param constructor: The constructor for creating a transport builder.
+ */
+ [noscript] void startSession(in URLArrayRef urls,
+ in DOMString sessionId,
+ in DOMString origin,
+ in DOMString deviceId,
+ in unsigned long long windowId,
+ in nsIDOMEventTarget eventTarget,
+ in nsIPrincipal principal,
+ in nsIPresentationServiceCallback callback,
+ in nsIPresentationTransportBuilderConstructor constructor);
+
+ /*
+ * Send the message to the session.
+ *
+ * @param sessionId: An ID to identify presentation session.
+ * @param role: Identify the function called by controller or receiver.
+ * @param data: the message being sent out.
+ */
+ void sendSessionMessage(in DOMString sessionId,
+ in uint8_t role,
+ in DOMString data);
+
+ /*
+ * Send the binary message to the session.
+ *
+ * @param sessionId: An ID to identify presentation session.
+ * @param role: Identify the function called by controller or receiver.
+ * @param data: the message being sent out.
+ */
+ void sendSessionBinaryMsg(in DOMString sessionId,
+ in uint8_t role,
+ in ACString data);
+
+ /*
+ * Send the blob to the session.
+ *
+ * @param sessionId: An ID to identify presentation session.
+ * @param role: Identify the function called by controller or receiver.
+ * @param blob: The input blob to be sent.
+ */
+ void sendSessionBlob(in DOMString sessionId,
+ in uint8_t role,
+ in nsIDOMBlob blob);
+
+ /*
+ * Close the session.
+ *
+ * @param sessionId: An ID to identify presentation session.
+ * @param role: Identify the function called by controller or receiver.
+ */
+ void closeSession(in DOMString sessionId,
+ in uint8_t role,
+ in uint8_t closedReason);
+
+ /*
+ * Terminate the session.
+ *
+ * @param sessionId: An ID to identify presentation session.
+ * @param role: Identify the function called by controller or receiver.
+ */
+ void terminateSession(in DOMString sessionId,
+ in uint8_t role);
+
+ /*
+ * Reconnect the session.
+ *
+ * @param url: The request Urls.
+ * @param sessionId: An ID to identify presentation session.
+ * @param role: Identify the function called by controller or receiver.
+ * @param callback: NotifySuccess() is called when a control channel
+ * is opened successfully.
+ * Otherwise, NotifyError() is called with a error message.
+ */
+ [noscript] void reconnectSession(in URLArrayRef urls,
+ in DOMString sessionId,
+ in uint8_t role,
+ in nsIPresentationServiceCallback callback);
+
+ /*
+ * Register an availability listener. Must be called from the main thread.
+ *
+ * @param availabilityUrls: The Urls that this listener is interested in.
+ * @param listener: The listener to register.
+ */
+ [noscript] void registerAvailabilityListener(
+ in URLArrayRef availabilityUrls,
+ in nsIPresentationAvailabilityListener listener);
+
+ /*
+ * Unregister an availability listener. Must be called from the main thread.
+ *
+ * @param availabilityUrls: The Urls that are registered before.
+ * @param listener: The listener to unregister.
+ */
+ [noscript] void unregisterAvailabilityListener(
+ in URLArrayRef availabilityUrls,
+ in nsIPresentationAvailabilityListener listener);
+
+ /*
+ * Register a session listener. Must be called from the main thread.
+ *
+ * @param sessionId: An ID to identify presentation session.
+ * @param role: Identify the function called by controller or receiver.
+ * @param listener: The listener to register.
+ */
+ void registerSessionListener(in DOMString sessionId,
+ in uint8_t role,
+ in nsIPresentationSessionListener listener);
+
+ /*
+ * Unregister a session listener. Must be called from the main thread.
+ *
+ * @param sessionId: An ID to identify presentation session.
+ * @param role: Identify the function called by controller or receiver.
+ */
+ void unregisterSessionListener(in DOMString sessionId,
+ in uint8_t role);
+
+ /*
+ * Register a responding listener. Must be called from the main thread.
+ *
+ * @param windowId: The window ID associated with the listener.
+ * @param listener: The listener to register.
+ */
+ void registerRespondingListener(in unsigned long long windowId,
+ in nsIPresentationRespondingListener listener);
+
+ /*
+ * Unregister a responding listener. Must be called from the main thread.
+ * @param windowId: The window ID associated with the listener.
+ */
+ void unregisterRespondingListener(in unsigned long long windowId);
+
+ /*
+ * Notify the receiver page is ready for presentation use.
+ *
+ * @param sessionId An ID to identify presentation session.
+ * @param windowId The inner window ID associated with the presentation
+ * session.
+ * @param isLoading true if receiver page is loading successfully.
+ * @param constructor: The constructor for creating a transport builder.
+ */
+ void notifyReceiverReady(in DOMString sessionId,
+ in unsigned long long windowId,
+ in boolean isLoading,
+ in nsIPresentationTransportBuilderConstructor constructor);
+
+ /*
+ * Notify the transport is closed
+ *
+ * @param sessionId: An ID to identify presentation session.
+ * @param role: Identify the function called by controller or receiver.
+ * @param reason: the error message. NS_OK indicates it is closed normally.
+ */
+ void NotifyTransportClosed(in DOMString sessionId,
+ in uint8_t role,
+ in nsresult reason);
+
+ /*
+ * Untrack the relevant info about the presentation session if there's any.
+ *
+ * @param sessionId: An ID to identify presentation session.
+ * @param role: Identify the function called by controller or receiver.
+ */
+ void untrackSessionInfo(in DOMString sessionId, in uint8_t role);
+
+ /*
+ * The windowId for building RTCDataChannel session transport
+ *
+ * @param sessionId: An ID to identify presentation session.
+ * @param role: Identify the function called by controller or receiver.
+ */
+ unsigned long long getWindowIdBySessionId(in DOMString sessionId,
+ in uint8_t role);
+
+ /*
+ * Update the mapping of the session ID and window ID.
+ *
+ * @param sessionId: An ID to identify presentation session.
+ * @param role: Identify the function called by controller or receiver.
+ * @param windowId: The inner window ID associated with the presentation
+ * session.
+ */
+ void updateWindowIdBySessionId(in DOMString sessionId,
+ in uint8_t role,
+ in unsigned long long windowId);
+
+ /*
+ * To build the session transport.
+ * NOTE: This function should be only called at controller side.
+ *
+ * @param sessionId: An ID to identify presentation session.
+ * @param role: Identify the function called by controller or receiver.
+ */
+ void buildTransport(in DOMString sessionId, in uint8_t role);
+};
diff --git a/dom/presentation/interfaces/nsIPresentationSessionRequest.idl b/dom/presentation/interfaces/nsIPresentationSessionRequest.idl
new file mode 100644
index 000000000..45a0e314c
--- /dev/null
+++ b/dom/presentation/interfaces/nsIPresentationSessionRequest.idl
@@ -0,0 +1,35 @@
+/* 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"
+
+interface nsIPresentationDevice;
+interface nsIPresentationControlChannel;
+
+%{C++
+#define PRESENTATION_SESSION_REQUEST_TOPIC "presentation-session-request"
+#define PRESENTATION_RECONNECT_REQUEST_TOPIC "presentation-reconnect-request"
+%}
+
+/*
+ * The event of a device requesting for starting or reconnecting
+ * a presentation session. User can monitor the session request
+ * on every device by observing "presentation-sesion-request" for a
+ * new session and "presentation-reconnect-request" for reconnecting.
+ */
+[scriptable, uuid(d808a084-d0f8-455a-a8df-5879e05a755b)]
+interface nsIPresentationSessionRequest: nsISupports
+{
+ // The device which requesting the presentation session.
+ readonly attribute nsIPresentationDevice device;
+
+ // The URL requested to open by remote device.
+ readonly attribute DOMString url;
+
+ // The Id for representing this session.
+ readonly attribute DOMString presentationId;
+
+ // The control channel for this session.
+ readonly attribute nsIPresentationControlChannel controlChannel;
+};
diff --git a/dom/presentation/interfaces/nsIPresentationSessionTransport.idl b/dom/presentation/interfaces/nsIPresentationSessionTransport.idl
new file mode 100644
index 000000000..a0b5617d7
--- /dev/null
+++ b/dom/presentation/interfaces/nsIPresentationSessionTransport.idl
@@ -0,0 +1,69 @@
+/* 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"
+
+interface nsIDOMBlob;
+interface nsIInputStream;
+interface nsINetAddr;
+
+%{C++
+#define PRESENTATION_TCP_SESSION_TRANSPORT_CONTRACTID \
+ "@mozilla.org/presentation/presentationtcpsessiontransport;1"
+%}
+
+/*
+ * The callback for session transport events.
+ */
+[scriptable, uuid(9f158786-41a6-4a10-b29b-9497f25d4b67)]
+interface nsIPresentationSessionTransportCallback : nsISupports
+{
+ void notifyTransportReady();
+ void notifyTransportClosed(in nsresult reason);
+ void notifyData(in ACString data, in boolean isBinary);
+};
+
+/*
+ * App-to-App transport channel for the presentation session.
+ */
+[scriptable, uuid(670b7e1b-65be-42b6-a596-be571907fa18)]
+interface nsIPresentationSessionTransport : nsISupports
+{
+ // Should be set once the underlying session transport is built
+ attribute nsIPresentationSessionTransportCallback callback;
+
+ // valid for TCP session transport
+ readonly attribute nsINetAddr selfAddress;
+
+ /*
+ * Enable the notification for incoming data. |notifyData| of
+ * |nsIPresentationSessionTransportCallback| can start getting invoked.
+ * Should set callback before |enableDataNotification| is called.
+ */
+ void enableDataNotification();
+
+ /*
+ * Send message to the remote endpoint.
+ * @param data The message to send.
+ */
+ void send(in DOMString data);
+
+ /*
+ * Send the binary message to the remote endpoint.
+ * @param data: the message being sent out.
+ */
+ void sendBinaryMsg(in ACString data);
+
+ /*
+ * Send the blob to the remote endpoint.
+ * @param blob: The input blob to be sent.
+ */
+ void sendBlob(in nsIDOMBlob blob);
+
+ /*
+ * Close this session transport.
+ * @param reason The reason for closing this session transport.
+ */
+ void close(in nsresult reason);
+};
diff --git a/dom/presentation/interfaces/nsIPresentationSessionTransportBuilder.idl b/dom/presentation/interfaces/nsIPresentationSessionTransportBuilder.idl
new file mode 100644
index 000000000..969f37d71
--- /dev/null
+++ b/dom/presentation/interfaces/nsIPresentationSessionTransportBuilder.idl
@@ -0,0 +1,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/. */
+
+#include "nsISupports.idl"
+
+interface nsIPresentationChannelDescription;
+interface nsISocketTransport;
+interface mozIDOMWindow;
+interface nsIPresentationControlChannel;
+interface nsIPresentationSessionTransport;
+
+[scriptable, uuid(673f6de1-e253-41b8-9be8-b7ff161fa8dc)]
+interface nsIPresentationSessionTransportBuilderListener : nsISupports
+{
+ // Should set |transport.callback| in |onSessionTransport|.
+ void onSessionTransport(in nsIPresentationSessionTransport transport);
+ void onError(in nsresult reason);
+
+ void sendOffer(in nsIPresentationChannelDescription offer);
+ void sendAnswer(in nsIPresentationChannelDescription answer);
+ void sendIceCandidate(in DOMString candidate);
+ void close(in nsresult reason);
+};
+
+[scriptable, uuid(2fdbe67d-80f9-48dc-8237-5bef8fa19801)]
+interface nsIPresentationSessionTransportBuilder : nsISupports
+{
+};
+
+/**
+ * The constructor for creating a transport builder.
+ */
+[scriptable, uuid(706482b2-1b51-4bed-a21d-785a9cfcfac7)]
+interface nsIPresentationTransportBuilderConstructor : nsISupports
+{
+ nsIPresentationSessionTransportBuilder createTransportBuilder(in uint8_t type);
+};
+
+/**
+ * Builder for TCP session transport
+ */
+[scriptable, uuid(cde36d6e-f471-4262-a70d-f932a26b21d9)]
+interface nsIPresentationTCPSessionTransportBuilder : nsIPresentationSessionTransportBuilder
+{
+ /**
+ * The following creation functions will trigger |listener.onSessionTransport|
+ * if the session transport is successfully built, |listener.onError| if some
+ * error occurs during building session transport.
+ */
+ void buildTCPSenderTransport(in nsISocketTransport aTransport,
+ in nsIPresentationSessionTransportBuilderListener aListener);
+
+ void buildTCPReceiverTransport(in nsIPresentationChannelDescription aDescription,
+ in nsIPresentationSessionTransportBuilderListener aListener);
+};
+
+/**
+ * Builder for WebRTC data channel session transport
+ */
+[scriptable, uuid(8131c4e0-3a8c-4bc1-a92a-8431473d2fe8)]
+interface nsIPresentationDataChannelSessionTransportBuilder : nsIPresentationSessionTransportBuilder
+{
+ /**
+ * The following creation function will trigger |listener.onSessionTransport|
+ * if the session transport is successfully built, |listener.onError| if some
+ * error occurs during creating session transport. The |notifyConnected| of
+ * |aControlChannel| should be called before calling
+ * |buildDataChannelTransport|.
+ */
+ void buildDataChannelTransport(in uint8_t aRole,
+ in mozIDOMWindow aWindow,
+ in nsIPresentationSessionTransportBuilderListener aListener);
+
+ // Bug 1275150 - Merge TCP builder with the following APIs
+ void onOffer(in nsIPresentationChannelDescription offer);
+ void onAnswer(in nsIPresentationChannelDescription answer);
+ void onIceCandidate(in DOMString candidate);
+ void notifyDisconnected(in nsresult reason);
+};
diff --git a/dom/presentation/interfaces/nsIPresentationTerminateRequest.idl b/dom/presentation/interfaces/nsIPresentationTerminateRequest.idl
new file mode 100644
index 000000000..a9f86fa0d
--- /dev/null
+++ b/dom/presentation/interfaces/nsIPresentationTerminateRequest.idl
@@ -0,0 +1,33 @@
+/* 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"
+
+interface nsIPresentationDevice;
+interface nsIPresentationControlChannel;
+
+%{C++
+#define PRESENTATION_TERMINATE_REQUEST_TOPIC "presentation-terminate-request"
+%}
+
+/*
+ * The event of a device requesting for terminating a presentation session. User can
+ * monitor the terminate request on every device by observing "presentation-terminate-request".
+ */
+[scriptable, uuid(3ddbf3a4-53ee-4b70-9bbc-58ac90dce6b5)]
+interface nsIPresentationTerminateRequest: nsISupports
+{
+ // The device which requesting to terminate presentation session.
+ readonly attribute nsIPresentationDevice device;
+
+ // The Id for representing this session.
+ readonly attribute DOMString presentationId;
+
+ // The control channel for this session.
+ // Should only use this channel to complete session termination.
+ readonly attribute nsIPresentationControlChannel controlChannel;
+
+ // True if termination is initiated by receiver.
+ readonly attribute boolean isFromReceiver;
+};