| # Cobalt Splash Screen |
| |
| ## Startup splash screen sequence |
| |
| There can be up to three splash screens shown when launching web applications on |
| Cobalt: |
| |
| * one from the system |
| * one from Cobalt |
| * one from the web application itself |
| |
| The system splash screen is often a transition from the application icon |
| on the home screen to a static asset dictated by the platform (which is outside |
| of Cobalt's control). The Cobalt splash screen is shown as soon as Cobalt can |
| render until the web application is loaded. The web application splash screen is |
| the HTML content shown immediately upon loading the web application (this may |
| resemble a typical splash screen, but it really can be whatever the application |
| chooses to show on starting). |
| |
| ## Cobalt splash screen priority order |
| |
| The Cobalt splash screen must be specified as a URL to a document. The document |
| must be either self-contained or all of its references must be local. That means |
| the document should not reference any external CSS, JavaScript, or image files, |
| for example. This simplifies the caching process so that only a single document |
| must be cached without tracing references. All fallback splash screens must |
| refer to local documents. This is so the fallback splash screen can be shown |
| without latency and even when there is no network available. Specifically, the |
| fallback splash screen URL and its references should start with either |
| `file:///` or `h5vcc-embedded://`. Additionally `none` can be used to specify |
| that no Cobalt splash screen should be constructed; the system splash sequence |
| transitions directly into the application splash sequence once the page is |
| loaded. |
| |
| The Cobalt splash screen is one of the following, in order of precedence: |
| |
| 1. **Web cached splash screen:** If a splash screen specified by a web |
| application is cached from a previous instance of Cobalt, it will be loaded |
| at startup. The key for the cache splash screen is based on host & path of |
| the initial URL with no query or hash. If network connectivity is available |
| at startup, when the initial web application URL is processed, a custom |
| `rel="splashscreen"` attribute of the link element is used to specify and |
| cache the splashscreen URL for future runs. |
| |
| 2. **Command line fallback splash screen:** This is specified as a command |
| line argument `--fallback_splash_screen_url` via the system and used when |
| cache is unavailable. This is the case when there is no local cache |
| storage, cache has been cleared, or the application is started for the |
| first time. |
| |
| 3. **Build-time fallback splash screen:** If a web cached splash screen is |
| unavailable and command line parameters are not passed by the system, |
| a CobaltExtensionConfigurationApi fallback splash screen may be used. |
| Porters should set the `CobaltFallbackSplashScreenUrl` value in |
| `configuration.cc` to the splash screen URL. |
| |
| 4. **Default splash screen:** If no web cached splash screen is available, and |
| command line and CobaltExtensionConfigurationApi fallbacks are not set, a |
| default splash screen will be used. This is set in |
| `configuration_defaults.cc` to refer to a black splash screen. |
| |
| ## Web-updatability |
| |
| Since Cobalt parses the link element's `rel="splashscreen"` attribute for the |
| splash screen URL in the content fetched from the initial URL, an application |
| developer may update the splash screen by changing that attribute in the link |
| element. On the next load of the application, the new splash screen will be |
| cached, and on the subsequent load of the application, the new cached splash |
| screen will be shown. |
| |
| For example, the document at the initial URL could contain |
| ``` |
| <link rel="splashscreen" href="https://www.example.com/self-contained.html"> |
| ``` |
| where `"https://www.example.com/self-contained.html"` is the address of some |
| self-contained splash screen document. The document must not violate the Content |
| Security Policy. The splash screen is treated as a script resource by the CSP. |
| |
| ### Caching implementation requirements |
| |
| In order to cache the application-provided splash screen, Cobalt will attempt |
| to create directories and write files into the directory returned from a call to |
| `SbSystemGetPath(kSbSystemPathCacheDirectory, ...)`. Cobalt will expect the |
| data that it writes into that directory to persist across process instances. |
| Cobalt will also need to read the cached splash screen from the cache directory |
| when starting up. |
| |
| ## Topic-specific splash screens |
| |
| It is possible to specify multiple splash screens for a given Cobalt-based |
| application, using a start-up 'topic' to select between the available splash |
| screens. This can be useful when an application has multiple entry points that |
| require different splash screens. The topic may be specified in the start-up url |
| or deeplink as a query parameter. For example, |
| `https://www.example.com/path?topic=foo`. If a splash-screen has been specified |
| for topic 'foo', it will be used. Otherwise, the topic is ignored. Topic values |
| should be URL encoded and limited to alphanumeric characters, hyphens, |
| underscores, and percent signs. |
| |
| There are three ways to specify topic-specific splash screens. These methods mirror |
| the types of splash screens listed above, and unless specified, the rules here |
| are the same as for non-topic-based splash screens. |
| |
| 1. **Web cached splash screen:** A custom `rel="<topic>_splashscreen"` |
| attribute on a link element is used to specify a topic-specific splash |
| screen. There can be any number of these elements with different topics, in |
| addition to the topic-neutral `rel="splashscreen"`. |
| |
| 2. **Command line fallback splash screen:** The command line argument |
| `--fallback_splash_screen_topics` can be used if the cache is unavailable. |
| The argument accepts a list of topic/file parameters. If a file is not a |
| valid URL path, then it will be used as a filename at the path specified by |
| `--fallback_splash_screen_url`. For example, |
| `foo_topic=file:///foo.html&bar=bar.html`. |
| |
| 3. **Build-time fallback splash screen:** If a web cached splash screen is |
| unavailable and command line parameters are not passed by the system, a |
| CobaltExtensionConfigurationApi fallback splash screen may be used. Porters |
| should set the `CobaltFallbackSplashScreenTopics` value in |
| `configuration.cc` and this value should look like the command line option. |
| |
| ## Application-specific splash screens |
| |
| On systems that plan to support multiple Cobalt-based applications, an |
| application developer may wish to use the command line arguments for the |
| fallback splash screen to display different Cobalt splash screens for different |
| applications. The logic for passing in these different command line arguments to |
| the Cobalt binary must be handled by the system. |
| |
| Alternatively, an application developer may use the default black splash screen |
| whenever a cached splash screen is not available and rely on the web application |
| to specify an application-specific cached splash screen otherwise. |
| |
| ## Provided embedded resource splash screens |
| For convenience, we currently provide the following splash screens as embedded |
| resources: |
| |
| * `h5vcc-embedded://black_splash_screen.html` - a black splash screen |
| * `h5vcc-embedded://cobalt_splash_screen.html` - a splash screen showing the |
| Cobalt logo |