12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file.
42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#ifndef CHROME_BROWSER_EXTENSIONS_INSTALL_OBSERVER_H_
62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define CHROME_BROWSER_EXTENSIONS_INSTALL_OBSERVER_H_
72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
84e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include <string>
94e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
10f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "ui/gfx/image/image_skia.h"
112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace extensions {
132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class Extension;
152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class InstallObserver {
172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public:
18f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  struct ExtensionInstallParams {
19f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    ExtensionInstallParams(
20f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)        std::string extension_id,
21f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)        std::string extension_name,
22f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)        gfx::ImageSkia installing_icon,
23f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)        bool is_app,
24f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)        bool is_platform_app);
25f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
26f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    std::string extension_id;
27f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    std::string extension_name;
28f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    gfx::ImageSkia installing_icon;
29f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    bool is_app;
30f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    bool is_platform_app;
31f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    bool is_ephemeral;
32f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  };
33f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
34a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // Called at the beginning of the complete installation process, i.e., this
35a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // is called before the extension download begins.
36effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  virtual void OnBeginExtensionInstall(const ExtensionInstallParams& params) {}
37effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
38effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  // Called when the Extension begins the download process. This typically
39effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  // happens right after OnBeginExtensionInstall(), unless the extension has
40effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  // already been downloaded.
41effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  virtual void OnBeginExtensionDownload(const std::string& extension_id) {}
422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
43a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // Called whenever the extension download is updated.
44a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // Note: Some extensions have multiple modules, so the percent included here
45a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // is a simple calculation of:
46a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // (finished_files * 100 + current_file_progress) / (total files * 100).
472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void OnDownloadProgress(const std::string& extension_id,
48effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch                                  int percent_downloaded) {}
49effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
50effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  // Called when the necessary downloads have completed, and the crx
51effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  // installation is due to start.
52effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  virtual void OnBeginCrxInstall(const std::string& extension_id) {}
532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
540529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  // Called when installation of a crx has completed (either successfully or
550529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  // not).
560529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  virtual void OnFinishCrxInstall(const std::string& extension_id,
570529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch                                  bool success) {}
580529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
59a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // Called if the extension fails to install.
60effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  virtual void OnInstallFailure(const std::string& extension_id) {}
612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
62f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  // Called when an extension or an app is installed to the app list. These are
63f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  // simply forwarded from the chrome::NOTIFICATIONs.
64effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  virtual void OnDisabledExtensionUpdated(const Extension* extension) {}
65effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  virtual void OnAppInstalledToAppList(const std::string& extension_id) {}
66a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
67a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // Called when the app list is reordered.
68effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  virtual void OnAppsReordered() {}
692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Notifies observers that the observed object is going away.
71effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  virtual void OnShutdown() {}
722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected:
742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual ~InstallObserver() {}
752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}  // namespace extensions
782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif  // CHROME_BROWSER_EXTENSIONS_INSTALL_OBSERVER_H_
80