chromium/chromecast/common/mojom/cast_demo.mojom

// Copyright 2021 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

module chromecast.shell.mojom;

import "mojo/public/mojom/base/values.mojom";

// Observer interface for system volume changes.
//
// Security: This interface is hosted in a render process.
interface CastDemoVolumeChangeObserver {
  // Will be called anytime the volume has been changed, including applying
  // the default volume.
  VolumeChanged(float level);
};

// Interface for the Cast Demo app to communicate with Cast platform. This
// interface is only exposed for the Cast Demo app, which is used for in-store
// retail demos. The content resources for this app are baked into the platform.
// When a device is in demo mode, its functionality is restricted to the demo
// app experience, which includes pre-baked video demos and simple smart-home
// device controls.
//
// Security: This interface is hosted by the Cast Service. Most of these methods
// expose non-sensitive capabilities. SetWifiCredentials() allows the app to
// select a WiFi network for the device, and is documented below.
interface CastDemo {
  // Record a metrics event, with |data| logged with the event as JSON.
  RecordEvent(string event_name, mojo_base.mojom.Value data);

  // Set a retailer name to identify the chain of this device.
  SetRetailerName(string retailer_name);

  // Set a store ID to identify the location of this device.
  SetStoreId(string store_id);

  // Get a retailer name to identify the chain of this device.
  GetRetailerName() => (string retailer_name);

  // Get a store ID to identify the location of this device.
  GetStoreId() => (string store_id);

  // Change the default volume level, with |level| in the range [0, 1].
  SetDefaultVolumeLevel(float level);

  // Get the volume level previously set through SetDefaultVolumeLevel().
  GetDefaultVolumeLevel() => (float level);

  // Set the volume to a previous level set through SetDefaultVolumeLevel().
  ApplyDefaultVolume();

  // Set store-specific wifi credentials.
  // If |psk| is present, WPA-PSK is assumed.
  // If |psk| is empty, no security is assumed.
  //
  // Security: This allows the Cast Demo app to select a WiFi network for the
  // device. Before the app enters "demonstration mode", this API allows retail
  // store managers to configure the WiFi network for the device without having
  // to complete the standard device setup flow. After setup, this API is
  // inaccessible to customers interacting with the demo app.
  SetWifiCredentials(string ssid, string psk);

  // Get the list of available WIFI networks.
  // |network_list| contains a Value with the following structure:
  // {"networks": [{"ssid": "<ssid>", "type": "<SECURE|PUBLIC>"}, ... ]}
  GetAvailableWifiNetworks() => (mojo_base.mojom.Value network_list);

  // Get the current connection status.
  // |status| contains a Value with the following structure:
  // { "status": "<CONNECTED|DISCONNECTED>", "network": "<ssid>" }
  GetConnectionStatus() => (mojo_base.mojom.Value status);

  // Register an observer to be notified when the volume is changed.
  AddVolumeChangeObserver(
      pending_remote<CastDemoVolumeChangeObserver> observer);

  // Force JS LocalStorage to be persisted to disk.
  PersistLocalStorage();
};