diff options
Diffstat (limited to 'toolkit/components/contentanalysis/nsIContentAnalysis.idl')
-rw-r--r-- | toolkit/components/contentanalysis/nsIContentAnalysis.idl | 239 |
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); +}; |