Index: chrome/common/extensions/api/copresence.idl |
diff --git a/chrome/common/extensions/api/copresence.idl b/chrome/common/extensions/api/copresence.idl |
new file mode 100644 |
index 0000000000000000000000000000000000000000..a6c1b1b1ce41baaab8ceac7e012b68cf60527f7b |
--- /dev/null |
+++ b/chrome/common/extensions/api/copresence.idl |
@@ -0,0 +1,143 @@ |
+// Copyright 2014 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+// Use the <code>chrome.copresence</code> API to communicate with other nearby |
+// devices using Google's copresence service. |
+namespace copresence { |
+ // Suggestions to copresence on how to do the publication and subscription. |
+ // Note: These are only suggestions. Actual behavior may not always match |
+ // what is requested. |
+ dictionary Strategy { |
+ // Attempt to use low power mode. Defaults to false. |
+ boolean? lowPower; |
+ // Attempt to only broadcast. Using this with onlyScan can result in both |
+ // being ignored. Defaults to false. |
+ boolean? onlyBroadcast; |
+ // Attempt to only scan. Using this with onlyBroadcast can result in both |
+ // being ignored. Defaults to false. |
+ boolean? onlyScan; |
+ // Attempt to use audible audio. Defaults to false. |
+ boolean? audible; |
+ }; |
+ |
+ dictionary Message { |
+ // The type of message being published. Cannot be empty. |
+ DOMString type; |
+ // The message payload, in raw bytes. |
+ ArrayBuffer payload; |
+ }; |
+ |
+ dictionary MessageFilter { |
+ // The type of messages to subscribe to. Cannot be empty. |
+ DOMString type; |
+ }; |
+ |
+ [noinline_doc] dictionary AccessPolicy { |
+ // Only send this message to devices within hearing range. |
+ // Defaults to false. |
+ boolean? onlyEarshot; |
+ }; |
+ |
+ [noinline_doc] dictionary PublishOperation { |
+ // A unique ID that identifies this publish. |
+ DOMString id; |
+ // The message to publish. |
+ Message message; |
+ // The number of milliseconds for which this publication will be active. |
+ // This is capped at 24 hours. If not provided, a default of 5 minutes is |
+ // used. |
+ long? timeToLiveMillis; |
+ // A policy specifying who can get the message. |
+ AccessPolicy? policy; |
+ // A set of strategies to use when publishing the message. These |
+ // strategies are suggestions to copresence that may or may not be followed. |
+ Strategy? strategies; |
+ }; |
+ |
+ [noinline_doc] dictionary SubscribeOperation { |
+ // A unique ID that identifies this subscription. |
+ DOMString id; |
+ // Filter that defines which messages we want to subscribe to. |
+ MessageFilter filter; |
+ // The number of milliseconds for which this subscription will be active. |
+ // This is capped at 24 hours. If not provided, a default of 5 minutes is |
+ // used. |
+ long? timeToLiveMillis; |
+ // A set of strategies to use when subscribing with this filter. These |
+ // strategies are suggestions to copresence that may or may not be followed. |
+ Strategy? strategies; |
+ }; |
+ |
+ [noinline_doc] dictionary UnpublishOperation { |
+ // The ID of a message to unpublish. Required if the operation type |
+ // is 'unpublish'. |
+ DOMString unpublishId; |
+ }; |
+ |
+ [noinline_doc] dictionary UnsubscribeOperation { |
+ // The ID of a subscription to cancel. Required if the operation type |
+ // is 'unsubscribe'. |
+ DOMString unsubscribeId; |
+ }; |
+ |
+ // Only one of these can be set. |
+ [noinline_doc] dictionary Operation { |
+ // Publication details. Required if the operation type is 'publish'. |
+ PublishOperation? publish; |
+ // Subscription details. Required if the operation type is 'subscribe'. |
+ SubscribeOperation? subscribe; |
+ // Unpublish details. Required if the operation type is 'unpublish'. |
+ UnpublishOperation? unpublish; |
+ // Unsubscribe details. Required if the operation type is 'unsubscribe'. |
+ UnsubscribeOperation? unsubscribe; |
+ }; |
+ |
+ // Indicates whether a batchExecute() call succeeded or encountered errors. |
+ enum ExecuteStatus { |
+ // All operations sent to batchExecute succeeded. |
+ success, |
+ // One of the operations sent to batchExecute failed. |
+ failed, |
+ // Contacting the Copresence server failed. |
+ serverError, |
+ // Initializing Copresence failed. |
+ initFailed |
+ }; |
+ |
+ // Specifies an asynchronous status event sent to the app. |
+ enum Status { |
+ // We attempted to broadcast audio but weren't able to. |
+ audioFailed, |
+ // Contacting the Copresence server failed. |
+ serverError |
+ }; |
+ |
+ // Callback to return the status of a completed batchExecute() call. |
+ callback ExecuteCallback = void(ExecuteStatus status); |
+ |
+ interface Functions { |
+ // Sets the API key to use with the app. This parameter only needs to be |
+ // set to communicate with apps on other platforms. Once the API key is set, |
+ // apps on any platform that are using this API key can publish/subscribe to |
+ // each other. |
+ [nodoc] static void setApiKey(DOMString apiKey); |
+ |
+ // Executes a set of copresence operations in one batch. They will either |
+ // all be executed, or none will be executed (due to an error in one or |
+ // more of them). Publish/Subscribe operations are executed in the order |
+ // that they exist in the array. Unpublish and Unsubscribe are processsed |
+ // at the end, again, in the order that they exist in the array. |
+ static void execute(Operation[] operations, ExecuteCallback callback); |
+ }; |
+ |
+ interface Events { |
+ // Fired when new messages arrive. |
+ static void onMessagesReceived(DOMString subscriptionId, |
+ Message[] messages); |
+ |
+ // Fired when a new copresence status update is available. |
+ static void onStatusUpdated(Status status); |
+ }; |
+}; |
+ |