| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/ui/app_list/search/launcher_search/launcher_search_icon
_image_loader.h" | 5 #include "chrome/browser/ui/app_list/search/launcher_search/launcher_search_icon
_image_loader.h" |
| 6 | 6 |
| 7 #include "base/macros.h" | 7 #include "base/macros.h" |
| 8 #include "base/memory/ptr_util.h" |
| 8 #include "chrome/browser/chromeos/launcher_search_provider/error_reporter.h" | 9 #include "chrome/browser/chromeos/launcher_search_provider/error_reporter.h" |
| 9 #include "extensions/common/manifest_constants.h" | 10 #include "extensions/common/manifest_constants.h" |
| 10 #include "testing/gtest/include/gtest/gtest.h" | 11 #include "testing/gtest/include/gtest/gtest.h" |
| 11 #include "ui/gfx/canvas.h" | 12 #include "ui/gfx/canvas.h" |
| 12 #include "ui/gfx/geometry/rect.h" | 13 #include "ui/gfx/geometry/rect.h" |
| 13 #include "ui/gfx/geometry/size.h" | 14 #include "ui/gfx/geometry/size.h" |
| 14 #include "ui/gfx/image/canvas_image_source.h" | 15 #include "ui/gfx/image/canvas_image_source.h" |
| 15 #include "ui/gfx/image/image_skia.h" | 16 #include "ui/gfx/image/image_skia.h" |
| 16 #include "ui/gfx/image/image_unittest_util.h" | 17 #include "ui/gfx/image/image_unittest_util.h" |
| 17 #include "url/gurl.h" | 18 #include "url/gurl.h" |
| (...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 89 explicit FakeErrorReporter(const linked_ptr<std::string>& last_message) | 90 explicit FakeErrorReporter(const linked_ptr<std::string>& last_message) |
| 90 : ErrorReporter(nullptr), last_message_(last_message) {} | 91 : ErrorReporter(nullptr), last_message_(last_message) {} |
| 91 ~FakeErrorReporter() override {} | 92 ~FakeErrorReporter() override {} |
| 92 void Warn(const std::string& message) override { | 93 void Warn(const std::string& message) override { |
| 93 last_message_->clear(); | 94 last_message_->clear(); |
| 94 last_message_->append(message); | 95 last_message_->append(message); |
| 95 } | 96 } |
| 96 | 97 |
| 97 const std::string& GetLastWarningMessage() { return *last_message_.get(); } | 98 const std::string& GetLastWarningMessage() { return *last_message_.get(); } |
| 98 | 99 |
| 99 scoped_ptr<ErrorReporter> Duplicate() override { | 100 std::unique_ptr<ErrorReporter> Duplicate() override { |
| 100 return make_scoped_ptr(new FakeErrorReporter(last_message_)); | 101 return base::WrapUnique(new FakeErrorReporter(last_message_)); |
| 101 } | 102 } |
| 102 | 103 |
| 103 private: | 104 private: |
| 104 linked_ptr<std::string> last_message_; | 105 linked_ptr<std::string> last_message_; |
| 105 | 106 |
| 106 DISALLOW_COPY_AND_ASSIGN(FakeErrorReporter); | 107 DISALLOW_COPY_AND_ASSIGN(FakeErrorReporter); |
| 107 }; | 108 }; |
| 108 | 109 |
| 109 // Creates a test extension with |extension_id|. | 110 // Creates a test extension with |extension_id|. |
| 110 scoped_refptr<extensions::Extension> CreateTestExtension( | 111 scoped_refptr<extensions::Extension> CreateTestExtension( |
| (...skipping 16 matching lines...) Expand all Loading... |
| 127 expected_image.GetRepresentation(1.0).sk_bitmap(), | 128 expected_image.GetRepresentation(1.0).sk_bitmap(), |
| 128 result_image.GetRepresentation(1.0).sk_bitmap()); | 129 result_image.GetRepresentation(1.0).sk_bitmap()); |
| 129 } | 130 } |
| 130 | 131 |
| 131 } // namespace | 132 } // namespace |
| 132 | 133 |
| 133 class LauncherSearchIconImageLoaderTest : public testing::Test { | 134 class LauncherSearchIconImageLoaderTest : public testing::Test { |
| 134 protected: | 135 protected: |
| 135 void SetUp() override { extension_ = CreateTestExtension(kTestExtensionId); } | 136 void SetUp() override { extension_ = CreateTestExtension(kTestExtensionId); } |
| 136 | 137 |
| 137 scoped_ptr<FakeErrorReporter> GetFakeErrorReporter() { | 138 std::unique_ptr<FakeErrorReporter> GetFakeErrorReporter() { |
| 138 return make_scoped_ptr(new FakeErrorReporter()); | 139 return base::WrapUnique(new FakeErrorReporter()); |
| 139 } | 140 } |
| 140 | 141 |
| 141 scoped_refptr<extensions::Extension> extension_; | 142 scoped_refptr<extensions::Extension> extension_; |
| 142 }; | 143 }; |
| 143 | 144 |
| 144 TEST_F(LauncherSearchIconImageLoaderTest, WithoutCustomIconSuccessCase) { | 145 TEST_F(LauncherSearchIconImageLoaderTest, WithoutCustomIconSuccessCase) { |
| 145 GURL icon_url; // No custom icon. | 146 GURL icon_url; // No custom icon. |
| 146 LauncherSearchIconImageLoaderTestImpl impl(icon_url, nullptr, nullptr, 32, | 147 LauncherSearchIconImageLoaderTestImpl impl(icon_url, nullptr, nullptr, 32, |
| 147 GetFakeErrorReporter()); | 148 GetFakeErrorReporter()); |
| 148 impl.LoadResources(); | 149 impl.LoadResources(); |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 207 | 208 |
| 208 TEST_F(LauncherSearchIconImageLoaderTest, InvalidCustomIconUrl) { | 209 TEST_F(LauncherSearchIconImageLoaderTest, InvalidCustomIconUrl) { |
| 209 // Use a really long URL (for testing the string truncation). | 210 // Use a really long URL (for testing the string truncation). |
| 210 // The URL is from the wrong extension (foo2), so should be rejected. | 211 // The URL is from the wrong extension (foo2), so should be rejected. |
| 211 std::string invalid_url = | 212 std::string invalid_url = |
| 212 "chrome-extension://foo2/bar/" | 213 "chrome-extension://foo2/bar/" |
| 213 "901234567890123456789012345678901234567890123456789012345678901234567890" | 214 "901234567890123456789012345678901234567890123456789012345678901234567890" |
| 214 "1"; | 215 "1"; |
| 215 ASSERT_EQ(101U, invalid_url.size()); | 216 ASSERT_EQ(101U, invalid_url.size()); |
| 216 | 217 |
| 217 scoped_ptr<FakeErrorReporter> fake_error_reporter = GetFakeErrorReporter(); | 218 std::unique_ptr<FakeErrorReporter> fake_error_reporter = |
| 219 GetFakeErrorReporter(); |
| 218 GURL icon_url(invalid_url); | 220 GURL icon_url(invalid_url); |
| 219 LauncherSearchIconImageLoaderTestImpl impl(icon_url, nullptr, | 221 LauncherSearchIconImageLoaderTestImpl impl(icon_url, nullptr, |
| 220 extension_.get(), 32, | 222 extension_.get(), 32, |
| 221 fake_error_reporter->Duplicate()); | 223 fake_error_reporter->Duplicate()); |
| 222 impl.LoadResources(); | 224 impl.LoadResources(); |
| 223 | 225 |
| 224 // Warning message should be provided. | 226 // Warning message should be provided. |
| 225 ASSERT_EQ( | 227 ASSERT_EQ( |
| 226 "[chrome.launcherSearchProvider.setSearchResults] Invalid icon URL: " | 228 "[chrome.launcherSearchProvider.setSearchResults] Invalid icon URL: " |
| 227 "chrome-extension://foo2/bar/" | 229 "chrome-extension://foo2/bar/" |
| 228 "901234567890123456789012345678901234567890123456789012345678901234567..." | 230 "901234567890123456789012345678901234567890123456789012345678901234567..." |
| 229 ". Must have a valid URL within chrome-extension://foo.", | 231 ". Must have a valid URL within chrome-extension://foo.", |
| 230 fake_error_reporter->GetLastWarningMessage()); | 232 fake_error_reporter->GetLastWarningMessage()); |
| 231 | 233 |
| 232 // LoadExtensionIconResource should not be called. | 234 // LoadExtensionIconResource should not be called. |
| 233 ASSERT_FALSE(impl.IsLoadExtensionIconResourceCalled()); | 235 ASSERT_FALSE(impl.IsLoadExtensionIconResourceCalled()); |
| 234 } | 236 } |
| 235 | 237 |
| 236 TEST_F(LauncherSearchIconImageLoaderTest, FailedToLoadCustomIcon) { | 238 TEST_F(LauncherSearchIconImageLoaderTest, FailedToLoadCustomIcon) { |
| 237 scoped_ptr<FakeErrorReporter> fake_error_reporter = GetFakeErrorReporter(); | 239 std::unique_ptr<FakeErrorReporter> fake_error_reporter = |
| 240 GetFakeErrorReporter(); |
| 238 GURL icon_url(kTestCustomIconURL); | 241 GURL icon_url(kTestCustomIconURL); |
| 239 LauncherSearchIconImageLoaderTestImpl impl(icon_url, nullptr, | 242 LauncherSearchIconImageLoaderTestImpl impl(icon_url, nullptr, |
| 240 extension_.get(), 32, | 243 extension_.get(), 32, |
| 241 fake_error_reporter->Duplicate()); | 244 fake_error_reporter->Duplicate()); |
| 242 impl.LoadResources(); | 245 impl.LoadResources(); |
| 243 ASSERT_TRUE(impl.IsLoadExtensionIconResourceCalled()); | 246 ASSERT_TRUE(impl.IsLoadExtensionIconResourceCalled()); |
| 244 | 247 |
| 245 // Fails to load custom icon by passing an empty image. | 248 // Fails to load custom icon by passing an empty image. |
| 246 gfx::ImageSkia custom_icon; | 249 gfx::ImageSkia custom_icon; |
| 247 impl.CallOnCustomIconLoaded(custom_icon); | 250 impl.CallOnCustomIconLoaded(custom_icon); |
| 248 | 251 |
| 249 // Warning message should be shown. | 252 // Warning message should be shown. |
| 250 ASSERT_EQ( | 253 ASSERT_EQ( |
| 251 "[chrome.launcherSearchProvider.setSearchResults] Failed to load icon " | 254 "[chrome.launcherSearchProvider.setSearchResults] Failed to load icon " |
| 252 "URL: chrome-extension://foo/bar", | 255 "URL: chrome-extension://foo/bar", |
| 253 fake_error_reporter->GetLastWarningMessage()); | 256 fake_error_reporter->GetLastWarningMessage()); |
| 254 | 257 |
| 255 // Assert that extension icon image is set to icon image and badge icon image | 258 // Assert that extension icon image is set to icon image and badge icon image |
| 256 // is null. | 259 // is null. |
| 257 gfx::Size icon_size(32, 32); | 260 gfx::Size icon_size(32, 32); |
| 258 gfx::ImageSkia expected_image( | 261 gfx::ImageSkia expected_image( |
| 259 new FillColorImageSource(icon_size, SK_ColorBLACK), icon_size); | 262 new FillColorImageSource(icon_size, SK_ColorBLACK), icon_size); |
| 260 ASSERT_TRUE(IsEqual(expected_image, impl.GetIconImage())); | 263 ASSERT_TRUE(IsEqual(expected_image, impl.GetIconImage())); |
| 261 | 264 |
| 262 ASSERT_TRUE(impl.GetBadgeIconImage().isNull()); | 265 ASSERT_TRUE(impl.GetBadgeIconImage().isNull()); |
| 263 } | 266 } |
| 264 | 267 |
| 265 } // namespace app_list | 268 } // namespace app_list |
| OLD | NEW |