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 14 namespace extensions { 15 16 class InstallTracker; 17 18 // Details of an active extension install. 19 struct 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. 31 class 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