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#include "chrome/browser/extensions/active_install_data.h"
6
7#include "chrome/browser/extensions/install_tracker.h"
8
9namespace extensions {
10
11// ActiveInstallData:
12
13ActiveInstallData::ActiveInstallData()
14    : percent_downloaded(0), is_ephemeral(false) {
15}
16
17ActiveInstallData::ActiveInstallData(const std::string& extension_id)
18    : extension_id(extension_id), percent_downloaded(0), is_ephemeral(false) {
19}
20
21// ScopedActiveInstall:
22
23ScopedActiveInstall::ScopedActiveInstall(InstallTracker* tracker,
24                                         const ActiveInstallData& install_data)
25    : tracker_(tracker),
26      tracker_observer_(this),
27      extension_id_(install_data.extension_id) {
28  Init();
29  tracker_->AddActiveInstall(install_data);
30}
31
32ScopedActiveInstall::ScopedActiveInstall(InstallTracker* tracker,
33                                         const std::string& extension_id)
34    : tracker_(tracker), tracker_observer_(this), extension_id_(extension_id) {
35  Init();
36}
37
38ScopedActiveInstall::~ScopedActiveInstall() {
39  if (tracker_)
40    tracker_->RemoveActiveInstall(extension_id_);
41}
42
43void ScopedActiveInstall::CancelDeregister() {
44  tracker_observer_.RemoveAll();
45  tracker_ = NULL;
46}
47
48void ScopedActiveInstall::Init() {
49  DCHECK(!extension_id_.empty());
50  DCHECK(tracker_);
51  tracker_observer_.Add(tracker_);
52}
53
54void ScopedActiveInstall::OnShutdown() {
55  CancelDeregister();
56}
57
58}  // namespace extensions
59