text: // Copyright 2014 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.
  
  #ifndef EXTENSIONS_BROWSER_CONTENT_VERIFIER_IO_DATA_H_
  #define EXTENSIONS_BROWSER_CONTENT_VERIFIER_IO_DATA_H_
  
  #include <map>
  #include <memory>
  #include <set>
  #include <string>
  
  #include "base/files/file_path.h"
  #include "base/memory/ref_counted.h"
  #include "base/version.h"
  
  namespace extensions {
  
  // A helper class for keeping track of data for the ContentVerifier that should
  // only be accessed on the IO thread.
  class ContentVerifierIOData
      : public base::RefCountedThreadSafe<ContentVerifierIOData> {
   public:
    struct ExtensionData {
      std::unique_ptr<std::set<base::FilePath>> browser_image_paths;
      base::Version version;
  
      ExtensionData(std::unique_ptr<std::set<base::FilePath>> browser_image_paths,
                    const base::Version& version);
      ~ExtensionData();
    };
  
    ContentVerifierIOData();
  
    void AddData(const std::string& extension_id,
                 std::unique_ptr<ExtensionData> data);
    void RemoveData(const std::string& extension_id);
    void Clear();
  
    // This should be called on the IO thread, and the return value should not
    // be retained or used on other threads.
    const ExtensionData* GetData(const std::string& extension_id);
  
   protected:
    friend class base::RefCountedThreadSafe<ContentVerifierIOData>;
    virtual ~ContentVerifierIOData();
  
    std::map<std::string, std::unique_ptr<ExtensionData>> data_map_;
  };
  
  }  // namespace extensions
  
  #endif  // EXTENSIONS_BROWSER_CONTENT_VERIFIER_IO_DATA_H_
  