Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(164)

Side by Side Diff: chrome/installer/util/shell_util.cc

Issue 13864015: Move app launcher and chrome apps shortcut strings into the installer (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@migrate_app_id_fix
Patch Set: make necessary linux changes Created 7 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 1300 matching lines...) Expand 10 before | Expand all | Expand 10 after
1311 } 1311 }
1312 1312
1313 1313
1314 // If the folder specified by {|location|, |dist|, |level|} is empty, remove it. 1314 // If the folder specified by {|location|, |dist|, |level|} is empty, remove it.
1315 // Otherwise do nothing. Returns true on success, including the vacuous case 1315 // Otherwise do nothing. Returns true on success, including the vacuous case
1316 // where no deletion occurred because directory is non-empty. 1316 // where no deletion occurred because directory is non-empty.
1317 bool RemoveShortcutFolderIfEmpty(ShellUtil::ShortcutLocation location, 1317 bool RemoveShortcutFolderIfEmpty(ShellUtil::ShortcutLocation location,
1318 BrowserDistribution* dist, 1318 BrowserDistribution* dist,
1319 ShellUtil::ShellChange level) { 1319 ShellUtil::ShellChange level) {
1320 // Explicitly whitelist locations, since accidental calls can be very harmful. 1320 // Explicitly whitelist locations, since accidental calls can be very harmful.
1321 if (location != ShellUtil::SHORTCUT_LOCATION_START_MENU && 1321 if (location != ShellUtil::SHORTCUT_LOCATION_START_MENU_CHROME_DIR &&
1322 location != ShellUtil::SHORTCUT_LOCATION_START_MENU_CHROME_APPS_DIR &&
1322 location != ShellUtil::SHORTCUT_LOCATION_APP_SHORTCUTS) { 1323 location != ShellUtil::SHORTCUT_LOCATION_APP_SHORTCUTS) {
1323 NOTREACHED(); 1324 NOTREACHED();
1324 return false; 1325 return false;
1325 } 1326 }
1326 1327
1327 base::FilePath shortcut_folder; 1328 base::FilePath shortcut_folder;
1328 if (!ShellUtil::GetShortcutPath(location, dist, level, &shortcut_folder)) { 1329 if (!ShellUtil::GetShortcutPath(location, dist, level, &shortcut_folder)) {
1329 LOG(WARNING) << "Cannot find path at location " << location; 1330 LOG(WARNING) << "Cannot find path at location " << location;
1330 return false; 1331 return false;
1331 } 1332 }
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
1382 bool ShellUtil::QuickIsChromeRegisteredInHKLM(BrowserDistribution* dist, 1383 bool ShellUtil::QuickIsChromeRegisteredInHKLM(BrowserDistribution* dist,
1383 const string16& chrome_exe, 1384 const string16& chrome_exe,
1384 const string16& suffix) { 1385 const string16& suffix) {
1385 return QuickIsChromeRegistered(dist, chrome_exe, suffix, 1386 return QuickIsChromeRegistered(dist, chrome_exe, suffix,
1386 CONFIRM_SHELL_REGISTRATION_IN_HKLM); 1387 CONFIRM_SHELL_REGISTRATION_IN_HKLM);
1387 } 1388 }
1388 1389
1389 bool ShellUtil::ShortcutLocationIsSupported( 1390 bool ShellUtil::ShortcutLocationIsSupported(
1390 ShellUtil::ShortcutLocation location) { 1391 ShellUtil::ShortcutLocation location) {
1391 switch (location) { 1392 switch (location) {
1392 case SHORTCUT_LOCATION_DESKTOP: 1393 case SHORTCUT_LOCATION_DESKTOP: // Falls through.
1393 return true; 1394 case SHORTCUT_LOCATION_QUICK_LAUNCH: // Falls through.
1394 case SHORTCUT_LOCATION_QUICK_LAUNCH: 1395 case SHORTCUT_LOCATION_START_MENU_ROOT: // Falls through.
1395 return true; 1396 case SHORTCUT_LOCATION_START_MENU_CHROME_DIR: // Falls through.
1396 case SHORTCUT_LOCATION_START_MENU: 1397 case SHORTCUT_LOCATION_START_MENU_CHROME_APPS_DIR:
1397 return true; 1398 return true;
1398 case SHORTCUT_LOCATION_TASKBAR_PINS: 1399 case SHORTCUT_LOCATION_TASKBAR_PINS:
1399 return base::win::GetVersion() >= base::win::VERSION_WIN7; 1400 return base::win::GetVersion() >= base::win::VERSION_WIN7;
1400 case SHORTCUT_LOCATION_APP_SHORTCUTS: 1401 case SHORTCUT_LOCATION_APP_SHORTCUTS:
1401 return base::win::GetVersion() >= base::win::VERSION_WIN8; 1402 return base::win::GetVersion() >= base::win::VERSION_WIN8;
1402 default: 1403 default:
1403 NOTREACHED(); 1404 NOTREACHED();
1404 return false; 1405 return false;
1405 } 1406 }
1406 } 1407 }
1407 1408
1408 bool ShellUtil::GetShortcutPath(ShellUtil::ShortcutLocation location, 1409 bool ShellUtil::GetShortcutPath(ShellUtil::ShortcutLocation location,
1409 BrowserDistribution* dist, 1410 BrowserDistribution* dist,
1410 ShellChange level, 1411 ShellChange level,
1411 base::FilePath* path) { 1412 base::FilePath* path) {
1412 DCHECK(path); 1413 DCHECK(path);
1413 int dir_key = -1; 1414 int dir_key = -1;
1414 bool add_folder_for_dist = false; 1415 base::string16 folder_to_append;
1415 switch (location) { 1416 switch (location) {
1416 case SHORTCUT_LOCATION_DESKTOP: 1417 case SHORTCUT_LOCATION_DESKTOP:
1417 dir_key = (level == CURRENT_USER) ? base::DIR_USER_DESKTOP : 1418 dir_key = (level == CURRENT_USER) ? base::DIR_USER_DESKTOP :
1418 base::DIR_COMMON_DESKTOP; 1419 base::DIR_COMMON_DESKTOP;
1419 break; 1420 break;
1420 case SHORTCUT_LOCATION_QUICK_LAUNCH: 1421 case SHORTCUT_LOCATION_QUICK_LAUNCH:
1421 dir_key = (level == CURRENT_USER) ? base::DIR_USER_QUICK_LAUNCH : 1422 dir_key = (level == CURRENT_USER) ? base::DIR_USER_QUICK_LAUNCH :
1422 base::DIR_DEFAULT_USER_QUICK_LAUNCH; 1423 base::DIR_DEFAULT_USER_QUICK_LAUNCH;
1423 break; 1424 break;
1424 case SHORTCUT_LOCATION_START_MENU: 1425 case SHORTCUT_LOCATION_START_MENU_ROOT:
1425 dir_key = (level == CURRENT_USER) ? base::DIR_START_MENU : 1426 dir_key = (level == CURRENT_USER) ? base::DIR_START_MENU :
1426 base::DIR_COMMON_START_MENU; 1427 base::DIR_COMMON_START_MENU;
1427 add_folder_for_dist = true; 1428 break;
1429 case SHORTCUT_LOCATION_START_MENU_CHROME_DIR:
1430 dir_key = (level == CURRENT_USER) ? base::DIR_START_MENU :
1431 base::DIR_COMMON_START_MENU;
1432 folder_to_append = dist->GetStartMenuShortcutSubfolder(
1433 BrowserDistribution::SUBFOLDER_CHROME);
1434 break;
1435 case SHORTCUT_LOCATION_START_MENU_CHROME_APPS_DIR:
1436 dir_key = (level == CURRENT_USER) ? base::DIR_START_MENU :
1437 base::DIR_COMMON_START_MENU;
1438 folder_to_append = dist->GetStartMenuShortcutSubfolder(
1439 BrowserDistribution::SUBFOLDER_APPS);
1428 break; 1440 break;
1429 case SHORTCUT_LOCATION_TASKBAR_PINS: 1441 case SHORTCUT_LOCATION_TASKBAR_PINS:
1430 dir_key = base::DIR_TASKBAR_PINS; 1442 dir_key = base::DIR_TASKBAR_PINS;
1431 break; 1443 break;
1432 case SHORTCUT_LOCATION_APP_SHORTCUTS: 1444 case SHORTCUT_LOCATION_APP_SHORTCUTS:
1433 // TODO(huangs): Move GetAppShortcutsFolder() logic into base_paths_win. 1445 // TODO(huangs): Move GetAppShortcutsFolder() logic into base_paths_win.
1434 return GetAppShortcutsFolder(dist, level, path); 1446 return GetAppShortcutsFolder(dist, level, path);
1435 1447
1436 default: 1448 default:
1437 NOTREACHED(); 1449 NOTREACHED();
1438 return false; 1450 return false;
1439 } 1451 }
1440 1452
1441 if (!PathService::Get(dir_key, path) || path->empty()) { 1453 if (!PathService::Get(dir_key, path) || path->empty()) {
1442 NOTREACHED() << dir_key; 1454 NOTREACHED() << dir_key;
1443 return false; 1455 return false;
1444 } 1456 }
1445 1457
1446 if (add_folder_for_dist) { 1458 if (!folder_to_append.empty())
1447 *path = path->Append(dist->GetStartMenuShortcutSubfolder( 1459 *path = path->Append(folder_to_append);
1448 BrowserDistribution::SUBFOLDER_CHROME));
1449 }
1450 1460
1451 return true; 1461 return true;
1452 } 1462 }
1453 1463
1454 bool ShellUtil::CreateOrUpdateShortcut( 1464 bool ShellUtil::CreateOrUpdateShortcut(
1455 ShellUtil::ShortcutLocation location, 1465 ShellUtil::ShortcutLocation location,
1456 BrowserDistribution* dist, 1466 BrowserDistribution* dist,
1457 const ShellUtil::ShortcutProperties& properties, 1467 const ShellUtil::ShortcutProperties& properties,
1458 ShellUtil::ShortcutOperation operation) { 1468 ShellUtil::ShortcutOperation operation) {
1459 // Explicitly whitelist locations to which this is applicable. 1469 // Explicitly whitelist locations to which this is applicable.
1460 if (location != SHORTCUT_LOCATION_DESKTOP && 1470 if (location != SHORTCUT_LOCATION_DESKTOP &&
1461 location != SHORTCUT_LOCATION_QUICK_LAUNCH && 1471 location != SHORTCUT_LOCATION_QUICK_LAUNCH &&
1462 location != SHORTCUT_LOCATION_START_MENU) { 1472 location != SHORTCUT_LOCATION_START_MENU_ROOT &&
1473 location != SHORTCUT_LOCATION_START_MENU_CHROME_DIR &&
1474 location != SHORTCUT_LOCATION_START_MENU_CHROME_APPS_DIR) {
1463 NOTREACHED(); 1475 NOTREACHED();
1464 return false; 1476 return false;
1465 } 1477 }
1466 1478
1467 DCHECK(dist); 1479 DCHECK(dist);
1468 // |pin_to_taskbar| is only acknowledged when first creating the shortcut. 1480 // |pin_to_taskbar| is only acknowledged when first creating the shortcut.
1469 DCHECK(!properties.pin_to_taskbar || 1481 DCHECK(!properties.pin_to_taskbar ||
1470 operation == SHELL_SHORTCUT_CREATE_ALWAYS || 1482 operation == SHELL_SHORTCUT_CREATE_ALWAYS ||
1471 operation == SHELL_SHORTCUT_CREATE_IF_NO_SYSTEM_LEVEL); 1483 operation == SHELL_SHORTCUT_CREATE_IF_NO_SYSTEM_LEVEL);
1472 1484
(...skipping 567 matching lines...) Expand 10 before | Expand all | Expand 10 after
2040 2052
2041 FilterTargetEq shortcut_filter(target_exe, false); 2053 FilterTargetEq shortcut_filter(target_exe, false);
2042 // Main operation to apply to each shortcut in the directory specified. 2054 // Main operation to apply to each shortcut in the directory specified.
2043 ShortcutOperationCallback shortcut_operation( 2055 ShortcutOperationCallback shortcut_operation(
2044 location == SHORTCUT_LOCATION_TASKBAR_PINS ? 2056 location == SHORTCUT_LOCATION_TASKBAR_PINS ?
2045 base::Bind(&ShortcutOpUnpin) : base::Bind(&ShortcutOpDelete)); 2057 base::Bind(&ShortcutOpUnpin) : base::Bind(&ShortcutOpDelete));
2046 bool success = BatchShortcutAction(shortcut_filter.AsShortcutFilterCallback(), 2058 bool success = BatchShortcutAction(shortcut_filter.AsShortcutFilterCallback(),
2047 shortcut_operation, location, dist, level); 2059 shortcut_operation, location, dist, level);
2048 // Remove chrome-specific shortcut folders if they are now empty. 2060 // Remove chrome-specific shortcut folders if they are now empty.
2049 if (success && 2061 if (success &&
2050 (location == SHORTCUT_LOCATION_START_MENU || 2062 (location == SHORTCUT_LOCATION_START_MENU_CHROME_DIR ||
2063 location == SHORTCUT_LOCATION_START_MENU_CHROME_APPS_DIR ||
2051 location == SHORTCUT_LOCATION_APP_SHORTCUTS)) { 2064 location == SHORTCUT_LOCATION_APP_SHORTCUTS)) {
2052 success = RemoveShortcutFolderIfEmpty(location, dist, level); 2065 success = RemoveShortcutFolderIfEmpty(location, dist, level);
2053 } 2066 }
2054 return success; 2067 return success;
2055 } 2068 }
2056 2069
2057 // static 2070 // static
2058 bool ShellUtil::UpdateShortcutsWithArgs( 2071 bool ShellUtil::UpdateShortcutsWithArgs(
2059 ShellUtil::ShortcutLocation location, 2072 ShellUtil::ShortcutLocation location,
2060 BrowserDistribution* dist, 2073 BrowserDistribution* dist,
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
2131 // are any left...). 2144 // are any left...).
2132 if (free_bits >= 8 && next_byte_index < size) { 2145 if (free_bits >= 8 && next_byte_index < size) {
2133 free_bits -= 8; 2146 free_bits -= 8;
2134 bit_stream += bytes[next_byte_index++] << free_bits; 2147 bit_stream += bytes[next_byte_index++] << free_bits;
2135 } 2148 }
2136 } 2149 }
2137 2150
2138 DCHECK_EQ(ret.length(), encoded_length); 2151 DCHECK_EQ(ret.length(), encoded_length);
2139 return ret; 2152 return ret;
2140 } 2153 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698