Commit 7d20630b authored by nancylingwang's avatar nancylingwang Committed by Commit Bot

Modify ExtensionProvider to load the standard icon from AppService.

Modify ExtensionProvider to observe AppRegistryCache to load the new
standard icon from AppService when the adaptive icon feature is enabled.
DD: go/appservice-adaptive-icon

BUG=1121467

Change-Id: I711429d54ec64f6759b2f415fbf7064a548d52b8
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2375009Reviewed-by: default avatarNaoki Fukino <fukino@chromium.org>
Commit-Queue: Nancy Wang <nancylingwang@chromium.org>
Cr-Commit-Position: refs/heads/master@{#801658}
parent 4dac88f7
......@@ -9,9 +9,13 @@
#include <memory>
#include <utility>
#include "chrome/browser/apps/app_service/app_icon_source.h"
#include "chrome/browser/apps/app_service/app_service_proxy.h"
#include "chrome/browser/apps/app_service/app_service_proxy_factory.h"
#include "chrome/browser/chromeos/file_system_provider/provided_file_system.h"
#include "chrome/browser/chromeos/file_system_provider/throttled_file_system.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/common/chrome_features.h"
#include "extensions/browser/event_router.h"
#include "extensions/browser/extension_registry.h"
#include "extensions/common/permissions/permissions_data.h"
......@@ -59,8 +63,9 @@ std::unique_ptr<ProviderInterface> ExtensionProvider::Create(
if (!GetProvidingExtensionInfo(extension_id, &info, registry))
return nullptr;
return std::unique_ptr<ProviderInterface>(
new ExtensionProvider(extension_id, info));
return std::make_unique<ExtensionProvider>(
Profile::FromBrowserContext(registry->browser_context()), extension_id,
info);
}
std::unique_ptr<ProvidedFileSystemInterface>
......@@ -110,6 +115,7 @@ bool ExtensionProvider::RequestMount(Profile* profile) {
}
ExtensionProvider::ExtensionProvider(
Profile* profile,
const extensions::ExtensionId& extension_id,
const ProvidingExtensionInfo& info)
: provider_id_(ProviderId::CreateFromExtensionId(extension_id)) {
......@@ -118,6 +124,29 @@ ExtensionProvider::ExtensionProvider(
capabilities_.multiple_mounts = info.capabilities.multiple_mounts();
capabilities_.source = info.capabilities.source();
name_ = info.name;
if (base::FeatureList::IsEnabled(features::kAppServiceAdaptiveIcon) &&
apps::AppServiceProxyFactory::IsAppServiceAvailableForProfile(profile)) {
auto* AppServiceProxy =
apps::AppServiceProxyFactory::GetForProfile(profile);
// AppService loading apps from extensions might be slow due to async. Even
// if the app doesn't exist in AppRegistryCache, it might be added later. So
// we still observe the AppRegistry to catch the app update information.
Observe(&AppServiceProxy->AppRegistryCache());
if (AppServiceProxy->AppRegistryCache().GetAppType(
provider_id_.GetExtensionId()) != apps::mojom::AppType::kUnknown) {
icon_set_.SetIcon(
IconSet::IconSize::SIZE_16x16,
apps::AppIconSource::GetIconURL(provider_id_.GetExtensionId(), 16));
icon_set_.SetIcon(
IconSet::IconSize::SIZE_32x32,
apps::AppIconSource::GetIconURL(provider_id_.GetExtensionId(), 32));
return;
}
}
icon_set_.SetIcon(IconSet::IconSize::SIZE_16x16,
GURL(std::string("chrome://extension-icon/") +
provider_id_.GetExtensionId() + "/16/1"));
......@@ -128,5 +157,24 @@ ExtensionProvider::ExtensionProvider(
ExtensionProvider::~ExtensionProvider() = default;
void ExtensionProvider::OnAppUpdate(const apps::AppUpdate& update) {
if (update.AppId() != provider_id_.GetExtensionId() ||
!update.IconKeyChanged()) {
return;
}
icon_set_.SetIcon(
IconSet::IconSize::SIZE_16x16,
apps::AppIconSource::GetIconURL(provider_id_.GetExtensionId(), 16));
icon_set_.SetIcon(
IconSet::IconSize::SIZE_32x32,
apps::AppIconSource::GetIconURL(provider_id_.GetExtensionId(), 32));
}
void ExtensionProvider::OnAppRegistryCacheWillBeDestroyed(
apps::AppRegistryCache* cache) {
Observe(nullptr);
}
} // namespace file_system_provider
} // namespace chromeos
......@@ -12,6 +12,7 @@
#include "chrome/browser/chromeos/file_system_provider/provided_file_system_info.h"
#include "chrome/browser/chromeos/file_system_provider/provided_file_system_interface.h"
#include "chrome/browser/chromeos/file_system_provider/provider_interface.h"
#include "components/services/app_service/public/cpp/app_registry_cache.h"
#include "extensions/common/extension_id.h"
class Profile;
......@@ -33,8 +34,12 @@ struct ProvidingExtensionInfo {
extensions::FileSystemProviderCapabilities capabilities;
};
class ExtensionProvider : public ProviderInterface {
class ExtensionProvider : public ProviderInterface,
public apps::AppRegistryCache::Observer {
public:
ExtensionProvider(Profile* profile,
const extensions::ExtensionId& extension_id,
const ProvidingExtensionInfo& info);
~ExtensionProvider() override;
// Returns a provider instance for the specified extension. If the extension
......@@ -54,8 +59,10 @@ class ExtensionProvider : public ProviderInterface {
bool RequestMount(Profile* profile) override;
private:
ExtensionProvider(const extensions::ExtensionId& extension_id,
const ProvidingExtensionInfo& info);
// apps::AppRegistryCache::Observer overrides:
void OnAppUpdate(const apps::AppUpdate& update) override;
void OnAppRegistryCacheWillBeDestroyed(
apps::AppRegistryCache* cache) override;
ProviderId provider_id_;
Capabilities capabilities_;
......
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