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

Unified Diff: chrome/browser/profiles/profile_info_cache.cc

Issue 8511064: GAIA Profile info prototype (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: test Created 9 years, 1 month 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 | « chrome/browser/profiles/profile_info_cache.h ('k') | chrome/browser/profiles/profile_info_interface.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/profiles/profile_info_cache.cc
diff --git a/chrome/browser/profiles/profile_info_cache.cc b/chrome/browser/profiles/profile_info_cache.cc
index 988f0ffd85fb3b4ceee8147bf6316ae1fdfa278e..099cb29243819d2899d9975c2c12e8a19a0d0e4f 100644
--- a/chrome/browser/profiles/profile_info_cache.cc
+++ b/chrome/browser/profiles/profile_info_cache.cc
@@ -4,12 +4,14 @@
#include "chrome/browser/profiles/profile_info_cache.h"
+#include "base/file_util.h"
#include "base/format_macros.h"
#include "base/logging.h"
#include "base/memory/scoped_ptr.h"
#include "base/rand_util.h"
#include "base/string_number_conversions.h"
#include "base/stringprintf.h"
+#include "base/threading/thread_restrictions.h"
#include "base/utf_string_conversions.h"
#include "base/values.h"
#include "chrome/browser/prefs/pref_service.h"
@@ -21,14 +23,20 @@
#include "grit/theme_resources.h"
#include "ui/base/l10n/l10n_util.h"
#include "ui/base/resource/resource_bundle.h"
+#include "ui/gfx/codec/png_codec.h"
+#include "ui/gfx/image/image.h"
namespace {
const char kNameKey[] = "name";
+const char kGAIANameKey[] = "test_gaia_name";
const char kUserNameKey[] = "user_name";
const char kAvatarIconKey[] = "avatar_icon";
+const char kAvatarIconFileNameKey[] = "test_avatar_icon_file_name";
const char kBackgroundAppsKey[] = "background_apps";
const char kDefaultUrlPrefix[] = "chrome://theme/IDR_PROFILE_AVATAR_";
+const char kIsUsingCustomAvatarIcon[] = "test_is_using_custom_avatar_icon";
+const char kIsUsingGAIAName[] = "test_is_using_gaia_name";
const int kDefaultAvatarIconResources[] = {
IDR_PROFILE_AVATAR_0,
@@ -88,6 +96,72 @@ const int kDefaultNames[] = {
} // namespace
+FilePath ProfileInfoCache::GetImagePath(std::string key,
+ string16 file_name) {
+ FilePath::StringType f1;
+#if defined(OS_POSIX)
+ f1 = key;
+#elif defined(OS_WIN)
+ f1 = ASCIIToWide(key);
+#endif
+
+ FilePath::StringType f2;
+#if defined(OS_POSIX)
+ f2 = UTF16ToUTF8(file_name);
+#elif defined(OS_WIN)
+ f2 = file_name;
+#endif
+
+ FilePath p = user_data_dir_.Append(f1);
+ return p.Append(f2);
+}
+
+void ProfileInfoCache::ReadBitmap(std::string key,
+ string16 file_name,
+ SkBitmap* bmp) {
+ if (file_name.empty())
+ return;
+
+ base::ThreadRestrictions::ScopedAllowIO allow_io;
+ FilePath image_path = GetImagePath(key, file_name);
+
+ std::string image_data;
+ if (!file_util::ReadFileToString(image_path, &image_data)) {
+ LOG(ERROR) << "Failed to read PNG file from disk.";
+ return;
+ }
+
+ const unsigned char* data =
+ reinterpret_cast<const unsigned char*>(image_data.data());
+ SkBitmap image;
+ if (!gfx::PNGCodec::Decode(data, image_data.length(), &image)) {
+ LOG(ERROR) << "Failed to decode PNG file.";
+ return;
+ }
+
+ *bmp = image;
+}
+
+void ProfileInfoCache::SaveBitmap(std::string key,
+ string16 file_name,
+ const SkBitmap& image) {
+ base::ThreadRestrictions::ScopedAllowIO allow_io;
+ FilePath image_path = GetImagePath(key, file_name);
+
+ std::vector<unsigned char> encoded_image;
+ if (!gfx::PNGCodec::EncodeBGRASkBitmap(image, true, &encoded_image)) {
+ LOG(ERROR) << "Failed to PNG encode the image.";
+ return;
+ }
+
+ if (file_util::WriteFile(image_path,
+ reinterpret_cast<char*>(&encoded_image[0]),
+ encoded_image.size()) == -1) {
+ LOG(ERROR) << "Failed to save image to file.";
+ return;
+ }
+}
+
ProfileInfoCache::ProfileInfoCache(PrefService* prefs,
const FilePath& user_data_dir)
: prefs_(prefs),
@@ -103,6 +177,15 @@ ProfileInfoCache::ProfileInfoCache(PrefService* prefs,
string16 name;
info->GetString(kNameKey, &name);
sorted_keys_.insert(FindPositionForProfile(key, name), key);
+
+ string16 file_name;
+ info->GetString(kAvatarIconFileNameKey, &file_name);
+ SkBitmap bmp;
+ ReadBitmap(key, UTF8ToUTF16("gaia_picture.png"), &bmp);
+ if (!bmp.isNull()) {
+ bitmaps_[key] = new SkBitmap(bmp);
+ } else {
+ }
}
}
@@ -164,8 +247,18 @@ size_t ProfileInfoCache::GetIndexOfProfileWithPath(
}
string16 ProfileInfoCache::GetNameOfProfileAtIndex(size_t index) const {
+ if (IsUsinGAIANameForProfileAtIndex(index)) {
+ return GetGAIANameOfProfileAtIndex(index);
+ } else {
+ string16 name;
+ GetInfoForProfileAtIndex(index)->GetString(kNameKey, &name);
+ return name;
+ }
+}
+
+string16 ProfileInfoCache::GetGAIANameOfProfileAtIndex(size_t index) const {
string16 name;
- GetInfoForProfileAtIndex(index)->GetString(kNameKey, &name);
+ GetInfoForProfileAtIndex(index)->GetString(kGAIANameKey, &name);
return name;
}
@@ -185,13 +278,29 @@ string16 ProfileInfoCache::GetUserNameOfProfileAtIndex(size_t index) const {
return user_name;
}
-const gfx::Image& ProfileInfoCache::GetAvatarIconOfProfileAtIndex(
+gfx::Image ProfileInfoCache::GetAvatarIconOfProfileAtIndex(
size_t index) const {
+ if (IsUsingCustomAvatarIconForProfileAtIndex(index)) {
+ SkBitmap bmp = GetGAIAPictureOfProfileAtIndex(index);
+ if (!bmp.isNull()) {
+ return gfx::Image(new SkBitmap(bmp));
+ }
+ }
+
int resource_id = GetDefaultAvatarIconResourceIDAtIndex(
GetAvatarIconIndexOfProfileAtIndex(index));
return ResourceBundle::GetSharedInstance().GetImageNamed(resource_id);
}
+SkBitmap ProfileInfoCache::GetGAIAPictureOfProfileAtIndex(
+ size_t index) const {
+ std::string key = CacheKeyFromProfilePath(GetPathOfProfileAtIndex(index));
+ const SkBitmap* bitmap = bitmaps_[key];
+ if (bitmap)
+ return *bitmap;
+ return SkBitmap();
+}
+
bool ProfileInfoCache::GetBackgroundStatusOfProfileAtIndex(
size_t index) const {
bool background_app_status;
@@ -233,6 +342,14 @@ void ProfileInfoCache::SetNameOfProfileAtIndex(size_t index,
content::NotificationService::NoDetails());
}
+void ProfileInfoCache::SetGAIANameOfProfileAtIndex(size_t index,
+ const string16& name) {
+ scoped_ptr<DictionaryValue> info(GetInfoForProfileAtIndex(index)->DeepCopy());
+ info->SetString(kGAIANameKey, name);
+ // This takes ownership of |info|.
+ SetInfoForProfileAtIndex(index, info.release());
+}
+
void ProfileInfoCache::SetUserNameOfProfileAtIndex(size_t index,
const string16& user_name) {
scoped_ptr<DictionaryValue> info(GetInfoForProfileAtIndex(index)->DeepCopy());
@@ -241,6 +358,47 @@ void ProfileInfoCache::SetUserNameOfProfileAtIndex(size_t index,
SetInfoForProfileAtIndex(index, info.release());
}
+bool ProfileInfoCache::IsUsingCustomAvatarIconForProfileAtIndex(
+ size_t index) const {
+ if (GetUserNameOfProfileAtIndex(index).empty()) {
+ return false;
+ }
+
+ bool is_custom = false;
+ GetInfoForProfileAtIndex(index)->GetBoolean(kIsUsingCustomAvatarIcon,
+ &is_custom);
+ return is_custom;
+}
+
+void ProfileInfoCache::SetIsUsingCustomAvatarIconForProfileAtIndex(
+ size_t index, bool value) {
+ scoped_ptr<DictionaryValue> info(GetInfoForProfileAtIndex(index)->DeepCopy());
+ info->SetBoolean(kIsUsingCustomAvatarIcon, value);
+ // This takes ownership of |info|.
+ SetInfoForProfileAtIndex(index, info.release());
+}
+
+bool ProfileInfoCache::IsUsinGAIANameForProfileAtIndex(
+ size_t index) const {
+ if (GetUserNameOfProfileAtIndex(index).empty()) {
+ return false;
+ }
+
+ bool is_custom = false;
+ GetInfoForProfileAtIndex(index)->GetBoolean(kIsUsingGAIAName, &is_custom);
+ return is_custom;
+}
+
+void ProfileInfoCache::SetIsUsingGAIANameForProfileAtIndex(
+ size_t index, bool value) {
+ scoped_ptr<DictionaryValue> info(GetInfoForProfileAtIndex(index)->DeepCopy());
+ info->SetBoolean(kIsUsingGAIAName, value);
+ // This takes ownership of |info|.
+ SetInfoForProfileAtIndex(index, info.release());
+}
+
+
+
void ProfileInfoCache::SetAvatarIconOfProfileAtIndex(size_t index,
size_t icon_index) {
scoped_ptr<DictionaryValue> info(GetInfoForProfileAtIndex(index)->DeepCopy());
@@ -249,6 +407,18 @@ void ProfileInfoCache::SetAvatarIconOfProfileAtIndex(size_t index,
SetInfoForProfileAtIndex(index, info.release());
}
+void ProfileInfoCache::SetGAIAPictureOfProfileAtIndex(
+ size_t index, const SkBitmap& bitmap) {
+ std::string key = CacheKeyFromProfilePath(GetPathOfProfileAtIndex(index));
+ bitmaps_[key] = new SkBitmap(bitmap);
+ SaveBitmap(key, UTF8ToUTF16("gaia_picture.png"), bitmap);
+
+ content::NotificationService::current()->Notify(
+ chrome::NOTIFICATION_PROFILE_CACHED_INFO_CHANGED,
+ content::NotificationService::AllSources(),
+ content::NotificationService::NoDetails());
+}
+
void ProfileInfoCache::SetBackgroundStatusOfProfileAtIndex(
size_t index,
bool running_background_apps) {
« no previous file with comments | « chrome/browser/profiles/profile_info_cache.h ('k') | chrome/browser/profiles/profile_info_interface.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698