| // Copyright 2015 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. | 
 |  | 
 | [DartPackage="mojo_services"] | 
 | module mojo; | 
 |  | 
 | struct Photo { | 
 |   // A string to uniquely identify an instance of a |Photo|. This can be used | 
 |   // to de-duplicate photos over multiple runs on the camera roll. | 
 |   string unique_id; | 
 |  | 
 |   // Stream to read contents of the photo from. | 
 |   handle<data_pipe_consumer> content; | 
 | }; | 
 |  | 
 | // |CameraRollService| provides access to the device's camera roll. | 
 | // The camera roll is exposed as a snapshot of all photos available as a list. | 
 | // The head of the list (element with index 0) is a photo with the latest | 
 | // timestamp and subsequent elements are in decreasing order of timestamp. | 
 | [ServiceName="mojo::CameraRollService"] | 
 | interface CameraRollService { | 
 |   // Updates the snapshot of all photos available. Photos might have been added | 
 |   // or removed after the service was started or |Update| was called. | 
 |   Update(); | 
 |   // Get the number of photos available in the current snapshot. | 
 |   GetCount() => (uint32 num_photos); | 
 |   // Get the photo from the current snapshot at |index|. null will be returned | 
 |   // if such an index is out-of-bounds. | 
 |   GetPhoto(uint32 index) => (Photo? photo); | 
 | }; | 
 |  | 
 | // |CameraService| provides access to the device's camera video stream. | 
 | [ServiceName="mojo::CameraService"] | 
 | interface CameraService { | 
 |   // Returns the most recent frame captured by the device's camera | 
 |   // in preview mode. | 
 |   GetLatestFrame() => (handle<data_pipe_consumer>? content); | 
 | }; |