diff options
Diffstat (limited to 'chrome/installer/util/shell_util.h')
-rw-r--r-- | chrome/installer/util/shell_util.h | 145 |
1 files changed, 145 insertions, 0 deletions
diff --git a/chrome/installer/util/shell_util.h b/chrome/installer/util/shell_util.h new file mode 100644 index 0000000..d741a76 --- /dev/null +++ b/chrome/installer/util/shell_util.h @@ -0,0 +1,145 @@ +// Copyright 2008, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// This file declares methods that are useful for integrating Chrome in +// Windows shell. These methods are all static and currently part of +// ShellUtil class. + +#ifndef CHROME_INSTALLER_UTIL_SHELL_UTIL_H__ +#define CHROME_INSTALLER_UTIL_SHELL_UTIL_H__ + +#include <windows.h> +#include <string> + +#include "base/basictypes.h" +#include "chrome/installer/util/work_item_list.h" + +// This is a utility class that provides common shell integration methods +// that can be used by installer as well as Chrome. +class ShellUtil { + public: + // Return value of AddChromeToSetAccessDefaults. + enum RegisterStatus { + SUCCESS, // Registration of Chrome successful (in HKLM) + FAILURE, // Registration failed (no changes made) + REGISTERED_PER_USER // Registered Chrome as per user (in HKCU) + }; + + // Relative path of DefaultIcon registry entry (prefixed with '\'). + static const wchar_t* kRegDefaultIcon; + + // Relative path of "shell" registry key. + static const wchar_t* kRegShellPath; + + // Relative path of shell open command in Windows registry + // (i.e. \\shell\\open\\command). + static const wchar_t* kRegShellOpen; + + // Relative path of registry key under which applications need to register + // to control Windows Start menu links. + static const wchar_t* kRegStartMenuInternet; + + // Relative path of Classes registry entry under which file associations + // are added on Windows. + static const wchar_t* kRegClasses; + + // Relative path of RegisteredApplications registry entry under which + // we add Chrome as a Windows application + static const wchar_t* kRegRegisteredApplications; + + // Name that we give to Chrome file association handler ProgId. + static const wchar_t* kChromeHTMLProgId; + + // Relative path of shell Chrome Progid in Windows registry + // (i.e. \\shell\\ChromeHTML). + static const wchar_t* kRegShellChromeHTML; + + // Relative path of shell Chrome Progid command in Windows registry + // (i.e. \\shell\\ChromeHTML\\command). + static const wchar_t* kRegShellChromeHTMLCommand; + + // File extensions that Chrome registers itself for. + static const wchar_t* kFileAssociations[]; + + // Protocols that Chrome registers itself for. + static const wchar_t* kProtocolAssociations[]; + + // This method adds Chrome to the list that shows up in Add/Remove Programs-> + // Set Program Access and Defaults and also creates Chrome ProgIds under + // Software\Classes. This method requires write access to HKLM so is just + // best effort deal. If write to HKLM fails and skip_if_not_admin is false, + // this method will: + // - add the ProgId entries to HKCU on XP. HKCU entries will not make + // Chrome show in Set Program Access and Defaults but they are still useful + // because we can make Chrome run when user clicks on http link or html + // file. + // - will try to launch setup.exe with admin priviledges on Vista to do + // these tasks. Users will see standard Vista elevation prompt and if they + // enter the right credentials, the write operation will work. + // Currently skip_if_not_admin is false only when user tries to make Chrome + // default browser and Chrome is not registered on the machine. + // + // chrome_exe: full path to chrome.exe. + // skip_if_not_admin: if false will make this method try alternate methods + // as described above. + static RegisterStatus AddChromeToSetAccessDefaults( + const std::wstring& chrome_exe, bool skip_if_not_admin); + + // This method appends the Chrome icon index inside chrome.exe to the + // chrome.exe path passed in as input, to generate the full path for + // Chrome icon that can be used as value for Windows registry keys. + // chrome_icon: full path to chrome.exe. + static bool GetChromeIcon(std::wstring& chrome_icon); + + // Returns the localized name of Chrome shortcut. + static bool GetChromeShortcutName(std::wstring* shortcut); + + // Gets the desktop path for the current user and returns it in 'path' + // argument. Return true if successful, otherwise returns false. + static bool GetDesktopPath(std::wstring* path); + + // Gets the Quick Launch shortcuts path for the current user and + // returns it in 'path' argument. Return true if successful, otherwise + // returns false. + static bool GetQuickLaunchPath(std::wstring* path); + + // Updates shortcut (or creates a new shortcut) at destination given by + // shortcut to a target given by chrome_exe. The arguments is left NULL + // for the target and icon is set as icon at index 0 from exe. + // If create_new is set to true, the function will create a new shortcut if + // if doesn't exist. + static bool UpdateChromeShortcut(const std::wstring& chrome_exe, + const std::wstring& shortcut, + bool create_new); + private: + DISALLOW_EVIL_CONSTRUCTORS(ShellUtil); +}; + + +#endif // CHROME_INSTALLER_UTIL_SHELL_UTIL_H__ |