// Copyright (C) 2021 The Android Open Source Project
//
// 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
//
//      http://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.

package {
    default_team: "trendy_team_input_framework",
    // See: http://go/android-license-faq
    // A large-scale-change added 'default_applicable_licenses' to import
    // all of the 'license_kinds' from "frameworks_native_license"
    // to get the below license kinds:
    //   SPDX-license-identifier-Apache-2.0
    default_applicable_licenses: ["frameworks_native_license"],
}

cc_defaults {
    name: "inputflinger_fuzz_defaults",
    defaults: [
        "inputflinger_defaults",
        "libinputflinger_defaults",
    ],
    host_supported: true,
    include_dirs: [
        "frameworks/native/services/inputflinger",
    ],
    shared_libs: [
        "libinputflinger",
    ],
    sanitize: {
        hwaddress: true,
        undefined: true,
        all_undefined: true,
        diag: {
            undefined: true,
        },
    },
    target: {
        host: {
            sanitize: {
                address: true,
            },
        },
    },
    header_libs: [
        "libbatteryservice_headers",
        "libinputreader_headers",
    ],
    fuzz_config: {
        cc: ["android-framework-input@google.com"],
        componentid: 155276,
        hotlists: [
            "4593311",
        ],
        description: "The fuzzer targets the APIs of libinputflinger library",
        vector: "local_no_privileges_required",
        service_privilege: "privileged",
        users: "multi_user",
        fuzzed_code_usage: "shipped",
    },
}

cc_fuzz {
    name: "inputflinger_cursor_input_fuzzer",
    defaults: [
        "inputflinger_fuzz_defaults",
    ],
    srcs: [
        "CursorInputFuzzer.cpp",
    ],
}

cc_fuzz {
    name: "inputflinger_keyboard_input_fuzzer",
    defaults: [
        "inputflinger_fuzz_defaults",
    ],
    srcs: [
        "KeyboardInputFuzzer.cpp",
    ],
}

cc_fuzz {
    name: "inputflinger_multitouch_input_fuzzer",
    defaults: [
        "inputflinger_fuzz_defaults",
    ],
    srcs: [
        "MultiTouchInputFuzzer.cpp",
    ],
}

cc_fuzz {
    name: "inputflinger_switch_input_fuzzer",
    defaults: [
        "inputflinger_fuzz_defaults",
    ],
    srcs: [
        "SwitchInputFuzzer.cpp",
    ],
}

cc_fuzz {
    name: "inputflinger_touchpad_input_fuzzer",
    defaults: [
        "inputflinger_fuzz_defaults",
    ],
    srcs: [
        "TouchpadInputFuzzer.cpp",
    ],
    static_libs: [
        "libchrome-gestures",
    ],
    header_libs: [
        "libchrome-gestures_headers",
    ],
}

cc_fuzz {
    name: "inputflinger_input_reader_fuzzer",
    defaults: [
        "inputflinger_fuzz_defaults",
    ],
    srcs: [
        "InputReaderFuzzer.cpp",
    ],
}

cc_fuzz {
    name: "inputflinger_blocking_queue_fuzzer",
    defaults: [
        "inputflinger_fuzz_defaults",
    ],
    srcs: [
        "BlockingQueueFuzzer.cpp",
    ],
}

cc_fuzz {
    name: "inputflinger_input_classifier_fuzzer",
    defaults: [
        "inputflinger_fuzz_defaults",
    ],
    srcs: [
        "InputClassifierFuzzer.cpp",
    ],
}

cc_fuzz {
    name: "inputflinger_latencytracker_fuzzer",
    defaults: [
        "inputflinger_fuzz_defaults",
        "libinputdispatcher_defaults",
    ],
    shared_libs: [
        "libinputreporter",
    ],
    srcs: [
        "LatencyTrackerFuzzer.cpp",
    ],
}

cc_fuzz {
    name: "inputflinger_input_dispatcher_fuzzer",
    defaults: [
        "inputflinger_fuzz_defaults",
        "libinputdispatcher_defaults",
    ],
    shared_libs: [
        "libinputreporter",
    ],
    static_libs: [
        "libgmock",
        "libgtest",
    ],
    srcs: [
        ":inputdispatcher_common_test_sources",
        "InputDispatcherFuzzer.cpp",
    ],
}
