Commit b340c465 authored by Dom Schulz's avatar Dom Schulz Committed by Commit Bot

Install the media SWA through WebApplicationInfo

This change deletes the manifest.json, and pwa.html files, replacing them
with an identical installation using a WebApplicationInfo struct created
in C++. The reason for this is to avoid SWA installation flakiness and
slowness.

Bug: 1085274
Change-Id: I85fcf8589dc269ab2ed60b517ed65f69cc79735d
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2367397Reviewed-by: default avatarGiovanni Ortuño Urquidi <ortuno@chromium.org>
Reviewed-by: default avatarJiewei Qian  <qjw@chromium.org>
Reviewed-by: default avatarTrent Apted <tapted@chromium.org>
Commit-Queue: Dominic Schulz <dominicschulz@google.com>
Cr-Commit-Position: refs/heads/master@{#805521}
parent 4c237a27
...@@ -182,6 +182,7 @@ source_set("chromeos") { ...@@ -182,6 +182,7 @@ source_set("chromeos") {
"//chromeos/login/session", "//chromeos/login/session",
"//chromeos/network", "//chromeos/network",
"//chromeos/resources:diagnostics_app_resources_grit", "//chromeos/resources:diagnostics_app_resources_grit",
"//chromeos/resources:media_app_resources_grit",
"//chromeos/resources:scanning_app_resources_grit", "//chromeos/resources:scanning_app_resources_grit",
"//chromeos/services/assistant/public/cpp", "//chromeos/services/assistant/public/cpp",
"//chromeos/services/cfm/public/buildflags", "//chromeos/services/cfm/public/buildflags",
...@@ -2671,6 +2672,8 @@ source_set("chromeos") { ...@@ -2671,6 +2672,8 @@ source_set("chromeos") {
"web_applications/default_web_app_ids.h", "web_applications/default_web_app_ids.h",
"web_applications/diagnostics_system_web_app_info.cc", "web_applications/diagnostics_system_web_app_info.cc",
"web_applications/diagnostics_system_web_app_info.h", "web_applications/diagnostics_system_web_app_info.h",
"web_applications/media_web_app_info.cc",
"web_applications/media_web_app_info.h",
"web_applications/scanning_system_web_app_info.cc", "web_applications/scanning_system_web_app_info.cc",
"web_applications/scanning_system_web_app_info.h", "web_applications/scanning_system_web_app_info.h",
"web_applications/system_web_app_install_utils.cc", "web_applications/system_web_app_install_utils.cc",
......
...@@ -23,8 +23,9 @@ CreateWebAppInfoForDiagnosticsSystemWebApp() { ...@@ -23,8 +23,9 @@ CreateWebAppInfoForDiagnosticsSystemWebApp() {
// TODO(jimmyxgong): Update the title with finalized i18n copy. // TODO(jimmyxgong): Update the title with finalized i18n copy.
info->title = base::UTF8ToUTF16("Diagnostics"); info->title = base::UTF8ToUTF16("Diagnostics");
web_app::CreateIconInfoForSystemWebApp(info->app_url, "app_icon_192.png", 192, web_app::CreateIconInfoForSystemWebApp(
IDR_DIAGNOSTICS_APP_ICON, *info); info->app_url, {{"app_icon_192.png", 192, IDR_DIAGNOSTICS_APP_ICON}},
*info);
info->theme_color = 0xFFFFFFFF; info->theme_color = 0xFFFFFFFF;
info->background_color = 0xFFFFFFFF; info->background_color = 0xFFFFFFFF;
info->display_mode = blink::mojom::DisplayMode::kStandalone; info->display_mode = blink::mojom::DisplayMode::kStandalone;
......
...@@ -459,7 +459,7 @@ INSTANTIATE_TEST_SUITE_P( ...@@ -459,7 +459,7 @@ INSTANTIATE_TEST_SUITE_P(
::testing::Combine( ::testing::Combine(
::testing::Values(web_app::ProviderType::kBookmarkApps, ::testing::Values(web_app::ProviderType::kBookmarkApps,
web_app::ProviderType::kWebApps), web_app::ProviderType::kWebApps),
::testing::Values(web_app::InstallationType::kManifestInstall)), ::testing::Values(web_app::InstallationType::kWebAppInfoInstall)),
web_app::ProviderAndInstallationTypeToString); web_app::ProviderAndInstallationTypeToString);
INSTANTIATE_TEST_SUITE_P( INSTANTIATE_TEST_SUITE_P(
...@@ -468,5 +468,5 @@ INSTANTIATE_TEST_SUITE_P( ...@@ -468,5 +468,5 @@ INSTANTIATE_TEST_SUITE_P(
::testing::Combine( ::testing::Combine(
::testing::Values(web_app::ProviderType::kBookmarkApps, ::testing::Values(web_app::ProviderType::kBookmarkApps,
web_app::ProviderType::kWebApps), web_app::ProviderType::kWebApps),
::testing::Values(web_app::InstallationType::kManifestInstall)), ::testing::Values(web_app::InstallationType::kWebAppInfoInstall)),
web_app::ProviderAndInstallationTypeToString); web_app::ProviderAndInstallationTypeToString);
// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/chromeos/web_applications/media_web_app_info.h"
#include <memory>
#include "base/strings/string16.h"
#include "base/strings/utf_string_conversions.h"
#include "chrome/browser/chromeos/web_applications/system_web_app_install_utils.h"
#include "chrome/browser/web_applications/components/web_app_constants.h"
#include "chrome/common/web_application_info.h"
#include "chromeos/components/media_app_ui/url_constants.h"
#include "chromeos/grit/chromeos_media_app_resources.h"
#include "chromeos/strings/grit/chromeos_strings.h"
#include "third_party/skia/include/core/SkBitmap.h"
#include "ui/base/l10n/l10n_util.h"
std::unique_ptr<WebApplicationInfo> CreateWebAppInfoForMediaWebApp() {
std::unique_ptr<WebApplicationInfo> info =
std::make_unique<WebApplicationInfo>();
info->app_url = GURL(chromeos::kChromeUIMediaAppURL);
info->scope = GURL(chromeos::kChromeUIMediaAppURL);
info->title = l10n_util::GetStringUTF16(IDS_MEDIA_APP_APP_NAME);
web_app::CreateIconInfoForSystemWebApp(
info->app_url,
{
{"app_icon_16.png", 16, IDR_MEDIA_APP_GALLERY_ICON_16_PNG},
{"app_icon_32.png", 32, IDR_MEDIA_APP_GALLERY_ICON_32_PNG},
{"app_icon_48.png", 48, IDR_MEDIA_APP_GALLERY_ICON_48_PNG},
{"app_icon_64.png", 64, IDR_MEDIA_APP_GALLERY_ICON_64_PNG},
{"app_icon_128.png", 128, IDR_MEDIA_APP_GALLERY_ICON_128_PNG},
{"app_icon_192.png", 192, IDR_MEDIA_APP_GALLERY_ICON_192_PNG},
{"app_icon_256.png", 256, IDR_MEDIA_APP_GALLERY_ICON_256_PNG},
},
*info);
info->theme_color = 0xff202124;
info->background_color = 0xff3c4043;
info->display_mode = blink::mojom::DisplayMode::kStandalone;
info->open_as_window = true;
blink::Manifest::FileHandler file_handler;
file_handler.action = GURL(chromeos::kChromeUIMediaAppURL);
file_handler.name = base::UTF8ToUTF16("Media File");
file_handler.accept[base::UTF8ToUTF16("image/*")] = {};
file_handler.accept[base::UTF8ToUTF16("video/*")] = {};
info->file_handlers.push_back(file_handler);
return info;
}
// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROME_BROWSER_CHROMEOS_WEB_APPLICATIONS_MEDIA_WEB_APP_INFO_H_
#define CHROME_BROWSER_CHROMEOS_WEB_APPLICATIONS_MEDIA_WEB_APP_INFO_H_
#include <memory>
struct WebApplicationInfo;
// Return a WebApplicationInfo used to install the app.
std::unique_ptr<WebApplicationInfo> CreateWebAppInfoForMediaWebApp();
#endif // CHROME_BROWSER_CHROMEOS_WEB_APPLICATIONS_MEDIA_WEB_APP_INFO_H_
...@@ -22,9 +22,9 @@ std::unique_ptr<WebApplicationInfo> CreateWebAppInfoForSampleSystemWebApp() { ...@@ -22,9 +22,9 @@ std::unique_ptr<WebApplicationInfo> CreateWebAppInfoForSampleSystemWebApp() {
// |title| should come from a resource string, but this is the sample app, and // |title| should come from a resource string, but this is the sample app, and
// doesn't have one. // doesn't have one.
info->title = base::UTF8ToUTF16("Sample System Web App"); info->title = base::UTF8ToUTF16("Sample System Web App");
web_app::CreateIconInfoForSystemWebApp(info->app_url, "app_icon_192.png", 192, web_app::CreateIconInfoForSystemWebApp(
IDR_SAMPLE_SYSTEM_WEB_APP_ICON_192, info->app_url,
*info); {{"app_icon_192.png", 192, IDR_SAMPLE_SYSTEM_WEB_APP_ICON_192}}, *info);
info->theme_color = 0xFF4285F4; info->theme_color = 0xFF4285F4;
info->background_color = 0xFFFFFFFF; info->background_color = 0xFFFFFFFF;
info->display_mode = blink::mojom::DisplayMode::kStandalone; info->display_mode = blink::mojom::DisplayMode::kStandalone;
......
...@@ -22,8 +22,8 @@ std::unique_ptr<WebApplicationInfo> CreateWebAppInfoForScanningSystemWebApp() { ...@@ -22,8 +22,8 @@ std::unique_ptr<WebApplicationInfo> CreateWebAppInfoForScanningSystemWebApp() {
// TODO(jschettler): |title| should come from a resource string once the // TODO(jschettler): |title| should come from a resource string once the
// string is finalized. // string is finalized.
info->title = base::UTF8ToUTF16("Scan"); info->title = base::UTF8ToUTF16("Scan");
web_app::CreateIconInfoForSystemWebApp(info->app_url, "app_icon_192.png", 192, web_app::CreateIconInfoForSystemWebApp(
IDR_SCANNING_APP_ICON, *info); info->app_url, {{"app_icon_192.png", 192, IDR_SCANNING_APP_ICON}}, *info);
info->theme_color = 0xFFFFFFFF; info->theme_color = 0xFFFFFFFF;
info->background_color = 0xFFFFFFFF; info->background_color = 0xFFFFFFFF;
info->display_mode = blink::mojom::DisplayMode::kStandalone; info->display_mode = blink::mojom::DisplayMode::kStandalone;
......
...@@ -9,15 +9,15 @@ ...@@ -9,15 +9,15 @@
namespace web_app { namespace web_app {
void CreateIconInfoForSystemWebApp(const GURL& app_url, void CreateIconInfoForSystemWebApp(
const std::string& icon_name, const GURL& app_url,
SquareSizePx square_size_px, const std::initializer_list<IconResourceInfo>& icon_infos,
int resource_id, WebApplicationInfo& web_app) {
WebApplicationInfo& web_app) { for (const auto& info : icon_infos) {
web_app.icon_infos.emplace_back(app_url.Resolve(icon_name), square_size_px); web_app.icon_infos.emplace_back(app_url.Resolve(info.icon_name), info.size);
auto image = auto image =
ui::ResourceBundle::GetSharedInstance().GetImageNamed(resource_id); ui::ResourceBundle::GetSharedInstance().GetImageNamed(info.resource_id);
web_app.icon_bitmaps_any[square_size_px] = image.AsBitmap(); web_app.icon_bitmaps_any[info.size] = image.AsBitmap();
}
} }
} // namespace web_app } // namespace web_app
...@@ -5,21 +5,28 @@ ...@@ -5,21 +5,28 @@
#ifndef CHROME_BROWSER_CHROMEOS_WEB_APPLICATIONS_SYSTEM_WEB_APP_INSTALL_UTILS_H_ #ifndef CHROME_BROWSER_CHROMEOS_WEB_APPLICATIONS_SYSTEM_WEB_APP_INSTALL_UTILS_H_
#define CHROME_BROWSER_CHROMEOS_WEB_APPLICATIONS_SYSTEM_WEB_APP_INSTALL_UTILS_H_ #define CHROME_BROWSER_CHROMEOS_WEB_APPLICATIONS_SYSTEM_WEB_APP_INSTALL_UTILS_H_
#include <initializer_list>
#include <string>
#include "chrome/common/web_application_info.h" #include "chrome/common/web_application_info.h"
#include "url/gurl.h"
enum class WebappInstallSource; class GURL;
struct WebApplicationInfo;
namespace web_app { namespace web_app {
struct IconResourceInfo {
std::string icon_name;
SquareSizePx size;
int resource_id;
};
// Create the icon info struct for a system web app from a resource id. We don't // Create the icon info struct for a system web app from a resource id. We don't
// actually download the icon, so the app_url and icon_name are just used as a // actually download the icon, so the app_url and icon_name are just used as a
// key. // key.
void CreateIconInfoForSystemWebApp(const GURL& app_url, void CreateIconInfoForSystemWebApp(
const std::string& icon_name, const GURL& app_url,
SquareSizePx square_size_px, const std::initializer_list<IconResourceInfo>& icon_infos,
int resource_id, WebApplicationInfo& web_app);
WebApplicationInfo& web_app);
} // namespace web_app } // namespace web_app
......
...@@ -18,9 +18,9 @@ std::unique_ptr<WebApplicationInfo> CreateWebAppInfoForTelemetryExtension() { ...@@ -18,9 +18,9 @@ std::unique_ptr<WebApplicationInfo> CreateWebAppInfoForTelemetryExtension() {
info->app_url = GURL(chromeos::kChromeUITelemetryExtensionURL); info->app_url = GURL(chromeos::kChromeUITelemetryExtensionURL);
info->scope = GURL(chromeos::kChromeUITelemetryExtensionURL); info->scope = GURL(chromeos::kChromeUITelemetryExtensionURL);
info->title = base::UTF8ToUTF16("Telemetry Extension"); info->title = base::UTF8ToUTF16("Telemetry Extension");
web_app::CreateIconInfoForSystemWebApp(info->app_url, "app_icon_96.png", 96, web_app::CreateIconInfoForSystemWebApp(
IDR_TELEMETRY_EXTENSION_ICON_96, info->app_url, {{"app_icon_96.png", 96, IDR_TELEMETRY_EXTENSION_ICON_96}},
*info); *info);
info->theme_color = 0xFF4285F4; info->theme_color = 0xFF4285F4;
info->background_color = 0xFFFFFFFF; info->background_color = 0xFFFFFFFF;
info->display_mode = blink::mojom::DisplayMode::kStandalone; info->display_mode = blink::mojom::DisplayMode::kStandalone;
......
...@@ -47,6 +47,7 @@ ...@@ -47,6 +47,7 @@
#include "chrome/browser/chromeos/policy/system_features_disable_list_policy_handler.h" #include "chrome/browser/chromeos/policy/system_features_disable_list_policy_handler.h"
#include "chrome/browser/chromeos/web_applications/default_web_app_ids.h" #include "chrome/browser/chromeos/web_applications/default_web_app_ids.h"
#include "chrome/browser/chromeos/web_applications/diagnostics_system_web_app_info.h" #include "chrome/browser/chromeos/web_applications/diagnostics_system_web_app_info.h"
#include "chrome/browser/chromeos/web_applications/media_web_app_info.h"
#include "chrome/browser/chromeos/web_applications/scanning_system_web_app_info.h" #include "chrome/browser/chromeos/web_applications/scanning_system_web_app_info.h"
#include "chrome/browser/chromeos/web_applications/terminal_source.h" #include "chrome/browser/chromeos/web_applications/terminal_source.h"
#include "chromeos/components/help_app_ui/url_constants.h" #include "chromeos/components/help_app_ui/url_constants.h"
...@@ -153,8 +154,10 @@ base::flat_map<SystemAppType, SystemAppInfo> CreateSystemWebApps() { ...@@ -153,8 +154,10 @@ base::flat_map<SystemAppType, SystemAppInfo> CreateSystemWebApps() {
} }
if (SystemWebAppManager::IsAppEnabled(SystemAppType::MEDIA)) { if (SystemWebAppManager::IsAppEnabled(SystemAppType::MEDIA)) {
infos.emplace(SystemAppType::MEDIA, infos.emplace(
SystemAppInfo("Media", GURL("chrome://media-app/pwa.html"))); SystemAppType::MEDIA,
SystemAppInfo("Media", GURL("chrome://media-app/pwa.html"),
base::BindRepeating(&CreateWebAppInfoForMediaWebApp)));
infos.at(SystemAppType::MEDIA).include_launch_directory = true; infos.at(SystemAppType::MEDIA).include_launch_directory = true;
infos.at(SystemAppType::MEDIA).show_in_launcher = false; infos.at(SystemAppType::MEDIA).show_in_launcher = false;
infos.at(SystemAppType::MEDIA).show_in_search = false; infos.at(SystemAppType::MEDIA).show_in_search = false;
......
...@@ -30,7 +30,6 @@ content::WebUIDataSource* CreateHostDataSource() { ...@@ -30,7 +30,6 @@ content::WebUIDataSource* CreateHostDataSource() {
// Add resources from chromeos_media_app_resources.pak. // Add resources from chromeos_media_app_resources.pak.
source->SetDefaultResource(IDR_MEDIA_APP_INDEX_HTML); source->SetDefaultResource(IDR_MEDIA_APP_INDEX_HTML);
source->AddResourcePath("pwa.html", IDR_MEDIA_APP_PWA_HTML);
source->AddResourcePath("mojo_api_bootstrap.js", source->AddResourcePath("mojo_api_bootstrap.js",
IDR_MEDIA_APP_MOJO_API_BOOTSTRAP_JS); IDR_MEDIA_APP_MOJO_API_BOOTSTRAP_JS);
source->AddResourcePath("media_app.mojom-lite.js", source->AddResourcePath("media_app.mojom-lite.js",
...@@ -38,8 +37,6 @@ content::WebUIDataSource* CreateHostDataSource() { ...@@ -38,8 +37,6 @@ content::WebUIDataSource* CreateHostDataSource() {
source->AddResourcePath("media_app_index_scripts.js", source->AddResourcePath("media_app_index_scripts.js",
IDR_MEDIA_APP_INDEX_SCRIPTS_JS); IDR_MEDIA_APP_INDEX_SCRIPTS_JS);
source->AddLocalizedString("appTitle", IDS_MEDIA_APP_APP_NAME); source->AddLocalizedString("appTitle", IDS_MEDIA_APP_APP_NAME);
web_app::SetManifestRequestFilter(source, IDR_MEDIA_APP_MANIFEST,
IDS_MEDIA_APP_APP_NAME);
// Redirects "system_assets/app_icon_*.png" (from manifest.json) to the icons // Redirects "system_assets/app_icon_*.png" (from manifest.json) to the icons
// for the gallery app. // for the gallery app.
......
{
"name": "$i18nRaw{name}",
"short_name": "$i18nRaw{name}",
"start_url": "/",
"display": "standalone",
"theme_color": "#202124",
"background_color": "#3c4043",
"icons": [
{
"src": "system_assets/app_icon_16.png",
"sizes": "16x16",
"type": "image/png"
},
{
"src": "system_assets/app_icon_32.png",
"sizes": "32x32",
"type": "image/png"
},
{
"src": "system_assets/app_icon_48.png",
"sizes": "48x48",
"type": "image/png"
},
{
"src": "system_assets/app_icon_64.png",
"sizes": "64x64",
"type": "image/png"
},
{
"src": "system_assets/app_icon_96.png",
"sizes": "96x96",
"type": "image/png"
},
{
"src": "system_assets/app_icon_128.png",
"sizes": "128x128",
"type": "image/png"
},
{
"src": "system_assets/app_icon_192.png",
"sizes": "192x192",
"type": "image/png"
},
{
"src": "system_assets/app_icon_256.png",
"sizes": "256x256",
"type": "image/png"
}
],
"file_handlers": [
{
"action": ".",
"name": "Media File",
"accept": {
"image/*": [],
"video/*": []
}
}
]
}
...@@ -10,8 +10,6 @@ ...@@ -10,8 +10,6 @@
<includes> <includes>
<!-- Privileged app host contents. --> <!-- Privileged app host contents. -->
<include name="IDR_MEDIA_APP_INDEX_HTML" file="index.html" type="BINDATA" /> <include name="IDR_MEDIA_APP_INDEX_HTML" file="index.html" type="BINDATA" />
<include name="IDR_MEDIA_APP_PWA_HTML" file="pwa.html" type="BINDATA" />
<include name="IDR_MEDIA_APP_MANIFEST" file="manifest.json" type="BINDATA" />
<include name="IDR_MEDIA_APP_MOJO_API_BOOTSTRAP_JS" file="js/mojo_api_bootstrap.js" compress="brotli" type="BINDATA" /> <include name="IDR_MEDIA_APP_MOJO_API_BOOTSTRAP_JS" file="js/mojo_api_bootstrap.js" compress="brotli" type="BINDATA" />
<include name="IDR_MEDIA_APP_MEDIA_APP_MOJOM_JS" file="${root_gen_dir}/chromeos/components/media_app_ui/media_app_ui.mojom-lite.js" use_base_dir="false" compress="brotli" type="BINDATA" /> <include name="IDR_MEDIA_APP_MEDIA_APP_MOJOM_JS" file="${root_gen_dir}/chromeos/components/media_app_ui/media_app_ui.mojom-lite.js" use_base_dir="false" compress="brotli" type="BINDATA" />
<include name="IDR_MEDIA_APP_INDEX_SCRIPTS_JS" file="js/media_app_index_scripts.js" flattenhtml="true" compress="brotli" type="BINDATA" /> <include name="IDR_MEDIA_APP_INDEX_SCRIPTS_JS" file="js/media_app_index_scripts.js" flattenhtml="true" compress="brotli" type="BINDATA" />
......
<!-- Copyright 2019 The Chromium Authors. All rights reserved.
Use of this source code is governed by a BSD-style license that can be
found in the LICENSE file. -->
<!-- TODO(crbug/896575): Delete when manifest URL installs are implemented. -->
<!DOCTYPE html>
<link rel="manifest" href="manifest.json">
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment