// Copyright 2017 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. module media.mojom; import "mojo/common/file.mojom"; // Provides a way to organize persistent per-origin/per-cdm-type data // in the browser's file system. interface CdmStorage { enum Status { kSuccess, // File was successfully opened. kInUse, // File is already open by another client. kFailure // Unable to open file. }; // Opens the file specified by |file_name| for read only. Writing to the file // is done using a temporary file created with the CdmFile interface returned. // Can be called multiple times for different files, or for the same file if // the first one has been closed. If successful, kSuccess will be returned, // |file_for_reading| can be used to read the contents, and |cdm_file| should // be closed when access to the file is no longer needed (i.e. file closed). // On failure, |status| <> kSuccess and |file_for_reading| and |cdm_file| // are null. // - If the file is already opened, kInUse will be returned in |status|. // - |file_name| must not contain forward slash ('/') or backslash ('\'), // and must not start with an underscore ('_'). If this happens, // |status| == kFailure is returned. Open(string file_name) => (Status status, mojo.common.mojom.File? file_for_reading, associated CdmFile? cdm_file); }; // Provides a way to keep track of the file opened. When the connection to this // object is broken, it is assumed that the file has been closed and that no // more operations will be performed on it. // // This interface is also used to be able to write to the file. Due to sandbox // restrictions on some platforms (crbug.com/774762), setting the length of the // file explicitly is not allowed in sandboxed processes. To get around this // (and avoid file corruption issues), writing is done by opening a new file, // letting the client write to it, and then replace the original file after // writing. interface CdmFile { // Open a new file that can be written to. This file will be in the same // directory as the original file. If successful, returns |file_for_writing| // which can be written to. OpenFileForWriting() => (mojo.common.mojom.File? file_for_writing); // Closes the file opened for writing and replaces the original file. // Returns a new file descriptor that should be used to read the original // file from now on. CommitWrite() => (mojo.common.mojom.File? updated_file_for_reading); };