| 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 declares methods that are useful for integrating Chrome in | 5 // This file declares methods that are useful for integrating Chrome in |
| 6 // Windows shell. These methods are all static and currently part of | 6 // Windows shell. These methods are all static and currently part of |
| 7 // ShellUtil class. | 7 // ShellUtil class. |
| 8 | 8 |
| 9 #ifndef CHROME_INSTALLER_UTIL_SHELL_UTIL_H_ | 9 #ifndef CHROME_INSTALLER_UTIL_SHELL_UTIL_H_ |
| 10 #define CHROME_INSTALLER_UTIL_SHELL_UTIL_H_ | 10 #define CHROME_INSTALLER_UTIL_SHELL_UTIL_H_ |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 47 IS_DEFAULT, | 47 IS_DEFAULT, |
| 48 }; | 48 }; |
| 49 | 49 |
| 50 // Typical shortcut directories. Resolved in GetShortcutPath(). | 50 // Typical shortcut directories. Resolved in GetShortcutPath(). |
| 51 // Also used in ShortcutLocationIsSupported(). | 51 // Also used in ShortcutLocationIsSupported(). |
| 52 enum ShortcutLocation { | 52 enum ShortcutLocation { |
| 53 SHORTCUT_LOCATION_FIRST = 0, | 53 SHORTCUT_LOCATION_FIRST = 0, |
| 54 SHORTCUT_LOCATION_DESKTOP = SHORTCUT_LOCATION_FIRST, | 54 SHORTCUT_LOCATION_DESKTOP = SHORTCUT_LOCATION_FIRST, |
| 55 SHORTCUT_LOCATION_QUICK_LAUNCH, | 55 SHORTCUT_LOCATION_QUICK_LAUNCH, |
| 56 SHORTCUT_LOCATION_START_MENU_ROOT, | 56 SHORTCUT_LOCATION_START_MENU_ROOT, |
| 57 SHORTCUT_LOCATION_START_MENU_CHROME_DIR_DEPRECATED, // now placed in root | 57 SHORTCUT_LOCATION_START_MENU_CHROME_DIR, |
| 58 SHORTCUT_LOCATION_START_MENU_CHROME_APPS_DIR, | 58 SHORTCUT_LOCATION_START_MENU_CHROME_APPS_DIR, |
| 59 SHORTCUT_LOCATION_TASKBAR_PINS, // base::win::VERSION_WIN7 + | 59 SHORTCUT_LOCATION_TASKBAR_PINS, // base::win::VERSION_WIN7 + |
| 60 SHORTCUT_LOCATION_APP_SHORTCUTS, // base::win::VERSION_WIN8 + | 60 SHORTCUT_LOCATION_APP_SHORTCUTS, // base::win::VERSION_WIN8 + |
| 61 NUM_SHORTCUT_LOCATIONS | 61 NUM_SHORTCUT_LOCATIONS |
| 62 }; | 62 }; |
| 63 | 63 |
| 64 enum ShortcutOperation { | 64 enum ShortcutOperation { |
| 65 // Create a new shortcut (overwriting if necessary). | 65 // Create a new shortcut (overwriting if necessary). |
| 66 SHELL_SHORTCUT_CREATE_ALWAYS, | 66 SHELL_SHORTCUT_CREATE_ALWAYS, |
| 67 // Create the per-user shortcut only if its system-level equivalent (with | 67 // Create the per-user shortcut only if its system-level equivalent (with |
| 68 // the same name) is not present. | 68 // the same name) is not present. |
| 69 SHELL_SHORTCUT_CREATE_IF_NO_SYSTEM_LEVEL, | 69 SHELL_SHORTCUT_CREATE_IF_NO_SYSTEM_LEVEL, |
| (...skipping 234 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 304 | 304 |
| 305 // Returns true if |chrome_exe| is registered in HKLM with |suffix|. | 305 // Returns true if |chrome_exe| is registered in HKLM with |suffix|. |
| 306 // Note: This only checks one deterministic key in HKLM for |chrome_exe| and | 306 // Note: This only checks one deterministic key in HKLM for |chrome_exe| and |
| 307 // doesn't otherwise validate a full Chrome install in HKLM. | 307 // doesn't otherwise validate a full Chrome install in HKLM. |
| 308 static bool QuickIsChromeRegisteredInHKLM(BrowserDistribution* dist, | 308 static bool QuickIsChromeRegisteredInHKLM(BrowserDistribution* dist, |
| 309 const base::FilePath& chrome_exe, | 309 const base::FilePath& chrome_exe, |
| 310 const base::string16& suffix); | 310 const base::string16& suffix); |
| 311 | 311 |
| 312 // Returns true if the current Windows version supports the presence of | 312 // Returns true if the current Windows version supports the presence of |
| 313 // shortcuts at |location|. | 313 // shortcuts at |location|. |
| 314 static bool ShortcutLocationIsSupported(ShortcutLocation location); | 314 static bool ShortcutLocationIsSupported(ShellUtil::ShortcutLocation location); |
| 315 | 315 |
| 316 // Sets |path| to the path for a shortcut at the |location| desired for the | 316 // Sets |path| to the path for a shortcut at the |location| desired for the |
| 317 // given |level| (CURRENT_USER for per-user path and SYSTEM_LEVEL for | 317 // given |level| (CURRENT_USER for per-user path and SYSTEM_LEVEL for |
| 318 // all-users path). | 318 // all-users path). |
| 319 // Returns false on failure. | 319 // Returns false on failure. |
| 320 static bool GetShortcutPath(ShortcutLocation location, | 320 static bool GetShortcutPath(ShellUtil::ShortcutLocation location, |
| 321 BrowserDistribution* dist, | 321 BrowserDistribution* dist, |
| 322 ShellChange level, | 322 ShellChange level, |
| 323 base::FilePath* path); | 323 base::FilePath* path); |
| 324 | 324 |
| 325 // Move an existing shortcut from |old_location| to |new_location| for the | |
| 326 // set |shortcut_level|. If the folder containing |old_location| is then | |
| 327 // empty, it will be removed. | |
| 328 static bool MoveExistingShortcut(ShortcutLocation old_location, | |
| 329 ShortcutLocation new_location, | |
| 330 BrowserDistribution* dist, | |
| 331 const ShortcutProperties& properties); | |
| 332 | |
| 333 // Updates shortcut in |location| (or creates it if |options| specify | 325 // Updates shortcut in |location| (or creates it if |options| specify |
| 334 // SHELL_SHORTCUT_CREATE_ALWAYS). | 326 // SHELL_SHORTCUT_CREATE_ALWAYS). |
| 335 // |dist| gives the type of browser distribution currently in use. | 327 // |dist| gives the type of browser distribution currently in use. |
| 336 // |properties| and |operation| affect this method as described on their | 328 // |properties| and |operation| affect this method as described on their |
| 337 // invidividual definitions above. | 329 // invidividual definitions above. |
| 338 // |location| may be one of SHORTCUT_LOCATION_DESKTOP, | 330 // |location| may be one of SHORTCUT_LOCATION_DESKTOP, |
| 339 // SHORTCUT_LOCATION_QUICK_LAUNCH, SHORTCUT_LOCATION_START_MENU_ROOT, | 331 // SHORTCUT_LOCATION_QUICK_LAUNCH, SHORTCUT_LOCATION_START_MENU_ROOT, |
| 340 // SHORTCUT_LOCATION_START_MENU_CHROME_DIR, or | 332 // SHORTCUT_LOCATION_START_MENU_CHROME_DIR, or |
| 341 // SHORTCUT_LOCATION_START_MENU_CHROME_APPS_DIR. | 333 // SHORTCUT_LOCATION_START_MENU_CHROME_APPS_DIR. |
| 342 static bool CreateOrUpdateShortcut( | 334 static bool CreateOrUpdateShortcut( |
| 343 ShortcutLocation location, | 335 ShellUtil::ShortcutLocation location, |
| 344 BrowserDistribution* dist, | 336 BrowserDistribution* dist, |
| 345 const ShortcutProperties& properties, | 337 const ShellUtil::ShortcutProperties& properties, |
| 346 ShortcutOperation operation); | 338 ShellUtil::ShortcutOperation operation); |
| 347 | 339 |
| 348 // Returns the string "|icon_path|,|icon_index|" (see, for example, | 340 // Returns the string "|icon_path|,|icon_index|" (see, for example, |
| 349 // http://msdn.microsoft.com/library/windows/desktop/dd391573.aspx). | 341 // http://msdn.microsoft.com/library/windows/desktop/dd391573.aspx). |
| 350 static base::string16 FormatIconLocation(const base::FilePath& icon_path, | 342 static base::string16 FormatIconLocation(const base::FilePath& icon_path, |
| 351 int icon_index); | 343 int icon_index); |
| 352 | 344 |
| 353 // This method returns the command to open URLs/files using chrome. Typically | 345 // This method returns the command to open URLs/files using chrome. Typically |
| 354 // this command is written to the registry under shell\open\command key. | 346 // this command is written to the registry under shell\open\command key. |
| 355 // |chrome_exe|: the full path to chrome.exe | 347 // |chrome_exe|: the full path to chrome.exe |
| 356 static base::string16 GetChromeShellOpenCmd(const base::FilePath& chrome_exe); | 348 static base::string16 GetChromeShellOpenCmd(const base::FilePath& chrome_exe); |
| (...skipping 187 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 544 bool elevate_if_not_admin); | 536 bool elevate_if_not_admin); |
| 545 | 537 |
| 546 // Removes installed shortcut(s) at |location|. | 538 // Removes installed shortcut(s) at |location|. |
| 547 // |level|: CURRENT_USER to remove per-user shortcuts, or SYSTEM_LEVEL to | 539 // |level|: CURRENT_USER to remove per-user shortcuts, or SYSTEM_LEVEL to |
| 548 // remove all-users shortcuts. | 540 // remove all-users shortcuts. |
| 549 // |target_exe|: Shortcut target exe; shortcuts will only be deleted when | 541 // |target_exe|: Shortcut target exe; shortcuts will only be deleted when |
| 550 // their target is |target_exe|. | 542 // their target is |target_exe|. |
| 551 // If |location| is a Chrome-specific folder, it will be deleted as well. | 543 // If |location| is a Chrome-specific folder, it will be deleted as well. |
| 552 // Returns true if all shortcuts pointing to |target_exe| are successfully | 544 // Returns true if all shortcuts pointing to |target_exe| are successfully |
| 553 // deleted, including the case where no such shortcuts are found. | 545 // deleted, including the case where no such shortcuts are found. |
| 554 static bool RemoveShortcuts(ShortcutLocation location, | 546 static bool RemoveShortcuts(ShellUtil::ShortcutLocation location, |
| 555 BrowserDistribution* dist, | 547 BrowserDistribution* dist, |
| 556 ShellChange level, | 548 ShellChange level, |
| 557 const base::FilePath& target_exe); | 549 const base::FilePath& target_exe); |
| 558 | 550 |
| 559 // Updates the target of all shortcuts in |location| that satisfy the | 551 // Updates the target of all shortcuts in |location| that satisfy the |
| 560 // following: | 552 // following: |
| 561 // - the shortcut's original target is |old_target_exe|, | 553 // - the shortcut's original target is |old_target_exe|, |
| 562 // - the original arguments are non-empty. | 554 // - the original arguments are non-empty. |
| 563 // If the shortcut's icon points to |old_target_exe|, then it also gets | 555 // If the shortcut's icon points to |old_target_exe|, then it also gets |
| 564 // redirected to |new_target_exe|. | 556 // redirected to |new_target_exe|. |
| 565 // Returns true if all updates to matching shortcuts are successful, including | 557 // Returns true if all updates to matching shortcuts are successful, including |
| 566 // the vacuous case where no matching shortcuts are found. | 558 // the vacuous case where no matching shortcuts are found. |
| 567 static bool RetargetShortcutsWithArgs( | 559 static bool RetargetShortcutsWithArgs( |
| 568 ShortcutLocation location, | 560 ShellUtil::ShortcutLocation location, |
| 569 BrowserDistribution* dist, | 561 BrowserDistribution* dist, |
| 570 ShellChange level, | 562 ShellChange level, |
| 571 const base::FilePath& old_target_exe, | 563 const base::FilePath& old_target_exe, |
| 572 const base::FilePath& new_target_exe); | 564 const base::FilePath& new_target_exe); |
| 573 | 565 |
| 574 typedef base::RefCountedData<base::CancellationFlag> SharedCancellationFlag; | 566 typedef base::RefCountedData<base::CancellationFlag> SharedCancellationFlag; |
| 575 | 567 |
| 576 // Appends Chrome shortcuts with non-whitelisted arguments to |shortcuts| if | 568 // Appends Chrome shortcuts with non-whitelisted arguments to |shortcuts| if |
| 577 // not NULL. If |do_removal|, also removes non-whitelisted arguments from | 569 // not NULL. If |do_removal|, also removes non-whitelisted arguments from |
| 578 // those shortcuts. This method will abort and return false if |cancel| is | 570 // those shortcuts. This method will abort and return false if |cancel| is |
| 579 // non-NULL and gets set at any point during this call. | 571 // non-NULL and gets set at any point during this call. |
| 580 static bool ShortcutListMaybeRemoveUnknownArgs( | 572 static bool ShortcutListMaybeRemoveUnknownArgs( |
| 581 ShortcutLocation location, | 573 ShellUtil::ShortcutLocation location, |
| 582 BrowserDistribution* dist, | 574 BrowserDistribution* dist, |
| 583 ShellChange level, | 575 ShellChange level, |
| 584 const base::FilePath& chrome_exe, | 576 const base::FilePath& chrome_exe, |
| 585 bool do_removal, | 577 bool do_removal, |
| 586 const scoped_refptr<SharedCancellationFlag>& cancel, | 578 const scoped_refptr<SharedCancellationFlag>& cancel, |
| 587 std::vector<std::pair<base::FilePath, base::string16> >* shortcuts); | 579 std::vector<std::pair<base::FilePath, base::string16> >* shortcuts); |
| 588 | 580 |
| 589 // Sets |suffix| to the base 32 encoding of the md5 hash of this user's sid | 581 // Sets |suffix| to the base 32 encoding of the md5 hash of this user's sid |
| 590 // preceded by a dot. | 582 // preceded by a dot. |
| 591 // This is guaranteed to be unique on the machine and 27 characters long | 583 // This is guaranteed to be unique on the machine and 27 characters long |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 647 // application, as given to AddFileAssociations. All information associated | 639 // application, as given to AddFileAssociations. All information associated |
| 648 // with this name will be deleted. | 640 // with this name will be deleted. |
| 649 static bool DeleteFileAssociations(const base::string16& prog_id); | 641 static bool DeleteFileAssociations(const base::string16& prog_id); |
| 650 | 642 |
| 651 private: | 643 private: |
| 652 DISALLOW_COPY_AND_ASSIGN(ShellUtil); | 644 DISALLOW_COPY_AND_ASSIGN(ShellUtil); |
| 653 }; | 645 }; |
| 654 | 646 |
| 655 | 647 |
| 656 #endif // CHROME_INSTALLER_UTIL_SHELL_UTIL_H_ | 648 #endif // CHROME_INSTALLER_UTIL_SHELL_UTIL_H_ |
| OLD | NEW |