1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
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__
|