Upstream version 9.38.198.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / profiles / profile_shortcut_manager_win.cc
index 7225619..199220d 100644 (file)
@@ -71,7 +71,7 @@ const int kMaxProfileShortcutFileNameLength = 64;
 const int kShortcutIconSize = 48;
 const int kProfileAvatarBadgeSize = kShortcutIconSize / 2;
 
-const int kCurrentProfileIconVersion = 2;
+const int kCurrentProfileIconVersion = 3;
 
 // 2x sized profile avatar icons. Mirrors |kDefaultAvatarIconResources| in
 // profile_info_cache.cc.
@@ -589,19 +589,24 @@ base::string16 SanitizeShortcutProfileNameString(
   return sanitized;
 }
 
-// Returns a copied SkBitmap for the given resource id that can be safely passed
-// to another thread.
-SkBitmap GetImageResourceSkBitmapCopy(int resource_id) {
-  const gfx::Image image =
-      ResourceBundle::GetSharedInstance().GetNativeImageNamed(resource_id);
+// Returns a copied SkBitmap for the given image that can be safely passed to
+// another thread.
+SkBitmap GetSkBitmapCopy(const gfx::Image& image) {
   DCHECK(!image.IsEmpty());
-
   const SkBitmap* image_bitmap = image.ToSkBitmap();
   SkBitmap bitmap_copy;
   image_bitmap->deepCopyTo(&bitmap_copy);
   return bitmap_copy;
 }
 
+// Returns a copied SkBitmap for the given resource id that can be safely passed
+// to another thread.
+SkBitmap GetImageResourceSkBitmapCopy(int resource_id) {
+  const gfx::Image image =
+      ResourceBundle::GetSharedInstance().GetNativeImageNamed(resource_id);
+  return GetSkBitmapCopy(image);
+}
+
 }  // namespace
 
 namespace profiles {
@@ -808,15 +813,35 @@ void ProfileShortcutManagerWin::CreateOrUpdateShortcutsForProfileAtPath(
   if (!remove_badging) {
     params.profile_name = cache->GetNameOfProfileAtIndex(profile_index);
 
-    const size_t icon_index =
-        cache->GetAvatarIconIndexOfProfileAtIndex(profile_index);
-    const int resource_id_1x =
-        profiles::GetDefaultAvatarIconResourceIDAtIndex(icon_index);
-    const int resource_id_2x = kProfileAvatarIconResources2x[icon_index];
-    // Make a copy of the SkBitmaps to ensure that we can safely use the image
-    // data on the FILE thread.
-    params.avatar_image_1x = GetImageResourceSkBitmapCopy(resource_id_1x);
-    params.avatar_image_2x = GetImageResourceSkBitmapCopy(resource_id_2x);
+    // The profile might be using the Gaia avatar, which is not in the
+    // resources array.
+    bool has_gaia_image = false;
+    if (cache->IsUsingGAIAPictureOfProfileAtIndex(profile_index)) {
+      const gfx::Image* image =
+          cache->GetGAIAPictureOfProfileAtIndex(profile_index);
+      if (image) {
+        params.avatar_image_1x = GetSkBitmapCopy(*image);
+        // Gaia images are 256px, which makes them big enough to use in the
+        // large icon case as well.
+        DCHECK_GE(image->Width(), IconUtil::kLargeIconSize);
+        params.avatar_image_2x = params.avatar_image_1x;
+        has_gaia_image = true;
+      }
+    }
+
+    // If the profile isn't using a Gaia image, or if the Gaia image did not
+    // exist, revert to the previously used avatar icon.
+    if (!has_gaia_image) {
+      const size_t icon_index =
+          cache->GetAvatarIconIndexOfProfileAtIndex(profile_index);
+      const int resource_id_1x =
+          profiles::GetDefaultAvatarIconResourceIDAtIndex(icon_index);
+      const int resource_id_2x = kProfileAvatarIconResources2x[icon_index];
+      // Make a copy of the SkBitmaps to ensure that we can safely use the image
+      // data on the FILE thread.
+      params.avatar_image_1x = GetImageResourceSkBitmapCopy(resource_id_1x);
+      params.avatar_image_2x = GetImageResourceSkBitmapCopy(resource_id_2x);
+    }
   }
   BrowserThread::PostTask(
       BrowserThread::FILE, FROM_HERE,