blob: a00db25c4a263b881442e861022e2014bd810ab2 (
plain)
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
|
// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
//
// 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__
|