cld_component_installer.h revision 1320f92c476a1ad9d19dba2a48c72b75566198e9
1// Copyright 2014 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef CHROME_BROWSER_COMPONENT_UPDATER_CLD_COMPONENT_INSTALLER_H_
6#define CHROME_BROWSER_COMPONENT_UPDATER_CLD_COMPONENT_INSTALLER_H_
7
8#include <stdint.h>
9#include <string>
10#include <vector>
11
12#include "base/files/file_path.h"
13#include "base/gtest_prod_util.h"
14#include "base/macros.h"
15#include "components/component_updater/default_component_installer.h"
16
17namespace test {
18class ComponentCldDataHarness;
19}  // namespace test
20
21namespace component_updater {
22
23class ComponentUpdateService;
24
25// Visible for testing. No need to instantiate this class directly.
26class CldComponentInstallerTraits : public ComponentInstallerTraits {
27 public:
28  CldComponentInstallerTraits();
29  virtual ~CldComponentInstallerTraits() {}
30
31 private:
32  friend class CldComponentInstallerTest;  // For access within SetUp()
33  friend class test::ComponentCldDataHarness;  // For browser tests only
34  FRIEND_TEST_ALL_PREFIXES(CldComponentInstallerTest, ComponentReady);
35  FRIEND_TEST_ALL_PREFIXES(CldComponentInstallerTest, GetBaseDirectory);
36  FRIEND_TEST_ALL_PREFIXES(CldComponentInstallerTest, GetHash);
37  FRIEND_TEST_ALL_PREFIXES(CldComponentInstallerTest, GetInstalledPath);
38  FRIEND_TEST_ALL_PREFIXES(CldComponentInstallerTest, GetName);
39  FRIEND_TEST_ALL_PREFIXES(CldComponentInstallerTest, OnCustomInstall);
40  FRIEND_TEST_ALL_PREFIXES(CldComponentInstallerTest, SetLatestCldDataFile);
41  FRIEND_TEST_ALL_PREFIXES(CldComponentInstallerTest, VerifyInstallation);
42
43  // The following methods override ComponentInstallerTraits.
44  virtual bool CanAutoUpdate() const OVERRIDE;
45  virtual bool OnCustomInstall(const base::DictionaryValue& manifest,
46                               const base::FilePath& install_dir) OVERRIDE;
47  virtual bool VerifyInstallation(
48      const base::FilePath& install_dir) const OVERRIDE;
49  virtual void ComponentReady(
50      const base::Version& version,
51      const base::FilePath& path,
52      scoped_ptr<base::DictionaryValue> manifest) OVERRIDE;
53  virtual base::FilePath GetBaseDirectory() const OVERRIDE;
54  virtual void GetHash(std::vector<uint8_t>* hash) const OVERRIDE;
55  virtual std::string GetName() const OVERRIDE;
56
57  static base::FilePath GetInstalledPath(const base::FilePath& base);
58
59  // Sets the path to the CLD data file. Called internally once a valid CLD
60  // data file has been observed. The implementation of this method is
61  // responsible for configuring the CLD data source.
62  // This method is threadsafe.
63  static void SetLatestCldDataFile(const base::FilePath& path);
64
65  // Returns the file path that was most recently set in SetLatestCldDataFile.
66  static base::FilePath GetLatestCldDataFile();
67
68  DISALLOW_COPY_AND_ASSIGN(CldComponentInstallerTraits);
69};
70
71// Call once during startup to make the component update service aware of
72// the CLD component.
73void RegisterCldComponent(ComponentUpdateService* cus);
74
75}  // namespace component_updater
76
77#endif  // CHROME_BROWSER_COMPONENT_UPDATER_CLD_COMPONENT_INSTALLER_H_
78