blob: 85c578339adffad94fa7e09ccea4b77dc8092d9f [file] [log] [blame]
// 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.viewsv1token;
// 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.
interface StoryController {
// Gets information associated with the story.
1: GetInfo() -> (StoryInfo info, StoryState state);
// DEPRECATED in favor of RequestStart().
//
// Runs the story controlled by this |StoryController| instance if not yet
// running or requested to start, else does nothing. |view_owner| is an
// interface request for the view of the story shell of this story. If the
// story is already running, the view owner request is dropped. If Stop()
// requests are pending when this request is issued, the request is queued
// until the Stop() requests complete.
3: Start(request<fuchsia.ui.viewsv1token.ViewOwner> view_owner);
// Requests to runsthe 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().
14: 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.
4: 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.
13: TakeAndLoadSnapshot(request<fuchsia.ui.viewsv1token.ViewOwner> view_owner) -> ();
// 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.
5: Watch(StoryWatcher watcher);
// Lists the active modules in the story. Active modules are those with a
// controller.
//
// Notifications for state changes on the module can be obtained through
// the ModuleController's OnStateChanged() event.
//
// Notifications for changes to this list are provided through
// StoryModulesWatcher.OnNewModule(), if a watcher is supplied in the call.
//
// DEPRECATED: StoryController is only to be used for Story concepts
// (metadata about, and requesting changes to runtime state).
7: GetActiveModules(StoryModulesWatcher? watcher) -> (vector<ModuleData> module_data);
// Lists all known modules in the story, as recorded in the ledger.
//
// DEPRECATED: StoryController is only to be used for Story concepts
// (metadata about, and requesting changes to runtime state).
8: GetModules() -> (vector<ModuleData> module_data);
// Obtains a ModuleController for the module at the given path. If no module
// exists at that path, the request is dropped. This is mostly to receive
// state update events.
//
// TODO(mesch): This is EXPERIMENTAL. We want something like this for story
// crafting, but giving the same module controller to the story crafting
// client as to the parent module or story runner might not be right yet.
//
// DEPRECATED: StoryController is only to be used for Story concepts
// (metadata about, and requesting changes to runtime state).
9: GetModuleController(vector<string> module_path, request<ModuleController> request);
// DEPRECATED: MI4-1084
10: GetActiveLinks(StoryLinksWatcher? watcher) -> (vector<LinkPath> link_data);
// Gets a connection to a link in the story with the specified |link_path|. If
// link does not exist yet, it is implicitly created when it is first
// accessed.
//
// DEPRECATED: StoryController is only to be used for Story concepts
// (metadata about, and requesting changes to runtime state).
11: GetLink(LinkPath link_path, request<Link> link);
};
// Implemented by the client calling StoryController.Watch().
interface StoryWatcher {
// Called with the current state right after registration, and subsequently
// when the state changes.
1: OnStateChange(StoryState new_state);
// Called when a module is added to a story.
//
// TODO(mesch): Remove, use StoryModulesWatcher instead.
//
// DEPRECATED: StoryController is only to be used for Story concepts
// (metadata about, and requesting changes to runtime state).
2: OnModuleAdded(ModuleData module_data);
// Called when a module is focused in the story.
// EXPERIMENTAL
//
// DEPRECATED: StoryController is only to be used for Story concepts
// (metadata about, and requesting changes to runtime state).
3: OnModuleFocused(vector<string> module_path);
};
// Implemented by the client calling StoryController.GetActiveModules().
//
// DEPRECATED: StoryController is only to be used for Story concepts
// (metadata about, and requesting changes to runtime state).
interface StoryModulesWatcher {
// Called when a module becomes active in the story, i.e. when a module
// controller for it is created. After this notification, the ModuleController
// can be obtained with GetModuleController() and further notifications can be
// obtained from watchers and connection error handlers on the controller.
//
// This is EXPERIMENTAL. We certainly can make this simpler once we know it is
// what we need.
1: OnNewModule(ModuleData module_data);
// Called when a module becomes inactive in the story, i.e. when the module
// controller is destroyed because its parent or the story runner called
// Stop() for it. This is not called when modules are torn down because the
// story as a whole is stopped.
2: OnStopModule(ModuleData module_data);
};
// 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).
interface 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.
1: OnNewLink(LinkPath link_path);
};