Index: src/platform/update_engine/install_action.h |
diff --git a/src/platform/update_engine/install_action.h b/src/platform/update_engine/install_action.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..8bed632210e077c43c40b20d5c48dee59530a903 |
--- /dev/null |
+++ b/src/platform/update_engine/install_action.h |
@@ -0,0 +1,86 @@ |
+// Copyright (c) 2009 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 CHROMEOS_PLATFORM_UPDATE_ENGINE_INSTALL_ACTION_H__ |
+#define CHROMEOS_PLATFORM_UPDATE_ENGINE_INSTALL_ACTION_H__ |
+ |
+#include "base/scoped_ptr.h" |
+#include "update_engine/action.h" |
+#include "update_engine/delta_diff_parser.h" |
+#include "update_engine/install_plan.h" |
+#include "update_engine/update_metadata.pb.h" |
+ |
+// The Install Action is responsible for ensuring the update that's been |
+// downloaded has been installed. This may be a no-op in the case of a full |
+// update, since those will be downloaded directly into the destination |
+// partition. However, for a delta update some work is required. |
+ |
+// An InstallPlan struct must be passed to this action before PerformAction() |
+// is called so that this action knows if it's a delta update, and if so, |
+// what the paths are. |
+ |
+// TODO(adlr): At the moment, InstallAction is synchronous. It should be |
+// updated to be asynchronous at some point. |
+ |
+namespace chromeos_update_engine { |
+ |
+class InstallAction; |
+class NoneType; |
+ |
+template<> |
+class ActionTraits<InstallAction> { |
+ public: |
+ // Takes the InstallPlan for input |
+ typedef InstallPlan InputObjectType; |
+ // On success, puts the output device path on output |
+ typedef std::string OutputObjectType; |
+}; |
+ |
+class InstallAction : public Action<InstallAction> { |
+ public: |
+ InstallAction() {} |
+ typedef ActionTraits<InstallAction>::InputObjectType InputObjectType; |
+ typedef ActionTraits<InstallAction>::OutputObjectType OutputObjectType; |
+ void PerformAction(); |
+ |
+ // This action is synchronous for now. |
+ void TerminateProcessing() { CHECK(false); } |
+ |
+ // Debugging/logging |
+ static std::string StaticType() { return "InstallAction"; } |
+ std::string Type() const { return StaticType(); } |
+ |
+ private: |
+ // Installs 'file' into mountpoint. 'path' is the path that 'file' |
+ // should have when we reboot and mountpoint is root. |
+ bool InstallFile(const std::string& mountpoint, |
+ const DeltaArchiveManifest_File& file, |
+ const std::string& path, |
+ const DeltaDiffParser& parser) const; |
+ // These are helpers for InstallFile. They focus on specific file types: |
+ // Regular data files: |
+ bool InstallFileRegularFile(const std::string& mountpoint, |
+ const DeltaArchiveManifest_File& file, |
+ const std::string& path, |
+ const DeltaDiffParser& parser, |
+ const bool exists) const; |
+ // char/block devices, fifos, and sockets: |
+ bool InstallFileSpecialFile(const std::string& mountpoint, |
+ const DeltaArchiveManifest_File& file, |
+ const std::string& path, |
+ const DeltaDiffParser& parser, |
+ const bool exists) const; |
+ // symlinks: |
+ bool InstallFileSymlink(const std::string& mountpoint, |
+ const DeltaArchiveManifest_File& file, |
+ const std::string& path, |
+ const DeltaDiffParser& parser, |
+ const bool exists) const; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(InstallAction); |
+}; |
+ |
+} // namespace chromeos_update_engine |
+ |
+#endif // CHROMEOS_PLATFORM_UPDATE_ENGINE_INSTALL_ACTION_H__ |