1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88
|
// Copyright 2017 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef COMPONENTS_ANDROID_AUTOFILL_BROWSER_FORM_FIELD_DATA_ANDROID_H_
#define COMPONENTS_ANDROID_AUTOFILL_BROWSER_FORM_FIELD_DATA_ANDROID_H_
#include <memory>
#include <string>
#include <string_view>
#include <vector>
#include "base/android/scoped_java_ref.h"
#include "base/memory/raw_ref.h"
#include "components/autofill/core/browser/field_types.h"
#include "components/autofill/core/common/form_field_data.h"
#include "components/autofill/core/common/unique_ids.h"
namespace autofill {
class FormFieldDataAndroidBridge;
// This class is the native peer of FormFieldData.java. Its intention is
// making relevant aspects of `FormFieldData` accessible to Java.
class FormFieldDataAndroid {
public:
// A helper struct that bundles are type predictions available to
// `FormFieldDataAndroid`.
struct FieldTypes {
FieldTypes();
// Sets all types to `type`.
explicit FieldTypes(FieldType type);
FieldTypes(FieldType heuristic_type,
FieldType server_type,
std::string_view computed_type,
std::vector<FieldType> server_predictions);
FieldTypes(FieldTypes&&);
FieldTypes& operator=(FieldTypes&&);
~FieldTypes();
// Returns true iff all types (including the server predictions) have the
// same string representation as `type`.
bool operator==(FieldType type) const;
FieldType heuristic_type = UNKNOWN_TYPE;
FieldType server_type = UNKNOWN_TYPE;
std::string computed_type;
std::vector<FieldType> server_predictions;
};
explicit FormFieldDataAndroid(FormFieldData* field);
FormFieldDataAndroid(const FormFieldDataAndroid&) = delete;
FormFieldDataAndroid& operator=(const FormFieldDataAndroid&) = delete;
virtual ~FormFieldDataAndroid();
base::android::ScopedJavaLocalRef<jobject> GetJavaPeer();
void UpdateFromJava();
void OnFormFieldDidChange(std::u16string_view value);
// Updates the visibility and propagates the changes to Java. Note that
// inside the `android_autofill` component visibility means focusability of
// an `autofill::FormFieldData`. On the native side, this method therefore
// updates the two fields that determine focusability, namely `role` and
// `is_focusable`.
void OnFormFieldVisibilityDidChange(const FormFieldData& field);
bool SimilarFieldAs(const FormFieldData& field) const;
void UpdateFieldTypes(FieldTypes field_types);
const FieldTypes& field_types() const { return field_types_; }
FieldGlobalId global_id() const { return field_.get().global_id(); }
private:
// The C++ <-> Java bridge.
std::unique_ptr<FormFieldDataAndroidBridge> bridge_;
// The field type predictions for this field.
FieldTypes field_types_;
// A raw reference to the underlying `FormFieldData` object. It is owned by
// `this`' parent.
const raw_ref<FormFieldData> field_;
};
} // namespace autofill
#endif // COMPONENTS_ANDROID_AUTOFILL_BROWSER_FORM_FIELD_DATA_ANDROID_H_
|