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") {
"//chromeos/login/session",
"//chromeos/network",
"//chromeos/resources:diagnostics_app_resources_grit",
"//chromeos/resources:media_app_resources_grit",
"//chromeos/resources:scanning_app_resources_grit",
"//chromeos/services/assistant/public/cpp",
"//chromeos/services/cfm/public/buildflags",
......@@ -2671,6 +2672,8 @@ source_set("chromeos") {
"web_applications/default_web_app_ids.h",
"web_applications/diagnostics_system_web_app_info.cc",
"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.h",
"web_applications/system_web_app_install_utils.cc",
......
......@@ -23,8 +23,9 @@ CreateWebAppInfoForDiagnosticsSystemWebApp() {
// TODO(jimmyxgong): Update the title with finalized i18n copy.
info->title = base::UTF8ToUTF16("Diagnostics");
web_app::CreateIconInfoForSystemWebApp(info->app_url, "app_icon_192.png", 192,
IDR_DIAGNOSTICS_APP_ICON, *info);
web_app::CreateIconInfoForSystemWebApp(
info->app_url, {{"app_icon_192.png", 192, IDR_DIAGNOSTICS_APP_ICON}},
*info);
info->theme_color = 0xFFFFFFFF;
info->background_color = 0xFFFFFFFF;
info->display_mode = blink::mojom::DisplayMode::kStandalone;
......
......@@ -459,7 +459,7 @@ INSTANTIATE_TEST_SUITE_P(
::testing::Combine(
::testing::Values(web_app::ProviderType::kBookmarkApps,
web_app::ProviderType::kWebApps),
::testing::Values(web_app::InstallationType::kManifestInstall)),
::testing::Values(web_app::InstallationType::kWebAppInfoInstall)),
web_app::ProviderAndInstallationTypeToString);
INSTANTIATE_TEST_SUITE_P(
......@@ -468,5 +468,5 @@ INSTANTIATE_TEST_SUITE_P(
::testing::Combine(
::testing::Values(web_app::ProviderType::kBookmarkApps,
web_app::ProviderType::kWebApps),
::testing::Values(web_app::InstallationType::kManifestInstall)),
::testing::Values(web_app::InstallationType::kWebAppInfoInstall)),
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() {
// |title| should come from a resource string, but this is the sample app, and
// doesn't have one.
info->title = base::UTF8ToUTF16("Sample System Web App");
web_app::CreateIconInfoForSystemWebApp(info->app_url, "app_icon_192.png", 192,
IDR_SAMPLE_SYSTEM_WEB_APP_ICON_192,
*info);
web_app::CreateIconInfoForSystemWebApp(
info->app_url,
{{"app_icon_192.png", 192, IDR_SAMPLE_SYSTEM_WEB_APP_ICON_192}}, *info);
info->theme_color = 0xFF4285F4;
info->background_color = 0xFFFFFFFF;
info->display_mode = blink::mojom::DisplayMode::kStandalone;
......
......@@ -22,8 +22,8 @@ std::unique_ptr<WebApplicationInfo> CreateWebAppInfoForScanningSystemWebApp() {
// TODO(jschettler): |title| should come from a resource string once the
// string is finalized.
info->title = base::UTF8ToUTF16("Scan");
web_app::CreateIconInfoForSystemWebApp(info->app_url, "app_icon_192.png", 192,
IDR_SCANNING_APP_ICON, *info);
web_app::CreateIconInfoForSystemWebApp(
info->app_url, {{"app_icon_192.png", 192, IDR_SCANNING_APP_ICON}}, *info);
info->theme_color = 0xFFFFFFFF;
info->background_color = 0xFFFFFFFF;
info->display_mode = blink::mojom::DisplayMode::kStandalone;
......
......@@ -9,15 +9,15 @@
namespace web_app {
void CreateIconInfoForSystemWebApp(const GURL& app_url,
const std::string& icon_name,
SquareSizePx square_size_px,
int resource_id,
WebApplicationInfo& web_app) {
web_app.icon_infos.emplace_back(app_url.Resolve(icon_name), square_size_px);
auto image =
ui::ResourceBundle::GetSharedInstance().GetImageNamed(resource_id);
web_app.icon_bitmaps_any[square_size_px] = image.AsBitmap();
void CreateIconInfoForSystemWebApp(
const GURL& app_url,
const std::initializer_list<IconResourceInfo>& icon_infos,
WebApplicationInfo& web_app) {
for (const auto& info : icon_infos) {
web_app.icon_infos.emplace_back(app_url.Resolve(info.icon_name), info.size);
auto image =
ui::ResourceBundle::GetSharedInstance().GetImageNamed(info.resource_id);
web_app.icon_bitmaps_any[info.size] = image.AsBitmap();
}
}
} // namespace web_app
......@@ -5,21 +5,28 @@
#ifndef 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 "url/gurl.h"
enum class WebappInstallSource;
struct WebApplicationInfo;
class GURL;
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
// actually download the icon, so the app_url and icon_name are just used as a
// key.
void CreateIconInfoForSystemWebApp(const GURL& app_url,
const std::string& icon_name,
SquareSizePx square_size_px,
int resource_id,
WebApplicationInfo& web_app);
void CreateIconInfoForSystemWebApp(
const GURL& app_url,
const std::initializer_list<IconResourceInfo>& icon_infos,
WebApplicationInfo& web_app);
} // namespace web_app
......
......@@ -18,9 +18,9 @@ std::unique_ptr<WebApplicationInfo> CreateWebAppInfoForTelemetryExtension() {
info->app_url = GURL(chromeos::kChromeUITelemetryExtensionURL);
info->scope = GURL(chromeos::kChromeUITelemetryExtensionURL);
info->title = base::UTF8ToUTF16("Telemetry Extension");
web_app::CreateIconInfoForSystemWebApp(info->app_url, "app_icon_96.png", 96,
IDR_TELEMETRY_EXTENSION_ICON_96,
*info);
web_app::CreateIconInfoForSystemWebApp(
info->app_url, {{"app_icon_96.png", 96, IDR_TELEMETRY_EXTENSION_ICON_96}},
*info);
info->theme_color = 0xFF4285F4;
info->background_color = 0xFFFFFFFF;
info->display_mode = blink::mojom::DisplayMode::kStandalone;
......
......@@ -47,6 +47,7 @@
#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/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/terminal_source.h"
#include "chromeos/components/help_app_ui/url_constants.h"
......@@ -153,8 +154,10 @@ base::flat_map<SystemAppType, SystemAppInfo> CreateSystemWebApps() {
}
if (SystemWebAppManager::IsAppEnabled(SystemAppType::MEDIA)) {
infos.emplace(SystemAppType::MEDIA,
SystemAppInfo("Media", GURL("chrome://media-app/pwa.html")));
infos.emplace(
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).show_in_launcher = false;
infos.at(SystemAppType::MEDIA).show_in_search = false;
......
......@@ -30,7 +30,6 @@ content::WebUIDataSource* CreateHostDataSource() {
// Add resources from chromeos_media_app_resources.pak.
source->SetDefaultResource(IDR_MEDIA_APP_INDEX_HTML);
source->AddResourcePath("pwa.html", IDR_MEDIA_APP_PWA_HTML);
source->AddResourcePath("mojo_api_bootstrap.js",
IDR_MEDIA_APP_MOJO_API_BOOTSTRAP_JS);
source->AddResourcePath("media_app.mojom-lite.js",
......@@ -38,8 +37,6 @@ content::WebUIDataSource* CreateHostDataSource() {
source->AddResourcePath("media_app_index_scripts.js",
IDR_MEDIA_APP_INDEX_SCRIPTS_JS);
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
// 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 @@
<includes>
<!-- Privileged app host contents. -->
<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_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" />
......
<!-- 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