Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(295)

Side by Side Diff: chrome/browser/enumerate_modules_model_win.h

Issue 15969017: Warn by default when certain DLL conflicts exist on XP. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Freshly sync'ed Created 7 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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 #ifndef CHROME_BROWSER_ENUMERATE_MODULES_MODEL_WIN_H_ 5 #ifndef CHROME_BROWSER_ENUMERATE_MODULES_MODEL_WIN_H_
6 #define CHROME_BROWSER_ENUMERATE_MODULES_MODEL_WIN_H_ 6 #define CHROME_BROWSER_ENUMERATE_MODULES_MODEL_WIN_H_
7 7
8 #include <utility> 8 #include <utility>
9 #include <vector> 9 #include <vector>
10 10
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
55 }; 55 };
56 56
57 // A bitmask with the possible resolutions for bad modules. 57 // A bitmask with the possible resolutions for bad modules.
58 enum RecommendedAction { 58 enum RecommendedAction {
59 NONE = 0, 59 NONE = 0,
60 INVESTIGATING = 1 << 0, 60 INVESTIGATING = 1 << 0,
61 UNINSTALL = 1 << 1, 61 UNINSTALL = 1 << 1,
62 DISABLE = 1 << 2, 62 DISABLE = 1 << 2,
63 UPDATE = 1 << 3, 63 UPDATE = 1 << 3,
64 SEE_LINK = 1 << 4, 64 SEE_LINK = 1 << 4,
65 NOTIFY_USER = 1 << 5,
66 };
67
68 // Which Windows OS is affected.
69 enum OperatingSystem {
70 ALL = -1,
71 XP = 1 << 0,
65 }; 72 };
66 73
67 // The structure we populate when enumerating modules. 74 // The structure we populate when enumerating modules.
68 struct Module { 75 struct Module {
69 // The type of module found 76 // The type of module found
70 ModuleType type; 77 ModuleType type;
71 // The module status (benign/bad/etc). 78 // The module status (benign/bad/etc).
72 ModuleStatus status; 79 ModuleStatus status;
73 // The module path, not including filename. 80 // The module path, not including filename.
74 string16 location; 81 string16 location;
(...skipping 19 matching lines...) Expand all
94 // A vector typedef of all modules enumerated. 101 // A vector typedef of all modules enumerated.
95 typedef std::vector<Module> ModulesVector; 102 typedef std::vector<Module> ModulesVector;
96 103
97 // A structure we populate with the blacklist entries. 104 // A structure we populate with the blacklist entries.
98 struct BlacklistEntry { 105 struct BlacklistEntry {
99 const char* filename; 106 const char* filename;
100 const char* location; 107 const char* location;
101 const char* desc_or_signer; 108 const char* desc_or_signer;
102 const char* version_from; // Version where conflict started. 109 const char* version_from; // Version where conflict started.
103 const char* version_to; // First version that works. 110 const char* version_to; // First version that works.
111 OperatingSystem os; // Bitmask, representing what OS this entry applies to.
104 RecommendedAction help_tip; 112 RecommendedAction help_tip;
105 }; 113 };
106 114
107 // A static function that normalizes the module information in the |module| 115 // A static function that normalizes the module information in the |module|
108 // struct. Module information needs to be normalized before comparing against 116 // struct. Module information needs to be normalized before comparing against
109 // the blacklist. This is because the same module can be described in many 117 // the blacklist. This is because the same module can be described in many
110 // different ways, ie. file paths can be presented in long/short name form, 118 // different ways, ie. file paths can be presented in long/short name form,
111 // and are not case sensitive on Windows. Also, the version string returned 119 // and are not case sensitive on Windows. Also, the version string returned
112 // can include appended text, which we don't want to use during comparison 120 // can include appended text, which we don't want to use during comparison
113 // against the blacklist. 121 // against the blacklist.
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after
224 // 232 //
225 // To use this class, grab the singleton pointer and call ScanNow(). 233 // To use this class, grab the singleton pointer and call ScanNow().
226 // Then wait to get notified through MODULE_LIST_ENUMERATED when the list is 234 // Then wait to get notified through MODULE_LIST_ENUMERATED when the list is
227 // ready. 235 // ready.
228 // 236 //
229 // This class can be used on the UI thread as it asynchronously offloads the 237 // This class can be used on the UI thread as it asynchronously offloads the
230 // file work over to the FILE thread and reports back to the caller with a 238 // file work over to the FILE thread and reports back to the caller with a
231 // notification. 239 // notification.
232 class EnumerateModulesModel { 240 class EnumerateModulesModel {
233 public: 241 public:
242 // UMA histogram constants.
243 enum UmaModuleConflictHistogramOptions {
244 ACTION_BUBBLE_SHOWN = 0,
245 ACTION_BUBBLE_LEARN_MORE,
246 ACTION_MENU_LEARN_MORE,
247 ACTION_BOUNDARY, // Must be the last value.
248 };
249
234 static EnumerateModulesModel* GetInstance(); 250 static EnumerateModulesModel* GetInstance();
235 251
252 // Record via UMA what the user selected.
253 static void RecordLearnMoreStat(bool from_menu);
254
236 // Returns true if we should show the conflict notification. The conflict 255 // Returns true if we should show the conflict notification. The conflict
237 // notification is only shown once during the lifetime of the process. 256 // notification is only shown once during the lifetime of the process.
238 bool ShouldShowConflictWarning() const; 257 bool ShouldShowConflictWarning() const;
239 258
240 // Called when the user has acknowledged the conflict notification. 259 // Called when the user has acknowledged the conflict notification.
241 void AcknowledgeConflictNotification(); 260 void AcknowledgeConflictNotification();
242 261
243 // Returns the number of suspected bad modules found in the last scan. 262 // Returns the number of suspected bad modules found in the last scan.
244 // Returns 0 if no scan has taken place yet. 263 // Returns 0 if no scan has taken place yet.
245 int suspected_bad_modules_detected() const { 264 int suspected_bad_modules_detected() const {
246 return suspected_bad_modules_detected_; 265 return suspected_bad_modules_detected_;
247 } 266 }
248 267
249 // Returns the number of confirmed bad modules found in the last scan. 268 // Returns the number of confirmed bad modules found in the last scan.
250 // Returns 0 if no scan has taken place yet. 269 // Returns 0 if no scan has taken place yet.
251 int confirmed_bad_modules_detected() const { 270 int confirmed_bad_modules_detected() const {
252 return confirmed_bad_modules_detected_; 271 return confirmed_bad_modules_detected_;
253 } 272 }
254 273
274 // Returns how many modules to notify the user about.
275 int modules_to_notify_about() const {
276 return modules_to_notify_about_;
277 }
278
255 // Set to true when we the scanning process can not rely on certain Chrome 279 // Set to true when we the scanning process can not rely on certain Chrome
256 // services to exists. 280 // services to exists.
257 void set_limited_mode(bool limited_mode) { 281 void set_limited_mode(bool limited_mode) {
258 limited_mode_ = limited_mode; 282 limited_mode_ = limited_mode;
259 } 283 }
260 284
285 // Checks to see if a scanning task should be started and sets one off, if so.
286 void MaybePostScanningTask();
287
261 // Asynchronously start the scan for the loaded module list, except when in 288 // Asynchronously start the scan for the loaded module list, except when in
262 // limited_mode (in which case it blocks). 289 // limited_mode (in which case it blocks).
263 void ScanNow(); 290 void ScanNow();
264 291
265 // Gets the whole module list as a ListValue. 292 // Gets the whole module list as a ListValue.
266 base::ListValue* GetModuleList() const; 293 base::ListValue* GetModuleList() const;
267 294
295 // Gets the Help Center URL for the first *notable* conflict module that we've
296 // elected to notify the user about.
297 GURL GetFirstNotableConflict();
298
268 private: 299 private:
269 friend struct DefaultSingletonTraits<EnumerateModulesModel>; 300 friend struct DefaultSingletonTraits<EnumerateModulesModel>;
270 friend class ModuleEnumerator; 301 friend class ModuleEnumerator;
271 302
272 EnumerateModulesModel(); 303 EnumerateModulesModel();
273 virtual ~EnumerateModulesModel(); 304 virtual ~EnumerateModulesModel();
274 305
275 // Called on the UI thread when the helper class is done scanning. 306 // Called on the UI thread when the helper class is done scanning.
276 void DoneScanning(); 307 void DoneScanning();
277 308
(...skipping 23 matching lines...) Expand all
301 // True if we are currently scanning for modules. 332 // True if we are currently scanning for modules.
302 bool scanning_; 333 bool scanning_;
303 334
304 // Whether the conflict notification has been acknowledged by the user. 335 // Whether the conflict notification has been acknowledged by the user.
305 bool conflict_notification_acknowledged_; 336 bool conflict_notification_acknowledged_;
306 337
307 // The number of confirmed bad modules (not including suspected bad ones) 338 // The number of confirmed bad modules (not including suspected bad ones)
308 // found during last scan. 339 // found during last scan.
309 int confirmed_bad_modules_detected_; 340 int confirmed_bad_modules_detected_;
310 341
342 // The number of bad modules the user needs to be aggressively notified about.
343 int modules_to_notify_about_;
344
311 // The number of suspected bad modules (not including confirmed bad ones) 345 // The number of suspected bad modules (not including confirmed bad ones)
312 // found during last scan. 346 // found during last scan.
313 int suspected_bad_modules_detected_; 347 int suspected_bad_modules_detected_;
314 348
315 DISALLOW_COPY_AND_ASSIGN(EnumerateModulesModel); 349 DISALLOW_COPY_AND_ASSIGN(EnumerateModulesModel);
316 }; 350 };
317 351
318 #endif // CHROME_BROWSER_ENUMERATE_MODULES_MODEL_WIN_H_ 352 #endif // CHROME_BROWSER_ENUMERATE_MODULES_MODEL_WIN_H_
OLDNEW
« no previous file with comments | « chrome/browser/enumerate_modules_model_unittest_win.cc ('k') | chrome/browser/enumerate_modules_model_win.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698