Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 <objbase.h> | 5 #include <objbase.h> |
| 6 #include <stddef.h> | 6 #include <stddef.h> |
| 7 | 7 |
| 8 #include <string> | 8 #include <string> |
| 9 | 9 |
| 10 #include "base/base_paths.h" | 10 #include "base/base_paths.h" |
| 11 #include "base/files/file_path.h" | 11 #include "base/files/file_path.h" |
| 12 #include "base/files/file_util.h" | 12 #include "base/files/file_util.h" |
| 13 #include "base/files/scoped_temp_dir.h" | 13 #include "base/files/scoped_temp_dir.h" |
| 14 #include "base/macros.h" | 14 #include "base/macros.h" |
| 15 #include "base/memory/scoped_ptr.h" | 15 #include "base/memory/scoped_ptr.h" |
| 16 #include "base/strings/string16.h" | 16 #include "base/strings/string16.h" |
| 17 #include "base/strings/string_number_conversions.h" | |
| 17 #include "base/strings/utf_string_conversions.h" | 18 #include "base/strings/utf_string_conversions.h" |
| 18 #include "base/test/scoped_path_override.h" | 19 #include "base/test/scoped_path_override.h" |
| 19 #include "base/test/test_shortcut_win.h" | 20 #include "base/test/test_shortcut_win.h" |
| 20 #include "base/version.h" | 21 #include "base/version.h" |
| 21 #include "base/win/shortcut.h" | 22 #include "base/win/shortcut.h" |
| 22 #include "chrome/installer/setup/install.h" | 23 #include "chrome/installer/setup/install.h" |
| 23 #include "chrome/installer/setup/install_worker.h" | 24 #include "chrome/installer/setup/install_worker.h" |
| 24 #include "chrome/installer/setup/setup_constants.h" | 25 #include "chrome/installer/setup/setup_constants.h" |
| 25 #include "chrome/installer/util/browser_distribution.h" | 26 #include "chrome/installer/util/browser_distribution.h" |
| 26 #include "chrome/installer/util/install_util.h" | 27 #include "chrome/installer/util/install_util.h" |
| (...skipping 425 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 452 installer::CreateOrUpdateShortcuts( | 453 installer::CreateOrUpdateShortcuts( |
| 453 chrome_exe_, *product_, *prefs_, installer::CURRENT_USER, | 454 chrome_exe_, *product_, *prefs_, installer::CURRENT_USER, |
| 454 installer::INSTALL_SHORTCUT_CREATE_EACH_IF_NO_SYSTEM_LEVEL); | 455 installer::INSTALL_SHORTCUT_CREATE_EACH_IF_NO_SYSTEM_LEVEL); |
| 455 ASSERT_FALSE(base::PathExists(user_desktop_shortcut_)); | 456 ASSERT_FALSE(base::PathExists(user_desktop_shortcut_)); |
| 456 base::win::ValidateShortcut(user_quick_launch_shortcut_, | 457 base::win::ValidateShortcut(user_quick_launch_shortcut_, |
| 457 expected_properties_); | 458 expected_properties_); |
| 458 base::win::ValidateShortcut(user_start_menu_shortcut_, | 459 base::win::ValidateShortcut(user_start_menu_shortcut_, |
| 459 expected_start_menu_properties_); | 460 expected_start_menu_properties_); |
| 460 } | 461 } |
| 461 | 462 |
| 463 TEST_F(InstallShortcutTest, UpdatePerUserShortcuts) { | |
| 464 base::FilePath shortcut_path_template; | |
| 465 ASSERT_TRUE(ShellUtil::GetShortcutPath(ShellUtil::SHORTCUT_LOCATION_DESKTOP, | |
| 466 dist_, ShellUtil::CURRENT_USER, | |
| 467 &shortcut_path_template)); | |
| 468 shortcut_path_template = | |
| 469 shortcut_path_template.Append(FILE_PATH_LITERAL("shortcut.lnk")); | |
|
gab
2016/03/16 21:57:31
You can use the fixture's |user_desktop_shortcut_|
fdoray
2016/03/17 00:50:34
Done.
| |
| 470 | |
| 471 static const struct TestData { | |
|
gab
2016/03/16 21:57:30
s/TestData/TestCase/
fdoray
2016/03/17 00:50:34
Done.
| |
| 472 const base::FilePath::CharType* relative_target_path; | |
| 473 bool should_update; | |
| 474 } kTargetPathsToUpdate[] = { | |
| 475 {FILE_PATH_LITERAL("AppData\\Local\\Google\\Chrome " | |
| 476 "SxS\\Temp\\scoped_dir\\new_chrome.exe"), | |
| 477 false}, | |
| 478 {FILE_PATH_LITERAL( | |
| 479 "AppData\\Local\\Google\\Chrome SxS\\Temp\\scoped_dir\\chrome.exe"), | |
| 480 false}, | |
| 481 {FILE_PATH_LITERAL( | |
| 482 "AppData\\Local\\Google\\Chrome SxS\\Application\\chrome.exe"), | |
| 483 false}, | |
| 484 {FILE_PATH_LITERAL("AppData\\Local\\Google\\Chrome " | |
| 485 "SxS\\Application\\something_else.exe"), | |
| 486 false}, | |
| 487 {FILE_PATH_LITERAL( | |
| 488 "AppData\\Local\\Google\\Chrome\\Temp\\scoped_dir\\new_chrome.exe"), | |
| 489 true}, | |
| 490 {FILE_PATH_LITERAL( | |
| 491 "AppData\\Local\\Google\\Chrome\\Temp\\scoped_dir\\chrome.exe"), | |
| 492 true}, | |
| 493 {FILE_PATH_LITERAL( | |
| 494 "AppData\\Local\\Google\\Chrome\\Application\\chrome.exe"), | |
| 495 true}, | |
| 496 {FILE_PATH_LITERAL( | |
| 497 "AppData\\Local\\Google\\Chrome\\Application\\something_else.exe"), | |
| 498 false}, | |
| 499 {FILE_PATH_LITERAL("something_else.exe"), false}, | |
| 500 }; | |
| 501 | |
| 502 // Create shortcuts. | |
| 503 for (size_t i = 0; i < arraysize(kTargetPathsToUpdate); ++i) { | |
| 504 const base::FilePath target_path = | |
| 505 temp_dir_.path().Append(kTargetPathsToUpdate[i].relative_target_path); | |
| 506 ASSERT_TRUE(base::CreateDirectory(target_path.DirName())); | |
| 507 base::File file(target_path, base::File::FLAG_CREATE); | |
| 508 ASSERT_TRUE(file.IsValid()); | |
| 509 | |
| 510 base::win::ShortcutProperties properties; | |
| 511 properties.set_target(target_path); | |
| 512 ASSERT_TRUE(base::win::CreateOrUpdateShortcutLink( | |
| 513 shortcut_path_template.InsertBeforeExtension(base::SizeTToString16(i)), | |
| 514 properties, base::win::SHORTCUT_CREATE_ALWAYS)); | |
| 515 } | |
| 516 | |
| 517 // Update shortcuts. | |
| 518 const base::FilePath new_target_path = | |
| 519 temp_dir_.path().Append(FILE_PATH_LITERAL( | |
| 520 "AppData\\Local\\Google\\Chrome\\Application\\chrome.exe")); | |
| 521 installer::UpdatePerUserShortcutsInLocation( | |
| 522 ShellUtil::SHORTCUT_LOCATION_DESKTOP, dist_, | |
| 523 new_target_path.DirName().DirName(), new_target_path.BaseName(), | |
| 524 new_target_path); | |
| 525 | |
| 526 // Check if shortcuts were updated correctly. | |
|
gab
2016/03/16 21:57:31
s/Check if/Verify that/
fdoray
2016/03/17 00:50:34
Done.
| |
| 527 for (size_t i = 0; i < arraysize(kTargetPathsToUpdate); ++i) { | |
| 528 base::FilePath target_path; | |
| 529 ASSERT_TRUE(base::win::ResolveShortcut( | |
| 530 shortcut_path_template.InsertBeforeExtension(base::SizeTToString16(i)), | |
| 531 &target_path, nullptr)); | |
| 532 | |
| 533 if (kTargetPathsToUpdate[i].should_update) { | |
| 534 EXPECT_EQ(new_target_path, target_path); | |
| 535 } else { | |
| 536 EXPECT_EQ( | |
| 537 temp_dir_.path().Append(kTargetPathsToUpdate[i].relative_target_path), | |
| 538 target_path); | |
| 539 } | |
| 540 } | |
| 541 } | |
| 542 | |
| 543 TEST_F(InstallShortcutTest, UpdatePerUserShortcutsCanary) { | |
| 544 base::FilePath shortcut_path_template; | |
| 545 ASSERT_TRUE(ShellUtil::GetShortcutPath(ShellUtil::SHORTCUT_LOCATION_DESKTOP, | |
| 546 dist_, ShellUtil::CURRENT_USER, | |
| 547 &shortcut_path_template)); | |
| 548 shortcut_path_template = | |
| 549 shortcut_path_template.Append(FILE_PATH_LITERAL("shortcut.lnk")); | |
| 550 | |
| 551 static const struct TestData { | |
| 552 const base::FilePath::CharType* relative_target_path; | |
| 553 bool should_update; | |
| 554 } kTargetPathsToUpdate[] = { | |
| 555 {FILE_PATH_LITERAL("AppData\\Local\\Google\\Chrome " | |
| 556 "SxS\\Temp\\scoped_dir\\new_chrome.exe"), | |
| 557 true}, | |
| 558 {FILE_PATH_LITERAL( | |
| 559 "AppData\\Local\\Google\\Chrome SxS\\Temp\\scoped_dir\\chrome.exe"), | |
| 560 true}, | |
| 561 {FILE_PATH_LITERAL( | |
| 562 "AppData\\Local\\Google\\Chrome SxS\\Application\\chrome.exe"), | |
| 563 true}, | |
| 564 {FILE_PATH_LITERAL("AppData\\Local\\Google\\Chrome " | |
| 565 "SxS\\Application\\something_else.exe"), | |
| 566 false}, | |
| 567 {FILE_PATH_LITERAL( | |
| 568 "AppData\\Local\\Google\\Chrome\\Temp\\scoped_dir\\new_chrome.exe"), | |
| 569 false}, | |
| 570 {FILE_PATH_LITERAL( | |
| 571 "AppData\\Local\\Google\\Chrome\\Temp\\scoped_dir\\chrome.exe"), | |
| 572 false}, | |
| 573 {FILE_PATH_LITERAL( | |
| 574 "AppData\\Local\\Google\\Chrome\\Application\\chrome.exe"), | |
| 575 false}, | |
| 576 {FILE_PATH_LITERAL( | |
| 577 "AppData\\Local\\Google\\Chrome\\Application\\something_else.exe"), | |
| 578 false}, | |
| 579 {FILE_PATH_LITERAL("something_else.exe"), false}, | |
| 580 }; | |
| 581 | |
| 582 // Create shortcuts. | |
| 583 for (size_t i = 0; i < arraysize(kTargetPathsToUpdate); ++i) { | |
| 584 const base::FilePath target_path = | |
| 585 temp_dir_.path().Append(kTargetPathsToUpdate[i].relative_target_path); | |
| 586 ASSERT_TRUE(base::CreateDirectory(target_path.DirName())); | |
| 587 base::File file(target_path, base::File::FLAG_CREATE); | |
| 588 ASSERT_TRUE(file.IsValid()); | |
| 589 | |
| 590 base::win::ShortcutProperties properties; | |
| 591 properties.set_target(target_path); | |
| 592 ASSERT_TRUE(base::win::CreateOrUpdateShortcutLink( | |
| 593 shortcut_path_template.InsertBeforeExtension(base::SizeTToString16(i)), | |
| 594 properties, base::win::SHORTCUT_CREATE_ALWAYS)); | |
| 595 } | |
| 596 | |
| 597 // Update shortcuts. | |
| 598 const base::FilePath new_target_path = | |
| 599 temp_dir_.path().Append(FILE_PATH_LITERAL( | |
| 600 "AppData\\Local\\Google\\Chrome SxS\\Application\\chrome.exe")); | |
| 601 installer::UpdatePerUserShortcutsInLocation( | |
| 602 ShellUtil::SHORTCUT_LOCATION_DESKTOP, dist_, | |
| 603 new_target_path.DirName().DirName(), new_target_path.BaseName(), | |
| 604 new_target_path); | |
| 605 | |
| 606 // Check if shortcuts were updated correctly. | |
| 607 for (size_t i = 0; i < arraysize(kTargetPathsToUpdate); ++i) { | |
| 608 base::FilePath target_path; | |
| 609 ASSERT_TRUE(base::win::ResolveShortcut( | |
| 610 shortcut_path_template.InsertBeforeExtension(base::SizeTToString16(i)), | |
| 611 &target_path, nullptr)); | |
| 612 | |
| 613 if (kTargetPathsToUpdate[i].should_update) { | |
| 614 EXPECT_EQ(new_target_path, target_path); | |
| 615 } else { | |
| 616 EXPECT_EQ( | |
| 617 temp_dir_.path().Append(kTargetPathsToUpdate[i].relative_target_path), | |
| 618 target_path); | |
| 619 } | |
| 620 } | |
| 621 } | |
| 622 | |
| 462 TEST(EscapeXmlAttributeValueTest, EscapeCrazyValue) { | 623 TEST(EscapeXmlAttributeValueTest, EscapeCrazyValue) { |
| 463 base::string16 val(L"This has 'crazy' \"chars\" && < and > signs."); | 624 base::string16 val(L"This has 'crazy' \"chars\" && < and > signs."); |
| 464 static const wchar_t kExpectedEscapedVal[] = | 625 static const wchar_t kExpectedEscapedVal[] = |
| 465 L"This has 'crazy' \"chars\" && < and > signs."; | 626 L"This has 'crazy' \"chars\" && < and > signs."; |
| 466 installer::EscapeXmlAttributeValueInSingleQuotes(&val); | 627 installer::EscapeXmlAttributeValueInSingleQuotes(&val); |
| 467 ASSERT_STREQ(kExpectedEscapedVal, val.c_str()); | 628 ASSERT_STREQ(kExpectedEscapedVal, val.c_str()); |
| 468 } | 629 } |
| 469 | 630 |
| 470 TEST(EscapeXmlAttributeValueTest, DontEscapeNormalValue) { | 631 TEST(EscapeXmlAttributeValueTest, DontEscapeNormalValue) { |
| 471 base::string16 val(L"Google Chrome"); | 632 base::string16 val(L"Google Chrome"); |
| 472 static const wchar_t kExpectedEscapedVal[] = L"Google Chrome"; | 633 static const wchar_t kExpectedEscapedVal[] = L"Google Chrome"; |
| 473 installer::EscapeXmlAttributeValueInSingleQuotes(&val); | 634 installer::EscapeXmlAttributeValueInSingleQuotes(&val); |
| 474 ASSERT_STREQ(kExpectedEscapedVal, val.c_str()); | 635 ASSERT_STREQ(kExpectedEscapedVal, val.c_str()); |
| 475 } | 636 } |
| OLD | NEW |