| // Copyright 2018 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 THIRD_PARTY_BLINK_RENDERER_CORE_FRAME_DACTYLOSCOPER_H_ |
| #define THIRD_PARTY_BLINK_RENDERER_CORE_FRAME_DACTYLOSCOPER_H_ |
| |
| #include "base/optional.h" |
| #include "third_party/blink/public/common/privacy_budget/identifiable_token.h" |
| #include "third_party/blink/public/common/privacy_budget/identifiable_token_builder.h" |
| #include "third_party/blink/renderer/core/core_export.h" |
| #include "third_party/blink/renderer/core/frame/web_feature_forward.h" |
| #include "third_party/blink/renderer/core/typed_arrays/array_buffer_view_helpers.h" |
| #include "third_party/blink/renderer/core/typed_arrays/dom_typed_array.h" |
| #include "third_party/blink/renderer/platform/wtf/allocator/allocator.h" |
| #include "third_party/blink/renderer/platform/wtf/forward.h" |
| #include "third_party/blink/renderer/platform/wtf/text/wtf_string.h" |
| |
| namespace blink { |
| |
| class ExecutionContext; |
| class SVGStringListTearOff; |
| |
| class CORE_EXPORT Dactyloscoper { |
| DISALLOW_NEW(); |
| |
| public: |
| Dactyloscoper(); |
| |
| void Record(WebFeature); |
| |
| static void Record(ExecutionContext*, WebFeature); |
| |
| // These are helpers used by the generated bindings code when invoking IDL |
| // methods with HighEntropy=Direct. |
| static void RecordDirectSurface(ExecutionContext*, |
| WebFeature, |
| const IdentifiableToken&); |
| static void RecordDirectSurface(ExecutionContext*, WebFeature, const String&); |
| static void RecordDirectSurface(ExecutionContext*, |
| WebFeature, |
| const Vector<String>&); |
| static void RecordDirectSurface(ExecutionContext*, |
| WebFeature, |
| const DOMArrayBufferView*); |
| static void RecordDirectSurface(ExecutionContext*, |
| WebFeature, |
| SVGStringListTearOff*); |
| static void RecordDirectSurface( |
| ExecutionContext* context, |
| WebFeature feature, |
| const NotShared<DOMArrayBufferView>& not_shared) { |
| Dactyloscoper::RecordDirectSurface(context, feature, not_shared.Get()); |
| } |
| static void RecordDirectSurface( |
| ExecutionContext* context, |
| WebFeature feature, |
| const MaybeShared<DOMArrayBufferView>& maybe_shared) { |
| Dactyloscoper::RecordDirectSurface(context, feature, maybe_shared.Get()); |
| } |
| |
| template <typename T> |
| static void RecordDirectSurface(ExecutionContext* context, |
| WebFeature feature, |
| const base::Optional<T>& value) { |
| if (value.has_value()) { |
| RecordDirectSurface(context, feature, value.value()); |
| } else { |
| RecordDirectSurface(context, feature, |
| IdentifiableTokenBuilder().GetToken()); |
| } |
| } |
| |
| private: |
| DISALLOW_COPY_AND_ASSIGN(Dactyloscoper); |
| }; |
| |
| } // namespace blink |
| |
| #endif // THIRD_PARTY_BLINK_RENDERER_CORE_FRAME_DACTYLOSCOPER_H_ |