| // Copyright 2014 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| // Use the <code>chrome.documentScan</code> API to discover and retrieve |
| // images from attached document scanners. |
| [platforms=("chromeos"), |
| implemented_in="chrome/browser/extensions/api/document_scan/document_scan_api.h"] |
| namespace documentScan { |
| dictionary ScanOptions { |
| // The MIME types that are accepted by the caller. |
| DOMString[]? mimeTypes; |
| |
| // The number of scanned images allowed. The default is 1. |
| long? maxImages; |
| }; |
| |
| dictionary ScanResults { |
| // An array of data image URLs in a form that can be passed as the "src" |
| // value to an image tag. |
| DOMString[] dataUrls; |
| |
| // The MIME type of the <code>dataUrls</code>. |
| DOMString mimeType; |
| }; |
| |
| // An enum that indicates the result of each operation. |
| enum OperationResult { |
| // An unknown or generic failure occurred. |
| UNKNOWN, |
| |
| // The operation succeeded. |
| SUCCESS, |
| |
| // The operation is not supported. |
| UNSUPPORTED, |
| |
| // The operation was cancelled. |
| CANCELLED, |
| |
| // The device is busy. |
| DEVICE_BUSY, |
| |
| // Either the data or an argument passed to the method is not valid. |
| INVALID, |
| |
| // The supplied value is the wrong data type for the underlying option. |
| WRONG_TYPE, |
| |
| // No more data is available. |
| EOF, |
| |
| // The document feeder is jammed. |
| ADF_JAMMED, |
| |
| // The document feeder is empty. |
| ADF_EMPTY, |
| |
| // The flatbed cover is open. |
| COVER_OPEN, |
| |
| // An error occurred while communicating with the device. |
| IO_ERROR, |
| |
| // The device requires authentication. |
| ACCESS_DENIED, |
| |
| // Not enough memory is available on the Chromebook to complete the |
| // operation. |
| NO_MEMORY, |
| |
| // The device is not reachable. |
| UNREACHABLE, |
| |
| // The device is disconnected. |
| MISSING, |
| |
| // An error has occurred somewhere other than the calling application. |
| INTERNAL_ERROR |
| }; |
| |
| // Indicates how the scanner is connected to the computer. |
| enum ConnectionType { |
| UNSPECIFIED, |
| USB, |
| NETWORK |
| }; |
| |
| // Contains general information about a scanner. It is |
| // intended for filtering and constructing user-facing information. to |
| // configure a scan, use $(ref:StartScanOptions). |
| dictionary ScannerInfo { |
| // The ID of a specific scanner. |
| DOMString scannerId; |
| |
| // A human-readable name for the scanner to display in the UI. |
| DOMString name; |
| |
| // The scanner manufacturer. |
| DOMString manufacturer; |
| |
| // The scanner model if it is available, or a generic description. |
| DOMString model; |
| |
| // For matching against other <code>ScannerInfo</code> entries that point |
| // to the same physical device. |
| DOMString deviceUuid; |
| |
| // Indicates how the scanner is connected to the computer. |
| ConnectionType connectionType; |
| |
| // If true, the scanner connection's transport cannot be intercepted by a |
| // passive listener, such as TLS or USB. |
| boolean secure; |
| |
| // An array of MIME types that can be requested for returned scans. |
| DOMString[] imageFormats; |
| |
| // A human-readable description of the protocol or driver used to |
| // access the scanner, such as Mopria, WSD, or epsonds. This is primarily |
| // useful for allowing a user to choose between protocols if a device |
| // supports multiple protocols. |
| DOMString protocolType; |
| }; |
| |
| // The data type of an option. |
| enum OptionType { |
| // The option's data type is unknown. The <code>value</code> property |
| // will be unset. |
| UNKNOWN, |
| |
| // The <code>value</code> property will be one of <code>true</code or |
| // <code>false</code>. |
| BOOL, |
| |
| // A signed 32-bit integer. The <code>value</code> property will be long or |
| // long[], depending on whether the option takes more than one value. |
| INT, |
| |
| // A double in the range -32768-32767.9999 with a resolution of 1/65535. |
| // The <code>value</code> property will be double or double[] depending |
| // on whether the option takes more than one value. Double values that |
| // can't be exactly represented will be rounded to the available range |
| // and precision. |
| FIXED, |
| |
| // A sequence of any bytes except NUL ('\0'). The <code>value</code> |
| // property will be a DOMString. |
| STRING, |
| |
| // An option of this type has no value. Instead, setting an option of |
| // this type causes an option-specific side effect in the scanner |
| // driver. For example, a button-typed option could be used by a |
| // scanner driver to provide a means to select default values or to |
| // tell an automatic document feeder to advance to the next sheet of |
| // paper. |
| BUTTON, |
| |
| // Grouping option. No value. This is included for compatibility, but |
| // will not normally be returned in <code>ScannerOption</code> values. Use |
| // <code>getOptionGroups()</code> to retrieve the list of groups with their |
| // member options. |
| GROUP |
| }; |
| |
| // Indicates the data type for $(ref:ScannerOption.unit). |
| enum OptionUnit { |
| // The value is a unitless number. For example, it can be a threshold. |
| UNITLESS, |
| |
| // The value is a number of pixels, for example, scan dimensions. |
| PIXEL, |
| |
| // The value is the number of bits, for example, color depth. |
| BIT, |
| |
| // The value is measured in millimeters, for example, scan dimensions. |
| MM, |
| |
| // The value is measured in dots per inch, for example, resolution. |
| DPI, |
| |
| // The value is a percent, for example, brightness. |
| PERCENT, |
| |
| // The value is measured in microseconds, for example, exposure time. |
| MICROSECOND |
| }; |
| |
| // The data type of constraint represented by an $(ref:OptionConstraint). |
| enum ConstraintType { |
| // The constraint on a range of <code>OptionType.INT</code> values. |
| // The <code>min</code>, <code>max</code>, and <code>quant</code> properties |
| // of <code>OptionConstraint</code> will be <code>long</code>, and its |
| // <code>list</code> propety will be unset. |
| INT_RANGE, |
| |
| // The constraint on a range of <code>OptionType.FIXED</code> values. |
| // The <code>min</code>, <code>max</code>, and <code>quant</code> properties |
| // of <code>OptionConstraint</code> will be <code>double</code>, and its |
| // <code>list</code> property will be unset. |
| FIXED_RANGE, |
| |
| // The constraint on a specific list of <code>OptionType.INT</code> |
| // values. The <code>OptionConstraint.list</code> property will contain |
| // <code>long</code> values, and the other properties will be unset. |
| INT_LIST, |
| |
| // The constraint on a specific list of <code>OptionType.FIXED</code> |
| // values. The <code>OptionConstraint.list</code> property will contain |
| // <code>double</code> values, and the other properties will be unset. |
| FIXED_LIST, |
| |
| // The constraint on a specific list of <code>OptionType.STRING</code> |
| // values. The <code>OptionConstraint.list</code> property will contain |
| // <code>DOMString</code> values, and the other properties will be unset. |
| STRING_LIST |
| }; |
| |
| // The specific values for the $(ref:ConstraintType) structure. |
| // An unconstrained value is represented by a lack of constraints; |
| // there is no separate <code>ConstraintType</code> value to indicate an |
| // unconstrained value. |
| dictionary OptionConstraint { |
| ConstraintType type; |
| (long or double)? min; |
| (long or double)? max; |
| (long or double)? quant; |
| (double[] or long[] or DOMString[])? list; |
| }; |
| |
| // How an option can be changed. |
| enum Configurability { |
| // The option is read-only. |
| NOT_CONFIGURABLE, |
| |
| // The option can be set in software. |
| SOFTWARE_CONFIGURABLE, |
| |
| // The option can be set by the user toggling or pushing a button on |
| // the scanner. |
| HARDWARE_CONFIGURABLE |
| }; |
| |
| // A self-describing configurable scanner option and its current value. |
| dictionary ScannerOption { |
| // The option name using lowercase ASCII letters, numbers, and dashes. |
| // Diacritics are not allowed. |
| DOMString name; |
| |
| // A printable one-line title. |
| DOMString title; |
| |
| // A longer description of the option. |
| DOMString description; |
| |
| // The data type contained in the <code>value</code> property, which |
| // is needed for setting this option. |
| OptionType type; |
| |
| // The unit of measurement for this option. |
| OptionUnit unit; |
| |
| // The current value of the option, if relevant. Note that the data |
| // type of this property must match the data type specified in |
| // <code>type</code>. |
| (boolean or double or double[] or long or long[] or DOMString)? value; |
| |
| // Defines $(ref:OptionConstraint) on the current scanner option. |
| OptionConstraint? constraint; |
| |
| // Indicates that this option can be detected from software. |
| boolean isDetectable; |
| |
| // Indicates whether and how the option can be changed. |
| Configurability configurability; |
| |
| // Can be automatically set by the scanner driver. |
| boolean isAutoSettable; |
| |
| // Emulated by the scanner driver if true. |
| boolean isEmulated; |
| |
| // Indicates the option is active and can be set or retrieved. If false, |
| // the <code>value</code> property will not be set. |
| boolean isActive; |
| |
| // Indicates that the UI should not display this option by default. |
| boolean isAdvanced; |
| |
| // Indicates that the option is used for internal configuration and |
| // should never be displayed in the UI. |
| boolean isInternal; |
| }; |
| |
| // A set of criteria passed to <code>getScannerList()</code>. Only devices |
| // that match all of the criteria will be returned. |
| dictionary DeviceFilter { |
| // Only return scanners that are directly attached to the computer. |
| boolean? local; |
| |
| // Only return scanners that use a secure transport, such as USB or TLS. |
| boolean? secure; |
| }; |
| |
| // Contains a list of option names. The groups and their contents are |
| // determined by the scanner driver and do not have any defined semantics |
| // or consistent membership. This structure is primarily intended |
| // for UI layout assistance; it does not affect individual option |
| // behaviors. |
| dictionary OptionGroup { |
| // Provides a printable title, for example "Geometry options". |
| DOMString title; |
| |
| // An array of option names in driver-provided order. |
| DOMString[] members; |
| }; |
| |
| // The response from $(ref:getScannerList). |
| dictionary GetScannerListResponse { |
| // The enumeration result. Note that partial results could be |
| // returned even if this indicates an error. |
| OperationResult result; |
| |
| // A possibly-empty list of scanners that match the provided |
| // $(ref:DeviceFilter). |
| ScannerInfo[] scanners; |
| }; |
| |
| // The response from $(ref:openScanner). |
| dictionary OpenScannerResponse { |
| // The scanner ID passed to <code>openScanner()</code>. |
| DOMString scannerId; |
| |
| // The result of opening the scanner. If the value of this is |
| // <code>SUCCESS</code>, the <code>scannerHandle</code> and |
| // <code>options</code> properties will be populated. |
| OperationResult result; |
| |
| // If <code>result</code> is <code>SUCCESS</code>, a |
| // handle to the scanner that can be used for further operations. |
| DOMString? scannerHandle; |
| |
| // If <code>result</code> is <code>SUCCESS</code>, |
| // provides a key-value mapping where the key is a device-specific |
| // option and the value is an instance of $(ref:ScannerOption). |
| object? options; |
| }; |
| |
| // The response from $(ref:getOptionGroups). |
| dictionary GetOptionGroupsResponse { |
| // The same scanner handle as was passed to $(ref:getOptionGroups). |
| DOMString scannerHandle; |
| |
| // The result of getting the option groups. If the value of this is |
| // <code>SUCCESS</code>, the <code>groups</code> property will be |
| // populated. |
| OperationResult result; |
| |
| // If <code>result</code> is <code>SUCCESS</code>, provides a |
| // list of option groups in the order supplied by the scanner driver. |
| OptionGroup[]? groups; |
| }; |
| |
| // The response from <code>closeScanner()</code>. |
| dictionary CloseScannerResponse { |
| // The same scanner handle as was passed to $(ref:closeScanner). |
| DOMString scannerHandle; |
| |
| // The result of closing the scanner. Even if this value is not |
| // <code>SUCCESS</code>, the handle will be invalid and |
| // should not be used for any further operations. |
| OperationResult result; |
| }; |
| |
| // Passed to $(ref:setOptions) to set an option to $(ref:ScannerOption) to |
| // a new value. |
| dictionary OptionSetting { |
| // Indicates the name of the option to set. |
| DOMString name; |
| |
| // Indicates the data type of the option. The requested data type must |
| // match the real data type of the underlying option. |
| OptionType type; |
| |
| // Indicates the value to set. Leave unset to request automatic setting for |
| // options that have <code>autoSettable</code> enabled. The data type |
| // supplied for <code>value</code> must match <code>type</code>. |
| (boolean or double or double[] or long or long[] or DOMString)? value; |
| }; |
| |
| // The result of setting an individual option. Each individual option |
| // supplied to <code>setOptions()</code> produces a separate result |
| // due to things like rounding and constraints. |
| dictionary SetOptionResult { |
| // Indicates the name of the option that was set. |
| DOMString name; |
| |
| // Indicates the result of setting the option. |
| OperationResult result; |
| }; |
| |
| // The response from a call to $(ref:setOptions). |
| dictionary SetOptionsResponse { |
| // Provides the scanner handle passed to <code>setOptions()</code>. |
| DOMString scannerHandle; |
| |
| // An array of results, one each for every passed-in |
| // <code>OptionSetting</code>. |
| SetOptionResult[] results; |
| |
| // An updated key-value mapping from option names to |
| // $(ref:ScannerOption) values containing the new configuration after |
| // attempting to set all supplied options. This has the same structure as |
| // the <code>options</code> property in $(ref:OpenScannerResponse). |
| // |
| // This property will be set even if some options were not set successfully, |
| // but will be unset if retrieving the updated configuration fails (for |
| // example, if the scanner is disconnected in the middle of scanning). |
| object? options; |
| }; |
| |
| // Specifies options for $(ref:startScan). |
| dictionary StartScanOptions { |
| // Specifies the MIME type to return scanned data in. |
| DOMString format; |
| |
| // If a non-zero value is specified, limits the maximum scanned bytes |
| // returned in a single $(ref:readScanData) response to that value. The |
| // smallest allowed value is 32768 (32 KB). If this property is not |
| // specified, the size of a returned chunk may be as large as the entire |
| // scanned image. |
| long? maxReadSize; |
| }; |
| |
| // The response from <code>startScan()</code>. |
| dictionary StartScanResponse { |
| // Provides the same scanner handle that was passed to |
| // <code>startScan()</code>. |
| DOMString scannerHandle; |
| |
| // The result of starting a scan. If the value of this is |
| // <code>SUCCESS</code>, the <code>job</code> property will be populated. |
| OperationResult result; |
| |
| // If <code>result</code> is <code>SUCCESS</code>, provides a |
| // handle that can be used to read scan data or cancel the job. |
| DOMString? job; |
| }; |
| |
| // The response from <code>cancelScan()</code>. |
| dictionary CancelScanResponse { |
| // Provides the same job handle that was passed to |
| // <code>cancelScan()</code>. |
| DOMString job; |
| |
| // The backend's cancel scan result. If the result is |
| // <code>OperationResult.SUCCESS</code> or |
| // <code>OperationResult.CANCELLED</code>, the scan has been cancelled and |
| // the scanner is ready to start a new scan. If the result is |
| // <code>OperationResult.DEVICE_BUSY </code>, the scanner is still |
| // processing the requested cancellation; the caller should wait a short |
| // time and try the request again. Other result values indicate a permanent |
| // error that should not be retried. |
| OperationResult result; |
| }; |
| |
| // The response from $(ref:readScanData). |
| dictionary ReadScanDataResponse { |
| // Provides the job handle passed to <code>readScanData()</code>. |
| DOMString job; |
| |
| // The result of reading data. If its value is |
| // <code>SUCCESS</code>, then <code>data</code> contains the |
| // <em>next</em> (possibly zero-length) chunk of image data that is ready |
| // for reading. If its value is <code>EOF</code>, the <code>data</code> |
| // contains the <em>last</em> chunk of image data. |
| OperationResult result; |
| |
| // If <code>result</code> is <code>SUCCESS</code>, contains |
| // the <em>next</em> chunk of scanned image data. If <code>result</code> is |
| // <code>EOF</code>, contains the <em>last</em> chunk of |
| // scanned image data. |
| ArrayBuffer? data; |
| |
| // If <code>result</code> is <code>SUCCESS</code>, an estimate of |
| // how much of the total scan data has been delivered so far, in the range |
| // 0 to 100. |
| long? estimatedCompletion; |
| }; |
| |
| // Callback from the $(ref:scan) method. |
| // |result| Provides the results from the scan, if successful. |
| // Otherwise, this value will be null and $(ref:runtime.lastError) |
| // will be set. |
| callback ScanCallback = void (ScanResults result); |
| |
| // Callback from the $(ref:getScannerList) method. |
| // |response| The response from enumeration, if the call was valid. |
| // Otherwise, this value will be null and $(ref:runtime.lastError) |
| // will be set. |
| callback GetScannerListCallback = void (GetScannerListResponse response); |
| |
| // Callback from the $(ref:openScanner) method. |
| // |response| The response from opening the scanner, if the call was valid. |
| // Otherwise, this value will be null and $(ref:runtime.lastError) |
| // will be set. |
| callback OpenScannerCallback = void (OpenScannerResponse response); |
| |
| // Callback from the $(ref:getOptionGroups) method. |
| // |response| The response from getting the option groups, if the call was |
| // valid. Otherwise, this value will be null and $(ref:runtime.lastError) |
| // will be set. |
| callback GetOptionGroupsCallback = |
| void (GetOptionGroupsResponse response); |
| |
| // Callback from the $(ref:closeScanner) method. |
| // |response| The response from closing the scanner, if the call was valid. |
| // Otherwise, this value will be null and $(ref:runtime.lastError) |
| // will be set. |
| callback CloseScannerCallback = void (CloseScannerResponse response); |
| |
| // Callback from the $(ref:setOptions) method. |
| // |response| The response from setting the options, if the call was valid. |
| // Otherwise, this value will be null and $(ref:runtime.lastError) |
| // will be set. |
| callback SetOptionsCallback = void (SetOptionsResponse response); |
| |
| // Callback from the $(ref:startScan) method. |
| // |response| The response from starting the scan, if the call was valid. |
| // Otherwise, this value will be null and $(ref:runtime.lastError) |
| // will be set. |
| callback StartScanCallback = void (StartScanResponse response); |
| |
| // Callback from the $(ref:cancelScan) method. |
| // |response| The response from canceling the scan, if the call was valid. |
| // Otherwise, this value will be null and $(ref:runtime.lastError) |
| // will be set. |
| callback CancelScanCallback = void (CancelScanResponse response); |
| |
| // Callback from the $(ref:readScanData) method. |
| // |response| The response from reading the next chunk of scanned image data, |
| // if the call was valid. Otherwise, this value will be null and |
| // $(ref:runtime.lastError) will be set. |
| callback ReadScanDataCallback = void (ReadScanDataResponse response); |
| |
| interface Functions { |
| // Performs a document scan and returns a Promise that resolves |
| // with a $(ref:ScanResults) object. If a callback is passed to |
| // this function, the returned data is passed to it instead. |
| // |options| : An object containing scan parameters. |
| // |callback| : Called with the result and data from the scan. |
| static void scan( |
| ScanOptions options, |
| ScanCallback callback); |
| |
| // Gets the list of available scanners and returns a Promise that |
| // resolves with a $(ref:GetScannerListResponse) object. If a callback |
| // is passed to this function, returned data is passed to it instead. |
| // |filter| : A $(ref:DeviceFilter) indicating which types of scanners |
| // should be returned. |
| // |callback| : Called with the result and list of scanners. |
| static void getScannerList( |
| DeviceFilter filter, GetScannerListCallback callback); |
| |
| // Opens a scanner for exclusive access and returns a Promise that |
| // resolves with an $(ref:OpenScannerResponse) object. If a callback |
| // is passed to this function, returned data is passed to it instead. |
| // |scannerId| : The ID of a scanner to be opened. This value is one |
| // returned from a previous call to $(ref:getScannerList). |
| // |callback| : Called with the result. |
| static void openScanner( |
| DOMString scannerId, OpenScannerCallback callback); |
| |
| // Gets the group names and member options from a scanner previously |
| // opened by $(ref:openScanner). This method returns a Promise that |
| // resolves with a $(ref:GetOptionGroupsResponse) object. If a callback |
| // is passed to this function, returned data is passed to it instead. |
| // |scannerHandle| : The handle of an open scanner returned from a call |
| // to $(ref:openScanner). |
| // |callback| : Called with the result. |
| static void getOptionGroups( |
| DOMString scannerHandle, GetOptionGroupsCallback callback); |
| |
| // Closes the scanner with the passed in handle and returns a Promise |
| // that resolves with a $(ref:CloseScannerResponse) object. If a callback |
| // is used, the object is passed to it instead. Even if the response is |
| // not a success, the supplied handle becomes invalid and should not be |
| // used for further operations. |
| // |scannerHandle| : Specifies the handle of an open scanner that was |
| // previously returned from a call to $(ref:openScanner). |
| // |callback| : Called with the result. |
| static void closeScanner( |
| DOMString scannerHandle, CloseScannerCallback callback); |
| |
| // Sets options on the specified scanner and returns a Promise that |
| // resolves with a $(ref:SetOptionsResponse) object containing the |
| // result of trying to set every value in the order of the passed-in |
| // $(ref:OptionSetting) object. If a callback is used, the object is |
| // passed to it instead. |
| // |scannerHandle| : The handle of the scanner to set options on. This |
| // should be a value previously returned from a call to $(ref:openScanner). |
| // |options| : A list of <code>OptionSetting</code> objects to be applied to |
| // the scanner. |
| // |callback| : Called with the result. |
| static void setOptions( |
| DOMString scannerHandle, OptionSetting[] options, |
| SetOptionsCallback callback); |
| |
| // Starts a scan on the specified scanner and returns a Promise that |
| // resolves with a $(ref:StartScanResponse). If a callback is used, |
| // the object is passed to it instead. If the call was successful, the |
| // response includes a job handle that can be used in subsequent calls |
| // to read scan data or cancel a scan. |
| // |scannerHandle| : The handle of an open scanner. This should be a value |
| // previously returned from a call to $(ref:openScanner). |
| // |options| : A $(ref:StartScanOptions) object indicating the options to |
| // be used for the scan. The <code>StartScanOptions.format</code> property |
| // must match one of the entries returned in the scanner's |
| // <code>ScannerInfo</code>. |
| // |callback| : Called with the result. |
| static void startScan( |
| DOMString scannerHandle, StartScanOptions options, |
| StartScanCallback callback); |
| |
| // Cancels a started scan and returns a Promise that resolves with a |
| // $(ref:CancelScanResponse) object. If a callback is used, the object |
| // is passed to it instead. |
| // |job| : The handle of an active scan job previously returned from a |
| // call to $(ref:startScan). |
| // |callback| : Called with the result. |
| static void cancelScan( |
| DOMString job, CancelScanCallback callback); |
| |
| // Reads the next chunk of available image data from an active job handle, |
| // and returns a Promise that resolves with a $(ref:ReadScanDataResponse) |
| // object. If a callback is used, the object is passed to it instead. |
| // |
| // <aside class="note"><b>Note:</b>It is valid for a response result to be |
| // <code>SUCCESS</code> with a zero-length <code>data</code> |
| // member. This means the scanner is still working but does not yet have |
| // additional data ready. The caller should wait a short time and try again. |
| // |
| // When the scan job completes, the response will have the result value of |
| // <code>EOF</code>. This response may contain a final |
| // non-zero <code>data</code> member.</aside> |
| // |
| // |job| : Active job handle previously returned from |
| // $(ref:startScan). |
| // |callback| : Called with the result. |
| static void readScanData( |
| DOMString job, ReadScanDataCallback callback); |
| }; |
| }; |