// Copyright 2014 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef EXTENSIONS_BROWSER_CONTENT_VERIFIER_CONTENT_VERIFIER_H_ #define EXTENSIONS_BROWSER_CONTENT_VERIFIER_CONTENT_VERIFIER_H_ #include <memory> #include <set> #include <unordered_map> #include <unordered_set> #include <vector> #include "base/memory/raw_ptr.h" #include "base/memory/ref_counted.h" #include "base/memory/scoped_refptr.h" #include "base/scoped_observation.h" #include "base/version.h" #include "content/public/browser/browser_thread.h" #include "extensions/browser/content_verifier/content_hash.h" #include "extensions/browser/content_verifier/content_verifier_delegate.h" #include "extensions/browser/content_verifier/content_verifier_io_data.h" #include "extensions/browser/content_verifier/content_verify_job.h" #include "extensions/browser/extension_registry.h" #include "extensions/browser/extension_registry_observer.h" #include "extensions/common/extension_id.h" #include "mojo/public/cpp/bindings/pending_receiver.h" #include "services/network/public/cpp/shared_url_loader_factory.h" namespace base { class FilePath; } namespace content { class BrowserContext; } namespace extensions { class Extension; // Used for managing overall content verification - both fetching content // hashes as needed, and supplying job objects to verify file contents as they // are read. // // Some notes about extension resource paths: // An extension resource path is a path relative to it's extension root // directory. For the purposes of content verification system, there can be // several transformations of the relative path: // 1. Relative path: Relative path as is. This is base::FilePath that simply // is the relative path of the resource. // 2. Relative unix path: Some underlying parts of content-verification // require uniform separator, we use '/' as separator so it is effectively // unix style. Note that this is a reversible transformation. // 3. content_verifier_utils::CanonicalRelativePath: // Canonicalized relative paths are used as keys of maps within // VerifiedContents and ComputedHashes. This takes care of OS specific file // access issues: // - windows/mac is case insensitive while accessing files. // - windows ignores (.| )+ suffixes in filename while accessing a file. // Canonicalization consists of normalizing the separators, lower casing // the filepath in case-insensitive systems and trimming ignored suffixes // if appropriate. // See content_verifier_utils::CanonicalizeRelativePath() for details. class ContentVerifier : public base::RefCountedThreadSafe<ContentVerifier>, public ExtensionRegistryObserver { … }; } // namespace extensions #endif // EXTENSIONS_BROWSER_CONTENT_VERIFIER_CONTENT_VERIFIER_H_