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

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: rebase, move app launcher and chrome app strings into the installer Created 7 years, 7 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 1239 matching lines...) Expand 10 before | Expand all | Expand 10 after
1250 } 1250 }
1251 return success; 1251 return success;
1252 } 1252 }
1253 1253
1254 // Removes folder spsecified by {|location|, |dist|, |level|}. 1254 // Removes folder spsecified by {|location|, |dist|, |level|}.
1255 bool RemoveShortcutFolder(ShellUtil::ShortcutLocation location, 1255 bool RemoveShortcutFolder(ShellUtil::ShortcutLocation location,
1256 BrowserDistribution* dist, 1256 BrowserDistribution* dist,
1257 ShellUtil::ShellChange level) { 1257 ShellUtil::ShellChange level) {
1258 1258
1259 // Explicitly whitelist locations, since accidental calls can be very harmful. 1259 // Explicitly whitelist locations, since accidental calls can be very harmful.
1260 if (location != ShellUtil::SHORTCUT_LOCATION_START_MENU && 1260 if (location != ShellUtil::SHORTCUT_LOCATION_START_MENU_CHROME_DIR &&
1261 location != ShellUtil::SHORTCUT_LOCATION_START_MENU_CHROME_APPS_DIR &&
1261 location != ShellUtil::SHORTCUT_LOCATION_APP_SHORTCUTS) { 1262 location != ShellUtil::SHORTCUT_LOCATION_APP_SHORTCUTS) {
1262 NOTREACHED(); 1263 NOTREACHED();
1263 return false; 1264 return false;
1264 } 1265 }
1265 1266
1266 base::FilePath shortcut_folder; 1267 base::FilePath shortcut_folder;
1267 if (!ShellUtil::GetShortcutPath(location, dist, level, &shortcut_folder)) { 1268 if (!ShellUtil::GetShortcutPath(location, dist, level, &shortcut_folder)) {
1268 LOG(WARNING) << "Cannot find path at location " << location; 1269 LOG(WARNING) << "Cannot find path at location " << location;
1269 return false; 1270 return false;
1270 } 1271 }
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
1339 CONFIRM_SHELL_REGISTRATION_IN_HKLM); 1340 CONFIRM_SHELL_REGISTRATION_IN_HKLM);
1340 } 1341 }
1341 1342
1342 bool ShellUtil::ShortcutLocationIsSupported( 1343 bool ShellUtil::ShortcutLocationIsSupported(
1343 ShellUtil::ShortcutLocation location) { 1344 ShellUtil::ShortcutLocation location) {
1344 switch (location) { 1345 switch (location) {
1345 case SHORTCUT_LOCATION_DESKTOP: 1346 case SHORTCUT_LOCATION_DESKTOP:
1346 return true; 1347 return true;
1347 case SHORTCUT_LOCATION_QUICK_LAUNCH: 1348 case SHORTCUT_LOCATION_QUICK_LAUNCH:
1348 return true; 1349 return true;
1349 case SHORTCUT_LOCATION_START_MENU: 1350 case SHORTCUT_LOCATION_START_MENU_ROOT:
1351 case SHORTCUT_LOCATION_START_MENU_CHROME_DIR:
1352 case SHORTCUT_LOCATION_START_MENU_CHROME_APPS_DIR:
1350 return true; 1353 return true;
1351 case SHORTCUT_LOCATION_TASKBAR_PINS: 1354 case SHORTCUT_LOCATION_TASKBAR_PINS:
1352 return base::win::GetVersion() >= base::win::VERSION_WIN7; 1355 return base::win::GetVersion() >= base::win::VERSION_WIN7;
1353 case SHORTCUT_LOCATION_APP_SHORTCUTS: 1356 case SHORTCUT_LOCATION_APP_SHORTCUTS:
1354 return base::win::GetVersion() >= base::win::VERSION_WIN8; 1357 return base::win::GetVersion() >= base::win::VERSION_WIN8;
1355 default: 1358 default:
1356 NOTREACHED(); 1359 NOTREACHED();
1357 return false; 1360 return false;
1358 } 1361 }
1359 } 1362 }
1360 1363
1361 bool ShellUtil::GetShortcutPath(ShellUtil::ShortcutLocation location, 1364 bool ShellUtil::GetShortcutPath(ShellUtil::ShortcutLocation location,
1362 BrowserDistribution* dist, 1365 BrowserDistribution* dist,
1363 ShellChange level, 1366 ShellChange level,
1364 base::FilePath* path) { 1367 base::FilePath* path) {
1365 DCHECK(path); 1368 DCHECK(path);
1366 int dir_key = -1; 1369 int dir_key = -1;
1367 bool add_folder_for_dist = false;
1368 switch (location) { 1370 switch (location) {
1369 case SHORTCUT_LOCATION_DESKTOP: 1371 case SHORTCUT_LOCATION_DESKTOP:
1370 dir_key = (level == CURRENT_USER) ? base::DIR_USER_DESKTOP : 1372 dir_key = (level == CURRENT_USER) ? base::DIR_USER_DESKTOP :
1371 base::DIR_COMMON_DESKTOP; 1373 base::DIR_COMMON_DESKTOP;
1372 break; 1374 break;
1373 case SHORTCUT_LOCATION_QUICK_LAUNCH: 1375 case SHORTCUT_LOCATION_QUICK_LAUNCH:
1374 dir_key = (level == CURRENT_USER) ? base::DIR_USER_QUICK_LAUNCH : 1376 dir_key = (level == CURRENT_USER) ? base::DIR_USER_QUICK_LAUNCH :
1375 base::DIR_DEFAULT_USER_QUICK_LAUNCH; 1377 base::DIR_DEFAULT_USER_QUICK_LAUNCH;
1376 break; 1378 break;
1377 case SHORTCUT_LOCATION_START_MENU: 1379 case SHORTCUT_LOCATION_START_MENU_ROOT:
1380 case SHORTCUT_LOCATION_START_MENU_CHROME_DIR:
1381 case SHORTCUT_LOCATION_START_MENU_CHROME_APPS_DIR:
1378 dir_key = (level == CURRENT_USER) ? base::DIR_START_MENU : 1382 dir_key = (level == CURRENT_USER) ? base::DIR_START_MENU :
1379 base::DIR_COMMON_START_MENU; 1383 base::DIR_COMMON_START_MENU;
1380 add_folder_for_dist = true;
1381 break; 1384 break;
1382 case SHORTCUT_LOCATION_TASKBAR_PINS: 1385 case SHORTCUT_LOCATION_TASKBAR_PINS:
1383 dir_key = base::DIR_TASKBAR_PINS; 1386 dir_key = base::DIR_TASKBAR_PINS;
1384 break; 1387 break;
1385 case SHORTCUT_LOCATION_APP_SHORTCUTS: 1388 case SHORTCUT_LOCATION_APP_SHORTCUTS:
1386 // TODO(huangs): Move GetAppShortcutsFolder() logic into base_paths_win. 1389 // TODO(huangs): Move GetAppShortcutsFolder() logic into base_paths_win.
1387 return GetAppShortcutsFolder(dist, level, path); 1390 return GetAppShortcutsFolder(dist, level, path);
1388 1391
1389 default: 1392 default:
1390 NOTREACHED(); 1393 NOTREACHED();
1391 return false; 1394 return false;
1392 } 1395 }
1393
gab 2013/05/15 21:26:38 nit: I'd leave this empty line to separate from th
calamity 2013/08/27 07:59:35 Done.
1394 if (!PathService::Get(dir_key, path) || path->empty()) { 1396 if (!PathService::Get(dir_key, path) || path->empty()) {
1395 NOTREACHED() << dir_key; 1397 NOTREACHED() << dir_key;
1396 return false; 1398 return false;
1397 } 1399 }
1398 1400
1399 if (add_folder_for_dist) 1401 // Append application menu subdirectory.
1400 *path = path->Append(dist->GetAppShortCutName()); 1402 string16 folder_to_append;
1403 if (location == SHORTCUT_LOCATION_START_MENU_CHROME_DIR) {
Matt Giuca 2013/05/15 05:19:45 Can you do this in the switch instead of having th
gab 2013/05/15 21:26:38 Should be easier with single GetStartMenuSubfolder
calamity 2013/08/27 07:59:35 Done.
1404 folder_to_append = dist->GetAppShortCutName();
1405 } else if (location == SHORTCUT_LOCATION_START_MENU_CHROME_APPS_DIR) {
1406 folder_to_append = dist->GetAppShortcutsSubdirName();
1407 }
1408 if (!folder_to_append.empty())
1409 *path = path->Append(folder_to_append);
1401 1410
1402 return true; 1411 return true;
1403 } 1412 }
1404 1413
1405 bool ShellUtil::CreateOrUpdateShortcut( 1414 bool ShellUtil::CreateOrUpdateShortcut(
1406 ShellUtil::ShortcutLocation location, 1415 ShellUtil::ShortcutLocation location,
1407 BrowserDistribution* dist, 1416 BrowserDistribution* dist,
1408 const ShellUtil::ShortcutProperties& properties, 1417 const ShellUtil::ShortcutProperties& properties,
1409 ShellUtil::ShortcutOperation operation) { 1418 ShellUtil::ShortcutOperation operation) {
1410 // Explicitly whitelist locations to which this is applicable. 1419 // Explicitly whitelist locations to which this is applicable.
1411 if (location != SHORTCUT_LOCATION_DESKTOP && 1420 if (location != SHORTCUT_LOCATION_DESKTOP &&
1412 location != SHORTCUT_LOCATION_QUICK_LAUNCH && 1421 location != SHORTCUT_LOCATION_QUICK_LAUNCH &&
1413 location != SHORTCUT_LOCATION_START_MENU) { 1422 location != SHORTCUT_LOCATION_START_MENU_ROOT &&
1423 location != SHORTCUT_LOCATION_START_MENU_CHROME_DIR &&
1424 location != SHORTCUT_LOCATION_START_MENU_CHROME_APPS_DIR) {
1414 NOTREACHED(); 1425 NOTREACHED();
1415 return false; 1426 return false;
1416 } 1427 }
1417 1428
1418 DCHECK(dist); 1429 DCHECK(dist);
1419 // |pin_to_taskbar| is only acknowledged when first creating the shortcut. 1430 // |pin_to_taskbar| is only acknowledged when first creating the shortcut.
1420 DCHECK(!properties.pin_to_taskbar || 1431 DCHECK(!properties.pin_to_taskbar ||
1421 operation == SHELL_SHORTCUT_CREATE_ALWAYS || 1432 operation == SHELL_SHORTCUT_CREATE_ALWAYS ||
1422 operation == SHELL_SHORTCUT_CREATE_IF_NO_SYSTEM_LEVEL); 1433 operation == SHELL_SHORTCUT_CREATE_IF_NO_SYSTEM_LEVEL);
1423 1434
(...skipping 559 matching lines...) Expand 10 before | Expand all | Expand 10 after
1983 1994
1984 // static 1995 // static
1985 bool ShellUtil::RemoveShortcuts(ShellUtil::ShortcutLocation location, 1996 bool ShellUtil::RemoveShortcuts(ShellUtil::ShortcutLocation location,
1986 BrowserDistribution* dist, 1997 BrowserDistribution* dist,
1987 ShellChange level, 1998 ShellChange level,
1988 const base::FilePath& target_exe) { 1999 const base::FilePath& target_exe) {
1989 if (!ShellUtil::ShortcutLocationIsSupported(location)) 2000 if (!ShellUtil::ShortcutLocationIsSupported(location))
1990 return true; // Vacuous success. 2001 return true; // Vacuous success.
1991 2002
1992 switch (location) { 2003 switch (location) {
1993 case SHORTCUT_LOCATION_START_MENU: // Falls through. 2004 case SHORTCUT_LOCATION_START_MENU_CHROME_DIR: // Falls through.
2005 case SHORTCUT_LOCATION_START_MENU_CHROME_APPS_DIR:
1994 case SHORTCUT_LOCATION_APP_SHORTCUTS: 2006 case SHORTCUT_LOCATION_APP_SHORTCUTS:
1995 return RemoveShortcutFolder(location, dist, level); 2007 return RemoveShortcutFolder(location, dist, level);
1996 2008
1997 case SHORTCUT_LOCATION_TASKBAR_PINS: 2009 case SHORTCUT_LOCATION_TASKBAR_PINS:
1998 return BatchShortcutAction(base::Bind(&ShortcutOpUnpin), location, dist, 2010 return BatchShortcutAction(base::Bind(&ShortcutOpUnpin), location, dist,
1999 level, target_exe); 2011 level, target_exe);
2000 2012
2001 default: 2013 default:
2002 return BatchShortcutAction(base::Bind(&ShortcutOpDelete), location, dist, 2014 return BatchShortcutAction(base::Bind(&ShortcutOpDelete), location, dist,
2003 level, target_exe); 2015 level, target_exe);
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
2080 // are any left...). 2092 // are any left...).
2081 if (free_bits >= 8 && next_byte_index < size) { 2093 if (free_bits >= 8 && next_byte_index < size) {
2082 free_bits -= 8; 2094 free_bits -= 8;
2083 bit_stream += bytes[next_byte_index++] << free_bits; 2095 bit_stream += bytes[next_byte_index++] << free_bits;
2084 } 2096 }
2085 } 2097 }
2086 2098
2087 DCHECK_EQ(ret.length(), encoded_length); 2099 DCHECK_EQ(ret.length(), encoded_length);
2088 return ret; 2100 return ret;
2089 } 2101 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698