blob: f07ebb77e4a3771266ab89c2a6985ae7ab63d862 [file] [log] [blame]
// 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/public/mojom/base/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_base.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_base.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_base.mojom.File? updated_file_for_reading);
};