1aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo//
2aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo// Copyright (C) 2010 The Android Open Source Project
3aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo//
4aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo// Licensed under the Apache License, Version 2.0 (the "License");
5aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo// you may not use this file except in compliance with the License.
6aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo// You may obtain a copy of the License at
7aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo//
8aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo//      http://www.apache.org/licenses/LICENSE-2.0
9aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo//
10aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo// Unless required by applicable law or agreed to in writing, software
11aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo// distributed under the License is distributed on an "AS IS" BASIS,
12aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo// See the License for the specific language governing permissions and
14aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo// limitations under the License.
15aea4c1cea20dda7ae7e85fc8924a2d784f70d806Alex Deymo//
167a22d791f58f8de711a4d70f247c1c14833c8e4bDarin Petkov
17072359ca138504065e1e0c1189eb38c09576d324Alex Vakulenko#ifndef UPDATE_ENGINE_PAYLOAD_GENERATOR_FULL_UPDATE_GENERATOR_H_
18072359ca138504065e1e0c1189eb38c09576d324Alex Vakulenko#define UPDATE_ENGINE_PAYLOAD_GENERATOR_FULL_UPDATE_GENERATOR_H_
197a22d791f58f8de711a4d70f247c1c14833c8e4bDarin Petkov
20072359ca138504065e1e0c1189eb38c09576d324Alex Vakulenko#include <string>
21072359ca138504065e1e0c1189eb38c09576d324Alex Vakulenko#include <vector>
22072359ca138504065e1e0c1189eb38c09576d324Alex Vakulenko
23477aec2166a571cbe28081d806c3226e8b31b6e9Alex Deymo#include <base/macros.h>
24477aec2166a571cbe28081d806c3226e8b31b6e9Alex Deymo
258cc502dacbccdab96824d42287f230ce04004784Sen Jiang#include "update_engine/payload_generator/blob_file_writer.h"
26477aec2166a571cbe28081d806c3226e8b31b6e9Alex Deymo#include "update_engine/payload_generator/operations_generator.h"
27f1cbe1783dd025bd7243a8df12f20548196cc023Alex Deymo#include "update_engine/payload_generator/payload_generation_config.h"
287a22d791f58f8de711a4d70f247c1c14833c8e4bDarin Petkov
297a22d791f58f8de711a4d70f247c1c14833c8e4bDarin Petkovnamespace chromeos_update_engine {
307a22d791f58f8de711a4d70f247c1c14833c8e4bDarin Petkov
31477aec2166a571cbe28081d806c3226e8b31b6e9Alex Deymoclass FullUpdateGenerator : public OperationsGenerator {
327a22d791f58f8de711a4d70f247c1c14833c8e4bDarin Petkov public:
33477aec2166a571cbe28081d806c3226e8b31b6e9Alex Deymo  FullUpdateGenerator() = default;
34477aec2166a571cbe28081d806c3226e8b31b6e9Alex Deymo
357fad7b7d3d7dcdaa7b17855fe333fcc4da000b46Alex Deymo  // OperationsGenerator override.
36f1cbe1783dd025bd7243a8df12f20548196cc023Alex Deymo  // Creates a full update for the target image defined in |config|. |config|
37f1cbe1783dd025bd7243a8df12f20548196cc023Alex Deymo  // must be a valid payload generation configuration for a full payload.
38ebdf17d4202c67933764135bfc1cece629829201Sen Jiang  // Populates |aops|, with data about the update operations, and writes
39ebdf17d4202c67933764135bfc1cece629829201Sen Jiang  // relevant data to |blob_file|.
40477aec2166a571cbe28081d806c3226e8b31b6e9Alex Deymo  bool GenerateOperations(
41f1cbe1783dd025bd7243a8df12f20548196cc023Alex Deymo      const PayloadGenerationConfig& config,
42ebdf17d4202c67933764135bfc1cece629829201Sen Jiang      const PartitionConfig& old_part,
437fad7b7d3d7dcdaa7b17855fe333fcc4da000b46Alex Deymo      const PartitionConfig& new_part,
448cc502dacbccdab96824d42287f230ce04004784Sen Jiang      BlobFileWriter* blob_file,
45ebdf17d4202c67933764135bfc1cece629829201Sen Jiang      std::vector<AnnotatedOperation>* aops) override;
467fad7b7d3d7dcdaa7b17855fe333fcc4da000b46Alex Deymo
477a22d791f58f8de711a4d70f247c1c14833c8e4bDarin Petkov private:
48477aec2166a571cbe28081d806c3226e8b31b6e9Alex Deymo  DISALLOW_COPY_AND_ASSIGN(FullUpdateGenerator);
497a22d791f58f8de711a4d70f247c1c14833c8e4bDarin Petkov};
507a22d791f58f8de711a4d70f247c1c14833c8e4bDarin Petkov
517a22d791f58f8de711a4d70f247c1c14833c8e4bDarin Petkov}  // namespace chromeos_update_engine
527a22d791f58f8de711a4d70f247c1c14833c8e4bDarin Petkov
53072359ca138504065e1e0c1189eb38c09576d324Alex Vakulenko#endif  // UPDATE_ENGINE_PAYLOAD_GENERATOR_FULL_UPDATE_GENERATOR_H_
54