blob: 2d4e1213a710332c77b3519bd8ccc3547d10b492 [file] [log] [blame]
// Copyright 2017 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 TOOLS_TRAFFIC_ANNOTATION_AUDITOR_TRAFFIC_ANNOTATION_EXPORTER_H_
#define TOOLS_TRAFFIC_ANNOTATION_AUDITOR_TRAFFIC_ANNOTATION_EXPORTER_H_
#include <map>
#include <set>
#include <vector>
#include "base/files/file_path.h"
#include "base/stl_util.h"
#include "tools/traffic_annotation/auditor/instance.h"
class TrafficAnnotationExporter {
public:
struct ArchivedAnnotation {
ArchivedAnnotation();
ArchivedAnnotation(const ArchivedAnnotation& other);
~ArchivedAnnotation();
AnnotationInstance::Type type;
int unique_id_hash_code;
int second_id_hash_code;
int content_hash_code;
std::string deprecation_date;
std::vector<std::string> os_list;
std::set<int> semantics_fields;
std::set<int> policy_fields;
std::string file_path;
};
TrafficAnnotationExporter(const base::FilePath& source_path);
~TrafficAnnotationExporter();
TrafficAnnotationExporter(const TrafficAnnotationExporter&) = delete;
TrafficAnnotationExporter(TrafficAnnotationExporter&&) = delete;
// Loads annotations from annotations.xml file into |archive_|.
bool LoadAnnotationsXML();
// Updates |archive_| with current set of extracted annotations and reserved
// ids. Sets the |modified_| flag if any item is updated. Appends errors to
// |errors|.
void UpdateAnnotations(const std::vector<AnnotationInstance>& annotations,
const std::map<int, std::string>& reserved_ids,
std::vector<AuditorResult>* errors);
// Saves |archive_| into annotations.xml.
bool SaveAnnotationsXML() const;
// Returns the required updates for annotations.xml.
std::string GetRequiredUpdates();
// Produces the list of deprecated hash codes. Requires annotations.xml to be
// loaded.
void GetDeprecatedHashCodes(std::set<int>* hash_codes);
bool modified() const { return modified_; }
// Runs tests on content of |archive_|.
void CheckArchivedAnnotations(std::vector<AuditorResult>* errors);
const std::map<std::string, ArchivedAnnotation>& GetArchivedAnnotations()
const {
return archive_;
}
// Checks if the current platform is in the os list of archived annotation.
bool MatchesCurrentPlatform(const ArchivedAnnotation& annotation) const {
return base::ContainsValue(annotation.os_list, current_platform_);
}
// Produces the list of annotations that are not defined in this platform.
// Returns false if annotations.xml is not loaded.
bool GetOtherPlatformsAnnotationIDs(std::vector<std::string>* ids) const;
// Returns the number of items in annotations.xml for testing.
unsigned GetXMLItemsCountForTesting();
std::string GetXMLDifferencesForTesting(const std::string& old_xml,
const std::string& new_xml) {
return GetXMLDifferences(old_xml, new_xml);
}
private:
// Generates a text serialized XML for current report items.
std::string GenerateSerializedXML() const;
// Returns the required updates to convert one serialized XML to another.
std::string GetXMLDifferences(const std::string& old_xml,
const std::string& new_xml);
std::vector<std::string> all_supported_platforms_;
std::map<std::string, ArchivedAnnotation> archive_;
const base::FilePath source_path_;
std::string current_platform_;
bool modified_;
};
#endif // TOOLS_TRAFFIC_ANNOTATION_AUDITOR_TRAFFIC_ANNOTATION_EXPORTER_H_