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

Unified Diff: chrome/browser/ui/ash/chrome_launcher_prefs.cc

Issue 2352353002: Add AppLauncherId wrapper for items shown in shelf (Closed)
Patch Set: Review v10 Created 4 years, 2 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/ui/ash/chrome_launcher_prefs.cc
diff --git a/chrome/browser/ui/ash/chrome_launcher_prefs.cc b/chrome/browser/ui/ash/chrome_launcher_prefs.cc
index 54f33cdbde9340afd3f40d84c8121464a0caab8d..c57d1cd8a3d2c802bf3961c257972b8f822fc6ab 100644
--- a/chrome/browser/ui/ash/chrome_launcher_prefs.cc
+++ b/chrome/browser/ui/ash/chrome_launcher_prefs.cc
@@ -43,7 +43,7 @@ const char* kDefaultPinnedApps[] = {
base::ListValue* CreateDefaultPinnedAppsList() {
std::unique_ptr<base::ListValue> apps(new base::ListValue);
for (size_t i = 0; i < arraysize(kDefaultPinnedApps); ++i)
- apps->Append(CreateAppDict(kDefaultPinnedApps[i]));
+ apps->Append(CreateAppDict(AppLauncherId(kDefaultPinnedApps[i])));
return apps.release();
}
@@ -207,10 +207,11 @@ void PropagatePrefToLocalIfNotSet(
}
struct PinInfo {
- PinInfo(const std::string& app_id, const syncer::StringOrdinal& item_ordinal)
- : app_id(app_id), item_ordinal(item_ordinal) {}
+ PinInfo(const AppLauncherId& app_launcher_id,
+ const syncer::StringOrdinal& item_ordinal)
+ : app_launcher_id(app_launcher_id), item_ordinal(item_ordinal) {}
- std::string app_id;
+ AppLauncherId app_launcher_id;
syncer::StringOrdinal item_ordinal;
};
@@ -224,23 +225,23 @@ struct ComparePinInfo {
// to check if app exists in the list.
class AppTracker {
public:
- bool HasApp(const std::string& app_id) const {
- return app_set_.find(app_id) != app_set_.end();
+ bool HasApp(const AppLauncherId& app_launcher_id) const {
+ return app_set_.find(app_launcher_id) != app_set_.end();
}
- void AddApp(const std::string& app_id) {
- if (HasApp(app_id))
+ void AddApp(const AppLauncherId& app_launcher_id) {
+ if (HasApp(app_launcher_id))
return;
- app_list_.push_back(app_id);
- app_set_.insert(app_id);
+ app_list_.push_back(app_launcher_id);
+ app_set_.insert(app_launcher_id);
}
- void MaybeAddApp(const std::string& app_id,
+ void MaybeAddApp(const AppLauncherId& app_launcher_id,
const LauncherControllerHelper* helper) {
- DCHECK_NE(kPinnedAppsPlaceholder, app_id);
- if (!helper->IsValidIDForCurrentUser(app_id))
+ DCHECK_NE(kPinnedAppsPlaceholder, app_launcher_id.ToString());
+ if (!helper->IsValidIDForCurrentUser(app_launcher_id.ToString()))
return;
- AddApp(app_id);
+ AddApp(app_launcher_id);
}
void MaybeAddAppFromPref(const base::DictionaryValue* app_pref,
@@ -261,14 +262,14 @@ class AppTracker {
return;
}
- MaybeAddApp(app_id, helper);
+ MaybeAddApp(AppLauncherId(app_id), helper);
}
- const std::vector<std::string>& app_list() const { return app_list_; }
+ const std::vector<AppLauncherId>& app_list() const { return app_list_; }
private:
- std::vector<std::string> app_list_;
- std::set<std::string> app_set_;
+ std::vector<AppLauncherId> app_list_;
+ std::set<AppLauncherId> app_set_;
};
} // namespace
@@ -284,6 +285,28 @@ const char kShelfAlignmentBottom[] = "Bottom";
const char kShelfAlignmentLeft[] = "Left";
const char kShelfAlignmentRight[] = "Right";
+AppLauncherId::AppLauncherId(const std::string& app_id,
+ const std::string& launch_id)
+ : app_id_(app_id), launch_id_(launch_id) {
+ DCHECK(!app_id.empty());
+}
+
+AppLauncherId::AppLauncherId(const std::string& app_id) : app_id_(app_id) {
+ DCHECK(!app_id.empty());
+}
+
+AppLauncherId::AppLauncherId() {}
+
+AppLauncherId::~AppLauncherId() {}
+
+std::string AppLauncherId::ToString() const {
+ return app_id_ + launch_id_;
+}
+
+bool AppLauncherId::operator<(const AppLauncherId& other) const {
+ return ToString() < other.ToString();
+}
+
void RegisterChromeLauncherUserPrefs(
user_prefs::PrefRegistrySyncable* registry) {
// TODO: If we want to support multiple profiles this will likely need to be
@@ -311,9 +334,9 @@ void RegisterChromeLauncherUserPrefs(
}
std::unique_ptr<base::DictionaryValue> CreateAppDict(
- const std::string& app_id) {
+ const AppLauncherId& app_launcher_id) {
auto app_value = base::MakeUnique<base::DictionaryValue>();
- app_value->SetString(kPinnedAppsPrefAppIDPath, app_id);
+ app_value->SetString(kPinnedAppsPrefAppIDPath, app_launcher_id.ToString());
return app_value;
}
@@ -410,15 +433,15 @@ void GetAppsPinnedByPolicy(const PrefService* prefs,
for (const auto& activity : activities) {
const std::string arc_app_id =
ArcAppListPrefs::GetAppId(arc_package, activity);
- apps->MaybeAddApp(arc_app_id, helper);
+ apps->MaybeAddApp(AppLauncherId(arc_app_id), helper);
}
} else {
- apps->MaybeAddApp(app_id, helper);
+ apps->MaybeAddApp(AppLauncherId(app_id), helper);
}
}
}
-std::vector<std::string> GetPinnedAppsFromPrefsLegacy(
+std::vector<AppLauncherId> GetPinnedAppsFromPrefsLegacy(
const PrefService* prefs,
const LauncherControllerHelper* helper) {
// Adding the app list item to the list of items requires that the ID is not
@@ -435,7 +458,7 @@ std::vector<std::string> GetPinnedAppsFromPrefsLegacy(
// Check if Chrome is in either of the the preferences lists.
std::unique_ptr<base::Value> chrome_app(
- CreateAppDict(extension_misc::kChromeAppId));
+ CreateAppDict(AppLauncherId(extension_misc::kChromeAppId)));
AppTracker apps;
GetAppsPinnedByPolicy(prefs, helper, &apps);
@@ -445,7 +468,7 @@ std::vector<std::string> GetPinnedAppsFromPrefsLegacy(
// We need to position the chrome icon relative to its place in the pinned
// preference list - even if an item of that list isn't shown yet.
if (i == chrome_icon_index)
- apps.AddApp(extension_misc::kChromeAppId);
+ apps.AddApp(AppLauncherId(extension_misc::kChromeAppId));
const base::DictionaryValue* app_pref = nullptr;
if (!pinned_apps->GetDictionary(i, &app_pref)) {
LOG(ERROR) << "There is no dictionary for app entry.";
@@ -455,7 +478,7 @@ std::vector<std::string> GetPinnedAppsFromPrefsLegacy(
}
// If not added yet, the chrome item will be the last item in the list.
- apps.AddApp(extension_misc::kChromeAppId);
+ apps.AddApp(AppLauncherId(extension_misc::kChromeAppId));
return apps.app_list();
}
@@ -534,11 +557,11 @@ syncer::StringOrdinal GetLastPinPosition(Profile* profile) {
: syncer::StringOrdinal::CreateInitialOrdinal();
}
-std::vector<std::string> ImportLegacyPinnedApps(
+std::vector<AppLauncherId> ImportLegacyPinnedApps(
const PrefService* prefs,
LauncherControllerHelper* helper,
const AppTracker& policy_apps) {
- std::vector<std::string> legacy_pins =
+ std::vector<AppLauncherId> legacy_pins =
GetPinnedAppsFromPrefsLegacy(prefs, helper);
DCHECK(!legacy_pins.empty());
@@ -548,9 +571,9 @@ std::vector<std::string> ImportLegacyPinnedApps(
syncer::StringOrdinal last_position =
syncer::StringOrdinal::CreateInitialOrdinal();
// Convert to sync item record.
- for (const auto& app_id : legacy_pins) {
- DCHECK_NE(kPinnedAppsPlaceholder, app_id);
- app_service->SetPinPosition(app_id, last_position);
+ for (const auto& app_launcher_id : legacy_pins) {
+ DCHECK_NE(kPinnedAppsPlaceholder, app_launcher_id.ToString());
+ app_service->SetPinPosition(app_launcher_id.ToString(), last_position);
last_position = last_position.CreateAfter();
}
@@ -570,14 +593,14 @@ std::vector<std::string> ImportLegacyPinnedApps(
return legacy_pins;
}
-std::vector<std::string> GetPinnedAppsFromPrefs(
+std::vector<AppLauncherId> GetPinnedAppsFromPrefs(
const PrefService* prefs,
LauncherControllerHelper* helper) {
app_list::AppListSyncableService* app_service =
app_list::AppListSyncableServiceFactory::GetForProfile(helper->profile());
// Some unit tests may not have it.
if (!app_service)
- return std::vector<std::string>();
+ return std::vector<AppLauncherId>();
std::vector<PinInfo> pin_infos;
@@ -599,8 +622,8 @@ std::vector<std::string> GetPinnedAppsFromPrefs(
continue;
}
- pin_infos.push_back(
- PinInfo(sync_peer.first, sync_peer.second->item_pin_ordinal));
+ pin_infos.push_back(PinInfo(AppLauncherId(sync_peer.first),
+ sync_peer.second->item_pin_ordinal));
}
if (first_run) {
@@ -614,10 +637,10 @@ std::vector<std::string> GetPinnedAppsFromPrefs(
// Pinned by policy apps appear first, if they were not shown before.
syncer::StringOrdinal front_position = GetFirstPinPosition(helper->profile());
- std::vector<std::string>::const_reverse_iterator it;
+ std::vector<AppLauncherId>::const_reverse_iterator it;
for (it = policy_apps.app_list().rbegin();
it != policy_apps.app_list().rend(); ++it) {
- const std::string& app_id = *it;
+ const std::string& app_id = (*it).ToString();
if (app_id == kPinnedAppsPlaceholder)
continue;
@@ -626,15 +649,17 @@ std::vector<std::string> GetPinnedAppsFromPrefs(
continue;
// Now move it to the front.
- pin_infos.insert(pin_infos.begin(), PinInfo(app_id, front_position));
+ pin_infos.insert(pin_infos.begin(),
+ PinInfo(AppLauncherId(app_id), front_position));
app_service->SetPinPosition(app_id, front_position);
front_position = front_position.CreateBefore();
}
// Now insert Chrome browser app if needed.
if (!app_service->GetPinPosition(extension_misc::kChromeAppId).IsValid()) {
- pin_infos.insert(pin_infos.begin(),
- PinInfo(extension_misc::kChromeAppId, front_position));
+ pin_infos.insert(
+ pin_infos.begin(),
+ PinInfo(AppLauncherId(extension_misc::kChromeAppId), front_position));
app_service->SetPinPosition(extension_misc::kChromeAppId, front_position);
}
@@ -643,35 +668,38 @@ std::vector<std::string> GetPinnedAppsFromPrefs(
const syncer::StringOrdinal arc_host_position =
GetLastPinPosition(helper->profile());
pin_infos.insert(pin_infos.begin(),
- PinInfo(ArcSupportHost::kHostAppId, arc_host_position));
+ PinInfo(AppLauncherId(ArcSupportHost::kHostAppId),
+ arc_host_position));
app_service->SetPinPosition(ArcSupportHost::kHostAppId,
arc_host_position);
}
}
- // Convert to string array.
- std::vector<std::string> pins(pin_infos.size());
+ // Convert to AppLauncherId array.
+ std::vector<AppLauncherId> pins(pin_infos.size(), AppLauncherId());
for (size_t i = 0; i < pin_infos.size(); ++i)
- pins[i] = pin_infos[i].app_id;
+ pins[i] = pin_infos[i].app_launcher_id;
return pins;
}
-void RemovePinPosition(Profile* profile, const std::string& app_id) {
+void RemovePinPosition(Profile* profile, const AppLauncherId& app_launcher_id) {
DCHECK(profile);
- DCHECK(!app_id.empty());
app_list::AppListSyncableService* app_service =
app_list::AppListSyncableServiceFactory::GetForProfile(profile);
- app_service->SetPinPosition(app_id, syncer::StringOrdinal());
+ app_service->SetPinPosition(app_launcher_id.ToString(),
+ syncer::StringOrdinal());
}
void SetPinPosition(Profile* profile,
- const std::string& app_id,
- const std::string& app_id_before,
- const std::vector<std::string>& app_ids_after) {
+ const AppLauncherId& app_launcher_id,
+ const AppLauncherId& app_launcher_id_before,
+ const std::vector<AppLauncherId>& app_launcher_ids_after) {
DCHECK(profile);
- DCHECK(!app_id.empty());
- DCHECK_NE(app_id, app_id_before);
+ const std::string app_launcher_id_str = app_launcher_id.ToString();
+ const std::string app_launcher_id_before_str =
+ app_launcher_id_before.ToString();
+ DCHECK_NE(app_launcher_id_str, app_launcher_id_before_str);
app_list::AppListSyncableService* app_service =
app_list::AppListSyncableServiceFactory::GetForProfile(profile);
@@ -680,16 +708,21 @@ void SetPinPosition(Profile* profile,
return;
syncer::StringOrdinal position_before =
- app_id_before.empty() ? syncer::StringOrdinal()
- : app_service->GetPinPosition(app_id_before);
+ app_launcher_id_before_str.empty()
+ ? syncer::StringOrdinal()
+ : app_service->GetPinPosition(app_launcher_id_before_str);
syncer::StringOrdinal position_after;
- for (const auto& app_id_after : app_ids_after) {
- DCHECK_NE(app_id_after, app_id);
- DCHECK_NE(app_id_after, app_id_before);
- syncer::StringOrdinal position = app_service->GetPinPosition(app_id_after);
+ for (const auto& app_launcher_id_after : app_launcher_ids_after) {
+ const std::string app_launcher_id_after_str =
+ app_launcher_id_after.ToString();
+ DCHECK_NE(app_launcher_id_after_str, app_launcher_id_str);
+ DCHECK_NE(app_launcher_id_after_str, app_launcher_id_before_str);
+ syncer::StringOrdinal position =
+ app_service->GetPinPosition(app_launcher_id_after_str);
DCHECK(position.IsValid());
if (!position.IsValid()) {
- LOG(ERROR) << "Sync pin position was not found for " << app_id_after;
+ LOG(ERROR) << "Sync pin position was not found for "
+ << app_launcher_id_after_str;
continue;
}
if (!position_before.IsValid() || !position.Equals(position_before)) {
@@ -707,7 +740,7 @@ void SetPinPosition(Profile* profile,
pin_position = position_after.CreateBefore();
else
pin_position = syncer::StringOrdinal::CreateInitialOrdinal();
- app_service->SetPinPosition(app_id, pin_position);
+ app_service->SetPinPosition(app_launcher_id_str, pin_position);
}
} // namespace launcher
« no previous file with comments | « chrome/browser/ui/ash/chrome_launcher_prefs.h ('k') | chrome/browser/ui/ash/launcher/chrome_launcher_controller_impl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698