OLD | NEW |
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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/android/webapk/webapk_installer.h" | 5 #include "chrome/browser/android/webapk/webapk_installer.h" |
6 | 6 |
7 #include <jni.h> | 7 #include <jni.h> |
8 #include <memory> | 8 #include <memory> |
9 #include <string> | 9 #include <string> |
10 | 10 |
(...skipping 13 matching lines...) Expand all Loading... |
24 #include "chrome/test/base/testing_profile.h" | 24 #include "chrome/test/base/testing_profile.h" |
25 #include "content/public/browser/browser_thread.h" | 25 #include "content/public/browser/browser_thread.h" |
26 #include "content/public/test/test_browser_thread_bundle.h" | 26 #include "content/public/test/test_browser_thread_bundle.h" |
27 #include "net/test/embedded_test_server/embedded_test_server.h" | 27 #include "net/test/embedded_test_server/embedded_test_server.h" |
28 #include "net/test/embedded_test_server/http_request.h" | 28 #include "net/test/embedded_test_server/http_request.h" |
29 #include "net/test/embedded_test_server/http_response.h" | 29 #include "net/test/embedded_test_server/http_response.h" |
30 #include "net/url_request/url_request_test_util.h" | 30 #include "net/url_request/url_request_test_util.h" |
31 #include "testing/gmock/include/gmock/gmock.h" | 31 #include "testing/gmock/include/gmock/gmock.h" |
32 #include "testing/gtest/include/gtest/gtest.h" | 32 #include "testing/gtest/include/gtest/gtest.h" |
33 #include "third_party/skia/include/core/SkBitmap.h" | 33 #include "third_party/skia/include/core/SkBitmap.h" |
| 34 #include "ui/gfx/image/image_unittest_util.h" |
34 #include "url/gurl.h" | 35 #include "url/gurl.h" |
35 | 36 |
36 namespace { | 37 namespace { |
37 | 38 |
38 const base::FilePath::CharType kTestDataDir[] = | 39 const base::FilePath::CharType kTestDataDir[] = |
39 FILE_PATH_LITERAL("chrome/test/data"); | 40 FILE_PATH_LITERAL("chrome/test/data"); |
40 | 41 |
41 // URL of mock WebAPK server. | 42 // URL of mock WebAPK server. |
42 const char* kServerUrl = "/webapkserver/"; | 43 const char* kServerUrl = "/webapkserver/"; |
43 | 44 |
(...skipping 150 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
194 void BuildSync( | 195 void BuildSync( |
195 const GURL& best_primary_icon_url, | 196 const GURL& best_primary_icon_url, |
196 const GURL& best_badge_icon_url, | 197 const GURL& best_badge_icon_url, |
197 const std::map<std::string, std::string>& icon_url_to_murmur2_hash, | 198 const std::map<std::string, std::string>& icon_url_to_murmur2_hash, |
198 bool is_manifest_stale) { | 199 bool is_manifest_stale) { |
199 ShortcutInfo info(GURL::EmptyGURL()); | 200 ShortcutInfo info(GURL::EmptyGURL()); |
200 info.best_primary_icon_url = best_primary_icon_url; | 201 info.best_primary_icon_url = best_primary_icon_url; |
201 info.best_badge_icon_url = best_badge_icon_url; | 202 info.best_badge_icon_url = best_badge_icon_url; |
202 | 203 |
203 // WebApkInstaller owns itself. | 204 // WebApkInstaller owns itself. |
204 WebApkInstaller* installer = | 205 SkBitmap primary_icon(gfx::test::CreateBitmap(144, 144)); |
205 new TestWebApkInstaller(browser_context_, info, SkBitmap(), SkBitmap()); | 206 SkBitmap badge_icon(gfx::test::CreateBitmap(72, 72)); |
| 207 WebApkInstaller* installer = new TestWebApkInstaller( |
| 208 browser_context_, info, primary_icon, badge_icon); |
206 installer->BuildWebApkProtoInBackgroundForTesting( | 209 installer->BuildWebApkProtoInBackgroundForTesting( |
207 base::Bind(&BuildProtoRunner::OnBuiltWebApkProto, | 210 base::Bind(&BuildProtoRunner::OnBuiltWebApkProto, |
208 base::Unretained(this)), | 211 base::Unretained(this)), |
209 icon_url_to_murmur2_hash, is_manifest_stale); | 212 icon_url_to_murmur2_hash, is_manifest_stale); |
210 | 213 |
211 base::RunLoop run_loop; | 214 base::RunLoop run_loop; |
212 on_completed_callback_ = run_loop.QuitClosure(); | 215 on_completed_callback_ = run_loop.QuitClosure(); |
213 run_loop.Run(); | 216 run_loop.Run(); |
214 } | 217 } |
215 | 218 |
(...skipping 187 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
403 // one installed on the client. | 406 // one installed on the client. |
404 TEST_F(WebApkInstallerTest, UpdateSuccessWithEmptyDownloadUrlInResponse) { | 407 TEST_F(WebApkInstallerTest, UpdateSuccessWithEmptyDownloadUrlInResponse) { |
405 SetWebApkResponseBuilder(base::Bind(&BuildValidWebApkResponse, "")); | 408 SetWebApkResponseBuilder(base::Bind(&BuildValidWebApkResponse, "")); |
406 | 409 |
407 std::unique_ptr<WebApkInstallerRunner> runner = CreateWebApkInstallerRunner(); | 410 std::unique_ptr<WebApkInstallerRunner> runner = CreateWebApkInstallerRunner(); |
408 runner->RunUpdateWebApk(); | 411 runner->RunUpdateWebApk(); |
409 EXPECT_EQ(WebApkInstallResult::SUCCESS, runner->result()); | 412 EXPECT_EQ(WebApkInstallResult::SUCCESS, runner->result()); |
410 } | 413 } |
411 | 414 |
412 // When there is no Web Manifest available for a site, an empty | 415 // When there is no Web Manifest available for a site, an empty |
413 // |best_primary_icon_url| is used to build a WebApk update request. Tests the | 416 // |best_primary_icon_url| and an empty |best_badge_icon_url| is used to build a |
414 // request can be built properly. | 417 // WebApk update request. Tests the request can be built properly. |
415 TEST_F(WebApkInstallerTest, BuildWebApkProtoWhenManifestIsObsolete) { | 418 TEST_F(WebApkInstallerTest, BuildWebApkProtoWhenManifestIsObsolete) { |
416 std::string icon_url_1 = test_server()->GetURL("/icon1.png").spec(); | 419 std::string icon_url_1 = test_server()->GetURL("/icon1.png").spec(); |
417 std::string icon_url_2 = test_server()->GetURL("/icon2.png").spec(); | 420 std::string icon_url_2 = test_server()->GetURL("/icon2.png").spec(); |
418 std::map<std::string, std::string> icon_url_to_murmur2_hash; | 421 std::map<std::string, std::string> icon_url_to_murmur2_hash; |
419 icon_url_to_murmur2_hash[icon_url_1] = "1"; | 422 icon_url_to_murmur2_hash[icon_url_1] = "1"; |
420 icon_url_to_murmur2_hash[icon_url_2] = "2"; | 423 icon_url_to_murmur2_hash[icon_url_2] = "2"; |
421 | 424 |
422 std::unique_ptr<BuildProtoRunner> runner = CreateBuildProtoRunner(); | 425 std::unique_ptr<BuildProtoRunner> runner = CreateBuildProtoRunner(); |
423 runner->BuildSync(GURL(), GURL(), icon_url_to_murmur2_hash, | 426 runner->BuildSync(GURL(), GURL(), icon_url_to_murmur2_hash, |
424 true /* is_manifest_stale*/); | 427 true /* is_manifest_stale*/); |
425 webapk::WebApk* webapk_request = runner->GetWebApkRequest(); | 428 webapk::WebApk* webapk_request = runner->GetWebApkRequest(); |
426 ASSERT_NE(nullptr, webapk_request); | 429 ASSERT_NE(nullptr, webapk_request); |
427 | 430 |
428 webapk::WebAppManifest manifest = webapk_request->manifest(); | 431 webapk::WebAppManifest manifest = webapk_request->manifest(); |
429 ASSERT_EQ(3, manifest.icons_size()); | 432 ASSERT_EQ(4, manifest.icons_size()); |
430 | 433 |
431 webapk::Image icons[3]; | 434 webapk::Image icons[4]; |
432 for (int i = 0; i < 3; ++i) | 435 for (int i = 0; i < 4; ++i) |
433 icons[i] = manifest.icons(i); | 436 icons[i] = manifest.icons(i); |
434 | 437 |
435 EXPECT_EQ("", icons[0].src()); | 438 EXPECT_EQ("", icons[0].src()); |
436 EXPECT_FALSE(icons[0].has_hash()); | 439 EXPECT_FALSE(icons[0].has_hash()); |
437 EXPECT_TRUE(icons[0].has_image_data()); | 440 EXPECT_TRUE(icons[0].has_image_data()); |
438 | 441 |
439 EXPECT_EQ(icon_url_1, icons[1].src()); | 442 EXPECT_EQ("", icons[1].src()); |
440 EXPECT_EQ(icon_url_to_murmur2_hash[icon_url_1], icons[1].hash()); | 443 EXPECT_FALSE(icons[1].has_hash()); |
441 EXPECT_FALSE(icons[1].has_image_data()); | 444 EXPECT_TRUE(icons[1].has_image_data()); |
442 | 445 |
443 EXPECT_EQ(icon_url_2, icons[2].src()); | 446 EXPECT_EQ(icon_url_1, icons[2].src()); |
444 EXPECT_EQ(icon_url_to_murmur2_hash[icon_url_2], icons[2].hash()); | 447 EXPECT_EQ(icon_url_to_murmur2_hash[icon_url_1], icons[2].hash()); |
445 EXPECT_FALSE(icons[2].has_image_data()); | 448 EXPECT_FALSE(icons[2].has_image_data()); |
| 449 |
| 450 EXPECT_EQ(icon_url_2, icons[3].src()); |
| 451 EXPECT_EQ(icon_url_to_murmur2_hash[icon_url_2], icons[3].hash()); |
| 452 EXPECT_FALSE(icons[3].has_image_data()); |
446 } | 453 } |
447 | 454 |
448 // Tests a WebApk install or update request is built properly when the Chrome | 455 // Tests a WebApk install or update request is built properly when the Chrome |
449 // knows the best icon URL of a site after fetching its Web Manifest. | 456 // knows the best icon URL of a site after fetching its Web Manifest. |
450 TEST_F(WebApkInstallerTest, BuildWebApkProtoWhenManifestIsAvailable) { | 457 TEST_F(WebApkInstallerTest, BuildWebApkProtoWhenManifestIsAvailable) { |
451 std::string icon_url_1 = test_server()->GetURL("/icon.png").spec(); | 458 std::string icon_url_1 = test_server()->GetURL("/icon.png").spec(); |
452 std::string best_primary_icon_url = | 459 std::string best_primary_icon_url = |
453 test_server()->GetURL(kBestPrimaryIconUrl).spec(); | 460 test_server()->GetURL(kBestPrimaryIconUrl).spec(); |
454 std::string best_badge_icon_url = | 461 std::string best_badge_icon_url = |
455 test_server()->GetURL(kBestBadgeIconUrl).spec(); | 462 test_server()->GetURL(kBestBadgeIconUrl).spec(); |
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
522 EXPECT_FALSE(icons[0].has_image_data()); | 529 EXPECT_FALSE(icons[0].has_image_data()); |
523 | 530 |
524 // Check protobuf fields for kBestPrimaryIconUrl. | 531 // Check protobuf fields for kBestPrimaryIconUrl. |
525 EXPECT_EQ(best_icon_url, icons[1].src()); | 532 EXPECT_EQ(best_icon_url, icons[1].src()); |
526 EXPECT_EQ(icon_url_to_murmur2_hash[best_icon_url], icons[1].hash()); | 533 EXPECT_EQ(icon_url_to_murmur2_hash[best_icon_url], icons[1].hash()); |
527 EXPECT_THAT(icons[1].usages(), | 534 EXPECT_THAT(icons[1].usages(), |
528 testing::ElementsAre(webapk::Image::PRIMARY_ICON, | 535 testing::ElementsAre(webapk::Image::PRIMARY_ICON, |
529 webapk::Image::BADGE_ICON)); | 536 webapk::Image::BADGE_ICON)); |
530 EXPECT_TRUE(icons[1].has_image_data()); | 537 EXPECT_TRUE(icons[1].has_image_data()); |
531 } | 538 } |
OLD | NEW |