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_EXTENSIONS_ACTIVE_INSTALL_DATA_H_
6#define CHROME_BROWSER_EXTENSIONS_ACTIVE_INSTALL_DATA_H_
7
8#include <string>
9
10#include "base/macros.h"
11#include "base/scoped_observer.h"
12#include "chrome/browser/extensions/install_observer.h"
13
14namespace extensions {
15
16class InstallTracker;
17
18// Details of an active extension install.
19struct ActiveInstallData {
20 public:
21  ActiveInstallData();
22  explicit ActiveInstallData(const std::string& extension_id);
23
24  std::string extension_id;
25  int percent_downloaded;
26  bool is_ephemeral;
27};
28
29// Registers and deregisters and an active extension install with the
30// InstallTracker.
31class ScopedActiveInstall : public InstallObserver {
32 public:
33  // This constructor registers an active install with the InstallTracker.
34  ScopedActiveInstall(InstallTracker* tracker,
35                      const ActiveInstallData& install_data);
36
37  // This constructor does not register an active install. The extension install
38  // is still deregistered upon destruction.
39  ScopedActiveInstall(InstallTracker* tracker, const std::string& extension_id);
40
41  virtual ~ScopedActiveInstall();
42
43  // Ensures that the active install is not deregistered upon destruction. This
44  // may be necessary if the extension install outlives the lifetime of this
45  // instance.
46  void CancelDeregister();
47
48 private:
49  void Init();
50
51  // InstallObserver implementation.
52  virtual void OnShutdown() OVERRIDE;
53
54  InstallTracker* tracker_;
55  ScopedObserver<InstallTracker, InstallObserver> tracker_observer_;
56  std::string extension_id_;
57
58  DISALLOW_COPY_AND_ASSIGN(ScopedActiveInstall);
59};
60
61}  // namespace extensions
62
63#endif  // CHROME_BROWSER_EXTENSIONS_ACTIVE_INSTALL_DATA_H_
64