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

Side by Side 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, 7 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 unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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/extensions/bookmark_app_helper.h" 5 #include "chrome/browser/extensions/bookmark_app_helper.h"
6 6
7 #include "base/strings/utf_string_conversions.h" 7 #include "base/strings/utf_string_conversions.h"
8 #include "chrome/browser/extensions/extension_service.h" 8 #include "chrome/browser/extensions/extension_service.h"
9 #include "chrome/browser/extensions/extension_service_test_base.h" 9 #include "chrome/browser/extensions/extension_service_test_base.h"
10 #include "chrome/common/extensions/manifest_handlers/app_launch_info.h" 10 #include "chrome/common/extensions/manifest_handlers/app_launch_info.h"
11 #include "chrome/test/base/testing_profile.h" 11 #include "chrome/test/base/testing_profile.h"
12 #include "content/public/browser/render_process_host.h" 12 #include "content/public/browser/render_process_host.h"
13 #include "content/public/browser/web_contents.h" 13 #include "content/public/browser/web_contents.h"
14 #include "content/public/test/web_contents_tester.h" 14 #include "content/public/test/web_contents_tester.h"
15 #include "extensions/browser/extension_registry.h" 15 #include "extensions/browser/extension_registry.h"
16 #include "extensions/common/constants.h" 16 #include "extensions/common/constants.h"
17 #include "extensions/common/extension_icon_set.h" 17 #include "extensions/common/extension_icon_set.h"
18 #include "extensions/common/manifest_handlers/icons_handler.h" 18 #include "extensions/common/manifest_handlers/icons_handler.h"
19 #include "testing/gtest/include/gtest/gtest.h" 19 #include "testing/gtest/include/gtest/gtest.h"
20 #include "third_party/skia/include/core/SkBitmap.h" 20 #include "third_party/skia/include/core/SkBitmap.h"
21 #include "ui/gfx/skia_util.h" 21 #include "ui/gfx/skia_util.h"
22 22
23 namespace extensions {
24
23 namespace { 25 namespace {
24 26
25 const char kAppUrl[] = "http://www.chromium.org"; 27 const char kAppUrl[] = "http://www.chromium.org";
26 const char kAlternativeAppUrl[] = "http://www.notchromium.org"; 28 const char kAlternativeAppUrl[] = "http://www.notchromium.org";
27 const char kAppTitle[] = "Test title"; 29 const char kAppTitle[] = "Test title";
28 const char kAppShortName[] = "Test short name"; 30 const char kAppShortName[] = "Test short name";
29 const char kAlternativeAppTitle[] = "Different test title"; 31 const char kAlternativeAppTitle[] = "Different test title";
30 const char kAppDescription[] = "Test description"; 32 const char kAppDescription[] = "Test description";
31 const char kAppIcon1[] = "fav1.png"; 33 const char kAppIcon1[] = "fav1.png";
32 const char kAppIcon2[] = "fav2.png"; 34 const char kAppIcon2[] = "fav2.png";
33 const char kAppIcon3[] = "fav3.png"; 35 const char kAppIcon3[] = "fav3.png";
36 const char kAppIconURL1[] = "http://foo.com/1.png";
37 const char kAppIconURL2[] = "http://foo.com/2.png";
38 const char kAppIconURL3[] = "http://foo.com/3.png";
39 const char kAppIconURL4[] = "http://foo.com/4.png";
34 40
35 const int kIconSizeTiny = extension_misc::EXTENSION_ICON_BITTY; 41 const int kIconSizeTiny = extension_misc::EXTENSION_ICON_BITTY;
36 const int kIconSizeSmall = extension_misc::EXTENSION_ICON_SMALL; 42 const int kIconSizeSmall = extension_misc::EXTENSION_ICON_SMALL;
37 const int kIconSizeMedium = extension_misc::EXTENSION_ICON_MEDIUM; 43 const int kIconSizeMedium = extension_misc::EXTENSION_ICON_MEDIUM;
38 const int kIconSizeLarge = extension_misc::EXTENSION_ICON_LARGE; 44 const int kIconSizeLarge = extension_misc::EXTENSION_ICON_LARGE;
45 const int kIconSizeUnsupported = 123;
39 46
40 class BookmarkAppHelperTest : public testing::Test { 47 class BookmarkAppHelperTest : public testing::Test {
41 public: 48 public:
42 BookmarkAppHelperTest() {} 49 BookmarkAppHelperTest() {}
43 ~BookmarkAppHelperTest() override {} 50 ~BookmarkAppHelperTest() override {}
44 51
45 private: 52 private:
46 DISALLOW_COPY_AND_ASSIGN(BookmarkAppHelperTest); 53 DISALLOW_COPY_AND_ASSIGN(BookmarkAppHelperTest);
47 }; 54 };
48 55
(...skipping 27 matching lines...) Expand all
76 DISALLOW_COPY_AND_ASSIGN(BookmarkAppHelperExtensionServiceTest); 83 DISALLOW_COPY_AND_ASSIGN(BookmarkAppHelperExtensionServiceTest);
77 }; 84 };
78 85
79 SkBitmap CreateSquareBitmapWithColor(int size, SkColor color) { 86 SkBitmap CreateSquareBitmapWithColor(int size, SkColor color) {
80 SkBitmap bitmap; 87 SkBitmap bitmap;
81 bitmap.allocN32Pixels(size, size); 88 bitmap.allocN32Pixels(size, size);
82 bitmap.eraseColor(color); 89 bitmap.eraseColor(color);
83 return bitmap; 90 return bitmap;
84 } 91 }
85 92
93 BookmarkAppHelper::BitmapAndSource CreateSquareBitmapAndSourceWithColor(
94 int size,
95 SkColor color) {
96 return BookmarkAppHelper::BitmapAndSource(
97 GURL(), CreateSquareBitmapWithColor(size, color));
98 }
99
100 void ValidateBitmapSizeAndColor(SkBitmap bitmap, int size, SkColor color) {
101 // Obtain pixel lock to access pixels.
102 SkAutoLockPixels lock(bitmap);
103 EXPECT_EQ(color, bitmap.getColor(0, 0));
104 EXPECT_EQ(size, bitmap.width());
105 EXPECT_EQ(size, bitmap.height());
106 }
107
86 WebApplicationInfo::IconInfo CreateIconInfoWithBitmap(int size, SkColor color) { 108 WebApplicationInfo::IconInfo CreateIconInfoWithBitmap(int size, SkColor color) {
87 WebApplicationInfo::IconInfo icon_info; 109 WebApplicationInfo::IconInfo icon_info;
88 icon_info.width = size; 110 icon_info.width = size;
89 icon_info.height = size; 111 icon_info.height = size;
90 icon_info.data = CreateSquareBitmapWithColor(size, color); 112 icon_info.data = CreateSquareBitmapWithColor(size, color);
91 return icon_info; 113 return icon_info;
92 } 114 }
93 115
116 void ValidateAllIconsWithURLsArePresent(const WebApplicationInfo& info_to_check,
117 const WebApplicationInfo& other_info) {
118 for (const auto& icon : info_to_check.icons) {
119 if (!icon.url.is_empty()) {
120 bool found = false;
121 for (const auto& other_icon : info_to_check.icons) {
122 if (other_icon.url == icon.url && other_icon.width == icon.width) {
123 found = true;
124 break;
125 }
126 }
127 EXPECT_TRUE(found);
128 }
129 }
130 }
131
94 void ValidateWebApplicationInfo(base::Closure callback, 132 void ValidateWebApplicationInfo(base::Closure callback,
95 const WebApplicationInfo& expected, 133 const WebApplicationInfo& original,
96 const WebApplicationInfo& actual) { 134 const WebApplicationInfo& newly_made) {
97 EXPECT_EQ(expected.title, actual.title); 135 EXPECT_EQ(original.title, newly_made.title);
98 EXPECT_EQ(expected.description, actual.description); 136 EXPECT_EQ(original.description, newly_made.description);
99 EXPECT_EQ(expected.app_url, actual.app_url); 137 EXPECT_EQ(original.app_url, newly_made.app_url);
100 EXPECT_EQ(expected.icons.size(), actual.icons.size()); 138 // There should be 6 icons, as there are three sizes which need to be
101 for (size_t i = 0; i < expected.icons.size(); ++i) { 139 // generated, and each will generate a 1x and 2x icon.
102 EXPECT_EQ(expected.icons[i].width, actual.icons[i].width); 140 EXPECT_EQ(6u, newly_made.icons.size());
103 EXPECT_EQ(expected.icons[i].height, actual.icons[i].height);
104 EXPECT_EQ(expected.icons[i].url, actual.icons[i].url);
105 EXPECT_TRUE(
106 gfx::BitmapsAreEqual(expected.icons[i].data, actual.icons[i].data));
107 }
108 callback.Run(); 141 callback.Run();
109 } 142 }
110 143
111 } // namespace 144 } // namespace
112 145
113 namespace extensions {
114
115 class TestBookmarkAppHelper : public BookmarkAppHelper { 146 class TestBookmarkAppHelper : public BookmarkAppHelper {
116 public: 147 public:
117 TestBookmarkAppHelper(ExtensionService* service, 148 TestBookmarkAppHelper(ExtensionService* service,
118 WebApplicationInfo web_app_info, 149 WebApplicationInfo web_app_info,
119 content::WebContents* contents) 150 content::WebContents* contents)
120 : BookmarkAppHelper(service->profile(), web_app_info, contents) {} 151 : BookmarkAppHelper(service->profile(), web_app_info, contents) {}
121 152
122 ~TestBookmarkAppHelper() override {} 153 ~TestBookmarkAppHelper() override {}
123 154
124 void CreationComplete(const extensions::Extension* extension, 155 void CreationComplete(const extensions::Extension* extension,
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
219 base::RunLoop().RunUntilIdle(); 250 base::RunLoop().RunUntilIdle();
220 EXPECT_TRUE(helper.extension()); 251 EXPECT_TRUE(helper.extension());
221 const Extension* extension = 252 const Extension* extension =
222 service_->GetInstalledExtension(helper.extension()->id()); 253 service_->GetInstalledExtension(helper.extension()->id());
223 EXPECT_TRUE(extension); 254 EXPECT_TRUE(extension);
224 EXPECT_EQ(1u, registry()->enabled_extensions().size()); 255 EXPECT_EQ(1u, registry()->enabled_extensions().size());
225 EXPECT_TRUE(extension->from_bookmark()); 256 EXPECT_TRUE(extension->from_bookmark());
226 EXPECT_EQ(kAppTitle, extension->name()); 257 EXPECT_EQ(kAppTitle, extension->name());
227 EXPECT_EQ(kAppDescription, extension->description()); 258 EXPECT_EQ(kAppDescription, extension->description());
228 EXPECT_EQ(GURL(kAppUrl), AppLaunchInfo::GetLaunchWebURL(extension)); 259 EXPECT_EQ(GURL(kAppUrl), AppLaunchInfo::GetLaunchWebURL(extension));
229 // The tiny icon should have been removed and only the generated ones used. 260 EXPECT_FALSE(
230 EXPECT_TRUE(
231 IconsInfo::GetIconResource(extension, kIconSizeTiny, 261 IconsInfo::GetIconResource(extension, kIconSizeTiny,
232 ExtensionIconSet::MATCH_EXACTLY).empty()); 262 ExtensionIconSet::MATCH_EXACTLY).empty());
233 EXPECT_FALSE( 263 EXPECT_FALSE(
234 IconsInfo::GetIconResource( 264 IconsInfo::GetIconResource(
235 extension, kIconSizeSmall, ExtensionIconSet::MATCH_EXACTLY).empty()); 265 extension, kIconSizeSmall, ExtensionIconSet::MATCH_EXACTLY).empty());
236 EXPECT_FALSE( 266 EXPECT_FALSE(
237 IconsInfo::GetIconResource(extension, 267 IconsInfo::GetIconResource(extension,
238 kIconSizeSmall * 2, 268 kIconSizeSmall * 2,
239 ExtensionIconSet::MATCH_EXACTLY).empty()); 269 ExtensionIconSet::MATCH_EXACTLY).empty());
240 EXPECT_FALSE( 270 EXPECT_FALSE(
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
278 base::RunLoop().RunUntilIdle(); 308 base::RunLoop().RunUntilIdle();
279 309
280 { 310 {
281 EXPECT_EQ(1u, registry()->enabled_extensions().size()); 311 EXPECT_EQ(1u, registry()->enabled_extensions().size());
282 const Extension* extension = 312 const Extension* extension =
283 registry()->enabled_extensions().begin()->get(); 313 registry()->enabled_extensions().begin()->get();
284 EXPECT_TRUE(extension->from_bookmark()); 314 EXPECT_TRUE(extension->from_bookmark());
285 EXPECT_EQ(kAlternativeAppTitle, extension->name()); 315 EXPECT_EQ(kAlternativeAppTitle, extension->name());
286 EXPECT_EQ(kAppDescription, extension->description()); 316 EXPECT_EQ(kAppDescription, extension->description());
287 EXPECT_EQ(GURL(kAppUrl), AppLaunchInfo::GetLaunchWebURL(extension)); 317 EXPECT_EQ(GURL(kAppUrl), AppLaunchInfo::GetLaunchWebURL(extension));
288 EXPECT_TRUE(extensions::IconsInfo::GetIconResource( 318 EXPECT_FALSE(extensions::IconsInfo::GetIconResource(
289 extension, kIconSizeSmall, ExtensionIconSet::MATCH_EXACTLY) 319 extension, kIconSizeSmall, ExtensionIconSet::MATCH_EXACTLY)
290 .empty()); 320 .empty());
291 EXPECT_FALSE(extensions::IconsInfo::GetIconResource( 321 EXPECT_FALSE(extensions::IconsInfo::GetIconResource(
292 extension, kIconSizeLarge, ExtensionIconSet::MATCH_EXACTLY) 322 extension, kIconSizeLarge, ExtensionIconSet::MATCH_EXACTLY)
293 .empty()); 323 .empty());
294 } 324 }
295 } 325 }
296 326
297 TEST_F(BookmarkAppHelperExtensionServiceTest, GetWebApplicationInfo) { 327 TEST_F(BookmarkAppHelperExtensionServiceTest, GetWebApplicationInfo) {
298 WebApplicationInfo web_app_info; 328 WebApplicationInfo web_app_info;
299 web_app_info.app_url = GURL(kAppUrl); 329 web_app_info.app_url = GURL(kAppUrl);
300 web_app_info.title = base::UTF8ToUTF16(kAppTitle); 330 web_app_info.title = base::UTF8ToUTF16(kAppTitle);
301 web_app_info.description = base::UTF8ToUTF16(kAppDescription); 331 web_app_info.description = base::UTF8ToUTF16(kAppDescription);
302 332
303 web_app_info.icons.push_back(
304 CreateIconInfoWithBitmap(kIconSizeSmall, SK_ColorRED));
305 web_app_info.icons.push_back(
306 CreateIconInfoWithBitmap(kIconSizeLarge, SK_ColorRED));
307
308 extensions::CreateOrUpdateBookmarkApp(service_, &web_app_info); 333 extensions::CreateOrUpdateBookmarkApp(service_, &web_app_info);
309 base::RunLoop().RunUntilIdle(); 334 base::RunLoop().RunUntilIdle();
310 335
311 EXPECT_EQ(1u, registry()->enabled_extensions().size()); 336 EXPECT_EQ(1u, registry()->enabled_extensions().size());
312 base::RunLoop run_loop; 337 base::RunLoop run_loop;
313 extensions::GetWebApplicationInfoFromApp( 338 extensions::GetWebApplicationInfoFromApp(
314 profile_.get(), registry()->enabled_extensions().begin()->get(), 339 profile_.get(), registry()->enabled_extensions().begin()->get(),
315 base::Bind(&ValidateWebApplicationInfo, run_loop.QuitClosure(), 340 base::Bind(&ValidateWebApplicationInfo, run_loop.QuitClosure(),
316 web_app_info)); 341 web_app_info));
317 run_loop.Run(); 342 run_loop.Run();
318 } 343 }
319 344
345 TEST_F(BookmarkAppHelperExtensionServiceTest, LinkedAppIconsAreNotChanged) {
346 WebApplicationInfo web_app_info;
347
348 // Add two icons with a URL and bitmap, two icons with just a bitmap, an
349 // icon with just URL and an icon in an unsupported size with just a URL.
350 WebApplicationInfo::IconInfo icon_info =
351 CreateIconInfoWithBitmap(kIconSizeSmall, SK_ColorRED);
352 icon_info.url = GURL(kAppIconURL1);
353 web_app_info.icons.push_back(icon_info);
354
355 icon_info = CreateIconInfoWithBitmap(kIconSizeMedium, SK_ColorRED);
356 icon_info.url = GURL(kAppIconURL2);
357 web_app_info.icons.push_back(icon_info);
358
359 icon_info.data = SkBitmap();
360 icon_info.url = GURL(kAppIconURL3);
361 icon_info.width = 0;
362 icon_info.height = 0;
363 web_app_info.icons.push_back(icon_info);
364
365 icon_info.url = GURL(kAppIconURL4);
366 web_app_info.icons.push_back(icon_info);
367
368 icon_info = CreateIconInfoWithBitmap(kIconSizeLarge, SK_ColorRED);
369 web_app_info.icons.push_back(icon_info);
370
371 icon_info = CreateIconInfoWithBitmap(kIconSizeUnsupported, SK_ColorRED);
372 web_app_info.icons.push_back(icon_info);
373
374 // 'Download' one of the icons without a size or bitmap.
375 std::vector<BookmarkAppHelper::BitmapAndSource> downloaded;
376 downloaded.push_back(BookmarkAppHelper::BitmapAndSource(
377 GURL(kAppIconURL3),
378 CreateSquareBitmapWithColor(kIconSizeLarge, SK_ColorBLACK)));
379
380 // Now run the resizing and generation into a new web app info.
381 WebApplicationInfo new_web_app_info;
382 std::map<int, BookmarkAppHelper::BitmapAndSource> size_map =
383 BookmarkAppHelper::ResizeIconsAndGenerateMissing(downloaded,
384 &new_web_app_info);
385
386 // Now check that the linked app icons (i.e. those with URLs) are matching in
387 // both lists.
388 ValidateAllIconsWithURLsArePresent(web_app_info, new_web_app_info);
389 ValidateAllIconsWithURLsArePresent(new_web_app_info, web_app_info);
390 }
391
320 TEST_F(BookmarkAppHelperTest, UpdateWebAppInfoFromManifest) { 392 TEST_F(BookmarkAppHelperTest, UpdateWebAppInfoFromManifest) {
321 WebApplicationInfo web_app_info; 393 WebApplicationInfo web_app_info;
322 web_app_info.title = base::UTF8ToUTF16(kAlternativeAppTitle); 394 web_app_info.title = base::UTF8ToUTF16(kAlternativeAppTitle);
323 web_app_info.app_url = GURL(kAlternativeAppUrl); 395 web_app_info.app_url = GURL(kAlternativeAppUrl);
324 WebApplicationInfo::IconInfo info; 396 WebApplicationInfo::IconInfo info;
325 info.url = GURL(kAppIcon1); 397 info.url = GURL(kAppIcon1);
326 web_app_info.icons.push_back(info); 398 web_app_info.icons.push_back(info);
327 399
328 content::Manifest manifest; 400 content::Manifest manifest;
329 manifest.start_url = GURL(kAppUrl); 401 manifest.start_url = GURL(kAppUrl);
(...skipping 20 matching lines...) Expand all
350 manifest.icons.push_back(icon); 422 manifest.icons.push_back(icon);
351 423
352 BookmarkAppHelper::UpdateWebAppInfoFromManifest(manifest, &web_app_info); 424 BookmarkAppHelper::UpdateWebAppInfoFromManifest(manifest, &web_app_info);
353 EXPECT_EQ(base::UTF8ToUTF16(kAppTitle), web_app_info.title); 425 EXPECT_EQ(base::UTF8ToUTF16(kAppTitle), web_app_info.title);
354 426
355 EXPECT_EQ(2u, web_app_info.icons.size()); 427 EXPECT_EQ(2u, web_app_info.icons.size());
356 EXPECT_EQ(GURL(kAppIcon2), web_app_info.icons[0].url); 428 EXPECT_EQ(GURL(kAppIcon2), web_app_info.icons[0].url);
357 EXPECT_EQ(GURL(kAppIcon3), web_app_info.icons[1].url); 429 EXPECT_EQ(GURL(kAppIcon3), web_app_info.icons[1].url);
358 } 430 }
359 431
432 TEST_F(BookmarkAppHelperTest, ConstrainBitmapsToSizes) {
433 std::set<int> desired_sizes;
434 desired_sizes.insert(16);
435 desired_sizes.insert(32);
436 desired_sizes.insert(128);
437 desired_sizes.insert(256);
438
439 {
440 std::vector<BookmarkAppHelper::BitmapAndSource> bitmaps;
441 bitmaps.push_back(CreateSquareBitmapAndSourceWithColor(16, SK_ColorRED));
442 bitmaps.push_back(CreateSquareBitmapAndSourceWithColor(32, SK_ColorGREEN));
443 bitmaps.push_back(CreateSquareBitmapAndSourceWithColor(48, SK_ColorBLUE));
444 bitmaps.push_back(
445 CreateSquareBitmapAndSourceWithColor(144, SK_ColorYELLOW));
446
447 std::map<int, BookmarkAppHelper::BitmapAndSource> results(
448 BookmarkAppHelper::ConstrainBitmapsToSizes(bitmaps, desired_sizes));
449
450 EXPECT_EQ(3u, results.size());
451 ValidateBitmapSizeAndColor(results[16].bitmap, 16, SK_ColorRED);
452 ValidateBitmapSizeAndColor(results[32].bitmap, 32, SK_ColorGREEN);
453 ValidateBitmapSizeAndColor(results[128].bitmap, 128, SK_ColorYELLOW);
454 }
455 {
456 std::vector<BookmarkAppHelper::BitmapAndSource> bitmaps;
457 bitmaps.push_back(CreateSquareBitmapAndSourceWithColor(512, SK_ColorRED));
458 bitmaps.push_back(CreateSquareBitmapAndSourceWithColor(18, SK_ColorGREEN));
459 bitmaps.push_back(CreateSquareBitmapAndSourceWithColor(33, SK_ColorBLUE));
460 bitmaps.push_back(CreateSquareBitmapAndSourceWithColor(17, SK_ColorYELLOW));
461
462 std::map<int, BookmarkAppHelper::BitmapAndSource> results(
463 BookmarkAppHelper::ConstrainBitmapsToSizes(bitmaps, desired_sizes));
464
465 EXPECT_EQ(3u, results.size());
466 ValidateBitmapSizeAndColor(results[16].bitmap, 16, SK_ColorYELLOW);
467 ValidateBitmapSizeAndColor(results[32].bitmap, 32, SK_ColorBLUE);
468 ValidateBitmapSizeAndColor(results[256].bitmap, 256, SK_ColorRED);
469 }
470 }
471
360 TEST_F(BookmarkAppHelperTest, IsValidBookmarkAppUrl) { 472 TEST_F(BookmarkAppHelperTest, IsValidBookmarkAppUrl) {
361 EXPECT_TRUE(IsValidBookmarkAppUrl(GURL("https://www.chromium.org"))); 473 EXPECT_TRUE(IsValidBookmarkAppUrl(GURL("https://www.chromium.org")));
362 EXPECT_TRUE(IsValidBookmarkAppUrl(GURL("http://www.chromium.org/path"))); 474 EXPECT_TRUE(IsValidBookmarkAppUrl(GURL("http://www.chromium.org/path")));
363 EXPECT_FALSE(IsValidBookmarkAppUrl(GURL("ftp://www.chromium.org"))); 475 EXPECT_FALSE(IsValidBookmarkAppUrl(GURL("ftp://www.chromium.org")));
364 EXPECT_FALSE(IsValidBookmarkAppUrl(GURL("chrome://flags"))); 476 EXPECT_FALSE(IsValidBookmarkAppUrl(GURL("chrome://flags")));
365 } 477 }
366 478
367 } // namespace extensions 479 } // namespace extensions
OLDNEW
« 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