Update To 11.40.268.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / apps / drive / drive_app_converter.h
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_APPS_DRIVE_DRIVE_APP_CONVERTER_H_
6 #define CHROME_BROWSER_APPS_DRIVE_DRIVE_APP_CONVERTER_H_
7
8 #include <string>
9
10 #include "base/callback.h"
11 #include "base/macros.h"
12 #include "base/memory/ref_counted.h"
13 #include "base/memory/scoped_vector.h"
14 #include "chrome/browser/drive/drive_app_registry.h"
15 #include "chrome/browser/extensions/install_observer.h"
16 #include "chrome/common/web_application_info.h"
17
18 class Profile;
19
20 namespace extensions {
21 class CrxInstaller;
22 class Extension;
23 }
24
25 // DriveAppConverter creates and installs a local URL app for the given
26 // DriveAppInfo into the given profile.
27 class DriveAppConverter : public extensions::InstallObserver {
28  public:
29   typedef base::Callback<void(const DriveAppConverter*, bool success)>
30       FinishedCallback;
31
32   DriveAppConverter(Profile* profile,
33                     const drive::DriveAppInfo& drive_app_info,
34                     const FinishedCallback& finished_callback);
35   ~DriveAppConverter() override;
36
37   void Start();
38   bool IsStarted() const;
39
40   bool IsInstalling(const std::string& app_id) const;
41
42   const drive::DriveAppInfo& drive_app_info() const { return drive_app_info_; }
43   const extensions::Extension* extension() const { return extension_; }
44   bool is_new_install() const { return is_new_install_; }
45
46  private:
47   class IconFetcher;
48
49   // Callbacks from IconFetcher.
50   void OnIconFetchComplete(const IconFetcher* fetcher);
51
52   void StartInstall();
53   void PostInstallCleanUp();
54
55   // extensions::InstallObserver:
56   void OnFinishCrxInstall(const std::string& extension_id,
57                           bool success) override;
58
59   Profile* profile_;
60   const drive::DriveAppInfo drive_app_info_;
61
62   WebApplicationInfo web_app_;
63   const extensions::Extension* extension_;
64   bool is_new_install_;
65
66   ScopedVector<IconFetcher> fetchers_;
67   scoped_refptr<extensions::CrxInstaller> crx_installer_;
68
69   FinishedCallback finished_callback_;
70
71   DISALLOW_COPY_AND_ASSIGN(DriveAppConverter);
72 };
73
74 #endif  // CHROME_BROWSER_APPS_DRIVE_DRIVE_APP_CONVERTER_H_