Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(849)

Unified Diff: chrome/browser/extensions/chrome_app_icon_loader.cc

Issue 2819413003: Refactor extension app icon. (Closed)
Patch Set: nit Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/extensions/chrome_app_icon_loader.cc
diff --git a/chrome/browser/extensions/chrome_app_icon_loader.cc b/chrome/browser/extensions/chrome_app_icon_loader.cc
new file mode 100644
index 0000000000000000000000000000000000000000..94b74ad1c70486f67535db01bc623e9b519e1502
--- /dev/null
+++ b/chrome/browser/extensions/chrome_app_icon_loader.cc
@@ -0,0 +1,79 @@
+// Copyright 2016 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/extensions/chrome_app_icon_loader.h"
+
+#include "base/stl_util.h"
+#include "chrome/browser/extensions/chrome_app_icon.h"
+#include "chrome/browser/extensions/chrome_app_icon_service.h"
+#include "chrome/browser/extensions/extension_service.h"
+#include "chrome/browser/extensions/extension_util.h"
+#include "chrome/browser/profiles/profile.h"
+#include "chrome/common/extensions/extension_constants.h"
+#include "extensions/browser/extension_system.h"
+#include "extensions/common/extension.h"
+#include "extensions/common/manifest_handlers/icons_handler.h"
+
+namespace extensions {
+
+namespace {
+
+const Extension* GetExtensionByID(Profile* profile, const std::string& id) {
+ ExtensionService* service =
+ ExtensionSystem::Get(profile)->extension_service();
+ if (!service)
+ return nullptr;
+ return service->GetInstalledExtension(id);
+}
+
+} // namespace
+
+ChromeAppIconLoader::ChromeAppIconLoader(Profile* profile,
+ int icon_size_in_dips,
+ AppIconLoaderDelegate* delegate)
+ : AppIconLoader(profile, icon_size_in_dips, delegate) {}
+
+ChromeAppIconLoader::~ChromeAppIconLoader() {}
+
+bool ChromeAppIconLoader::CanLoadImageForApp(const std::string& id) {
+ if (map_.find(id) != map_.end())
+ return true;
+ return GetExtensionByID(profile(), id) != nullptr;
+}
+
+void ChromeAppIconLoader::FetchImage(const std::string& id) {
+ if (map_.find(id) != map_.end())
+ return; // Already loading the image.
+
+ const Extension* extension = GetExtensionByID(profile(), id);
+ if (!extension)
+ return;
+
+ std::unique_ptr<ChromeAppIcon> icon =
+ ChromeAppIconService::Get(profile())->CreateIcon(this, id, icon_size());
+
+ // Triggers image loading now instead of depending on paint message. This
+ // makes the temp blank image be shown for shorter time and improves user
+ // experience. See http://crbug.com/146114.
+ icon->image_skia().EnsureRepsForSupportedScales();
+ map_[id] = std::move(icon);
+}
+
+void ChromeAppIconLoader::ClearImage(const std::string& id) {
+ map_.erase(id);
+}
+
+void ChromeAppIconLoader::UpdateImage(const std::string& id) {
+ ExtensionIDToChromeAppIconMap::iterator it = map_.find(id);
+ if (it == map_.end())
+ return;
+
+ it->second->UpdateIcon();
+}
+
+void ChromeAppIconLoader::OnIconUpdated(ChromeAppIcon* icon) {
+ delegate()->OnAppImageUpdated(icon->app_id(), icon->image_skia());
+}
+
+} // namespace extensions
« no previous file with comments | « chrome/browser/extensions/chrome_app_icon_loader.h ('k') | chrome/browser/extensions/chrome_app_icon_service.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698