Commit 81b24add authored by Jeevan Shikaram's avatar Jeevan Shikaram Committed by Commit Bot

[App Management] Add new app permission view subpage.

This CL adds a new app permission view settings subpage to display
the different permission views.

Bug: 919531
Change-Id: I85896670dd3ca9d8e9514d337265cbf73b26e181
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1772873
Commit-Queue: Jeevan Shikaram <jshikaram@chromium.org>
Reviewed-by: default avatarcalamity <calamity@chromium.org>
Cr-Commit-Position: refs/heads/master@{#692057}
parent d800fa5b
...@@ -10,13 +10,24 @@ js_type_check("closure_compile") { ...@@ -10,13 +10,24 @@ js_type_check("closure_compile") {
":api_listener", ":api_listener",
":app_item", ":app_item",
":app_management_page", ":app_management_page",
":app_permission_view",
":arc_permission_view",
":browser_proxy", ":browser_proxy",
":chrome_app_permission_view",
":constants", ":constants",
":dom_switch",
":fake_page_handler", ":fake_page_handler",
":main_view", ":main_view",
":permission_item",
":permission_toggle",
":permission_view_header",
":pin_to_shelf_item",
":pwa_permission_view",
":reducers", ":reducers",
":router",
":store", ":store",
":store_client", ":store_client",
":toggle_row",
":types", ":types",
":util", ":util",
] ]
...@@ -51,11 +62,33 @@ js_library("app_management_page") { ...@@ -51,11 +62,33 @@ js_library("app_management_page") {
":actions", ":actions",
":browser_proxy", ":browser_proxy",
":main_view", ":main_view",
":router",
":store", ":store",
":store_client", ":store_client",
] ]
} }
js_library("app_permission_view") {
deps = [
":arc_permission_view",
":chrome_app_permission_view",
":dom_switch",
":pwa_permission_view",
":store_client",
]
}
js_library("arc_permission_view") {
deps = [
":constants",
":fake_page_handler",
":permission_item",
":permission_view_header",
":pin_to_shelf_item",
":store_client",
]
}
js_library("browser_proxy") { js_library("browser_proxy") {
deps = [ deps = [
":fake_page_handler", ":fake_page_handler",
...@@ -64,9 +97,20 @@ js_library("browser_proxy") { ...@@ -64,9 +97,20 @@ js_library("browser_proxy") {
] ]
} }
js_library("chrome_app_permission_view") {
deps = [
":fake_page_handler",
":pin_to_shelf_item",
":store_client",
]
}
js_library("constants") { js_library("constants") {
} }
js_library("dom_switch") {
}
js_library("fake_page_handler") { js_library("fake_page_handler") {
deps = [ deps = [
":constants", ":constants",
...@@ -87,6 +131,46 @@ js_library("main_view") { ...@@ -87,6 +131,46 @@ js_library("main_view") {
] ]
} }
js_library("permission_item") {
deps = [
":fake_page_handler",
":permission_toggle",
":store_client",
":util",
]
}
js_library("permission_toggle") {
deps = [
":util",
]
}
js_library("permission_view_header") {
deps = [
":browser_proxy",
":store_client",
]
}
js_library("pin_to_shelf_item") {
deps = [
":browser_proxy",
":toggle_row",
":types",
]
}
js_library("pwa_permission_view") {
deps = [
":constants",
":fake_page_handler",
":permission_item",
":pin_to_shelf_item",
":store_client",
]
}
js_library("reducers") { js_library("reducers") {
deps = [ deps = [
":types", ":types",
...@@ -95,6 +179,14 @@ js_library("reducers") { ...@@ -95,6 +179,14 @@ js_library("reducers") {
] ]
} }
js_library("router") {
deps = [
":actions",
":constants",
":store_client",
]
}
js_library("store") { js_library("store") {
deps = [ deps = [
":reducers", ":reducers",
...@@ -114,6 +206,13 @@ js_library("store_client") { ...@@ -114,6 +206,13 @@ js_library("store_client") {
] ]
} }
js_library("toggle_row") {
deps = [
":types",
"//ui/webui/resources/cr_elements/cr_toggle:cr_toggle",
]
}
js_library("types") { js_library("types") {
deps = [ deps = [
"//chrome/browser/ui/webui/app_management:mojo_bindings_js_library_for_compile", "//chrome/browser/ui/webui/app_management:mojo_bindings_js_library_for_compile",
......
...@@ -3,6 +3,7 @@ ...@@ -3,6 +3,7 @@
<link rel="import" href="actions.html"> <link rel="import" href="actions.html">
<link rel="import" href="browser_proxy.html"> <link rel="import" href="browser_proxy.html">
<link rel="import" href="main_view.html"> <link rel="import" href="main_view.html">
<link rel="import" href="router.html">
<link rel="import" href="store_client.html"> <link rel="import" href="store_client.html">
<link rel="import" href="store.html"> <link rel="import" href="store.html">
<link rel="import" href="../../../settings_shared_css.html"> <link rel="import" href="../../../settings_shared_css.html">
...@@ -15,15 +16,10 @@ ...@@ -15,15 +16,10 @@
<template> <template>
<style include="settings-shared"></style> <style include="settings-shared"></style>
<div id="main-container"> <div id="main-container">
<!-- TODO: enable dom-switch after main-view is working --> <app-management-main-view>
<!-- <app-management-dom-switch id="view-selector" </app-management-main-view>
route="[[selectRouteId_(currentPage_, searchTerm_)]]">
<template> -->
<app-management-main-view route-id="main-view">
</app-management-main-view>
<!-- </template>
</app-management-dom-switch> -->
</div> </div>
<app-management-router></app-management-router>
</template> </template>
<script src="app_management_page.js"></script> <script src="app_management_page.js"></script>
</dom-module> </dom-module>
<link rel="import" href="chrome://resources/html/polymer.html">
<link rel="import" href="dom_switch.html">
<link rel="import" href="pwa_permission_view.html">
<link rel="import" href="arc_permission_view.html">
<link rel="import" href="chrome_app_permission_view.html">
<link rel="import" href="../../../settings_shared_css.html">
<dom-module id="app-management-app-permission-view">
<template>
<style include="settings-shared">
</style>
<app-management-dom-switch id="view-selector"
route="[[getSelectedRouteId_(app_)]]">
<template>
<app-management-pwa-permission-view route-id="pwa-permission-view">
</app-management-pwa-permission-view>
<app-management-arc-permission-view route-id="arc-permission-view">
</app-management-arc-permission-view>
<app-management-chrome-app-permission-view
route-id="chrome-app-permission-view">
</app-management-chrome-app-permission-view>
</template>
</app-management-dom-switch>
</template>
<script src="app_permission_view.js"></script>
</dom-module>
// Copyright 2019 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
Polymer({
// TODO(crbug.com/999016): change to app-management-app-detail-view.
is: 'app-management-app-permission-view',
behaviors: [
app_management.StoreClient,
],
properties: {
/**
* @type {App}
* @private
*/
app_: Object,
},
attached: function() {
if (!this.app_) {
const appId = settings.getQueryParameters().get('id');
// TODO(crbug.com/999443): move this changePage call to router.js
this.dispatch(app_management.actions.changePage(PageType.DETAIL, appId));
}
this.watch('app_', state => app_management.util.getSelectedApp(state));
this.watch('currentPage_', state => state.currentPage);
this.updateFromStore();
},
/**
* @private
*/
getSelectedRouteId_: function(app) {
if (!app) {
return;
}
const selectedAppType = app.type;
switch (selectedAppType) {
case (AppType.kWeb):
return 'pwa-permission-view';
case (AppType.kExtension):
return 'chrome-app-permission-view';
case (AppType.kArc):
return 'arc-permission-view';
default:
assertNotReached();
}
},
});
...@@ -2,7 +2,6 @@ ...@@ -2,7 +2,6 @@
<link rel="import" href="browser_proxy.html"> <link rel="import" href="browser_proxy.html">
<link rel="import" href="icons.html"> <link rel="import" href="icons.html">
<link rel="import" href="metadata_view.html">
<link rel="import" href="permission_item.html"> <link rel="import" href="permission_item.html">
<link rel="import" href="permission_view_header.html"> <link rel="import" href="permission_view_header.html">
<link rel="import" href="shared_style.html"> <link rel="import" href="shared_style.html">
...@@ -16,10 +15,7 @@ ...@@ -16,10 +15,7 @@
<style include="app-management-shared-css"> <style include="app-management-shared-css">
</style> </style>
<app-management-permission-view-header> <div class="permission-list">
</app-management-permission-view-header>
<div class="permission-list card-container">
<app-management-pin-to-shelf-item <app-management-pin-to-shelf-item
id="pin-to-shelf-setting" id="pin-to-shelf-setting"
class="permission-card-row separated-row header-text" class="permission-card-row separated-row header-text"
......
...@@ -2,6 +2,7 @@ ...@@ -2,6 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
Polymer({ Polymer({
// TODO(crbug.com/999016): change to app-management-arc-detail-view.
is: 'app-management-arc-permission-view', is: 'app-management-arc-permission-view',
behaviors: [ behaviors: [
......
...@@ -29,9 +29,7 @@ ...@@ -29,9 +29,7 @@
} }
</style> </style>
<app-management-permission-view-header> <div>
</app-management-permission-view-header>
<div class="card-container">
<div id="app-description" class="permission-card-row secondary-text"> <div id="app-description" class="permission-card-row secondary-text">
[[app_.description]] [[app_.description]]
</div> </div>
...@@ -73,19 +71,21 @@ ...@@ -73,19 +71,21 @@
replaced, but in the mean time it might be necessary to change the replaced, but in the mean time it might be necessary to change the
text of the button depending on whether or not it is a hosted text of the button depending on whether or not it is a hosted
app. --> app. -->
<!-- TODO:(crbug.com/958269) Change behaviour of "more settings" <!-- TODO:(crbug.com/958269) Change behaviour of "more settings"
based on the app. --> based on the app. -->
<div id="more-settings" </div>
class="subpermission-row separated-row clickable" </div>
on-click="onClickExtensionsSettingsButton_"
hidden$="[[app_.hideMoreSettings]]"> <div id="more-settings"
<div class="header-text">$i18n{moreSettings}</div> class="permission-card-row separated-row header-text clickable"
on-click="onClickExtensionsSettingsButton_">
<div class="header-text">$i18n{moreSettings}</div>
<div class="permission-row-controls">
<cr-icon-button class="native-settings-icon icon-external" <cr-icon-button class="native-settings-icon icon-external"
tabindex="0"> tabindex="0">
</cr-icon-button> </cr-icon-button>
</div> </div>
</div> </div>
</div>
</div> </div>
</template> </template>
<script src="chrome_app_permission_view.js"></script> <script src="chrome_app_permission_view.js"></script>
......
...@@ -2,6 +2,7 @@ ...@@ -2,6 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
Polymer({ Polymer({
// TODO(crbug.com/999016): change to app-management-chrome-app-detail-view.
is: 'app-management-chrome-app-permission-view', is: 'app-management-chrome-app-permission-view',
behaviors: [ behaviors: [
......
...@@ -30,6 +30,7 @@ ...@@ -30,6 +30,7 @@
* this.$['view-selector'].route = 'view-two'; * this.$['view-selector'].route = 'view-two';
*/ */
// TODO(crbug.com/992795) Merge with cr-view-manager.
Polymer({ Polymer({
is: 'app-management-dom-switch', is: 'app-management-dom-switch',
...@@ -91,6 +92,12 @@ Polymer({ ...@@ -91,6 +92,12 @@ Polymer({
for (const child of children) { for (const child of children) {
this.children_[child.getAttribute('route-id')] = child; this.children_[child.getAttribute('route-id')] = child;
} }
if (this.route) {
// TODO(crbug.com/999523): Add test coverage for this case.
// If attached is called after the route has been set.
this.onRouteChanged_(this.route);
}
}, },
/** /**
......
<link rel="import" href="chrome://resources/html/polymer.html"> <link rel="import" href="chrome://resources/html/polymer.html">
<link rel="import" href="browser_proxy.html"> <link rel="import" href="browser_proxy.html">
<link rel="import" href="metadata_view.html">
<link rel="import" href="permission_item.html"> <link rel="import" href="permission_item.html">
<link rel="import" href="permission_view_header.html">
<link rel="import" href="shared_style.html"> <link rel="import" href="shared_style.html">
<link rel="import" href="store_client.html"> <link rel="import" href="store_client.html">
<link rel="import" href="pin_to_shelf_item.html"> <link rel="import" href="pin_to_shelf_item.html">
...@@ -14,11 +12,7 @@ ...@@ -14,11 +12,7 @@
<template> <template>
<style include="app-management-shared-css"> <style include="app-management-shared-css">
</style> </style>
<div class="permission-list">
<app-management-permission-view-header>
</app-management-permission-view-header>
<div class="permission-list card-container">
<app-management-pin-to-shelf-item <app-management-pin-to-shelf-item
id="pin-to-shelf-setting" id="pin-to-shelf-setting"
class="permission-card-row separated-row header-text" class="permission-card-row separated-row header-text"
...@@ -48,15 +42,16 @@ ...@@ -48,15 +42,16 @@
permission-label="$i18n{microphone}" permission-label="$i18n{microphone}"
permission-type="CONTENT_SETTINGS_TYPE_MEDIASTREAM_MIC"> permission-type="CONTENT_SETTINGS_TYPE_MEDIASTREAM_MIC">
</app-management-permission-item> </app-management-permission-item>
<div class="subpermission-row separated-row clickable" </div>
on-click="onClickSiteSettingsButton_"> </div>
<div class="header-text">$i18n{moreSettings}</div> <div id="more-settings"
<div class="permission-row-controls"> class="permission-card-row separated-row header-text clickable"
<cr-icon-button class="native-settings-icon icon-external" on-click="onClickSiteSettingsButton_">
tabindex="0"> <div class="header-text">$i18n{moreSettings}</div>
</cr-icon-button> <div class="permission-row-controls">
</div> <cr-icon-button class="native-settings-icon icon-external"
</div> tabindex="0">
</cr-icon-button>
</div> </div>
</div> </div>
</div> </div>
......
...@@ -2,6 +2,7 @@ ...@@ -2,6 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
Polymer({ Polymer({
// TODO(crbug.com/999016): change to app-management-pwa-detail-view.
is: 'app-management-pwa-permission-view', is: 'app-management-pwa-permission-view',
behaviors: [ behaviors: [
......
...@@ -3,15 +3,9 @@ ...@@ -3,15 +3,9 @@
<link rel="import" href="actions.html"> <link rel="import" href="actions.html">
<link rel="import" href="store_client.html"> <link rel="import" href="store_client.html">
<link rel="import" href="constants.html"> <link rel="import" href="constants.html">
<link rel="import" href="chrome://resources/polymer/v1_0/iron-location/iron-location.html">
<link rel="import" href="chrome://resources/polymer/v1_0/iron-location/iron-query-params.html">
<dom-module id="app-management-router"> <dom-module id="app-management-router">
<template> <template>
<iron-location id="iron-location" query="{{urlQuery_}}" path="{{path_}}">
</iron-location>
<iron-query-params params-string="{{query_}}"
params-object="{{queryParams_}}"></iron-query-params>
</template> </template>
<script src="router.js"></script> <script src="router.js"></script>
</dom-module> </dom-module>
...@@ -8,155 +8,35 @@ Polymer({ ...@@ -8,155 +8,35 @@ Polymer({
behaviors: [ behaviors: [
app_management.StoreClient, app_management.StoreClient,
], ],
//TODO (crbug.com/999443): Watch URL and update state.
properties: { properties: {
/** @private {string} */ currentPage_: {
path_: String, type: Object,
observer: 'onCurrentPageChanged_',
/** @private {Object} */
queryParams_: Object,
/** @private {string} */
query_: {
type: String,
observer: 'onQueryChanged_',
},
/** @private {string} */
urlQuery_: {
type: String,
observer: 'onUrlQueryChanged_',
},
/** @private */
searchTerm_: {
type: String,
value: '',
},
/** @private {PageType} */
currentPageType_: {
type: Number,
},
/** @private {?string} */
selectedAppId_: {
type: String,
}, },
}, },
urlParsed_: false,
observers: [
'onUrlChanged_(path_, queryParams_)',
'onStateChanged_(currentPageType_, selectedAppId_, searchTerm_)',
],
attached: function() { attached: function() {
this.watch('currentPageType_', (state) => { this.watch('currentPage_', state => {
return state.currentPage.pageType; return state.currentPage;
});
this.watch('selectedAppId_', (state) => {
return state.currentPage.selectedAppId;
});
this.watch('searchTerm_', (state) => {
return state.search.term;
}); });
this.updateFromStore(); this.updateFromStore();
}, },
/** onCurrentPageChanged_: function() {
* @param {?string} current Current value of the query. const pageType = this.currentPage_.pageType;
* @param {?string} previous Previous value of the query. const appId = this.currentPage_.selectedAppId;
* @private switch(pageType) {
*/ case PageType.DETAIL:
onQueryChanged_: function(current, previous) { const params = new URLSearchParams;
if (previous !== undefined) { params.append('id', appId);
this.urlQuery_ = this.query_; settings.navigateTo(settings.routes.APP_MANAGEMENT_DETAIL, params);
} return;
}, case PageType.MAIN:
settings.navigateTo(settings.routes.APP_MANAGEMENT);
/** @private */ return;
onUrlQueryChanged_: function() { default:
this.query_ = this.urlQuery_; assertNotReached();
},
/** @private */
onStateChanged_: function() {
if (!this.urlParsed_) {
return;
} }
this.debounce('publishUrl', this.publishUrl_); }
},
/** @private */
publishUrl_: function() {
// Disable pushing urls into the history stack, so that we only push one
// state.
this.$['iron-location'].dwellTime = Infinity;
this.publishQueryParams_();
// Re-enable pushing urls into the history stack.
this.$['iron-location'].dwellTime = 0;
this.publishPath_();
},
/** @private */
publishQueryParams_: function() {
const newQueryParams = Object.assign({}, this.queryParams_);
newQueryParams.q = this.searchTerm_ || undefined;
newQueryParams.id = this.selectedAppId_ || undefined;
// Can't update |this.queryParams_| every time since assigning a new object
// to it triggers a state change which causes the URL to change, which
// recurses into a loop. JSON.stringify is used here to compare objects as
// it is always going to be a key value (string) pair and will serialize
// correctly.
if (JSON.stringify(newQueryParams) !== JSON.stringify(this.queryParams_)) {
this.queryParams_ = newQueryParams;
}
},
/** @private */
publishPath_: function() {
let path = '';
if (this.currentPageType_ === PageType.DETAIL) {
path = 'detail';
} else if (this.currentPageType_ === PageType.NOTIFICATIONS) {
path = 'notifications';
}
this.path_ = '/' + path;
},
/** @private */
onUrlChanged_: function() {
this.debounce('parseUrl', this.parseUrl_);
},
/** @private */
parseUrl_: function() {
const newId = this.queryParams_.id;
const searchTerm = this.queryParams_.q;
const pageFromUrl = this.path_.substr(1).split('/')[0];
let newPage = PageType.MAIN;
if (pageFromUrl === 'detail') {
newPage = PageType.DETAIL;
} else if (pageFromUrl === 'notifications') {
newPage = PageType.NOTIFICATIONS;
} else {
newPage = PageType.MAIN;
}
if (newPage === PageType.DETAIL) {
this.dispatch(app_management.actions.changePage(PageType.DETAIL, newId));
} else {
this.dispatch(app_management.actions.changePage(newPage));
}
if (searchTerm) {
this.dispatch(app_management.actions.setSearchTerm(searchTerm));
}
this.urlParsed_ = true;
},
}); });
...@@ -2,6 +2,7 @@ ...@@ -2,6 +2,7 @@
<link rel="import" href="chrome://resources/cr_elements/cr_link_row/cr_link_row.html"> <link rel="import" href="chrome://resources/cr_elements/cr_link_row/cr_link_row.html">
<link rel="import" href="app_management_page/app_management_page.html"> <link rel="import" href="app_management_page/app_management_page.html">
<link rel="import" href="app_management_page/app_permission_view.html">
<link rel="import" href="../../route.html"> <link rel="import" href="../../route.html">
<link rel="import" href="../../settings_shared_css.html"> <link rel="import" href="../../settings_shared_css.html">
...@@ -24,6 +25,14 @@ ...@@ -24,6 +25,14 @@
</settings-app-management-page> </settings-app-management-page>
</settings-subpage> </settings-subpage>
</template> </template>
<template is="dom-if" route-path="/app-management/detail" no-search>
<settings-subpage
page-title="[[app_.title]]"
title-icon="[[iconUrlFromId_(app_)]]">
<app-management-app-permission-view>
</app-management-app-permission-view>
</settings-subpage>
</template>
</settings-animated-pages> </settings-animated-pages>
</template> </template>
<script src="os_apps_page.js"></script> <script src="os_apps_page.js"></script>
......
...@@ -10,6 +10,10 @@ ...@@ -10,6 +10,10 @@
Polymer({ Polymer({
is: 'os-settings-apps-page', is: 'os-settings-apps-page',
behaviors: [
app_management.StoreClient,
],
properties: { properties: {
/** @private {!Map<string, string>} */ /** @private {!Map<string, string>} */
focusConfig_: { focusConfig_: {
...@@ -23,6 +27,24 @@ Polymer({ ...@@ -23,6 +27,24 @@ Polymer({
}, },
}, },
/**
* @type {App}
* @private
*/
app_: Object,
},
attached: function() {
this.watch('app_', state => app_management.util.getSelectedApp(state));
},
/**
* @param {App} app
* @return {string}
* @private
*/
iconUrlFromId_: function(app) {
return app_management.util.getAppIcon(app);
}, },
/** @private */ /** @private */
......
...@@ -103,6 +103,75 @@ ...@@ -103,6 +103,75 @@
<structure name="IDR_OS_SETTINGS_APP_MANAGEMENT_PAGE_API_LISTENER_HTML" <structure name="IDR_OS_SETTINGS_APP_MANAGEMENT_PAGE_API_LISTENER_HTML"
file="chromeos/os_apps_page/app_management_page/api_listener.html" file="chromeos/os_apps_page/app_management_page/api_listener.html"
type="chrome_html" /> type="chrome_html" />
<structure name="IDR_OS_SETTINGS_APP_MANAGEMENT_PAGE_DOM_SWITCH_JS"
file="chromeos/os_apps_page/app_management_page/dom_switch.js"
type="chrome_html" />
<structure name="IDR_OS_SETTINGS_APP_MANAGEMENT_PAGE_DOM_SWITCH_HTML"
file="chromeos/os_apps_page/app_management_page/dom_switch.html"
type="chrome_html" />
<structure name="IDR_OS_SETTINGS_APP_MANAGEMENT_PAGE_PWA_PERMISSION_VIEW_JS"
file="chromeos/os_apps_page/app_management_page/pwa_permission_view.js"
type="chrome_html" />
<structure name="IDR_OS_SETTINGS_APP_MANAGEMENT_PAGE_PWA_PERMISSION_VIEW_HTML"
file="chromeos/os_apps_page/app_management_page/pwa_permission_view.html"
type="chrome_html" />
<structure name="IDR_OS_SETTINGS_APP_MANAGEMENT_PAGE_PERMISSION_ITEM_JS"
file="chromeos/os_apps_page/app_management_page/permission_item.js"
type="chrome_html" />
<structure name="IDR_OS_SETTINGS_APP_MANAGEMENT_PAGE_PERMISSION_ITEM_HTML"
file="chromeos/os_apps_page/app_management_page/permission_item.html"
type="chrome_html" />
<structure name="IDR_OS_SETTINGS_APP_MANAGEMENT_PAGE_PERMISSION_TOGGLE_JS"
file="chromeos/os_apps_page/app_management_page/permission_toggle.js"
type="chrome_html" />
<structure name="IDR_OS_SETTINGS_APP_MANAGEMENT_PAGE_PERMISSION_TOGGLE_HTML"
file="chromeos/os_apps_page/app_management_page/permission_toggle.html"
type="chrome_html" />
<structure name="IDR_OS_SETTINGS_APP_MANAGEMENT_PAGE_PERMISSION_VIEW_HEADER_JS"
file="chromeos/os_apps_page/app_management_page/permission_view_header.js"
type="chrome_html" />
<structure name="IDR_OS_SETTINGS_APP_MANAGEMENT_PAGE_PERMISSION_VIEW_HEADER_HTML"
file="chromeos/os_apps_page/app_management_page/permission_view_header.html"
type="chrome_html" />
<structure name="IDR_OS_SETTINGS_APP_MANAGEMENT_PAGE_PIN_TO_SHELF_ITEM_JS"
file="chromeos/os_apps_page/app_management_page/pin_to_shelf_item.js"
type="chrome_html" />
<structure name="IDR_OS_SETTINGS_APP_MANAGEMENT_PAGE_PIN_TO_SHELF_ITEM_HTML"
file="chromeos/os_apps_page/app_management_page/pin_to_shelf_item.html"
type="chrome_html" />
<structure name="IDR_OS_SETTINGS_APP_MANAGEMENT_PAGE_TOGGLE_ROW_JS"
file="chromeos/os_apps_page/app_management_page/toggle_row.js"
type="chrome_html" />
<structure name="IDR_OS_SETTINGS_APP_MANAGEMENT_PAGE_TOGGLE_ROW_HTML"
file="chromeos/os_apps_page/app_management_page/toggle_row.html"
type="chrome_html" />
<structure name="IDR_OS_SETTINGS_APP_MANAGEMENT_PAGE_APP_PERMISSION_VIEW_JS"
file="chromeos/os_apps_page/app_management_page/app_permission_view.js"
type="chrome_html" />
<structure name="IDR_OS_SETTINGS_APP_MANAGEMENT_PAGE_APP_PERMISSION_VIEW_HTML"
file="chromeos/os_apps_page/app_management_page/app_permission_view.html"
type="chrome_html" />
<structure name="IDR_OS_SETTINGS_APP_MANAGEMENT_PAGE_ARC_PERMISSION_VIEW_JS"
file="chromeos/os_apps_page/app_management_page/arc_permission_view.js"
type="chrome_html" />
<structure name="IDR_OS_SETTINGS_APP_MANAGEMENT_PAGE_ARC_PERMISSION_VIEW_HTML"
file="chromeos/os_apps_page/app_management_page/arc_permission_view.html"
type="chrome_html" />
<structure name="IDR_OS_SETTINGS_APP_MANAGEMENT_PAGE_CHROME_APP_PERMISSION_VIEW_JS"
file="chromeos/os_apps_page/app_management_page/chrome_app_permission_view.js"
type="chrome_html" />
<structure name="IDR_OS_SETTINGS_APP_MANAGEMENT_PAGE_CHROME_APP_PERMISSION_VIEW_HTML"
file="chromeos/os_apps_page/app_management_page/chrome_app_permission_view.html"
type="chrome_html" />
<structure name="IDR_OS_SETTINGS_APP_MANAGEMENT_PAGE_ROUTER_JS"
file="chromeos/os_apps_page/app_management_page/router.js"
type="chrome_html" />
<structure name="IDR_OS_SETTINGS_APP_MANAGEMENT_PAGE_ROUTER_HTML"
file="chromeos/os_apps_page/app_management_page/router.html"
type="chrome_html" />
<structure name="IDR_OS_SETTINGS_APP_MANAGEMENT_PAGE_ICONS_HTML"
file="chromeos/os_apps_page/app_management_page/icons.html"
type="chrome_html" />
<structure name="IDR_OS_SETTINGS_MANAGE_A11Y_PAGE_JS" <structure name="IDR_OS_SETTINGS_MANAGE_A11Y_PAGE_JS"
file="a11y_page/manage_a11y_page.js" file="a11y_page/manage_a11y_page.js"
type="chrome_html" /> type="chrome_html" />
......
...@@ -526,6 +526,8 @@ cr.define('settings', function() { ...@@ -526,6 +526,8 @@ cr.define('settings', function() {
loadTimeData.getBoolean('showApps')) { loadTimeData.getBoolean('showApps')) {
r.APPS = r.BASIC.createSection('/apps', 'apps'); r.APPS = r.BASIC.createSection('/apps', 'apps');
r.APP_MANAGEMENT = r.APPS.createChild('/app-management'); r.APP_MANAGEMENT = r.APPS.createChild('/app-management');
r.APP_MANAGEMENT_DETAIL =
r.APP_MANAGEMENT.createChild('/app-management/detail');
} }
} else { } else {
assert(r.ADVANCED, 'ADVANCED route should exist'); assert(r.ADVANCED, 'ADVANCED route should exist');
......
...@@ -42,7 +42,8 @@ suite('<app-management-managed-apps>', () => { ...@@ -42,7 +42,8 @@ suite('<app-management-managed-apps>', () => {
await test_util.flushTasks(); await test_util.flushTasks();
}); });
test('Uninstall button affected by policy', () => { // TODO(crbug.com/999412): rewrite test.
test.skip('Uninstall button affected by policy', () => {
const uninstallWrapper = const uninstallWrapper =
appDetailView.$$('app-management-permission-view-header') appDetailView.$$('app-management-permission-view-header')
.$$('#uninstall-wrapper'); .$$('#uninstall-wrapper');
......
...@@ -20,7 +20,7 @@ GEN('#else'); ...@@ -20,7 +20,7 @@ GEN('#else');
GEN('#define MAYBE_AllJsTests AllJsTests'); GEN('#define MAYBE_AllJsTests AllJsTests');
GEN('#endif'); GEN('#endif');
// Generic text fixture for CrOS Polymer Settings elements to be overridden by // Generic test fixture for CrOS Polymer Settings elements to be overridden by
// individual element tests. // individual element tests.
const OSSettingsBrowserTest = class extends PolymerTest { const OSSettingsBrowserTest = class extends PolymerTest {
/** @override */ /** @override */
...@@ -143,12 +143,19 @@ TEST_F('OSSettingsAndroidAppsPageTest', 'DISABLED_AllJsTests', () => { ...@@ -143,12 +143,19 @@ TEST_F('OSSettingsAndroidAppsPageTest', 'DISABLED_AllJsTests', () => {
mocha.run(); mocha.run();
}); });
// Test fixture for the app management settings page. // Generic test fixture for CrOS Polymer App Management elements to be
// eslint-disable-next-line no-var // overridden by individual element tests.
var OSSettingsAppManagementPageTest = class extends OSSettingsBrowserTest { const OSSettingsAppManagementBrowserTest = class extends OSSettingsBrowserTest {
/** @override */ /** @override */
get browsePreload() { get browsePreload() {
return super.browsePreload + 'app_management/app_management_page.html'; return super.browsePreload + 'os_apps_page.html';
}
/** @override */
get featureList() {
return {
enabled: super.featureList.enabled.concat(['features::kAppManagement'])
};
} }
/** @override */ /** @override */
...@@ -158,18 +165,29 @@ var OSSettingsAppManagementPageTest = class extends OSSettingsBrowserTest { ...@@ -158,18 +165,29 @@ var OSSettingsAppManagementPageTest = class extends OSSettingsBrowserTest {
BROWSER_SETTINGS_PATH + '../test_store.js', BROWSER_SETTINGS_PATH + '../test_store.js',
'app_management/test_util.js', 'app_management/test_util.js',
'app_management/test_store.js', 'app_management/test_store.js',
'app_management/app_management_page_tests.js',
]); ]);
} }
/** @override */ /** @override */
get featureList() { get runAccessibilityChecks() {
return {enabled: ['features::kAppManagement']}; return true;
} }
};
// Test fixture for the app management settings page.
// eslint-disable-next-line no-var
var OSSettingsAppManagementPageTest =
class extends OSSettingsAppManagementBrowserTest {
/** @override */ /** @override */
get runAccessibilityChecks() { get browsePreload() {
return true; return super.browsePreload + 'app_management/app_management_page.html';
}
/** @override */
get extraLibraries() {
return super.extraLibraries.concat([
'app_management/app_management_page_tests.js',
]);
} }
}; };
...@@ -177,6 +195,86 @@ TEST_F('OSSettingsAppManagementPageTest', 'AllJsTests', () => { ...@@ -177,6 +195,86 @@ TEST_F('OSSettingsAppManagementPageTest', 'AllJsTests', () => {
mocha.run(); mocha.run();
}); });
// Test fixture for the app management pwa permission view element.
// eslint-disable-next-line no-var
var OSSettingsAppManagementPwaPermissionViewTest =
class extends OSSettingsAppManagementBrowserTest {
/** @override */
get browsePreload() {
return super.browsePreload + 'app_management/pwa_permission_view.html';
}
/** @override */
get extraLibraries() {
return super.extraLibraries.concat([
'app_management/pwa_permission_view_test.js',
]);
}
};
TEST_F('OSSettingsAppManagementPwaPermissionViewTest', 'AllJsTests', () => {
mocha.run();
});
// Test fixture for the app management arc permission view element.
// eslint-disable-next-line no-var
var OSSettingsAppManagementArcPermissionViewTest =
class extends OSSettingsAppManagementBrowserTest {
/** @override */
get browsePreload() {
return super.browsePreload + 'app_management/arc_permission_view.html';
}
/** @override */
get extraLibraries() {
return super.extraLibraries.concat([
'app_management/arc_permission_view_test.js',
]);
}
};
TEST_F('OSSettingsAppManagementArcPermissionViewTest', 'AllJsTests', () => {
mocha.run();
});
// Test fixture for the app management managed app view.
// eslint-disable-next-line no-var
var OSSettingsAppManagementManagedAppTest =
class extends OSSettingsAppManagementBrowserTest {
/** @override */
get browsePreload() {
return super.browsePreload + 'app_management/pwa_permission_view.html';
}
/** @override */
get extraLibraries() {
return super.extraLibraries.concat([
'app_management/managed_apps_test.js',
]);
}
};
TEST_F('OSSettingsAppManagementManagedAppTest', 'AllJsTests', () => {
mocha.run();
});
// Test fixture for the app management reducers.
// eslint-disable-next-line no-var
var OSSettingsAppManagementReducersTest =
class extends OSSettingsAppManagementBrowserTest {
/** @override */
get extraLibraries() {
return super.extraLibraries.concat([
'app_management/reducers_test.js',
]);
}
};
TEST_F('OSSettingsAppManagementReducersTest', 'AllJsTests', () => {
mocha.run();
});
// Tests for the Device page. // Tests for the Device page.
// eslint-disable-next-line no-var // eslint-disable-next-line no-var
var OSSettingsBluetoothPageTest = class extends OSSettingsBrowserTest { var OSSettingsBluetoothPageTest = class extends OSSettingsBrowserTest {
......
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