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 // This file defines functions that integrate Chrome in Windows shell. These | 5 // This file defines functions that integrate Chrome in Windows shell. These |
| 6 // functions can be used by Chrome as well as Chrome installer. All of the | 6 // functions can be used by Chrome as well as Chrome installer. All of the |
| 7 // work is done by the local functions defined in anonymous namespace in | 7 // work is done by the local functions defined in anonymous namespace in |
| 8 // this class. | 8 // this class. |
| 9 | 9 |
| 10 #include "chrome/installer/util/shell_util.h" | 10 #include "chrome/installer/util/shell_util.h" |
| (...skipping 1253 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1264 operation == SHELL_SHORTCUT_CREATE_IF_NO_SYSTEM_LEVEL); | 1264 operation == SHELL_SHORTCUT_CREATE_IF_NO_SYSTEM_LEVEL); |
| 1265 | 1265 |
| 1266 FilePath user_shortcut_path; | 1266 FilePath user_shortcut_path; |
| 1267 FilePath system_shortcut_path; | 1267 FilePath system_shortcut_path; |
| 1268 if (!GetShortcutPath(location, dist, CURRENT_USER, &user_shortcut_path) || | 1268 if (!GetShortcutPath(location, dist, CURRENT_USER, &user_shortcut_path) || |
| 1269 !GetShortcutPath(location, dist, SYSTEM_LEVEL, &system_shortcut_path) || | 1269 !GetShortcutPath(location, dist, SYSTEM_LEVEL, &system_shortcut_path) || |
| 1270 user_shortcut_path.empty() || | 1270 user_shortcut_path.empty() || |
| 1271 system_shortcut_path.empty()) { | 1271 system_shortcut_path.empty()) { |
| 1272 NOTREACHED(); | 1272 NOTREACHED(); |
| 1273 return false; | 1273 return false; |
| 1274 } | 1274 } |
|
robertshield
2012/12/10 20:58:28
clean up nit: we build and populate both user_shor
gab
2012/12/10 21:50:32
While it's true that we do not need the user-level
| |
| 1275 | 1275 |
| 1276 string16 shortcut_name(ExtractShortcutNameFromProperties(dist, properties)); | 1276 string16 shortcut_name(ExtractShortcutNameFromProperties(dist, properties)); |
| 1277 user_shortcut_path = user_shortcut_path.Append(shortcut_name); | 1277 user_shortcut_path = user_shortcut_path.Append(shortcut_name); |
| 1278 system_shortcut_path = system_shortcut_path.Append(shortcut_name); | 1278 system_shortcut_path = system_shortcut_path.Append(shortcut_name); |
| 1279 | 1279 |
| 1280 FilePath *chosen_path; | 1280 FilePath *chosen_path; |
| 1281 bool should_install_shortcut = true; | |
| 1281 if (properties.level == SYSTEM_LEVEL) { | 1282 if (properties.level == SYSTEM_LEVEL) { |
| 1282 // Install the system-level shortcut if requested. | 1283 // Install the system-level shortcut if requested. |
| 1283 chosen_path = &system_shortcut_path; | 1284 chosen_path = &system_shortcut_path; |
| 1284 } else if (operation != SHELL_SHORTCUT_CREATE_IF_NO_SYSTEM_LEVEL || | 1285 } else if (operation != SHELL_SHORTCUT_CREATE_IF_NO_SYSTEM_LEVEL || |
| 1285 !file_util::PathExists(system_shortcut_path)){ | 1286 !file_util::PathExists(system_shortcut_path)){ |
| 1286 // Otherwise install the user-level shortcut, unless the system-level | 1287 // Otherwise install the user-level shortcut, unless the system-level |
| 1287 // variant of this shortcut is present on the machine and |operation| states | 1288 // variant of this shortcut is present on the machine and |operation| states |
| 1288 // not to create a user-level shortcut in that case. | 1289 // not to create a user-level shortcut in that case. |
| 1289 chosen_path = &user_shortcut_path; | 1290 chosen_path = &user_shortcut_path; |
| 1290 } else { | 1291 } else { |
| 1291 // Do not install anything if we are told to install a user-level shortcut, | 1292 // Do not install any shortcut if we are told to install a user-level |
| 1292 // but the system-level variant of that shortcut is present. | 1293 // shortcut, but the system-level variant of that shortcut is present. |
| 1293 chosen_path = &FilePath(); | 1294 // Other actions (e.g., pinning) can still happen with respect to the |
| 1295 // existing system-level shortcut however. | |
| 1296 chosen_path = &system_shortcut_path; | |
| 1297 should_install_shortcut = false; | |
| 1294 } | 1298 } |
| 1295 | 1299 |
| 1296 // No shortcut needs to be created/updated. | 1300 if (chosen_path == NULL || chosen_path->empty()) { |
| 1297 if (chosen_path->empty()) | |
| 1298 return true; | |
| 1299 | |
| 1300 base::win::ShortcutOperation shortcut_operation = | |
| 1301 TranslateShortcutOperation(operation); | |
| 1302 // Make sure the parent directories exist when creating the shortcut. | |
| 1303 if (shortcut_operation == base::win::SHORTCUT_CREATE_ALWAYS && | |
| 1304 !file_util::CreateDirectory(chosen_path->DirName())) { | |
| 1305 NOTREACHED(); | 1301 NOTREACHED(); |
| 1306 return false; | 1302 return false; |
| 1307 } | 1303 } |
| 1308 | 1304 |
| 1309 base::win::ShortcutProperties shortcut_properties( | 1305 base::win::ShortcutOperation shortcut_operation = |
| 1310 TranslateShortcutProperties(properties)); | 1306 TranslateShortcutOperation(operation); |
| 1311 bool ret = base::win::CreateOrUpdateShortcutLink( | 1307 bool ret = true; |
| 1312 *chosen_path, shortcut_properties, shortcut_operation); | 1308 if (should_install_shortcut) { |
| 1309 // Make sure the parent directories exist when creating the shortcut. | |
| 1310 if (shortcut_operation == base::win::SHORTCUT_CREATE_ALWAYS && | |
| 1311 !file_util::CreateDirectory(chosen_path->DirName())) { | |
| 1312 NOTREACHED(); | |
| 1313 return false; | |
| 1314 } | |
| 1315 | |
| 1316 base::win::ShortcutProperties shortcut_properties( | |
| 1317 TranslateShortcutProperties(properties)); | |
| 1318 ret = base::win::CreateOrUpdateShortcutLink( | |
| 1319 *chosen_path, shortcut_properties, shortcut_operation); | |
| 1320 } | |
| 1313 | 1321 |
| 1314 if (ret && shortcut_operation == base::win::SHORTCUT_CREATE_ALWAYS && | 1322 if (ret && shortcut_operation == base::win::SHORTCUT_CREATE_ALWAYS && |
| 1315 properties.pin_to_taskbar && | 1323 properties.pin_to_taskbar && |
| 1316 base::win::GetVersion() >= base::win::VERSION_WIN7) { | 1324 base::win::GetVersion() >= base::win::VERSION_WIN7) { |
| 1317 ret = base::win::TaskbarPinShortcutLink(chosen_path->value().c_str()); | 1325 ret = base::win::TaskbarPinShortcutLink(chosen_path->value().c_str()); |
| 1318 if (!ret) { | 1326 if (!ret) { |
| 1319 LOG(ERROR) << "The shorcut at " << chosen_path->value() | 1327 LOG(ERROR) << "Failed to pin " << chosen_path->value(); |
| 1320 << " was created, but the taskbar pin failed."; | |
| 1321 } | 1328 } |
| 1322 } | 1329 } |
| 1323 | 1330 |
| 1324 return ret; | 1331 return ret; |
| 1325 } | 1332 } |
| 1326 | 1333 |
| 1327 string16 ShellUtil::FormatIconLocation(const string16& icon_path, | 1334 string16 ShellUtil::FormatIconLocation(const string16& icon_path, |
| 1328 int icon_index) { | 1335 int icon_index) { |
| 1329 string16 icon_string(icon_path); | 1336 string16 icon_string(icon_path); |
| 1330 icon_string.append(L","); | 1337 icon_string.append(L","); |
| (...skipping 627 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1958 // are any left...). | 1965 // are any left...). |
| 1959 if (free_bits >= 8 && next_byte_index < size) { | 1966 if (free_bits >= 8 && next_byte_index < size) { |
| 1960 free_bits -= 8; | 1967 free_bits -= 8; |
| 1961 bit_stream += bytes[next_byte_index++] << free_bits; | 1968 bit_stream += bytes[next_byte_index++] << free_bits; |
| 1962 } | 1969 } |
| 1963 } | 1970 } |
| 1964 | 1971 |
| 1965 DCHECK_EQ(ret.length(), encoded_length); | 1972 DCHECK_EQ(ret.length(), encoded_length); |
| 1966 return ret; | 1973 return ret; |
| 1967 } | 1974 } |
| OLD | NEW |