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

Unified Diff: chrome/browser/extensions/bookmark_app_helper_unittest.cc

Issue 1066623008: Sync bookmark app icon urls and sizes, and download icons for new apps. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Updated sync value conversions Created 5 years, 8 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 | « chrome/browser/extensions/bookmark_app_helper.cc ('k') | chrome/browser/extensions/convert_web_app.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/extensions/bookmark_app_helper_unittest.cc
diff --git a/chrome/browser/extensions/bookmark_app_helper_unittest.cc b/chrome/browser/extensions/bookmark_app_helper_unittest.cc
index dc5c7e6b99508f32a1fa8e7b8a705e54892a830c..f5d70c9de5d2d5e5918ae741604c542c0caf05bd 100644
--- a/chrome/browser/extensions/bookmark_app_helper_unittest.cc
+++ b/chrome/browser/extensions/bookmark_app_helper_unittest.cc
@@ -20,6 +20,8 @@
#include "third_party/skia/include/core/SkBitmap.h"
#include "ui/gfx/skia_util.h"
+namespace extensions {
+
namespace {
const char kAppUrl[] = "http://www.chromium.org";
@@ -31,11 +33,16 @@ const char kAppDescription[] = "Test description";
const char kAppIcon1[] = "fav1.png";
const char kAppIcon2[] = "fav2.png";
const char kAppIcon3[] = "fav3.png";
+const char kAppIconURL1[] = "http://foo.com/1.png";
+const char kAppIconURL2[] = "http://foo.com/2.png";
+const char kAppIconURL3[] = "http://foo.com/3.png";
+const char kAppIconURL4[] = "http://foo.com/4.png";
const int kIconSizeTiny = extension_misc::EXTENSION_ICON_BITTY;
const int kIconSizeSmall = extension_misc::EXTENSION_ICON_SMALL;
const int kIconSizeMedium = extension_misc::EXTENSION_ICON_MEDIUM;
const int kIconSizeLarge = extension_misc::EXTENSION_ICON_LARGE;
+const int kIconSizeUnsupported = 123;
class BookmarkAppHelperTest : public testing::Test {
public:
@@ -83,6 +90,21 @@ SkBitmap CreateSquareBitmapWithColor(int size, SkColor color) {
return bitmap;
}
+BookmarkAppHelper::BitmapAndSource CreateSquareBitmapAndSourceWithColor(
+ int size,
+ SkColor color) {
+ return BookmarkAppHelper::BitmapAndSource(
+ GURL(), CreateSquareBitmapWithColor(size, color));
+}
+
+void ValidateBitmapSizeAndColor(SkBitmap bitmap, int size, SkColor color) {
+ // Obtain pixel lock to access pixels.
+ SkAutoLockPixels lock(bitmap);
+ EXPECT_EQ(color, bitmap.getColor(0, 0));
+ EXPECT_EQ(size, bitmap.width());
+ EXPECT_EQ(size, bitmap.height());
+}
+
WebApplicationInfo::IconInfo CreateIconInfoWithBitmap(int size, SkColor color) {
WebApplicationInfo::IconInfo icon_info;
icon_info.width = size;
@@ -91,27 +113,36 @@ WebApplicationInfo::IconInfo CreateIconInfoWithBitmap(int size, SkColor color) {
return icon_info;
}
-void ValidateWebApplicationInfo(base::Closure callback,
- const WebApplicationInfo& expected,
- const WebApplicationInfo& actual) {
- EXPECT_EQ(expected.title, actual.title);
- EXPECT_EQ(expected.description, actual.description);
- EXPECT_EQ(expected.app_url, actual.app_url);
- EXPECT_EQ(expected.icons.size(), actual.icons.size());
- for (size_t i = 0; i < expected.icons.size(); ++i) {
- EXPECT_EQ(expected.icons[i].width, actual.icons[i].width);
- EXPECT_EQ(expected.icons[i].height, actual.icons[i].height);
- EXPECT_EQ(expected.icons[i].url, actual.icons[i].url);
- EXPECT_TRUE(
- gfx::BitmapsAreEqual(expected.icons[i].data, actual.icons[i].data));
+void ValidateAllIconsWithURLsArePresent(const WebApplicationInfo& info_to_check,
+ const WebApplicationInfo& other_info) {
+ for (const auto& icon : info_to_check.icons) {
+ if (!icon.url.is_empty()) {
+ bool found = false;
+ for (const auto& other_icon : info_to_check.icons) {
+ if (other_icon.url == icon.url && other_icon.width == icon.width) {
+ found = true;
+ break;
+ }
+ }
+ EXPECT_TRUE(found);
+ }
}
+}
+
+void ValidateWebApplicationInfo(base::Closure callback,
+ const WebApplicationInfo& original,
+ const WebApplicationInfo& newly_made) {
+ EXPECT_EQ(original.title, newly_made.title);
+ EXPECT_EQ(original.description, newly_made.description);
+ EXPECT_EQ(original.app_url, newly_made.app_url);
+ // There should be 6 icons, as there are three sizes which need to be
+ // generated, and each will generate a 1x and 2x icon.
+ EXPECT_EQ(6u, newly_made.icons.size());
callback.Run();
}
} // namespace
-namespace extensions {
-
class TestBookmarkAppHelper : public BookmarkAppHelper {
public:
TestBookmarkAppHelper(ExtensionService* service,
@@ -226,8 +257,7 @@ TEST_F(BookmarkAppHelperExtensionServiceTest, CreateBookmarkAppNoContents) {
EXPECT_EQ(kAppTitle, extension->name());
EXPECT_EQ(kAppDescription, extension->description());
EXPECT_EQ(GURL(kAppUrl), AppLaunchInfo::GetLaunchWebURL(extension));
- // The tiny icon should have been removed and only the generated ones used.
- EXPECT_TRUE(
+ EXPECT_FALSE(
IconsInfo::GetIconResource(extension, kIconSizeTiny,
ExtensionIconSet::MATCH_EXACTLY).empty());
EXPECT_FALSE(
@@ -285,9 +315,9 @@ TEST_F(BookmarkAppHelperExtensionServiceTest, CreateAndUpdateBookmarkApp) {
EXPECT_EQ(kAlternativeAppTitle, extension->name());
EXPECT_EQ(kAppDescription, extension->description());
EXPECT_EQ(GURL(kAppUrl), AppLaunchInfo::GetLaunchWebURL(extension));
- EXPECT_TRUE(extensions::IconsInfo::GetIconResource(
- extension, kIconSizeSmall, ExtensionIconSet::MATCH_EXACTLY)
- .empty());
+ EXPECT_FALSE(extensions::IconsInfo::GetIconResource(
+ extension, kIconSizeSmall, ExtensionIconSet::MATCH_EXACTLY)
+ .empty());
EXPECT_FALSE(extensions::IconsInfo::GetIconResource(
extension, kIconSizeLarge, ExtensionIconSet::MATCH_EXACTLY)
.empty());
@@ -300,11 +330,6 @@ TEST_F(BookmarkAppHelperExtensionServiceTest, GetWebApplicationInfo) {
web_app_info.title = base::UTF8ToUTF16(kAppTitle);
web_app_info.description = base::UTF8ToUTF16(kAppDescription);
- web_app_info.icons.push_back(
- CreateIconInfoWithBitmap(kIconSizeSmall, SK_ColorRED));
- web_app_info.icons.push_back(
- CreateIconInfoWithBitmap(kIconSizeLarge, SK_ColorRED));
-
extensions::CreateOrUpdateBookmarkApp(service_, &web_app_info);
base::RunLoop().RunUntilIdle();
@@ -317,6 +342,53 @@ TEST_F(BookmarkAppHelperExtensionServiceTest, GetWebApplicationInfo) {
run_loop.Run();
}
+TEST_F(BookmarkAppHelperExtensionServiceTest, LinkedAppIconsAreNotChanged) {
+ WebApplicationInfo web_app_info;
+
+ // Add two icons with a URL and bitmap, two icons with just a bitmap, an
+ // icon with just URL and an icon in an unsupported size with just a URL.
+ WebApplicationInfo::IconInfo icon_info =
+ CreateIconInfoWithBitmap(kIconSizeSmall, SK_ColorRED);
+ icon_info.url = GURL(kAppIconURL1);
+ web_app_info.icons.push_back(icon_info);
+
+ icon_info = CreateIconInfoWithBitmap(kIconSizeMedium, SK_ColorRED);
+ icon_info.url = GURL(kAppIconURL2);
+ web_app_info.icons.push_back(icon_info);
+
+ icon_info.data = SkBitmap();
+ icon_info.url = GURL(kAppIconURL3);
+ icon_info.width = 0;
+ icon_info.height = 0;
+ web_app_info.icons.push_back(icon_info);
+
+ icon_info.url = GURL(kAppIconURL4);
+ web_app_info.icons.push_back(icon_info);
+
+ icon_info = CreateIconInfoWithBitmap(kIconSizeLarge, SK_ColorRED);
+ web_app_info.icons.push_back(icon_info);
+
+ icon_info = CreateIconInfoWithBitmap(kIconSizeUnsupported, SK_ColorRED);
+ web_app_info.icons.push_back(icon_info);
+
+ // 'Download' one of the icons without a size or bitmap.
+ std::vector<BookmarkAppHelper::BitmapAndSource> downloaded;
+ downloaded.push_back(BookmarkAppHelper::BitmapAndSource(
+ GURL(kAppIconURL3),
+ CreateSquareBitmapWithColor(kIconSizeLarge, SK_ColorBLACK)));
+
+ // Now run the resizing and generation into a new web app info.
+ WebApplicationInfo new_web_app_info;
+ std::map<int, BookmarkAppHelper::BitmapAndSource> size_map =
+ BookmarkAppHelper::ResizeIconsAndGenerateMissing(downloaded,
+ &new_web_app_info);
+
+ // Now check that the linked app icons (i.e. those with URLs) are matching in
+ // both lists.
+ ValidateAllIconsWithURLsArePresent(web_app_info, new_web_app_info);
+ ValidateAllIconsWithURLsArePresent(new_web_app_info, web_app_info);
+}
+
TEST_F(BookmarkAppHelperTest, UpdateWebAppInfoFromManifest) {
WebApplicationInfo web_app_info;
web_app_info.title = base::UTF8ToUTF16(kAlternativeAppTitle);
@@ -357,6 +429,46 @@ TEST_F(BookmarkAppHelperTest, UpdateWebAppInfoFromManifest) {
EXPECT_EQ(GURL(kAppIcon3), web_app_info.icons[1].url);
}
+TEST_F(BookmarkAppHelperTest, ConstrainBitmapsToSizes) {
+ std::set<int> desired_sizes;
+ desired_sizes.insert(16);
+ desired_sizes.insert(32);
+ desired_sizes.insert(128);
+ desired_sizes.insert(256);
+
+ {
+ std::vector<BookmarkAppHelper::BitmapAndSource> bitmaps;
+ bitmaps.push_back(CreateSquareBitmapAndSourceWithColor(16, SK_ColorRED));
+ bitmaps.push_back(CreateSquareBitmapAndSourceWithColor(32, SK_ColorGREEN));
+ bitmaps.push_back(CreateSquareBitmapAndSourceWithColor(48, SK_ColorBLUE));
+ bitmaps.push_back(
+ CreateSquareBitmapAndSourceWithColor(144, SK_ColorYELLOW));
+
+ std::map<int, BookmarkAppHelper::BitmapAndSource> results(
+ BookmarkAppHelper::ConstrainBitmapsToSizes(bitmaps, desired_sizes));
+
+ EXPECT_EQ(3u, results.size());
+ ValidateBitmapSizeAndColor(results[16].bitmap, 16, SK_ColorRED);
+ ValidateBitmapSizeAndColor(results[32].bitmap, 32, SK_ColorGREEN);
+ ValidateBitmapSizeAndColor(results[128].bitmap, 128, SK_ColorYELLOW);
+ }
+ {
+ std::vector<BookmarkAppHelper::BitmapAndSource> bitmaps;
+ bitmaps.push_back(CreateSquareBitmapAndSourceWithColor(512, SK_ColorRED));
+ bitmaps.push_back(CreateSquareBitmapAndSourceWithColor(18, SK_ColorGREEN));
+ bitmaps.push_back(CreateSquareBitmapAndSourceWithColor(33, SK_ColorBLUE));
+ bitmaps.push_back(CreateSquareBitmapAndSourceWithColor(17, SK_ColorYELLOW));
+
+ std::map<int, BookmarkAppHelper::BitmapAndSource> results(
+ BookmarkAppHelper::ConstrainBitmapsToSizes(bitmaps, desired_sizes));
+
+ EXPECT_EQ(3u, results.size());
+ ValidateBitmapSizeAndColor(results[16].bitmap, 16, SK_ColorYELLOW);
+ ValidateBitmapSizeAndColor(results[32].bitmap, 32, SK_ColorBLUE);
+ ValidateBitmapSizeAndColor(results[256].bitmap, 256, SK_ColorRED);
+ }
+}
+
TEST_F(BookmarkAppHelperTest, IsValidBookmarkAppUrl) {
EXPECT_TRUE(IsValidBookmarkAppUrl(GURL("https://www.chromium.org")));
EXPECT_TRUE(IsValidBookmarkAppUrl(GURL("http://www.chromium.org/path")));
« no previous file with comments | « chrome/browser/extensions/bookmark_app_helper.cc ('k') | chrome/browser/extensions/convert_web_app.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698