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
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
|
// Copyright (c) 2010 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 contains functions processing master preference file used by
// setup and first run.
#ifndef CHROME_INSTALLER_UTIL_MASTER_PREFERENCES_H_
#define CHROME_INSTALLER_UTIL_MASTER_PREFERENCES_H_
#pragma once
#include <vector>
#include "base/command_line.h"
#include "base/scoped_ptr.h"
#include "googleurl/src/gurl.h"
class DictionaryValue;
class FilePath;
namespace installer_util {
// This is the default name for the master preferences file used to pre-set
// values in the user profile at first run.
const char kDefaultMasterPrefs[] = "master_preferences";
// The master preferences is a JSON file with the same entries as the
// 'Default\Preferences' file. This function parses the distribution
// section of the preferences file.
//
// A prototypical 'master_preferences' file looks like this:
//
// {
// "distribution": {
// "alternate_shortcut_text": false,
// "oem_bubble": false,
// "chrome_shortcut_icon_index": 0,
// "create_all_shortcuts": true,
// "import_bookmarks": false,
// "import_bookmarks_from_file": "c:\\path",
// "import_history": false,
// "import_home_page": false,
// "import_search_engine": true,
// "ping_delay": 40,
// "show_welcome_page": true,
// "skip_first_run_ui": true,
// "do_not_launch_chrome": false,
// "make_chrome_default": false,
// "make_chrome_default_for_user": true,
// "require_eula": true,
// "system_level": false,
// "verbose_logging": true
// },
// "browser": {
// "show_home_button": true
// },
// "bookmark_bar": {
// "show_on_all_tabs": true
// },
// "first_run_tabs": [
// "http://gmail.com",
// "https://igoogle.com"
// ],
// "homepage": "http://example.org",
// "homepage_is_newtabpage": false
// }
//
// A reserved "distribution" entry in the file is used to group related
// installation properties. This entry will be ignored at other times.
// This function parses the 'distribution' entry and returns a combination
// of MasterPrefResult.
class MasterPreferences {
public:
// Parses the command line and optionally reads the master preferences file
// to get distribution related install options (if the "installerdata" switch
// is present in the command line.
// The options from the preference file and command line are merged, with the
// ones from the command line taking precedence in case of a conflict.
explicit MasterPreferences(const CommandLine& cmd_line);
// Parses a specific preferences file and does not merge any command line
// switches with the distribution dictionary.
explicit MasterPreferences(const FilePath& prefs_path);
~MasterPreferences();
// Each of the Get methods below returns true if the named value was found in
// the distribution dictionary and its value assigned to the 'value'
// parameter. If the value wasn't found, the return value is false.
bool GetBool(const std::string& name, bool* value) const;
bool GetInt(const std::string& name, int* value) const;
bool GetString(const std::string& name, std::string* value) const;
// As part of the master preferences an optional section indicates the tabs
// to open during first run. An example is the following:
//
// {
// "first_run_tabs": [
// "http://google.com/f1",
// "https://google.com/f2"
// ]
// }
//
// Note that the entries are usually urls but they don't have to be.
//
// This function returns the list as a vector of GURLs. If the master
// preferences file does not contain such a list the vector is empty.
std::vector<GURL> GetFirstRunTabs() const;
// The master preferences can also contain a regular extensions
// preference block. If so, the extensions referenced there will be
// installed during the first run experience.
// An extension can go in the master prefs needs just the basic
// elements such as:
// 1- An extension entry under settings, assigned by the gallery
// 2- The "location" : 1 entry
// 3- A minimal "manifest" block with key, name, permissions, update url
// and version. The version needs to be lower than the version of
// the extension that is hosted in the gallery.
// 4- The "path" entry with the version as last component
// 5- The "state" : 1 entry
//
// The following is an example of a master pref file that installs
// Google XYZ:
//
// {
// "extensions": {
// "settings": {
// "ppflmjolhbonpkbkooiamcnenbmbjcbb": {
// "location": 1,
// "manifest": {
// "key": "MIGfMA0GCSqGSIb3DQEBAQUAA4<rest of key ommited>",
// "name": "Google XYZ (Installing...)",
// "permissions": [ "tabs", "http://xyz.google.com/" ],
// "update_url": "http://fixme.com/fixme/fixme/crx",
// "version": "0.0"
// },
// "path": "ppflmjolhbonpkbkooiamcnenbmbjcbb\\0.0",
// "state": 1
// }
// }
// }
// }
//
bool GetExtensionsBlock(DictionaryValue** extensions) const;
// Returns true iff the master preferences were successfully read from a file.
bool read_from_file() const {
return preferences_read_from_file_;
}
protected:
scoped_ptr<DictionaryValue> master_dictionary_;
DictionaryValue* distribution_;
bool preferences_read_from_file_;
private:
DISALLOW_COPY_AND_ASSIGN(MasterPreferences);
};
} // namespace installer_util
#endif // CHROME_INSTALLER_UTIL_MASTER_PREFERENCES_H_
|