chromium/chrome/browser/feed/android/java/src/org/chromium/chrome/browser/feed/FeedPersistentKeyValueCache.java

// Copyright 2020 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

package org.chromium.chrome.browser.feed;

import androidx.annotation.Nullable;

import org.jni_zero.JNINamespace;
import org.jni_zero.NativeMethods;

import org.chromium.base.Callback;
import org.chromium.base.ThreadUtils;
import org.chromium.chrome.browser.xsurface.PersistentKeyValueCache;

/** Implementation of xsurface's PersistentKeyValueCache. */
@JNINamespace("feed")
public class FeedPersistentKeyValueCache implements PersistentKeyValueCache {
    @Override
    public void lookup(byte[] key, ValueConsumer consumer) {
        assert ThreadUtils.runningOnUiThread();
        FeedPersistentKeyValueCacheJni.get()
                .lookup(
                        key,
                        new Callback<byte[]>() {
                            @Override
                            public void onResult(byte[] result) {
                                consumer.run(result);
                            }
                        });
    }

    @Override
    public void put(byte[] key, byte[] value, @Nullable Runnable onComplete) {
        assert ThreadUtils.runningOnUiThread();
        FeedPersistentKeyValueCacheJni.get().put(key, value, onComplete);
    }

    @Override
    public void evict(byte[] key, @Nullable Runnable onComplete) {
        assert ThreadUtils.runningOnUiThread();
        FeedPersistentKeyValueCacheJni.get().evict(key, onComplete);
    }

    @NativeMethods
    interface Natives {
        void lookup(byte[] key, Object consumer);

        void put(byte[] key, byte[] value, Runnable onComplete);

        void evict(byte[] key, Runnable onComplete);
    }
}