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

Unified Diff: chrome/browser/task_management/providers/arc/arc_process_task.cc

Issue 2023643002: Add ARC app icons to the Task Manager UI (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: review Created 4 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/task_management/providers/arc/arc_process_task.cc
diff --git a/chrome/browser/task_management/providers/arc/arc_process_task.cc b/chrome/browser/task_management/providers/arc/arc_process_task.cc
index f37c7f3acfe9f85bc3eed94ec578ba2ca30be199..67948f7f54821d9ff4954095bc297ca1dbc59544 100644
--- a/chrome/browser/task_management/providers/arc/arc_process_task.cc
+++ b/chrome/browser/task_management/providers/arc/arc_process_task.cc
@@ -4,11 +4,14 @@
#include "chrome/browser/task_management/providers/arc/arc_process_task.h"
+#include "base/bind.h"
#include "base/i18n/rtl.h"
#include "base/strings/utf_string_conversions.h"
#include "chrome/grit/generated_resources.h"
#include "components/arc/arc_bridge_service.h"
+#include "components/arc/arc_service_manager.h"
#include "components/arc/common/process.mojom.h"
+#include "content/public/browser/browser_thread.h"
#include "content/public/common/child_process_host.h"
#include "ui/base/l10n/l10n_util.h"
@@ -24,17 +27,44 @@ base::string16 MakeTitle(const std::string& process_name) {
return title;
}
+scoped_refptr<arc::ActivityIconLoader> GetIconLoader() {
+ DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
+ arc::ArcServiceManager* arc_service_manager = arc::ArcServiceManager::Get();
+ if (!arc_service_manager)
+ return nullptr;
+ return arc_service_manager->icon_loader();
+}
+
} // namespace
-ArcProcessTask::ArcProcessTask(
- base::ProcessId pid,
- base::ProcessId nspid,
- const std::string& process_name,
- arc::mojom::ProcessState process_state)
- : Task(MakeTitle(process_name), process_name, nullptr, pid),
+ArcProcessTask::ArcProcessTask(base::ProcessId pid,
+ base::ProcessId nspid,
+ const std::string& process_name,
+ arc::mojom::ProcessState process_state,
+ const std::vector<std::string>& packages)
+ : Task(MakeTitle(process_name), process_name, nullptr /* icon */, pid),
nspid_(nspid),
process_name_(process_name),
- process_state_(process_state) {
+ process_state_(process_state),
+ weak_factory_(this) {
+ DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
+ if (packages.empty())
+ return;
+
+ std::vector<arc::ActivityIconLoader::ActivityName> activity;
+ activity.emplace_back(packages.at(0), "" /* don't care */);
Luis Héctor Chávez 2016/05/31 22:10:53 nit: kEmptyActivityName?
Luis Héctor Chávez 2016/05/31 22:10:53 Maybe add a comment explaining why you only choose
Yusuke Sato 2016/05/31 23:11:52 Done.
Yusuke Sato 2016/05/31 23:11:52 Good idea. Done.
+
+ scoped_refptr<arc::ActivityIconLoader> icon_loader = GetIconLoader();
+ if (!icon_loader)
+ return;
+
+ // TODO(yusukes): ArcProcessTask might be created before intent_helper
+ // instance becomes ready. Because of the race, OnIconLoaded() might
+ // be called synchronously with no icon. Fix the race to ensure that
+ // ArcProcessTask can always fetch icons.
+ icon_loader->GetActivityIcons(
+ activity,
+ base::Bind(&ArcProcessTask::OnIconLoaded, weak_factory_.GetWeakPtr()));
}
ArcProcessTask::~ArcProcessTask() {
@@ -73,4 +103,16 @@ void ArcProcessTask::SetProcessState(arc::mojom::ProcessState process_state) {
process_state_ = process_state;
}
+void ArcProcessTask::OnIconLoaded(
+ std::unique_ptr<arc::ActivityIconLoader::ActivityToIconsMap> icons) {
+ DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
+ for (const auto& kv : *icons) {
+ const gfx::Image& icon = kv.second.icon16;
+ if (icon.IsEmpty())
+ continue;
+ icon_ = icon;
+ set_icon(*icon_.ToImageSkia()); // pass a weak pointer of the |icon_|.
Luis Héctor Chávez 2016/05/31 22:10:53 Given that you only use one package name (and expe
Yusuke Sato 2016/05/31 23:11:52 Done.
+ }
+}
+
} // namespace task_management

Powered by Google App Engine
This is Rietveld 408576698