12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file. 42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/shell_integration.h" 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <vector> 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (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" 12868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/string16.h" 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/strings/string_number_conversions.h" 14868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/utf_string_conversions.h" 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/test/test_shortcut_win.h" 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/win/scoped_com_initializer.h" 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/win/windows_version.h" 18c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/web_applications/web_app.h" 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/common/chrome_constants.h" 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/common/chrome_paths_internal.h" 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/installer/util/browser_distribution.h" 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/installer/util/shell_util.h" 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/installer/util/util_constants.h" 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace { 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 28c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)struct ShortcutTestObject { 29c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::FilePath path; 30c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::win::ShortcutProperties properties; 31c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}; 32c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class ShellIntegrationWinMigrateShortcutTest : public testing::Test { 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected: 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void SetUp() OVERRIDE { 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // A path to a random target. 39a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::CreateTemporaryFileInDir(temp_dir_.path(), &other_target_); 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // This doesn't need to actually have a base name of "chrome.exe". 42a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::CreateTemporaryFileInDir(temp_dir_.path(), &chrome_exe_); 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chrome_app_id_ = 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ShellUtil::GetBrowserModelId(BrowserDistribution::GetDistribution(), 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) true); 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 48c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::FilePath default_user_data_dir; 49c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) chrome::GetDefaultUserDataDirectory(&default_user_data_dir); 50c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::FilePath default_profile_path = 51c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) default_user_data_dir.AppendASCII(chrome::kInitialProfile); 52c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) app_list_app_id_ = 53c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ShellIntegration::GetAppListAppModelIdForProfile(default_profile_path); 54c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) non_default_user_data_dir_ = base::FilePath(FILE_PATH_LITERAL("root")) 55c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) .Append(FILE_PATH_LITERAL("Non Default Data Dir")); 56c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) non_default_profile_ = L"NonDefault"; 57c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) non_default_profile_chrome_app_id_ = 58c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ShellIntegration::GetChromiumModelIdForProfile( 59c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) default_user_data_dir.Append(non_default_profile_)); 60c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) non_default_user_data_dir_chrome_app_id_ = 61c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ShellIntegration::GetChromiumModelIdForProfile( 62c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) non_default_user_data_dir_.AppendASCII(chrome::kInitialProfile)); 63c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) non_default_user_data_dir_and_profile_chrome_app_id_ = 64c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ShellIntegration::GetChromiumModelIdForProfile( 65c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) non_default_user_data_dir_.Append(non_default_profile_)); 66c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 67c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 68c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) extension_id_ = L"chromiumexampleappidforunittests"; 69a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16 app_name = 705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::UTF8ToUTF16(web_app::GenerateApplicationNameFromExtensionId( 715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::UTF16ToUTF8(extension_id_))); 72c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) extension_app_id_ = 73c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ShellIntegration::GetAppModelIdForProfile(app_name, 74c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) default_profile_path); 75c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) non_default_profile_extension_app_id_ = 76c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ShellIntegration::GetAppModelIdForProfile( 77c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) app_name, 78c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) default_user_data_dir.Append(non_default_profile_)); 79c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 80c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CreateShortcuts(); 81c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 82c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 83c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Creates a test shortcut corresponding to |shortcut_properties| and resets 84c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // |shortcut_properties| after copying it to an internal structure for later 85c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // verification. 86c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void AddTestShortcutAndResetProperties( 87c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::win::ShortcutProperties* shortcut_properties) { 88c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ShortcutTestObject shortcut_test_object; 89c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::FilePath shortcut_path = 90c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) temp_dir_.path().Append(L"Shortcut " + 91c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::IntToString16(shortcuts_.size()) + 92c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) installer::kLnkExt); 93c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) shortcut_test_object.path = shortcut_path; 94c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) shortcut_test_object.properties = *shortcut_properties; 95c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) shortcuts_.push_back(shortcut_test_object); 96c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(base::win::CreateOrUpdateShortcutLink( 97c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) shortcut_path, *shortcut_properties, 98c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::win::SHORTCUT_CREATE_ALWAYS)); 99c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) shortcut_properties->options = 0U; 100c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 101c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 102c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void CreateShortcuts() { 103c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // A temporary object to pass properties to 104c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // AddTestShortcutAndResetProperties(). 1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::win::ShortcutProperties temp_properties; 1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Shortcut 0 doesn't point to chrome.exe and thus should never be migrated. 108c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) temp_properties.set_target(other_target_); 1092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) temp_properties.set_app_id(L"Dumbo"); 110c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE( 111c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AddTestShortcutAndResetProperties(&temp_properties)); 1122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Shortcut 1 points to chrome.exe and thus should be migrated. 1142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) temp_properties.set_target(chrome_exe_); 1152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) temp_properties.set_app_id(L"Dumbo"); 1162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) temp_properties.set_dual_mode(false); 117c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE( 118c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AddTestShortcutAndResetProperties(&temp_properties)); 1192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Shortcut 2 points to chrome.exe, but already has the right appid and thus 1212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // should only be migrated if dual_mode is desired. 1222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) temp_properties.set_target(chrome_exe_); 1232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) temp_properties.set_app_id(chrome_app_id_); 124c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE( 125c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AddTestShortcutAndResetProperties(&temp_properties)); 1262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 127c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Shortcut 3 is like shortcut 1, but it's appid is a prefix of the expected 1282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // appid instead of being totally different. 129a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16 chrome_app_id_is_prefix(chrome_app_id_); 1302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chrome_app_id_is_prefix.push_back(L'1'); 1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) temp_properties.set_target(chrome_exe_); 1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) temp_properties.set_app_id(chrome_app_id_is_prefix); 133c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE( 134c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AddTestShortcutAndResetProperties(&temp_properties)); 1352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 136c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Shortcut 4 is like shortcut 1, but it's appid is of the same size as the 1372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // expected appid. 138a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16 same_size_as_chrome_app_id(L'1', chrome_app_id_.size()); 1392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) temp_properties.set_target(chrome_exe_); 1402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) temp_properties.set_app_id(same_size_as_chrome_app_id); 141c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE( 142c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AddTestShortcutAndResetProperties(&temp_properties)); 1432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 144c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Shortcut 5 doesn't have an app_id, nor is dual_mode even set; they should 1452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // be set as expected upon migration. 146c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) temp_properties.set_target(chrome_exe_); 147c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE( 148c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AddTestShortcutAndResetProperties(&temp_properties)); 1492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 150c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Shortcut 6 has a non-default profile directory and so should get a non- 151c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // default app id. 152c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) temp_properties.set_target(chrome_exe_); 153c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) temp_properties.set_app_id(L"Dumbo"); 154c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) temp_properties.set_arguments( 155c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) L"--profile-directory=" + non_default_profile_); 156c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE( 157c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AddTestShortcutAndResetProperties(&temp_properties)); 158c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 159c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Shortcut 7 has a non-default user data directory and so should get a non- 160c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // default app id. 161c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) temp_properties.set_target(chrome_exe_); 162c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) temp_properties.set_app_id(L"Dumbo"); 163c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) temp_properties.set_arguments( 164c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) L"--user-data-dir=\"" + non_default_user_data_dir_.value() + L"\""); 165c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE( 166c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AddTestShortcutAndResetProperties(&temp_properties)); 167c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 168c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Shortcut 8 has a non-default user data directory as well as a non-default 169c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // profile directory and so should get a non-default app id. 170c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) temp_properties.set_target(chrome_exe_); 171c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) temp_properties.set_app_id(L"Dumbo"); 172c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) temp_properties.set_arguments( 173c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) L"--user-data-dir=\"" + non_default_user_data_dir_.value() + L"\" " + 174c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) L"--profile-directory=" + non_default_profile_); 175c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE( 176c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AddTestShortcutAndResetProperties(&temp_properties)); 177c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 178c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Shortcut 9 is a shortcut to an app and should get an app id for that app 179c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // rather than the chrome app id. 180c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) temp_properties.set_target(chrome_exe_); 181c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) temp_properties.set_app_id(L"Dumbo"); 182c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) temp_properties.set_arguments( 183c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) L"--app-id=" + extension_id_); 184c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE( 185c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AddTestShortcutAndResetProperties(&temp_properties)); 186c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 187c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Shortcut 10 is a shortcut to an app with a non-default profile and should 188c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // get an app id for that app with a non-default app id rather than the 189c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // chrome app id. 190c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) temp_properties.set_target(chrome_exe_); 191c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) temp_properties.set_app_id(L"Dumbo"); 192c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) temp_properties.set_arguments( 193c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) L"--app-id=" + extension_id_ + 194c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) L" --profile-directory=" + non_default_profile_); 195c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE( 196c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) AddTestShortcutAndResetProperties(&temp_properties)); 1972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::win::ScopedCOMInitializer com_initializer_; 200c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::ScopedTempDir temp_dir_; 2022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 203c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Test shortcuts. 204c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::vector<ShortcutTestObject> shortcuts_; 205c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The path to a fake chrome.exe. 2072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath chrome_exe_; 2082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 209c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // The path to a random target. 210c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::FilePath other_target_; 2112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Chrome's AppUserModelId. 213a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16 chrome_app_id_; 214c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 215c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // A profile that isn't the Default profile. 216a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16 non_default_profile_; 217c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 218c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // A user data dir that isn't the default. 219c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::FilePath non_default_user_data_dir_; 220c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 221c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Chrome's AppUserModelId for the non-default profile. 222a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16 non_default_profile_chrome_app_id_; 223c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 224c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Chrome's AppUserModelId for the non-default user data dir. 225a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16 non_default_user_data_dir_chrome_app_id_; 226c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 227c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Chrome's AppUserModelId for the non-default user data dir and non-default 228c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // profile. 229a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16 non_default_user_data_dir_and_profile_chrome_app_id_; 230c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 231c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // The app launcher's app id. 232a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16 app_list_app_id_; 233c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 234c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // An example extension id of an example app. 235a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16 extension_id_; 236c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 237c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // The app id of the example app for the default profile and user data dir. 238a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16 extension_app_id_; 239c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 240c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // The app id of the example app for the non-default profile. 241a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16 non_default_profile_extension_app_id_; 2422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 2432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace 2452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Test migration when not checking for dual mode. 2472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(ShellIntegrationWinMigrateShortcutTest, DontCheckDualMode) { 2482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (base::win::GetVersion() < base::win::VERSION_WIN7) 2492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 2502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 251c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(9, 2522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ShellIntegration::MigrateShortcutsInPathInternal( 2532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chrome_exe_, temp_dir_.path(), false)); 2542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 255c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Only shortcut 1, 3, 4, 5, 6, 7, 8, 9, and 10 should have been migrated. 256c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) shortcuts_[1].properties.set_app_id(chrome_app_id_); 257c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) shortcuts_[3].properties.set_app_id(chrome_app_id_); 258c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) shortcuts_[4].properties.set_app_id(chrome_app_id_); 259c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) shortcuts_[5].properties.set_app_id(chrome_app_id_); 260c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) shortcuts_[6].properties.set_app_id(non_default_profile_chrome_app_id_); 261c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) shortcuts_[7].properties.set_app_id(non_default_user_data_dir_chrome_app_id_); 262c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) shortcuts_[8].properties.set_app_id( 263c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) non_default_user_data_dir_and_profile_chrome_app_id_); 264c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) shortcuts_[9].properties.set_app_id(extension_app_id_); 265c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) shortcuts_[10].properties.set_app_id(non_default_profile_extension_app_id_); 266c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 267c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) for (size_t i = 0; i < shortcuts_.size(); ++i) { 268c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Dual mode should be false for all of these. 269c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) shortcuts_[i].properties.set_dual_mode(false); 270c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::win::ValidateShortcut(shortcuts_[i].path, shortcuts_[i].properties); 271c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 2722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 273c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Make sure shortcuts are not re-migrated. 274c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(0, 275c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ShellIntegration::MigrateShortcutsInPathInternal( 276c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) chrome_exe_, temp_dir_.path(), false)); 2772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Test migration when also checking for dual mode. 2802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(ShellIntegrationWinMigrateShortcutTest, CheckDualMode) { 2812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (base::win::GetVersion() < base::win::VERSION_WIN7) 2822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 2832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 284c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(10, 2852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ShellIntegration::MigrateShortcutsInPathInternal( 2862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chrome_exe_, temp_dir_.path(), true)); 2872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 288c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Shortcut 1, 3, 4, 5, 6, 7, 8, 9, and 10 should have had both their app_id 289c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // fixed and shortcut 1, 2, 3, 4, and 5 should also have had their dual_mode 2902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // property fixed. 291c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) shortcuts_[1].properties.set_app_id(chrome_app_id_); 292c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) shortcuts_[3].properties.set_app_id(chrome_app_id_); 293c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) shortcuts_[4].properties.set_app_id(chrome_app_id_); 294c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) shortcuts_[5].properties.set_app_id(chrome_app_id_); 295c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) shortcuts_[6].properties.set_app_id(non_default_profile_chrome_app_id_); 296c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) shortcuts_[7].properties.set_app_id(non_default_user_data_dir_chrome_app_id_); 297c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) shortcuts_[8].properties.set_app_id( 298c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) non_default_user_data_dir_and_profile_chrome_app_id_); 299c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) shortcuts_[9].properties.set_app_id(extension_app_id_); 300c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) shortcuts_[10].properties.set_app_id(non_default_profile_extension_app_id_); 301c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 302c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) shortcuts_[1].properties.set_dual_mode(true); 303c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) shortcuts_[2].properties.set_dual_mode(true); 304c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) shortcuts_[3].properties.set_dual_mode(true); 305c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) shortcuts_[4].properties.set_dual_mode(true); 306c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) shortcuts_[5].properties.set_dual_mode(true); 307c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) shortcuts_[6].properties.set_dual_mode(false); 308c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) shortcuts_[7].properties.set_dual_mode(false); 309c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) shortcuts_[8].properties.set_dual_mode(false); 310c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) shortcuts_[9].properties.set_dual_mode(false); 311c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) shortcuts_[10].properties.set_dual_mode(false); 3122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for (size_t i = 0; i < shortcuts_.size(); ++i) 314c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::win::ValidateShortcut(shortcuts_[i].path, shortcuts_[i].properties); 315c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 316c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Make sure shortcuts are not re-migrated. 317c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(0, 318c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ShellIntegration::MigrateShortcutsInPathInternal( 319c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) chrome_exe_, temp_dir_.path(), false)); 3202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 3212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST(ShellIntegrationWinTest, GetAppModelIdForProfileTest) { 323a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::string16 base_app_id( 3242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BrowserDistribution::GetDistribution()->GetBaseAppId()); 3252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Empty profile path should get chrome::kBrowserAppID 3272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath empty_path; 3282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(base_app_id, 3292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ShellIntegration::GetAppModelIdForProfile(base_app_id, empty_path)); 3302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Default profile path should get chrome::kBrowserAppID 3322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath default_user_data_dir; 3332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chrome::GetDefaultUserDataDirectory(&default_user_data_dir); 3342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath default_profile_path = 3352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) default_user_data_dir.AppendASCII(chrome::kInitialProfile); 3362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(base_app_id, 3372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ShellIntegration::GetAppModelIdForProfile(base_app_id, 3382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) default_profile_path)); 3392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Non-default profile path should get chrome::kBrowserAppID joined with 3412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // profile info. 3422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath profile_path(FILE_PATH_LITERAL("root")); 3432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) profile_path = profile_path.Append(FILE_PATH_LITERAL("udd")); 3442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) profile_path = profile_path.Append(FILE_PATH_LITERAL("User Data - Test")); 3452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(base_app_id + L".udd.UserDataTest", 3462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ShellIntegration::GetAppModelIdForProfile(base_app_id, 3472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) profile_path)); 3482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 3492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST(ShellIntegrationWinTest, GetAppListAppModelIdForProfileTest) { 351a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16 base_app_id( 352a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) BrowserDistribution::GetDistribution()->GetBaseAppId()); 3532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base_app_id.append(L"AppList"); 3542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Empty profile path should get chrome::kBrowserAppID + AppList 3562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath empty_path; 3572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(base_app_id, 3582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ShellIntegration::GetAppListAppModelIdForProfile(empty_path)); 3592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Default profile path should get chrome::kBrowserAppID + AppList 3612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath default_user_data_dir; 3622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) chrome::GetDefaultUserDataDirectory(&default_user_data_dir); 3632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath default_profile_path = 3642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) default_user_data_dir.AppendASCII(chrome::kInitialProfile); 3652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(base_app_id, 3662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ShellIntegration::GetAppListAppModelIdForProfile( 3672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) default_profile_path)); 3682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Non-default profile path should get chrome::kBrowserAppID + AppList joined 3702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // with profile info. 3712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath profile_path(FILE_PATH_LITERAL("root")); 3722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) profile_path = profile_path.Append(FILE_PATH_LITERAL("udd")); 3732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) profile_path = profile_path.Append(FILE_PATH_LITERAL("User Data - Test")); 3742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(base_app_id + L".udd.UserDataTest", 3752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ShellIntegration::GetAppListAppModelIdForProfile(profile_path)); 3762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 377