blob: 13082c489c9003c3887da0fd3aa51b38b8ca3509 [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;
/// 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.
@transitional("Use GetInfo2 instead")
GetInfo() -> (struct {
info StoryInfo;
state StoryState;
});
/// For transition purposes only.
@transitional("Only use while GetInfo2 is transitional")
GetInfo2() -> (resource struct {
info StoryInfo2;
state StoryState;
});
/// 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() -> ();
/// 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(resource struct {
watcher client_end:StoryWatcher;
});
/// Attach the `annotations` to the story.
///
/// Existing annotations with the same key will be overwritten.
Annotate(resource struct {
annotations vector<Annotation>:MAX_ANNOTATIONS_PER_UPDATE;
}) -> (struct {}) error AnnotationError;
};
/// Implemented by the client calling StoryController.Watch().
protocol StoryWatcher {
/// Called with the current state right after registration, and subsequently
/// when the state changes.
OnStateChange(struct {
new_state StoryState;
});
/// DEPRECATED
OnModuleAdded(resource struct {
module_data ModuleData;
});
/// DEPRECATED
OnModuleFocused(struct {
module_path vector<string:MAX>:MAX;
});
};