| // Copyright 2026 Google LLC |
| // |
| // Licensed under the Apache License, Version 2.0 (the "License"); |
| // you may not use this file except in compliance with the License. |
| // You may obtain a copy of the License at |
| // |
| // https://www.apache.org/licenses/LICENSE-2.0 |
| // |
| // Unless required by applicable law or agreed to in writing, software |
| // distributed under the License is distributed on an "AS IS" BASIS, |
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| // See the License for the specific language governing permissions and |
| // limitations under the License. |
| // |
| |
| #ifndef THIRD_PARTY_CREDENTIO_VALIDATOR_TRACKER_H_ |
| #define THIRD_PARTY_CREDENTIO_VALIDATOR_TRACKER_H_ |
| |
| #include <stdbool.h> |
| |
| #include <string> |
| |
| #include "absl/container/flat_hash_set.h" |
| #include "absl/strings/string_view.h" |
| #include "constants/status_codes.h" |
| #include "google/protobuf/repeated_ptr_field.h" |
| #include "proto/manifest.pb.h" |
| #include "proto/validation_status.pb.h" |
| |
| namespace credentio { |
| |
| // Tracks the validation process by accumulating the C2PA status codes returned |
| // in various validation steps. |
| class ValidationTracker { |
| public: |
| // Constructs a new validation tracker for the given manifest. |
| // Status values will be recorded in the given manifest, and the URL of the |
| // manifest itself will be used by default. |
| explicit ValidationTracker(Manifest* manifest); |
| |
| // Constructs a new validation tracker for the given manifest label and |
| // status set. |
| explicit ValidationTracker(absl::string_view manifest_label, |
| ValidationStatusSet* status_set); |
| |
| // Returns a tracker that uses the URL of the given assertion by default. |
| // Status values are recorded to the same location as the parent tracker. |
| ValidationTracker AssertionTracker(absl::string_view assertion_label); |
| |
| struct RecordOptions { |
| // The url to record with the status. If the url is empty, the manifest url |
| // is used. If the url starts with "self#jumbf=", the supplied url is used. |
| // Otherwise the supplied value is interpreted as a path relative to the |
| // manifest url. |
| absl::string_view url = ""; |
| // An optional explanation for the status. |
| absl::string_view explanation = ""; |
| }; |
| |
| // Records a C2PA success status code. |
| void RecordSuccess(SuccessStatusCode status, RecordOptions options); |
| |
| // Records a C2PA informational status code. |
| void RecordInformational(InformationalStatusCode status, |
| RecordOptions options); |
| |
| // Records a C2PA failure status code. |
| void RecordFailure(FailureStatusCode status, RecordOptions options); |
| |
| // Returns if the validation process has any failures so far. |
| bool HasFailures() const; |
| // Returns the C2PA failure status codes observed so far. |
| absl::flat_hash_set<std::string> GetFailures() const; |
| // Returns the C2PA failure statuses observed so far. |
| google::protobuf::RepeatedPtrField<ValidationStatus> GetFailureStatuses() |
| const { |
| return status_set_->failures(); |
| } |
| // Returns the C2PA success status codes observed so far. |
| absl::flat_hash_set<std::string> GetSuccesses() const; |
| // Returns the C2PA success statuses observed so far. |
| google::protobuf::RepeatedPtrField<ValidationStatus> GetSuccessStatuses() |
| const { |
| return status_set_->successes(); |
| } |
| // Returns the C2PA informational status codes observed so far. |
| absl::flat_hash_set<std::string> GetInformationals() const; |
| // Returns the C2PA informational statuses observed so far. |
| google::protobuf::RepeatedPtrField<ValidationStatus> |
| GetInformationalStatuses() const { |
| return status_set_->informationals(); |
| } |
| |
| // Merges the statuses from a ValidationStatusSet into this tracker. |
| void MergeStatuses(const ValidationStatusSet& statuses); |
| |
| private: |
| absl::string_view manifest_label_; |
| absl::string_view assertion_label_; |
| ValidationStatusSet* const status_set_; |
| std::string id_; |
| }; |
| |
| } // namespace credentio |
| |
| #endif // THIRD_PARTY_CREDENTIO_VALIDATOR_TRACKER_H_ |