|  | // Copyright 2016 The Fuchsia Authors. All rights reserved. | 
|  | // Use of this source code is governed by a BSD-style license that can be | 
|  | // found in the LICENSE file. | 
|  |  | 
|  | library fuchsia.modular; | 
|  |  | 
|  | using fuchsia.ui.views; | 
|  |  | 
|  | // Used by the clients of StoryProvider (SessionShell) to interact with a single | 
|  | // story. Created by StoryProvider. | 
|  | // | 
|  | // If `StoryController` is closed, the `StoryState` associated with this story | 
|  | // does not change. | 
|  | protocol StoryController { | 
|  | // Gets information associated with the story. | 
|  | GetInfo() -> (StoryInfo info, StoryState state); | 
|  |  | 
|  | // Requests to run the story controlled by this `StoryController` instance. | 
|  | // When the story starts, if not yet running, the view of the newly started | 
|  | // story shell will be passed in a call to SessionShell.AttachView(). | 
|  | RequestStart(); | 
|  |  | 
|  | // Requests to stop the story controlled by this `StoryController`. If Start() | 
|  | // requests are pending when this request is issued, the request is queued | 
|  | // until the Start() requests complete. Before stopping the story, a snapshot | 
|  | // of the story will be taken and saved. Returns when the story is stopped. | 
|  | Stop() -> (); | 
|  |  | 
|  | // Creates a new view with the given `view_owner` request to display | 
|  | // snapshots. Takes a snapshot for the story controlled by this | 
|  | // `StoryController` and then loads the snapshot to the created view such that | 
|  | // it is rendered. The callback will be invoked once the view has been created | 
|  | // and the snapshot has been loaded. | 
|  | TakeAndLoadSnapshot(fuchsia.ui.views.ViewToken view_token) -> (); | 
|  |  | 
|  | // Registers a watcher for changes of the story state. | 
|  | // | 
|  | // Note that stories can stop themselves at any time and it is advisable | 
|  | // for the holder of a StoryController to provide a watcher. | 
|  | Watch(StoryWatcher watcher); | 
|  |  | 
|  | // DEPRECATED | 
|  | GetActiveModules() -> (vector<ModuleData> module_data); | 
|  |  | 
|  | // DEPRECATED | 
|  | GetModules() -> (vector<ModuleData> module_data); | 
|  |  | 
|  | // DEPRECATED | 
|  | // (metadata about, and requesting changes to runtime state). | 
|  | GetModuleController(vector<string> module_path, request<ModuleController> request); | 
|  |  | 
|  | // DEPRECATED | 
|  | GetLink(LinkPath link_path, request<Link> link); | 
|  | }; | 
|  |  | 
|  | // Implemented by the client calling StoryController.Watch(). | 
|  | protocol StoryWatcher { | 
|  | // Called with the current state right after registration, and subsequently | 
|  | // when the state changes. | 
|  | OnStateChange(StoryState new_state); | 
|  |  | 
|  | // DEPRECATED | 
|  | OnModuleAdded(ModuleData module_data); | 
|  |  | 
|  | // DEPRECATED | 
|  | OnModuleFocused(vector<string> module_path); | 
|  | }; | 
|  |  | 
|  | // Implemented by the client calling StoryController.GetActiveLinks(). | 
|  | // | 
|  | // DEPRECATED: StoryController is only to be used for Story concepts | 
|  | // (metadata about, and requesting changes to runtime state). | 
|  | protocol StoryLinksWatcher { | 
|  | // Called when a link becomes active in the story, i.e. when it is loaded into | 
|  | // memory and connected with modules and watchers. After this notification, | 
|  | // the Link can be obtained with GetLink() and further notifications can be | 
|  | // obtained from watchers on the Link and connection error handlers on the | 
|  | // LinkWatcher. | 
|  | // | 
|  | // Note that the Link remains active until there are no connections to it | 
|  | // left. Hence in order to obtain a notification when the Link becomes | 
|  | // inactive, a client must give up the Link connection after registering a | 
|  | // LinkWatcher, and listen for the LinkWatcher connection to go down. | 
|  | // | 
|  | // This is EXPERIMENTAL. We certainly can make this simpler once we know it is | 
|  | // what we need. | 
|  | OnNewLink(LinkPath link_path); | 
|  | }; |