1116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Copyright 2014 The Chromium Authors. All rights reserved.
2116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Use of this source code is governed by a BSD-style license that can be
3116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// found in the LICENSE file.
4116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
5116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "chrome/browser/extensions/active_install_data.h"
6116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
7116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "chrome/browser/extensions/install_tracker.h"
8116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
9116680a4aac90f2aa7413d9095a592090648e557Ben Murdochnamespace extensions {
10116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
11116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// ActiveInstallData:
12116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
13116680a4aac90f2aa7413d9095a592090648e557Ben MurdochActiveInstallData::ActiveInstallData()
14116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    : percent_downloaded(0), is_ephemeral(false) {
15116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}
16116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
17116680a4aac90f2aa7413d9095a592090648e557Ben MurdochActiveInstallData::ActiveInstallData(const std::string& extension_id)
18116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    : extension_id(extension_id), percent_downloaded(0), is_ephemeral(false) {
19116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}
20116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
21116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// ScopedActiveInstall:
22116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
23116680a4aac90f2aa7413d9095a592090648e557Ben MurdochScopedActiveInstall::ScopedActiveInstall(InstallTracker* tracker,
24116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                                         const ActiveInstallData& install_data)
25116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    : tracker_(tracker),
26116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      tracker_observer_(this),
27116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      extension_id_(install_data.extension_id) {
28116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  Init();
29116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  tracker_->AddActiveInstall(install_data);
30116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}
31116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
32116680a4aac90f2aa7413d9095a592090648e557Ben MurdochScopedActiveInstall::ScopedActiveInstall(InstallTracker* tracker,
33116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                                         const std::string& extension_id)
34116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    : tracker_(tracker), tracker_observer_(this), extension_id_(extension_id) {
35116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  Init();
36116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}
37116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
38116680a4aac90f2aa7413d9095a592090648e557Ben MurdochScopedActiveInstall::~ScopedActiveInstall() {
39116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  if (tracker_)
40116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    tracker_->RemoveActiveInstall(extension_id_);
41116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}
42116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
43116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid ScopedActiveInstall::CancelDeregister() {
44116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  tracker_observer_.RemoveAll();
45116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  tracker_ = NULL;
46116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}
47116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
48116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid ScopedActiveInstall::Init() {
49116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  DCHECK(!extension_id_.empty());
50116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  DCHECK(tracker_);
51116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  tracker_observer_.Add(tracker_);
52116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}
53116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
54116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid ScopedActiveInstall::OnShutdown() {
55116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  CancelDeregister();
56116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}
57116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
58116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}  // namespace extensions
59