Index: extensions/browser/content_verifier.h |
diff --git a/extensions/browser/content_verifier.h b/extensions/browser/content_verifier.h |
index 69b6f04436b4019c41aada14236e1707b825ce12..4520c0424b7a8fd1a1e439147345429465d8d576 100644 |
--- a/extensions/browser/content_verifier.h |
+++ b/extensions/browser/content_verifier.h |
@@ -11,7 +11,11 @@ |
#include "base/macros.h" |
#include "base/memory/ref_counted.h" |
#include "base/memory/scoped_ptr.h" |
+#include "base/scoped_observer.h" |
+#include "base/version.h" |
+#include "extensions/browser/content_verifier_delegate.h" |
#include "extensions/browser/content_verify_job.h" |
+#include "extensions/browser/extension_registry_observer.h" |
namespace base { |
class FilePath; |
@@ -25,12 +29,13 @@ namespace extensions { |
class Extension; |
class ContentHashFetcher; |
-class ContentVerifierDelegate; |
+class ContentVerifierIOData; |
// Used for managing overall content verification - both fetching content |
// hashes as needed, and supplying job objects to verify file contents as they |
// are read. |
-class ContentVerifier : public base::RefCountedThreadSafe<ContentVerifier> { |
+class ContentVerifier : public base::RefCountedThreadSafe<ContentVerifier>, |
+ public ExtensionRegistryObserver { |
public: |
// Takes ownership of |delegate|. |
ContentVerifier(content::BrowserContext* context, |
@@ -49,10 +54,13 @@ class ContentVerifier : public base::RefCountedThreadSafe<ContentVerifier> { |
void VerifyFailed(const std::string& extension_id, |
ContentVerifyJob::FailureReason reason); |
- void OnFetchComplete(const std::string& extension_id, |
- bool success, |
- bool was_force_check, |
- const std::set<base::FilePath>& hash_mismatch_paths); |
+ // ExtensionRegistryObserver interface |
+ virtual void OnExtensionLoaded(content::BrowserContext* browser_context, |
+ const Extension* extension) OVERRIDE; |
+ virtual void OnExtensionUnloaded( |
+ content::BrowserContext* browser_context, |
+ const Extension* extension, |
+ UnloadedExtensionInfo::Reason reason) OVERRIDE; |
private: |
DISALLOW_COPY_AND_ASSIGN(ContentVerifier); |
@@ -60,19 +68,37 @@ class ContentVerifier : public base::RefCountedThreadSafe<ContentVerifier> { |
friend class base::RefCountedThreadSafe<ContentVerifier>; |
virtual ~ContentVerifier(); |
+ void OnFetchComplete(const std::string& extension_id, |
+ bool success, |
+ bool was_force_check, |
+ const std::set<base::FilePath>& hash_mismatch_paths); |
+ |
+ void OnFetchCompleteHelper(const std::string& extension_id, |
+ bool shouldVerifyAnyPathsResult); |
+ |
// Returns true if any of the paths in |relative_paths| *should* have their |
// contents verified. (Some files get transcoded during the install process, |
// so we don't want to verify their contents because they are expected not |
// to match). |
- bool ShouldVerifyAnyPaths(const Extension* extension, |
+ bool ShouldVerifyAnyPaths(const std::string& extension_id, |
+ const base::FilePath& extension_root, |
const std::set<base::FilePath>& relative_paths); |
+ // Set to true once we've begun shutting down. |
+ bool shutdown_; |
+ |
content::BrowserContext* context_; |
scoped_ptr<ContentVerifierDelegate> delegate_; |
// For fetching content hash signatures. |
scoped_ptr<ContentHashFetcher> fetcher_; |
+ |
+ // For observing the ExtensionRegistry. |
+ ScopedObserver<ExtensionRegistry, ExtensionRegistryObserver> observer_; |
+ |
+ // Data that should only be used on the IO thread. |
+ scoped_refptr<ContentVerifierIOData> io_data_; |
}; |
} // namespace extensions |