Commit 94280b87 authored by Jeevan Shikaram's avatar Jeevan Shikaram Committed by Commit Bot

[App Management] Display no permissions label for ARC apps.

This CL shows a no permissions label for ARC apps when the app does not
request any permissions in their manifest.

Bug: 1020777
Change-Id: Ieb80ff7661204b8fa85804fa5b52ed7ac3d1b2d2
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1896493
Commit-Queue: Jeevan Shikaram <jshikaram@chromium.org>
Reviewed-by: default avatarcalamity <calamity@chromium.org>
Cr-Commit-Position: refs/heads/master@{#714808}
parent 6c3fecf0
......@@ -12,6 +12,9 @@
<dom-module id="app-management-arc-permission-view">
<template>
<style include="app-management-shared-css">
#no-permissions {
border-top: none;
}
</style>
<div class="permission-list">
<app-management-pin-to-shelf-item
......@@ -33,7 +36,8 @@
hidden$="[[!isArcSupported_]]">
<div class="header-text">$i18n{appManagementPermissionsLabel}</div>
</div>
<div class="permission-list indented-permission-block">
<div id="subpermission-list"
class="permission-list indented-permission-block">
<app-management-permission-item class="subpermission-row"
icon="app-management:location"
permission-label="$i18n{appManagementLocationPermissionLabel}"
......@@ -59,6 +63,11 @@
permission-label="$i18n{appManagementStoragePermissionLabel}"
permission-type="STORAGE">
</app-management-permission-item>
<template is="dom-if" if="[[noPermissionsRequested_(app_)]]">
<div id="no-permissions" class="permission-text-row">
$i18n{appManagementNoPermissions}
</div>
</template>
</div>
</div>
<div id="more-settings"
......
......@@ -70,4 +70,26 @@ Polymer({
getCollapsedIcon_: function(listExpanded) {
return listExpanded ? 'cr:expand-less' : 'cr:expand-more';
},
/**
* Returns true if the app has not requested any permissions.
*
* @param {App} app
* @return {boolean}
* @private
*/
noPermissionsRequested_: function(app) {
const permissionItems =
this.$$('#subpermission-list')
.querySelectorAll('app-management-permission-item');
for (let i = 0; i < permissionItems.length; i++) {
const permissionItem = permissionItems[i];
const permission =
app_management.util.getPermission(app, permissionItem.permissionType);
if (permission !== undefined) {
return false;
}
}
return true;
},
});
......@@ -112,9 +112,11 @@ cr.define('app_management.util', function() {
}
/**
* Undefined is returned when the app does not request a permission.
*
* @param {App} app
* @param {string} permissionType
* @return {Permission}
* @return {Permission|undefined}
*/
function getPermission(app, permissionType) {
return app.permissions[permissionTypeHandle(app, permissionType)];
......
......@@ -26,20 +26,6 @@ suite('AppManagementPageTests', () => {
.$$('#no-apps-label');
}
/**
* @param {Element} element
* @return {boolean}
*/
function isElementShown(element) {
if (!element) {
return false;
}
if (element.style.display === 'none') {
return false;
}
return true;
}
setup(async () => {
fakeHandler = setupFakeHandler();
store = replaceStore();
......@@ -63,16 +49,16 @@ suite('AppManagementPageTests', () => {
test('No Apps Found Label', async () => {
expectEquals(0, getAppListChildren());
expectTrue(isElementShown(getNoAppsFoundLabel()));
expectFalse(isHiddenByDomIf(getNoAppsFoundLabel()));
const app = await fakeHandler.addApp();
expectEquals(1, getAppListChildren());
expectFalse(isElementShown(getNoAppsFoundLabel()));
expectTrue(isHiddenByDomIf(getNoAppsFoundLabel()));
fakeHandler.uninstall(app.id);
await test_util.flushTasks();
expectEquals(0, getAppListChildren());
expectTrue(isElementShown(getNoAppsFoundLabel()));
expectFalse(isHiddenByDomIf(getNoAppsFoundLabel()));
});
test('App list filters when searching', async () => {
......@@ -92,7 +78,7 @@ suite('AppManagementPageTests', () => {
appManagementPage.searchTerm = 'ss';
await test_util.flushTasks();
expectEquals(0, getAppListChildren());
expectTrue(isElementShown(getNoAppsFoundLabel()));
expectFalse(isHiddenByDomIf(getNoAppsFoundLabel()));
appManagementPage.searchTerm = '';
await test_util.flushTasks();
......
......@@ -143,4 +143,24 @@ suite('<app-management-arc-permission-view>', () => {
app_management.Store.getInstance().dispatch(
app_management.actions.updateArcSupported(true));
});
test('No permissions requested label', async () => {
expectTrue(isHiddenByDomIf(
arcPermissionView.root.querySelector('#no-permissions')));
// Create an ARC app without any permissions.
const arcOptions = {
type: apps.mojom.AppType.kArc,
permissions: app_management.FakePageHandler.createArcPermissions([])
};
// Add an arc app, and make it the currently selected app.
const app = await fakeHandler.addApp(null, arcOptions);
app_management.Store.getInstance().dispatch(
app_management.actions.updateSelectedAppId(app.id));
await test_util.flushTasks();
expectFalse(isHiddenByDomIf(
arcPermissionView.root.querySelector('#no-permissions')));
});
});
......@@ -97,3 +97,21 @@ function getPermissionToggleByType(view, permissionType) {
function getPermissionCrToggleByType(view, permissionType) {
return getPermissionToggleByType(view, permissionType).$$('cr-toggle');
}
/**
* @param {Element} element
* @return {boolean}
*/
function isHiddenByDomIf(element) {
// Happens when the dom-if is false and the element is not rendered.
if (!element) {
return true;
}
// Happens when the dom-if was showing the element and has hidden the element
// after a state change
if (element.style.display === 'none') {
return true;
}
// The element is rendered and display != 'none'
return false;
}
\ No newline at end of file
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment