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

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

Issue 2655553002: [Merge M57] Fix import legacy, pref based pins. (Closed)
Patch Set: Created 3 years, 11 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
« no previous file with comments | « no previous file | chrome/browser/ui/ash/launcher/chrome_launcher_controller_impl.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 440f652a259c20d0f7200b68f58d2dd081fdc082..2a854d0ae9ff1721ba799e93971f9043efcbb468 100644
--- a/chrome/browser/ui/ash/chrome_launcher_prefs.cc
+++ b/chrome/browser/ui/ash/chrome_launcher_prefs.cc
@@ -237,15 +237,19 @@ class AppTracker {
}
void MaybeAddApp(const AppLauncherId& app_launcher_id,
- const LauncherControllerHelper* helper) {
+ const LauncherControllerHelper* helper,
+ bool check_for_valid_app) {
DCHECK_NE(kPinnedAppsPlaceholder, app_launcher_id.ToString());
- if (!helper->IsValidIDForCurrentUser(app_launcher_id.ToString()))
+ if (check_for_valid_app &&
+ !helper->IsValidIDForCurrentUser(app_launcher_id.ToString())) {
return;
+ }
AddApp(app_launcher_id);
}
void MaybeAddAppFromPref(const base::DictionaryValue* app_pref,
- const LauncherControllerHelper* helper) {
+ const LauncherControllerHelper* helper,
+ bool check_for_valid_app) {
std::string app_id;
if (!app_pref->GetString(kPinnedAppsPrefAppIDPath, &app_id)) {
LOG(ERROR) << "Cannot get app id from app pref entry.";
@@ -262,7 +266,7 @@ class AppTracker {
return;
}
- MaybeAddApp(AppLauncherId(app_id), helper);
+ MaybeAddApp(AppLauncherId(app_id), helper, check_for_valid_app);
}
const std::vector<AppLauncherId>& app_list() const { return app_list_; }
@@ -399,6 +403,7 @@ void SetShelfAlignmentPref(PrefService* prefs,
// Helper that extracts app list from policy preferences.
void GetAppsPinnedByPolicy(const PrefService* prefs,
const LauncherControllerHelper* helper,
+ bool check_for_valid_app,
AppTracker* apps) {
DCHECK(apps);
DCHECK(apps->app_list().empty());
@@ -433,17 +438,19 @@ void GetAppsPinnedByPolicy(const PrefService* prefs,
for (const auto& activity : activities) {
const std::string arc_app_id =
ArcAppListPrefs::GetAppId(arc_package, activity);
- apps->MaybeAddApp(AppLauncherId(arc_app_id), helper);
+ apps->MaybeAddApp(AppLauncherId(arc_app_id), helper,
+ check_for_valid_app);
}
} else {
- apps->MaybeAddApp(AppLauncherId(app_id), helper);
+ apps->MaybeAddApp(AppLauncherId(app_id), helper, check_for_valid_app);
}
}
}
std::vector<AppLauncherId> GetPinnedAppsFromPrefsLegacy(
const PrefService* prefs,
- const LauncherControllerHelper* helper) {
+ const LauncherControllerHelper* helper,
+ bool check_for_valid_app) {
// Adding the app list item to the list of items requires that the ID is not
// a valid and known ID for the extension system. The ID was constructed that
// way - but just to make sure...
@@ -461,7 +468,7 @@ std::vector<AppLauncherId> GetPinnedAppsFromPrefsLegacy(
CreateAppDict(AppLauncherId(extension_misc::kChromeAppId)));
AppTracker apps;
- GetAppsPinnedByPolicy(prefs, helper, &apps);
+ GetAppsPinnedByPolicy(prefs, helper, check_for_valid_app, &apps);
std::string app_id;
for (size_t i = 0; i < pinned_apps->GetSize(); ++i) {
@@ -474,7 +481,7 @@ std::vector<AppLauncherId> GetPinnedAppsFromPrefsLegacy(
LOG(ERROR) << "There is no dictionary for app entry.";
continue;
}
- apps.MaybeAddAppFromPref(app_pref, helper);
+ apps.MaybeAddAppFromPref(app_pref, helper, check_for_valid_app);
}
// If not added yet, the chrome item will be the last item in the list.
@@ -559,22 +566,24 @@ syncer::StringOrdinal GetLastPinPosition(Profile* profile) {
std::vector<AppLauncherId> ImportLegacyPinnedApps(
const PrefService* prefs,
- LauncherControllerHelper* helper,
- const AppTracker& policy_apps) {
- std::vector<AppLauncherId> legacy_pins =
- GetPinnedAppsFromPrefsLegacy(prefs, helper);
- DCHECK(!legacy_pins.empty());
+ LauncherControllerHelper* helper) {
+ std::vector<AppLauncherId> legacy_pins_all =
+ GetPinnedAppsFromPrefsLegacy(prefs, helper, false);
+ DCHECK(!legacy_pins_all.empty());
app_list::AppListSyncableService* app_service =
app_list::AppListSyncableServiceFactory::GetForProfile(helper->profile());
+ std::vector<AppLauncherId> legacy_pins_valid;
syncer::StringOrdinal last_position =
syncer::StringOrdinal::CreateInitialOrdinal();
// Convert to sync item record.
- for (const auto& app_launcher_id : legacy_pins) {
+ for (const auto& app_launcher_id : legacy_pins_all) {
DCHECK_NE(kPinnedAppsPlaceholder, app_launcher_id.ToString());
app_service->SetPinPosition(app_launcher_id.ToString(), last_position);
last_position = last_position.CreateAfter();
+ if (helper->IsValidIDForCurrentUser(app_launcher_id.ToString()))
+ legacy_pins_valid.push_back(app_launcher_id);
}
// Now process default apps.
@@ -590,7 +599,7 @@ std::vector<AppLauncherId> ImportLegacyPinnedApps(
last_position = last_position.CreateAfter();
}
- return legacy_pins;
+ return legacy_pins_valid;
}
std::vector<AppLauncherId> GetPinnedAppsFromPrefs(
@@ -604,9 +613,6 @@ std::vector<AppLauncherId> GetPinnedAppsFromPrefs(
std::vector<PinInfo> pin_infos;
- AppTracker policy_apps;
- GetAppsPinnedByPolicy(prefs, helper, &policy_apps);
-
// Empty pins indicates that sync based pin model is used for the first
// time. In normal workflow we have at least Chrome browser pin info.
bool first_run = true;
@@ -627,14 +633,23 @@ std::vector<AppLauncherId> GetPinnedAppsFromPrefs(
}
if (first_run) {
+ // Return default apps in case profile is not synced yet.
+ sync_preferences::PrefServiceSyncable* const pref_service_syncable =
+ PrefServiceSyncableFromProfile(helper->profile());
+ if (!pref_service_syncable->IsSyncing())
+ return GetPinnedAppsFromPrefsLegacy(prefs, helper, true);
+
// We need to import legacy pins model and convert it to sync based
// model.
- return ImportLegacyPinnedApps(prefs, helper, policy_apps);
+ return ImportLegacyPinnedApps(prefs, helper);
}
// Sort pins according their ordinals.
std::sort(pin_infos.begin(), pin_infos.end(), ComparePinInfo());
+ AppTracker policy_apps;
+ GetAppsPinnedByPolicy(prefs, helper, true, &policy_apps);
+
// Pinned by policy apps appear first, if they were not shown before.
syncer::StringOrdinal front_position = GetFirstPinPosition(helper->profile());
std::vector<AppLauncherId>::const_reverse_iterator it;
« no previous file with comments | « no previous file | chrome/browser/ui/ash/launcher/chrome_launcher_controller_impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698