Chromium Code Reviews| Index: chrome/browser/enumerate_modules_model_win.h |
| diff --git a/chrome/browser/enumerate_modules_model_win.h b/chrome/browser/enumerate_modules_model_win.h |
| index d40a81e7d67f09cbd07ff338f5294b04c8f869fa..66e2e78beebc4c751d74304db3ae5765e1b86d82 100644 |
| --- a/chrome/browser/enumerate_modules_model_win.h |
| +++ b/chrome/browser/enumerate_modules_model_win.h |
| @@ -8,10 +8,12 @@ |
| #include <utility> |
| #include <vector> |
| +#include "base/callback.h" |
| #include "base/gtest_prod_util.h" |
| #include "base/macros.h" |
| #include "base/memory/ref_counted.h" |
| #include "base/memory/singleton.h" |
| +#include "base/observer_list_threadsafe.h" |
| #include "base/strings/string16.h" |
| #include "base/timer/timer.h" |
| #include "content/public/browser/browser_thread.h" |
| @@ -115,17 +117,6 @@ class ModuleEnumerator : public base::RefCountedThreadSafe<ModuleEnumerator> { |
| // A vector typedef of all modules enumerated. |
| typedef std::vector<Module> ModulesVector; |
| - // A structure we populate with the blacklist entries. |
| - struct BlacklistEntry { |
| - const char* filename; |
| - const char* location; |
| - const char* desc_or_signer; |
| - const char* version_from; // Version where conflict started. |
| - const char* version_to; // First version that works. |
| - OperatingSystem os; // Bitmask, representing what OS this entry applies to. |
| - RecommendedAction help_tip; |
| - }; |
| - |
| // A static function that normalizes the module information in the |module| |
| // struct. Module information needs to be normalized before comparing against |
| // the blacklist. This is because the same module can be described in many |
| @@ -135,10 +126,6 @@ class ModuleEnumerator : public base::RefCountedThreadSafe<ModuleEnumerator> { |
| // against the blacklist. |
| static void NormalizeModule(Module* module); |
| - // A static function that checks whether |module| has been |blacklisted|. |
| - static ModuleStatus Match(const Module& module, |
| - const BlacklistEntry& blacklisted); |
| - |
| explicit ModuleEnumerator(EnumerateModulesModel* observer); |
| // Start scanning the loaded module list (if a scan is not already in |
| @@ -158,9 +145,6 @@ class ModuleEnumerator : public base::RefCountedThreadSafe<ModuleEnumerator> { |
| friend class base::RefCountedThreadSafe<ModuleEnumerator>; |
| ~ModuleEnumerator(); |
| - // The (currently) hard coded blacklist of known bad modules. |
| - static const BlacklistEntry kModuleBlacklist[]; |
| - |
| // This function does the actual file scanning work on the FILE thread (or |
| // block the main thread when in limited_mode). It enumerates all loaded |
| // modules in the process and other modules of interest, such as the |
| @@ -205,10 +189,6 @@ class ModuleEnumerator : public base::RefCountedThreadSafe<ModuleEnumerator> { |
| // based on the |path_mapping_| vector. |
| void CollapsePath(Module* module); |
| - // Takes each module in the |enumerated_modules_| vector and matches it |
| - // against a fixed blacklist of bad and suspected bad modules. |
| - void MatchAgainstBlacklist(); |
| - |
| // This function executes on the UI thread when the scanning and matching |
| // process is done. It notifies the observer. |
| void ReportBack(); |
| @@ -218,8 +198,10 @@ class ModuleEnumerator : public base::RefCountedThreadSafe<ModuleEnumerator> { |
| base::string16 GetSubjectNameFromDigitalSignature( |
| const base::FilePath& filename); |
| + void ReportThirdPartyMetrics(); |
| + |
| // The typedef for the vector that maps a regular file path to %env_var%. |
| - typedef std::vector< std::pair<base::string16, base::string16> > PathMapping; |
| + typedef std::vector<std::pair<base::string16, base::string16>> PathMapping; |
| // The vector of paths to %env_var%, used to account for differences in |
| // where people keep there files, c:\windows vs. d:\windows, etc. |
| @@ -229,7 +211,7 @@ class ModuleEnumerator : public base::RefCountedThreadSafe<ModuleEnumerator> { |
| // interest). |
| ModulesVector* enumerated_modules_; |
| - // The observer, who needs to be notified when we are done. |
| + // The observers, who need to be notified when the scan is complete. |
| EnumerateModulesModel* observer_; |
| // See limited_mode below. |
| @@ -264,8 +246,37 @@ class EnumerateModulesModel { |
| ACTION_BOUNDARY, // Must be the last value. |
| }; |
| + // Observer class used to receive the list of modules when enumeration is |
| + // finished. |
| + class Observer { |
| + public: |
| + Observer() {} |
| + virtual ~Observer() {} |
| + |
| + // Invoked when EnumerateModulesModel has completed a scan of modules. |
| + virtual void OnScanCompleted(bool limited_mode); |
| + |
| + // Invoked when a user has acknowledge incompatible modules found in a |
| + // module scan. |
| + virtual void OnConflictsAcknowledged(); |
| + |
| + private: |
| + DISALLOW_COPY_AND_ASSIGN(Observer); |
| + }; |
| + |
| static EnumerateModulesModel* GetInstance(); |
| + // Adds an |observer| to the enumerator. May be called from any thread. The |
| + // callback will be invoked on the thread on which AddObserver was called. |
| + void AddObserver(Observer* observer) { |
|
grt (UTC plus 2)
2016/06/16 18:27:53
are observers always added/removed on the UI threa
chrisha
2016/06/17 20:48:03
They are indeed. Moved to the normal variant.
|
| + observers_->AddObserver(observer); |
| + } |
| + |
| + // Removes an |observer| from the enumerator. May be called from any thread. |
| + void RemoveObserver(Observer* observer) { |
| + observers_->RemoveObserver(observer); |
| + } |
| + |
| // Returns true if we should show the conflict notification. The conflict |
| // notification is only shown once during the lifetime of the process. |
| bool ShouldShowConflictWarning() const; |
| @@ -306,9 +317,11 @@ class EnumerateModulesModel { |
| // Gets the whole module list as a ListValue. |
| base::ListValue* GetModuleList() const; |
| - // Gets the Help Center URL for the first *notable* conflict module that we've |
| - // elected to notify the user about. |
| - GURL GetFirstNotableConflict(); |
| + // The user will be taken to this site when the conflict bubble or app menu |
| + // item is clicked. For now this simply opens chrome://conflicts, which |
| + // contains detailed information about conflicts. Returns an empty URL if |
| + // there are no conficts. |
| + GURL GetConflictUrl(); |
| private: |
| friend struct base::DefaultSingletonTraits<EnumerateModulesModel>; |
| @@ -320,11 +333,6 @@ class EnumerateModulesModel { |
| // Called on the UI thread when the helper class is done scanning. |
| void DoneScanning(); |
| - // Constructs a Help Center article URL for help with a particular module. |
| - // The module must have the SEE_LINK attribute for |recommended_action| set, |
| - // otherwise this returns a blank string. |
| - GURL ConstructHelpCenterUrl(const ModuleEnumerator::Module& module) const; |
| - |
| // The vector containing all the modules enumerated. Will be normalized and |
| // any bad modules will be marked. |
| ModuleEnumerator::ModulesVector enumerated_modules_; |
| @@ -360,6 +368,8 @@ class EnumerateModulesModel { |
| // found during last scan. |
| int suspected_bad_modules_detected_; |
| + scoped_refptr<base::ObserverListThreadSafe<Observer>> observers_; |
| + |
| DISALLOW_COPY_AND_ASSIGN(EnumerateModulesModel); |
| }; |