15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <objbase.h> 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string> 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/files/file_path.h" 101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/files/file_util.h" 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/files/scoped_temp_dir.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/path_service.h" 147d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "base/strings/string16.h" 15868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/utf_string_conversions.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/test/scoped_path_override.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/test/test_shortcut_win.h" 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/version.h" 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/win/shortcut.h" 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/installer/setup/install.h" 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/installer/setup/install_worker.h" 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/installer/setup/setup_constants.h" 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/installer/util/browser_distribution.h" 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/installer/util/installer_state.h" 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/installer/util/master_preferences.h" 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/installer/util/master_preferences_constants.h" 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/installer/util/product.h" 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/installer/util/shell_util.h" 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/installer/util/util_constants.h" 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class CreateVisualElementsManifestTest : public testing::Test { 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetUp() OVERRIDE { 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Create a temp directory for testing. 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(test_dir_.CreateUniqueTempDir()); 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) version_ = Version("0.0.0.0"); 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) version_dir_ = test_dir_.path().AppendASCII(version_.GetString()); 43a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ASSERT_TRUE(base::CreateDirectory(version_dir_)); 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manifest_path_ = 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test_dir_.path().Append(installer::kVisualElementsManifest); 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void TearDown() OVERRIDE { 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Clean up test directory manually so we can fail if it leaks. 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(test_dir_.Delete()); 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The temporary directory used to contain the test operations. 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::ScopedTempDir test_dir_; 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // A dummy version number used to create the version directory. 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Version version_; 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The path to |test_dir_|\|version_|. 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath version_dir_; 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The path to VisualElementsManifest.xml. 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath manifest_path_; 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class InstallShortcutTest : public testing::Test { 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetUp() OVERRIDE { 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(S_OK, CoInitialize(NULL)); 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dist_ = BrowserDistribution::GetDistribution(); 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(dist_ != NULL); 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) product_.reset(new installer::Product(dist_)); 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome_exe_ = temp_dir_.path().Append(installer::kChromeExe); 78a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_EQ(0, base::WriteFile(chrome_exe_, "", 0)); 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ShellUtil::ShortcutProperties chrome_properties(ShellUtil::CURRENT_USER); 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) product_->AddDefaultShortcutProperties(chrome_exe_, &chrome_properties); 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_properties_.set_target(chrome_exe_); 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_properties_.set_icon(chrome_properties.icon, 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome_properties.icon_index); 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_properties_.set_app_id(chrome_properties.app_id); 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_properties_.set_description(chrome_properties.description); 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_properties_.set_dual_mode(false); 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_start_menu_properties_ = expected_properties_; 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_start_menu_properties_.set_dual_mode(true); 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prefs_.reset(GetFakeMasterPrefs(false, false, false)); 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(fake_user_desktop_.CreateUniqueTempDir()); 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(fake_common_desktop_.CreateUniqueTempDir()); 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(fake_user_quick_launch_.CreateUniqueTempDir()); 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(fake_start_menu_.CreateUniqueTempDir()); 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(fake_common_start_menu_.CreateUniqueTempDir()); 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) user_desktop_override_.reset( 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new base::ScopedPathOverride(base::DIR_USER_DESKTOP, 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fake_user_desktop_.path())); 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) common_desktop_override_.reset( 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new base::ScopedPathOverride(base::DIR_COMMON_DESKTOP, 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fake_common_desktop_.path())); 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) user_quick_launch_override_.reset( 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new base::ScopedPathOverride(base::DIR_USER_QUICK_LAUNCH, 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fake_user_quick_launch_.path())); 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) start_menu_override_.reset( 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new base::ScopedPathOverride(base::DIR_START_MENU, 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fake_start_menu_.path())); 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) common_start_menu_override_.reset( 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new base::ScopedPathOverride(base::DIR_COMMON_START_MENU, 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fake_common_start_menu_.path())); 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::string16 shortcut_name( 1163551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) dist_->GetShortcutName(BrowserDistribution::SHORTCUT_CHROME) + 1173551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) installer::kLnkExt); 1185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::string16 alternate_shortcut_name( 1193551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) dist_->GetShortcutName(BrowserDistribution::SHORTCUT_CHROME_ALTERNATE) + 1203551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) installer::kLnkExt); 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) user_desktop_shortcut_ = 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fake_user_desktop_.path().Append(shortcut_name); 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) user_quick_launch_shortcut_ = 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fake_user_quick_launch_.path().Append(shortcut_name); 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) user_start_menu_shortcut_ = 1273551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) fake_start_menu_.path().Append( 1283551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) dist_->GetStartMenuShortcutSubfolder( 1293551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) BrowserDistribution::SUBFOLDER_CHROME)) 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Append(shortcut_name); 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) system_desktop_shortcut_ = 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fake_common_desktop_.path().Append(shortcut_name); 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) system_start_menu_shortcut_ = 1343551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) fake_common_start_menu_.path().Append( 1353551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) dist_->GetStartMenuShortcutSubfolder( 1363551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) BrowserDistribution::SUBFOLDER_CHROME)) 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Append(shortcut_name); 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) user_alternate_desktop_shortcut_ = 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fake_user_desktop_.path().Append(alternate_shortcut_name); 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void TearDown() OVERRIDE { 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Try to unpin potentially pinned shortcuts (although pinning isn't tested, 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the call itself might still have pinned the Start Menu shortcuts). 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::win::TaskbarUnpinShortcutLink( 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) user_start_menu_shortcut_.value().c_str()); 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::win::TaskbarUnpinShortcutLink( 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) system_start_menu_shortcut_.value().c_str()); 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CoUninitialize(); 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) installer::MasterPreferences* GetFakeMasterPrefs( 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool do_not_create_desktop_shortcut, 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool do_not_create_quick_launch_shortcut, 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool alternate_desktop_shortcut) { 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const struct { 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char* pref_name; 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool is_desired; 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } desired_prefs[] = { 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { installer::master_preferences::kDoNotCreateDesktopShortcut, 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) do_not_create_desktop_shortcut }, 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { installer::master_preferences::kDoNotCreateQuickLaunchShortcut, 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) do_not_create_quick_launch_shortcut }, 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { installer::master_preferences::kAltShortcutText, 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) alternate_desktop_shortcut }, 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string master_prefs("{\"distribution\":{"); 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i < arraysize(desired_prefs); ++i) { 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) master_prefs += (i == 0 ? "\"" : ",\""); 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) master_prefs += desired_prefs[i].pref_name; 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) master_prefs += "\":"; 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) master_prefs += desired_prefs[i].is_desired ? "true" : "false"; 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) master_prefs += "}}"; 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return new installer::MasterPreferences(master_prefs); 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::win::ShortcutProperties expected_properties_; 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::win::ShortcutProperties expected_start_menu_properties_; 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserDistribution* dist_; 1842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath chrome_exe_; 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<installer::Product> product_; 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<installer::MasterPreferences> prefs_; 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::ScopedTempDir temp_dir_; 1892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::ScopedTempDir fake_user_desktop_; 1902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::ScopedTempDir fake_common_desktop_; 1912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::ScopedTempDir fake_user_quick_launch_; 1922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::ScopedTempDir fake_start_menu_; 1932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::ScopedTempDir fake_common_start_menu_; 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<base::ScopedPathOverride> user_desktop_override_; 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<base::ScopedPathOverride> common_desktop_override_; 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<base::ScopedPathOverride> user_quick_launch_override_; 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<base::ScopedPathOverride> start_menu_override_; 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<base::ScopedPathOverride> common_start_menu_override_; 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath user_desktop_shortcut_; 2012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath user_quick_launch_shortcut_; 2022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath user_start_menu_shortcut_; 2032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath system_desktop_shortcut_; 2042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath system_start_menu_shortcut_; 2052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath user_alternate_desktop_shortcut_; 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that VisualElementsManifest.xml is not created when VisualElements are 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// not present. 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(CreateVisualElementsManifestTest, VisualElementsManifestNotCreated) { 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE( 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) installer::CreateVisualElementsManifest(test_dir_.path(), version_)); 2157dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ASSERT_FALSE(base::PathExists(manifest_path_)); 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that VisualElementsManifest.xml is created with the correct content when 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// VisualElements are present. 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(CreateVisualElementsManifestTest, VisualElementsManifestCreated) { 221a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ASSERT_TRUE(base::CreateDirectory( 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) version_dir_.Append(installer::kVisualElements))); 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE( 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) installer::CreateVisualElementsManifest(test_dir_.path(), version_)); 2257dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ASSERT_TRUE(base::PathExists(manifest_path_)); 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string read_manifest; 22858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ASSERT_TRUE(base::ReadFileToString(manifest_path_, &read_manifest)); 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const char kExpectedManifest[] = 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "<Application>\r\n" 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " <VisualElements\r\n" 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " DisplayName='Google Chrome'\r\n" 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " Logo='0.0.0.0\\VisualElements\\Logo.png'\r\n" 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " SmallLogo='0.0.0.0\\VisualElements\\SmallLogo.png'\r\n" 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " ForegroundText='light'\r\n" 2375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) " BackgroundColor='#323232'>\r\n" 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " <DefaultTile ShowName='allLogos'/>\r\n" 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " <SplashScreen Image='0.0.0.0\\VisualElements\\splash-620x300.png'/>" 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "\r\n" 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " </VisualElements>\r\n" 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "</Application>"; 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_STREQ(kExpectedManifest, read_manifest.c_str()); 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(InstallShortcutTest, CreateAllShortcuts) { 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) installer::CreateOrUpdateShortcuts( 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome_exe_, *product_, *prefs_, installer::CURRENT_USER, 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) installer::INSTALL_SHORTCUT_CREATE_ALL); 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::win::ValidateShortcut(user_desktop_shortcut_, expected_properties_); 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::win::ValidateShortcut(user_quick_launch_shortcut_, 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_properties_); 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::win::ValidateShortcut(user_start_menu_shortcut_, 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_start_menu_properties_); 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2586e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)TEST_F(InstallShortcutTest, CreateAllShortcutsSystemLevel) { 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) installer::CreateOrUpdateShortcuts( 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome_exe_, *product_, *prefs_, installer::ALL_USERS, 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) installer::INSTALL_SHORTCUT_CREATE_ALL); 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::win::ValidateShortcut(system_desktop_shortcut_, expected_properties_); 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::win::ValidateShortcut(system_start_menu_shortcut_, 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_start_menu_properties_); 2656e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // The quick launch shortcut is always created per-user for the admin running 2666e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // the install (other users will get it via Active Setup). 2676e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) base::win::ValidateShortcut(user_quick_launch_shortcut_, 2686e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) expected_properties_); 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(InstallShortcutTest, CreateAllShortcutsAlternateDesktopName) { 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<installer::MasterPreferences> prefs_alt_desktop( 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetFakeMasterPrefs(false, false, true)); 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) installer::CreateOrUpdateShortcuts( 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome_exe_, *product_, *prefs_alt_desktop, installer::CURRENT_USER, 2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) installer::INSTALL_SHORTCUT_CREATE_ALL); 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::win::ValidateShortcut(user_alternate_desktop_shortcut_, 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_properties_); 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::win::ValidateShortcut(user_quick_launch_shortcut_, 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_properties_); 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::win::ValidateShortcut(user_start_menu_shortcut_, 2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_start_menu_properties_); 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(InstallShortcutTest, CreateAllShortcutsButDesktopShortcut) { 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<installer::MasterPreferences> prefs_no_desktop( 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetFakeMasterPrefs(true, false, false)); 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) installer::CreateOrUpdateShortcuts( 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome_exe_, *product_, *prefs_no_desktop, installer::CURRENT_USER, 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) installer::INSTALL_SHORTCUT_CREATE_ALL); 2917dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ASSERT_FALSE(base::PathExists(user_desktop_shortcut_)); 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::win::ValidateShortcut(user_quick_launch_shortcut_, 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_properties_); 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::win::ValidateShortcut(user_start_menu_shortcut_, 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_start_menu_properties_); 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(InstallShortcutTest, CreateAllShortcutsButQuickLaunchShortcut) { 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<installer::MasterPreferences> prefs_no_ql( 3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetFakeMasterPrefs(false, true, false)); 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) installer::CreateOrUpdateShortcuts( 3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome_exe_, *product_, *prefs_no_ql, installer::CURRENT_USER, 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) installer::INSTALL_SHORTCUT_CREATE_ALL); 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::win::ValidateShortcut(user_desktop_shortcut_, expected_properties_); 3057dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ASSERT_FALSE(base::PathExists(user_quick_launch_shortcut_)); 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::win::ValidateShortcut(user_start_menu_shortcut_, 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_start_menu_properties_); 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(InstallShortcutTest, ReplaceAll) { 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::win::ShortcutProperties dummy_properties; 3122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath dummy_target; 313a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ASSERT_TRUE(base::CreateTemporaryFileInDir(temp_dir_.path(), &dummy_target)); 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dummy_properties.set_target(dummy_target); 3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dummy_properties.set_working_dir(fake_user_desktop_.path()); 3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dummy_properties.set_arguments(L"--dummy --args"); 3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dummy_properties.set_app_id(L"El.Dummiest"); 3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(base::win::CreateOrUpdateShortcutLink( 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) user_desktop_shortcut_, dummy_properties, 3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::win::SHORTCUT_CREATE_ALWAYS)); 3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(base::win::CreateOrUpdateShortcutLink( 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) user_quick_launch_shortcut_, dummy_properties, 3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::win::SHORTCUT_CREATE_ALWAYS)); 325a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ASSERT_TRUE(base::CreateDirectory(user_start_menu_shortcut_.DirName())); 3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(base::win::CreateOrUpdateShortcutLink( 3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) user_start_menu_shortcut_, dummy_properties, 3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::win::SHORTCUT_CREATE_ALWAYS)); 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) installer::CreateOrUpdateShortcuts( 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome_exe_, *product_, *prefs_, installer::CURRENT_USER, 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) installer::INSTALL_SHORTCUT_REPLACE_EXISTING); 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::win::ValidateShortcut(user_desktop_shortcut_, expected_properties_); 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::win::ValidateShortcut(user_quick_launch_shortcut_, 3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_properties_); 3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::win::ValidateShortcut(user_start_menu_shortcut_, 3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_start_menu_properties_); 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(InstallShortcutTest, ReplaceExisting) { 3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::win::ShortcutProperties dummy_properties; 3422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath dummy_target; 343a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ASSERT_TRUE(base::CreateTemporaryFileInDir(temp_dir_.path(), &dummy_target)); 3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dummy_properties.set_target(dummy_target); 3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dummy_properties.set_working_dir(fake_user_desktop_.path()); 3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dummy_properties.set_arguments(L"--dummy --args"); 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dummy_properties.set_app_id(L"El.Dummiest"); 3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(base::win::CreateOrUpdateShortcutLink( 3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) user_desktop_shortcut_, dummy_properties, 3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::win::SHORTCUT_CREATE_ALWAYS)); 352a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ASSERT_TRUE(base::CreateDirectory(user_start_menu_shortcut_.DirName())); 3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) installer::CreateOrUpdateShortcuts( 3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome_exe_, *product_, *prefs_, installer::CURRENT_USER, 3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) installer::INSTALL_SHORTCUT_REPLACE_EXISTING); 3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::win::ValidateShortcut(user_desktop_shortcut_, expected_properties_); 3587dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ASSERT_FALSE(base::PathExists(user_quick_launch_shortcut_)); 3597dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ASSERT_FALSE(base::PathExists(user_start_menu_shortcut_)); 3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(InstallShortcutTest, CreateIfNoSystemLevelAllSystemShortcutsExist) { 3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::win::ShortcutProperties dummy_properties; 3642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath dummy_target; 365a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ASSERT_TRUE(base::CreateTemporaryFileInDir(temp_dir_.path(), &dummy_target)); 3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dummy_properties.set_target(dummy_target); 3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(base::win::CreateOrUpdateShortcutLink( 3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) system_desktop_shortcut_, dummy_properties, 3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::win::SHORTCUT_CREATE_ALWAYS)); 371a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ASSERT_TRUE(base::CreateDirectory( 3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) system_start_menu_shortcut_.DirName())); 3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(base::win::CreateOrUpdateShortcutLink( 3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) system_start_menu_shortcut_, dummy_properties, 3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::win::SHORTCUT_CREATE_ALWAYS)); 3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) installer::CreateOrUpdateShortcuts( 3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome_exe_, *product_, *prefs_, installer::CURRENT_USER, 3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) installer::INSTALL_SHORTCUT_CREATE_EACH_IF_NO_SYSTEM_LEVEL); 3807dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ASSERT_FALSE(base::PathExists(user_desktop_shortcut_)); 3817dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ASSERT_FALSE(base::PathExists(user_start_menu_shortcut_)); 3826e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // There is no system-level quick launch shortcut, so creating the user-level 3836e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // one should always succeed. 3846e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ASSERT_TRUE(base::PathExists(user_quick_launch_shortcut_)); 3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(InstallShortcutTest, CreateIfNoSystemLevelNoSystemShortcutsExist) { 3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) installer::CreateOrUpdateShortcuts( 3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome_exe_, *product_, *prefs_, installer::CURRENT_USER, 3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) installer::INSTALL_SHORTCUT_CREATE_EACH_IF_NO_SYSTEM_LEVEL); 3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::win::ValidateShortcut(user_desktop_shortcut_, expected_properties_); 3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::win::ValidateShortcut(user_quick_launch_shortcut_, 3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_properties_); 3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::win::ValidateShortcut(user_start_menu_shortcut_, 3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_start_menu_properties_); 3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(InstallShortcutTest, CreateIfNoSystemLevelSomeSystemShortcutsExist) { 3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::win::ShortcutProperties dummy_properties; 4002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath dummy_target; 401a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ASSERT_TRUE(base::CreateTemporaryFileInDir(temp_dir_.path(), &dummy_target)); 4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dummy_properties.set_target(dummy_target); 4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(base::win::CreateOrUpdateShortcutLink( 4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) system_desktop_shortcut_, dummy_properties, 4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::win::SHORTCUT_CREATE_ALWAYS)); 4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) installer::CreateOrUpdateShortcuts( 4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome_exe_, *product_, *prefs_, installer::CURRENT_USER, 4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) installer::INSTALL_SHORTCUT_CREATE_EACH_IF_NO_SYSTEM_LEVEL); 4117dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ASSERT_FALSE(base::PathExists(user_desktop_shortcut_)); 4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::win::ValidateShortcut(user_quick_launch_shortcut_, 4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_properties_); 4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::win::ValidateShortcut(user_start_menu_shortcut_, 4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_start_menu_properties_); 4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(EscapeXmlAttributeValueTest, EscapeCrazyValue) { 4195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::string16 val(L"This has 'crazy' \"chars\" && < and > signs."); 4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const wchar_t kExpectedEscapedVal[] = 4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) L"This has 'crazy' \"chars\" && < and > signs."; 4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) installer::EscapeXmlAttributeValueInSingleQuotes(&val); 4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_STREQ(kExpectedEscapedVal, val.c_str()); 4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(EscapeXmlAttributeValueTest, DontEscapeNormalValue) { 4275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::string16 val(L"Google Chrome"); 4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const wchar_t kExpectedEscapedVal[] = L"Google Chrome"; 4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) installer::EscapeXmlAttributeValueInSingleQuotes(&val); 4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_STREQ(kExpectedEscapedVal, val.c_str()); 4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 432