chromium/components/browser_ui/site_settings/android/java/src/org/chromium/components/browser_ui/site_settings/ChosenObjectInfo.java

// Copyright 2016 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.components.browser_ui.site_settings;

import androidx.annotation.VisibleForTesting;

import org.chromium.components.content_settings.ContentSettingsType;
import org.chromium.content_public.browser.BrowserContextHandle;

import java.io.Serializable;

/**
 * Information about an object (such as a USB device) the user has granted permission for an origin
 * to access.
 */
public class ChosenObjectInfo implements Serializable {
    private final @ContentSettingsType.EnumType int mContentSettingsType;
    private final String mOrigin;
    private final String mName;
    private final String mObject;
    private final boolean mIsManaged;

    @VisibleForTesting
    public ChosenObjectInfo(
            @ContentSettingsType.EnumType int contentSettingsType,
            String origin,
            String name,
            String object,
            boolean isManaged) {
        mContentSettingsType = contentSettingsType;
        mOrigin = origin;
        mName = name;
        mObject = object;
        mIsManaged = isManaged;
    }

    /** Returns the content settings type of the permission. */
    public @ContentSettingsType.EnumType int getContentSettingsType() {
        return mContentSettingsType;
    }

    /** Returns the origin that requested the permission. */
    public String getOrigin() {
        return mOrigin;
    }

    /** Returns the human readable name for the object to display in the UI. */
    public String getName() {
        return mName;
    }

    /** Returns the opaque object string that represents the object. */
    public String getObject() {
        return mObject;
    }

    /** Returns whether the object is managed by policy. */
    public boolean isManaged() {
        return mIsManaged;
    }

    /** Revokes permission for the origin to access the object if the object is not managed. */
    public void revoke(BrowserContextHandle browserContextHandle) {
        if (!mIsManaged) {
            WebsitePreferenceBridgeJni.get()
                    .revokeObjectPermission(
                            browserContextHandle, mContentSettingsType, mOrigin, mObject);
        }
    }
}