summaryrefslogtreecommitdiffstats
path: root/toolkit/components/contentanalysis/nsIContentAnalysis.idl
diff options
context:
space:
mode:
Diffstat (limited to 'toolkit/components/contentanalysis/nsIContentAnalysis.idl')
-rw-r--r--toolkit/components/contentanalysis/nsIContentAnalysis.idl239
1 files changed, 239 insertions, 0 deletions
diff --git a/toolkit/components/contentanalysis/nsIContentAnalysis.idl b/toolkit/components/contentanalysis/nsIContentAnalysis.idl
new file mode 100644
index 0000000000..142c4c3cd3
--- /dev/null
+++ b/toolkit/components/contentanalysis/nsIContentAnalysis.idl
@@ -0,0 +1,239 @@
+/* -*- Mode: C++; c-basic-offset: 2; indent-tabs-mode: nil; tab-width: 8 -*- */
+/* 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 nsIURI;
+webidl WindowGlobalParent;
+
+[scriptable, uuid(06e6a60f-3a2b-41fa-a63b-fea7a7f71649)]
+interface nsIContentAnalysisAcknowledgement : nsISupports
+{
+ // These values must stay synchronized with ContentAnalysisAcknowledgement
+ // in analysis.proto!
+ // Acknowledgement of analysis response.
+ cenum Result: 32 {
+ eSuccess = 1, // The response was handled as specified by the agent.
+ eInvalidResponse = 2, // The response from the agent was not properly formatted.
+ eTooLate = 3, // The response from the agent was too late.
+ };
+
+ readonly attribute nsIContentAnalysisAcknowledgement_Result result;
+
+ // These values must stay synchronized with ContentAnalysisAcknowledgement
+ // in analysis.proto!
+ // The final action that the browser took with this request.
+ cenum FinalAction : 32 {
+ eUnspecified = 0,
+ eAllow = 1,
+ eReportOnly = 2,
+ eWarn = 3,
+ eBlock = 4,
+ };
+
+ readonly attribute nsIContentAnalysisAcknowledgement_FinalAction finalAction;
+};
+
+[scriptable, builtinclass, uuid(89088c61-15f6-4ace-a880-a1b5ea47ca66)]
+interface nsIContentAnalysisResponse : nsISupports
+{
+ // These values must stay synchronized with ContentAnalysisResponse
+ // in analysis.proto!
+ // Action requested in response to a successful analysis.
+ cenum Action : 32 {
+ eUnspecified = 0,
+ eReportOnly = 1,
+ eWarn = 2,
+ eBlock = 3,
+ // Values that do not appear in analysis.proto
+ eAllow = 1000,
+ eCanceled = 1001,
+ };
+
+ [infallible] readonly attribute nsIContentAnalysisResponse_Action action;
+ [infallible] readonly attribute boolean shouldAllowContent;
+
+ // Identifier for the corresponding nsIContentAnalysisRequest
+ readonly attribute ACString requestToken;
+
+ /**
+ * Acknowledge receipt of an analysis response.
+ * If false is passed for aAutoAcknowledge to AnalyzeContentRequest,
+ * the caller is responsible for calling this after successful
+ * resolution of the promise.
+ */
+ void acknowledge(in nsIContentAnalysisAcknowledgement aCaa);
+};
+
+[scriptable, uuid(48d31df1-204d-42ce-a57f-f156bb870d89)]
+interface nsIClientDownloadResource : nsISupports
+{
+ readonly attribute AString url;
+
+ // These values must stay synchronized with ClientDownloadResource
+ // in analysis.proto!
+ // The final URL of the download payload. The resource URL should
+ // correspond to the URL field above.
+ const unsigned long DOWNLOAD_URL = 0;
+ // A redirect URL that was fetched before hitting the final DOWNLOAD_URL.
+ const unsigned long DOWNLOAD_REDIRECT = 1;
+ // The final top-level URL of the tab that triggered the download.
+ const unsigned long TAB_URL = 2;
+ // A redirect URL thas was fetched before hitting the final TAB_URL.
+ const unsigned long TAB_REDIRECT = 3;
+ // The document URL for a PPAPI plugin instance that initiated the download.
+ // This is the document.url for the container element for the plugin
+ // instance.
+ const unsigned long PPAPI_DOCUMENT = 4;
+ // The plugin URL for a PPAPI plugin instance that initiated the download.
+ const unsigned long PPAPI_PLUGIN = 5;
+
+ readonly attribute unsigned long type;
+};
+
+/**
+ * A nsIContentAnalysisRequest represents a request that the browser
+ * consult any required content analysis resources (like external data-loss
+ * prevention applications) to determine if the attempted operation should
+ * be permitted to complete.
+ */
+[scriptable, uuid(c11a6636-da2a-4afc-bdd1-0bcae2310e6d)]
+interface nsIContentAnalysisRequest : nsISupports
+{
+ // These values must stay synchronized with ContentAnalysisRequest
+ // in analysis.proto!
+ // Type of analysis being requested.
+ // For meaning, see analysis.proto in the content analysis module.
+ cenum AnalysisType : 32 {
+ eUnspecified = 0,
+ eFileDownloaded = 1,
+ eFileAttached = 2,
+ eBulkDataEntry = 3,
+ ePrint = 4,
+ eFileTransfer = 5,
+ };
+ readonly attribute nsIContentAnalysisRequest_AnalysisType analysisType;
+
+ // Enumeration of what operation is happening, to be displayed to the user
+ cenum OperationType : 32 {
+ eCustomDisplayString = 0,
+ eClipboard = 1,
+ eDroppedText = 2,
+ };
+ readonly attribute nsIContentAnalysisRequest_OperationType operationTypeForDisplay;
+ readonly attribute AString operationDisplayString;
+
+ // Text content to analyze. Only one of textContent or filePath is defined.
+ readonly attribute AString textContent;
+
+ // Name of file to analyze. Only one of textContent or filePath is defined.
+ readonly attribute AString filePath;
+
+ // The URL containing the file download/upload or to which web content is
+ // being uploaded.
+ readonly attribute nsIURI url;
+
+ // Sha256 digest of file. Callers may pass in an empty string to have the
+ // content analysis code calculate this.
+ readonly attribute ACString sha256Digest;
+
+ // URLs involved in the download (empty for non-downloads).
+ readonly attribute Array<nsIClientDownloadResource> resources;
+
+ // Email address of user.
+ readonly attribute AString email;
+
+ // Unique identifier for this request
+ readonly attribute ACString requestToken;
+
+ // The window associated with this request
+ readonly attribute WindowGlobalParent windowGlobalParent;
+};
+
+[scriptable, builtinclass, uuid(9679545f-4256-4c90-9654-90292c355d25)]
+interface nsIContentAnalysisResult : nsISupports
+{
+ [infallible] readonly attribute boolean shouldAllowContent;
+};
+
+[scriptable, uuid(cb09fc88-118c-411b-aa89-2e1bc5e3eba6)]
+interface nsIContentAnalysisCallback : nsISupports
+{
+ void contentResult(in nsIContentAnalysisResponse aResult);
+
+ void error(in nsresult aResult);
+};
+
+[scriptable, builtinclass, uuid(61497587-2bba-4a88-acd3-3fbb2cedf163)]
+interface nsIContentAnalysis : nsISupports
+{
+ /**
+ * True if content analysis should be consulted. Must only be accessed from
+ * the parent process's main thread.
+ */
+ readonly attribute boolean isActive;
+
+ /**
+ * True if content analysis might be active, and False if content analysis
+ * is definitely not active. Reading this property is guaranteed
+ * to work from a content process, and can be used to avoid having to call
+ * into the parent process to determine whether content analysis is actually
+ * active.
+ */
+ readonly attribute bool mightBeActive;
+
+ /**
+ * Consults content analysis server, if any, to request a permission
+ * decision for a network operation. Allows blocking downloading/
+ * uploading/printing/etc, based on the request.
+ * Consultation with the content analysis tool follows the conventional
+ * request, response, acknowledgement protocol.
+ *
+ * The resulting Promise resolves to a nsIContentAnalysisResponse,
+ * which may take some time to get from the analysis server. It will
+ * be rejected, with an string error description, if any error occurs.
+ *
+ * @param aCar
+ * The request to analyze.
+ * @param aAutoAcknowledge
+ * Whether to send an acknowledge message to the agent after the agent sends a response.
+ * Passing false means that the caller is responsible for
+ * calling nsIContentAnalysisResponse::acknowledge() if the Promise is resolved.
+ */
+ [implicit_jscontext]
+ Promise analyzeContentRequest(in nsIContentAnalysisRequest aCar, in bool aAutoAcknowledge);
+
+ /**
+ * Same functionality as AnalyzeContentRequest(), but more convenient to call
+ * from C++ since it takes a callback instead of returning a Promise.
+ *
+ * @param aCar
+ * The request to analyze.
+ * @param aAutoAcknowledge
+ * Whether to send an acknowledge message to the agent after the agent sends a response.
+ * Passing false means that the caller is responsible for
+ * calling nsIContentAnalysisResponse::acknowledge() if nsIContentAnalysisCallback::contentResult()
+ * is called.
+ * @param callback
+ * Callbacks to be called when the agent sends a response message (or when there is an error).
+ */
+ void analyzeContentRequestCallback(in nsIContentAnalysisRequest aCar, in bool aAutoAcknowledge, in nsIContentAnalysisCallback callback);
+
+ /**
+ * Cancels the request that is in progress. This may not actually cancel the request
+ * with the analysis server, but it means that Gecko will immediately act like the request
+ * was denied.
+ *
+ * @param aRequestToken
+ * The token for the request to cancel.
+ */
+ void cancelContentAnalysisRequest(in ACString aRequestToken);
+
+ /**
+ * Indicates that the user has responded to a WARN dialog. aAllowContent represents
+ * whether the user wants to allow the request to go through.
+ */
+ void respondToWarnDialog(in ACString aRequestToken, in bool aAllowContent);
+};