summaryrefslogtreecommitdiffstats
path: root/components/update_client/action_update.h
diff options
context:
space:
mode:
Diffstat (limited to 'components/update_client/action_update.h')
-rw-r--r--components/update_client/action_update.h138
1 files changed, 138 insertions, 0 deletions
diff --git a/components/update_client/action_update.h b/components/update_client/action_update.h
new file mode 100644
index 0000000..8b33444
--- /dev/null
+++ b/components/update_client/action_update.h
@@ -0,0 +1,138 @@
+// Copyright 2015 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef COMPONENTS_UPDATE_CLIENT_ACTION_UPDATE_H_
+#define COMPONENTS_UPDATE_CLIENT_ACTION_UPDATE_H_
+
+#include <map>
+#include <string>
+#include <vector>
+
+#include "base/macros.h"
+#include "base/memory/scoped_ptr.h"
+#include "base/threading/thread_checker.h"
+#include "base/version.h"
+#include "components/update_client/action.h"
+#include "components/update_client/component_unpacker.h"
+#include "components/update_client/update_client.h"
+#include "components/update_client/update_engine.h"
+#include "url/gurl.h"
+
+namespace update_client {
+
+class UpdateChecker;
+
+// Defines a template method design pattern for ActionUpdate. This class
+// implements the common code for updating a CRX using either differential or
+// full updates algorithm.
+class ActionUpdate : public Action, protected ActionImpl {
+ public:
+ ActionUpdate();
+ ~ActionUpdate() override;
+
+ // Action overrides.
+ void Run(UpdateContext* update_context, Callback callback) override;
+
+ private:
+ virtual bool IsBackgroundDownload(const CrxUpdateItem* item) = 0;
+ virtual std::vector<GURL> GetUrls(const CrxUpdateItem* item) = 0;
+ virtual void OnDownloadStart(CrxUpdateItem* item) = 0;
+ virtual void OnDownloadSuccess(
+ CrxUpdateItem* item,
+ const CrxDownloader::Result& download_result) = 0;
+ virtual void OnDownloadError(
+ CrxUpdateItem* item,
+ const CrxDownloader::Result& download_result) = 0;
+ virtual void OnInstallStart(CrxUpdateItem* item) = 0;
+ virtual void OnInstallSuccess(CrxUpdateItem* item) = 0;
+ virtual void OnInstallError(CrxUpdateItem* item,
+ ComponentUnpacker::Error error,
+ int extended_error) = 0;
+
+ // Called when progress is being made downloading a CRX. The progress may
+ // not monotonically increase due to how the CRX downloader switches between
+ // different downloaders and fallback urls.
+ void DownloadProgress(const std::string& crx_id,
+ const CrxDownloader::Result& download_result);
+
+ // Called when the CRX package has been downloaded to a temporary location.
+ void DownloadComplete(const std::string& crx_id,
+ const CrxDownloader::Result& download_result);
+
+ void Install(const std::string& crx_id, const base::FilePath& crx_path);
+
+ // TODO(sorin): refactor the public interface of ComponentUnpacker so
+ // that these calls can run on the main thread.
+ void DoInstallOnBlockingTaskRunner(UpdateContext* update_context,
+ CrxUpdateItem* item,
+ const base::FilePath& crx_path);
+
+ void EndUnpackingOnBlockingTaskRunner(UpdateContext* update_context,
+ CrxUpdateItem* item,
+ const base::FilePath& crx_path,
+ ComponentUnpacker::Error error,
+ int extended_error);
+
+ void DoneInstalling(const std::string& crx_id,
+ ComponentUnpacker::Error error,
+ int extended_error);
+
+ DISALLOW_COPY_AND_ASSIGN(ActionUpdate);
+};
+
+class ActionUpdateDiff : public ActionUpdate {
+ public:
+ static scoped_ptr<Action> Create();
+
+ private:
+ ActionUpdateDiff();
+ ~ActionUpdateDiff() override;
+
+ void TryUpdateFull();
+
+ // ActionUpdate overrides.
+ bool IsBackgroundDownload(const CrxUpdateItem* item) override;
+ std::vector<GURL> GetUrls(const CrxUpdateItem* item) override;
+ void OnDownloadStart(CrxUpdateItem* item) override;
+ void OnDownloadSuccess(CrxUpdateItem* item,
+ const CrxDownloader::Result& download_result) override;
+ void OnDownloadError(CrxUpdateItem* item,
+ const CrxDownloader::Result& download_result) override;
+ void OnInstallStart(CrxUpdateItem* item) override;
+ void OnInstallSuccess(CrxUpdateItem* item) override;
+ void OnInstallError(CrxUpdateItem* item,
+ ComponentUnpacker::Error error,
+ int extended_error) override;
+
+ DISALLOW_COPY_AND_ASSIGN(ActionUpdateDiff);
+};
+
+class ActionUpdateFull : ActionUpdate {
+ public:
+ static scoped_ptr<Action> Create();
+
+ private:
+ ActionUpdateFull();
+ ~ActionUpdateFull() override;
+
+ // ActionUpdate overrides.
+ bool IsBackgroundDownload(const CrxUpdateItem* item) override;
+ std::vector<GURL> GetUrls(const CrxUpdateItem* item) override;
+ void OnDownloadStart(CrxUpdateItem* item) override;
+ void OnDownloadSuccess(CrxUpdateItem* item,
+ const CrxDownloader::Result& download_result) override;
+ void OnDownloadError(CrxUpdateItem* item,
+ const CrxDownloader::Result& download_result) override;
+ void OnInstallStart(CrxUpdateItem* item) override;
+ void OnInstallSuccess(CrxUpdateItem* item) override;
+ void OnInstallError(CrxUpdateItem* item,
+ ComponentUnpacker::Error error,
+ int extended_error) override;
+
+ DISALLOW_COPY_AND_ASSIGN(ActionUpdateFull);
+};
+
+} // namespace update_client
+
+#endif // COMPONENTS_UPDATE_CLIENT_ACTION_UPDATE_H_