1 // Copyright 2015 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.
5 #ifndef COMPONENTS_UPDATE_CLIENT_ACTION_UPDATE_H_
6 #define COMPONENTS_UPDATE_CLIENT_ACTION_UPDATE_H_
12 #include "base/macros.h"
13 #include "base/memory/scoped_ptr.h"
14 #include "base/threading/thread_checker.h"
15 #include "base/version.h"
16 #include "components/update_client/action.h"
17 #include "components/update_client/component_unpacker.h"
18 #include "components/update_client/crx_downloader.h"
19 #include "components/update_client/update_client.h"
20 #include "components/update_client/update_engine.h"
23 namespace update_client
{
27 // Defines a template method design pattern for ActionUpdate. This class
28 // implements the common code for updating a single CRX using either
29 // a differential or a full update algorithm.
30 // TODO(sorin): further refactor this class to enforce that there is a 1:1
31 // relationship between one instance of this class and one CRX id. In other
32 // words, make the CRX id and its associated CrxUpdateItem data structure
33 // a member of this class instead of passing them around as function parameters.
34 class ActionUpdate
: public Action
, protected ActionImpl
{
37 ~ActionUpdate() override
;
40 void Run(UpdateContext
* update_context
, Callback callback
) override
;
43 virtual bool IsBackgroundDownload(const CrxUpdateItem
* item
) = 0;
44 virtual std::vector
<GURL
> GetUrls(const CrxUpdateItem
* item
) = 0;
45 virtual void OnDownloadStart(CrxUpdateItem
* item
) = 0;
46 virtual void OnDownloadSuccess(
48 const CrxDownloader::Result
& download_result
) = 0;
49 virtual void OnDownloadError(
51 const CrxDownloader::Result
& download_result
) = 0;
52 virtual void OnInstallStart(CrxUpdateItem
* item
) = 0;
53 virtual void OnInstallSuccess(CrxUpdateItem
* item
) = 0;
54 virtual void OnInstallError(CrxUpdateItem
* item
,
55 ComponentUnpacker::Error error
,
56 int extended_error
) = 0;
58 // Called when progress is being made downloading a CRX. The progress may
59 // not monotonically increase due to how the CRX downloader switches between
60 // different downloaders and fallback urls.
61 void DownloadProgress(const std::string
& id
,
62 const CrxDownloader::Result
& download_result
);
64 // Called when the CRX package has been downloaded to a temporary location.
65 void DownloadComplete(const std::string
& id
,
66 const CrxDownloader::Result
& download_result
);
68 void Install(const std::string
& id
, const base::FilePath
& crx_path
);
70 // TODO(sorin): refactor the public interface of ComponentUnpacker so
71 // that these calls can run on the main thread.
72 void DoInstallOnBlockingTaskRunner(UpdateContext
* update_context
,
74 const base::FilePath
& crx_path
);
76 void EndUnpackingOnBlockingTaskRunner(UpdateContext
* update_context
,
78 const base::FilePath
& crx_path
,
79 ComponentUnpacker::Error error
,
82 void DoneInstalling(const std::string
& id
,
83 ComponentUnpacker::Error error
,
86 // Downloads updates for one CRX id only.
87 scoped_ptr
<CrxDownloader
> crx_downloader_
;
90 scoped_refptr
<ComponentUnpacker
> unpacker_
;
92 DISALLOW_COPY_AND_ASSIGN(ActionUpdate
);
95 class ActionUpdateDiff
: public ActionUpdate
{
97 static scoped_ptr
<Action
> Create();
101 ~ActionUpdateDiff() override
;
103 void TryUpdateFull();
105 // ActionUpdate overrides.
106 bool IsBackgroundDownload(const CrxUpdateItem
* item
) override
;
107 std::vector
<GURL
> GetUrls(const CrxUpdateItem
* item
) override
;
108 void OnDownloadStart(CrxUpdateItem
* item
) override
;
109 void OnDownloadSuccess(CrxUpdateItem
* item
,
110 const CrxDownloader::Result
& download_result
) override
;
111 void OnDownloadError(CrxUpdateItem
* item
,
112 const CrxDownloader::Result
& download_result
) override
;
113 void OnInstallStart(CrxUpdateItem
* item
) override
;
114 void OnInstallSuccess(CrxUpdateItem
* item
) override
;
115 void OnInstallError(CrxUpdateItem
* item
,
116 ComponentUnpacker::Error error
,
117 int extended_error
) override
;
119 DISALLOW_COPY_AND_ASSIGN(ActionUpdateDiff
);
122 class ActionUpdateFull
: ActionUpdate
{
124 static scoped_ptr
<Action
> Create();
128 ~ActionUpdateFull() override
;
130 // ActionUpdate overrides.
131 bool IsBackgroundDownload(const CrxUpdateItem
* item
) override
;
132 std::vector
<GURL
> GetUrls(const CrxUpdateItem
* item
) override
;
133 void OnDownloadStart(CrxUpdateItem
* item
) override
;
134 void OnDownloadSuccess(CrxUpdateItem
* item
,
135 const CrxDownloader::Result
& download_result
) override
;
136 void OnDownloadError(CrxUpdateItem
* item
,
137 const CrxDownloader::Result
& download_result
) override
;
138 void OnInstallStart(CrxUpdateItem
* item
) override
;
139 void OnInstallSuccess(CrxUpdateItem
* item
) override
;
140 void OnInstallError(CrxUpdateItem
* item
,
141 ComponentUnpacker::Error error
,
142 int extended_error
) override
;
144 DISALLOW_COPY_AND_ASSIGN(ActionUpdateFull
);
147 } // namespace update_client
149 #endif // COMPONENTS_UPDATE_CLIENT_ACTION_UPDATE_H_