blob: 2fc8563086efe91f89e686a37747a422b50d736e [file] [log] [blame]
<link rel="import" href="chrome://resources/html/polymer.html">
<link rel="import" href="chrome://resources/cr_elements/cr_container_shadow_behavior.html">
<link rel="import" href="chrome://resources/cr_elements/cr_icons_css.html">
<link rel="import" href="chrome://resources/cr_elements/cr_link_row/cr_link_row.html">
<link rel="import" href="chrome://resources/cr_elements/cr_toggle/cr_toggle.html">
<link rel="import" href="chrome://resources/cr_elements/icons.html">
<link rel="import" href="chrome://resources/cr_elements/paper_button_style_css.html">
<link rel="import" href="chrome://resources/cr_elements/policy/cr_tooltip_icon.html">
<link rel="import" href="chrome://resources/cr_elements/shared_style_css.html">
<link rel="import" href="chrome://resources/cr_elements/shared_vars_css.html">
<link rel="import" href="chrome://resources/html/action_link.html">
<link rel="import" href="chrome://resources/html/action_link_css.html">
<link rel="import" href="chrome://resources/html/cr.html">
<link rel="import" href="chrome://resources/html/cr/ui/focus_without_ink.html">
<link rel="import" href="chrome://resources/html/md_select_css.html">
<link rel="import" href="chrome://resources/polymer/v1_0/iron-flex-layout/iron-flex-layout-classes.html">
<link rel="import" href="chrome://resources/polymer/v1_0/iron-icon/iron-icon.html">
<link rel="import" href="chrome://resources/polymer/v1_0/paper-icon-button/paper-icon-button-light.html">
<link rel="import" href="chrome://resources/polymer/v1_0/paper-spinner/paper-spinner-lite.html">
<link rel="import" href="chrome://resources/polymer/v1_0/paper-styles/color.html">
<link rel="import" href="item_behavior.html">
<link rel="import" href="item_util.html">
<link rel="import" href="navigation_helper.html">
<link rel="import" href="strings.html">
<link rel="import" href="toggle_row.html">
<dom-module id="extensions-detail-view">
<template>
<style include="iron-flex cr-shared-style cr-icons action-link md-select paper-button-style">
:host {
--iron-icon-fill-color: var(--google-grey-refresh-700);
display: block;
height: 100%;
}
#enable-section {
margin-bottom: 8px;
}
#enable-section cr-tooltip-icon {
-webkit-margin-end: 20px;
}
#enable-section span {
color: var(--cr-secondary-text-color);
font-weight: 500;
}
#enable-section .enabled-text {
color: var(--google-blue-500);
}
#container {
height: 100%;
overflow: overlay;
}
#main {
@apply --cr-card-elevation;
background-color: white;
margin: auto;
min-height: 100%;
padding-bottom: 64px;
width: var(--cr-toolbar-field-width);
}
#top-bar {
align-items: center;
display: flex;
height: 40px;
margin-bottom: 12px;
padding: 8px 12px 0;
}
#icon {
-webkit-margin-end: 12px;
-webkit-margin-start: 16px;
height: 24px;
width: 24px;
}
#name {
flex-grow: 1;
@apply --cr-title-text;
}
#learn-more-link {
color: var(--google-blue-700);
text-decoration: none;
}
.three-line {
min-height: var(--cr-section-three-line-min-height);
}
.section {
@apply --cr-section;
}
.section.block {
display: block;
padding-bottom: 16px;
padding-top: 16px;
}
.section.continuation {
border-top: none;
}
.section.control-line {
justify-content: space-between;
}
.section:first-child {
border: none;
}
.section-title {
margin-bottom: 12px;
}
.section-content {
color: var(--cr-secondary-text-color);
}
.mid-section-header {
color: var(--cr-primary-text-color);
margin-top: 12px;
}
.actionable {
cursor: pointer;
}
.inspectable-view {
color: var(--google-blue-700);
height: 20px;
width: auto; /* override the default button size of 24x24 */
}
.warning .action-button {
background: white;
color: var(--google-blue-500);
}
#reload-button {
color: var(--google-blue-500);
}
.warning span {
color: var(--google-red-700);
flex: 1;
}
.warning-icon {
--iron-icon-fill-color: var(--google-red-700);
-webkit-margin-end: 8px;
flex-shrink: 0;
height: 18px;
width: 18px;
}
ul {
-webkit-padding-start: 20px;
margin: 0;
}
#runtime-host-permissions-mode {
align-items: center;
display: flex;
justify-content: space-between;
}
#options-section .control-line:first-child {
border-top: var(--cr-separator-line);
}
#load-path {
word-break: break-all;
}
#load-path > a[is='action-link'] {
display: inline;
}
#size {
align-items: center;
display: flex;
}
paper-spinner-lite {
@apply --cr-icon-height-width;
}
</style>
<div id="container">
<div id="main">
<div id="top-bar">
<paper-icon-button-light class="icon-arrow-back no-overlap">
<button id="closeButton" aria-label="$i18n{back}"
on-click="onCloseButtonTap_"></button>
</paper-icon-button-light>
<img id="icon" src="[[data.iconUrl]]"
alt$="[[appOrExtension(
data.type,
'$i18nPolymer{appIcon}',
'$i18nPolymer{extensionIcon}')]]">
<span id="name">[[data.name]]</span>
</div>
<div class="section continuation control-line" id="enable-section">
<span class$="{{computeEnabledStyle_(data.state)}}">
[[computeEnabledText_(data.state, '$i18nPolymer{itemOn}',
'$i18nPolymer{itemOff}')]]
</span>
<div class="layout horizontal">
<cr-tooltip-icon hidden$="[[!data.controlledInfo]]"
tooltip-text="[[data.controlledInfo.text]]"
icon-class="[[getIndicatorIcon_(data.controlledInfo.type)]]"
icon-aria-label="[[data.controlledInfo.type]]">
</cr-tooltip-icon>
<cr-toggle id="enable-toggle"
aria-label$="[[appOrExtension(
data.type,
'$i18nPolymer{appEnabled}',
'$i18nPolymer{extensionEnabled}')]]"
aria-describedby="name"
checked="[[isEnabled_(data.state)]]"
on-change="onEnableChange_"
disabled="[[!isEnableToggleEnabled_(data.*)]]">
</cr-toggle>
</div>
</div>
<div id="warnings" hidden$="[[!hasWarnings_(data.*)]]">
<div id="runtime-warnings" aria-describedby="a11yAssociation"
hidden$="[[!data.runtimeWarnings.length]]"
class="section continuation warning control-line">
<iron-icon class="warning-icon" icon="cr:error"></iron-icon>
<span>
<template is="dom-repeat" items="[[data.runtimeWarnings]]">
[[item]]
</template>
</span>
<paper-button id="reload-button" class="action-button"
on-click="onReloadTap_">
$i18n{itemReload}
</paper-button>
</div>
<div class="section continuation warning" id="suspicious-warning"
hidden$="[[!data.disableReasons.suspiciousInstall]]">
<iron-icon class="warning-icon" icon="cr:warning"></iron-icon>
<span>
$i18n{itemSuspiciousInstall}
<a target="_blank" id="learn-more-link"
href="$i18n{suspiciousInstallHelpUrl}">
$i18n{learnMore}
</a>
</span>
</div>
<div class="section continuation warning control-line"
id="corrupted-warning"
hidden$="[[!data.disableReasons.corruptInstall]]">
<iron-icon class="warning-icon" icon="cr:warning"></iron-icon>
<span>$i18n{itemCorruptInstall}</span>
<paper-button id="repair-button" class="action-button"
on-click="onRepairTap_">
$i18n{itemRepair}
</paper-button>
</div>
<div class="section continuation warning" id="blacklisted-warning"
hidden$="[[!data.blacklistText]]">
<iron-icon class="warning-icon" icon="cr:warning"></iron-icon>
<span>[[data.blacklistText]]</span>
</div>
<div class="section continuation warning" id="update-required-warning"
hidden$="[[!data.disableReasons.updateRequired]]">
<iron-icon class="warning-icon" icon="cr:warning"></iron-icon>
<span>$i18n{updateRequiredByPolicy}</span>
</div>
</div>
<div class="section continuation block">
<div class="section-title">$i18n{itemDescriptionLabel}</div>
<div class="section-content" id="description">
[[getDescription_(data.description, '$i18nPolymer{noDescription}')]]
</div>
</div>
<div class="section block">
<div class="section-title">$i18n{itemVersion}</div>
<div class="section-content">[[data.version]]</div>
</div>
<div class="section block">
<div class="section-title">$i18n{itemSize}</div>
<div class="section-content" id="size">
<span>[[size_]]</span>
<paper-spinner-lite active="[[!size_]]" hidden="[[size_]]">
</paper-spinner-lite>
</div>
</div>
<div class="section block" id="id-section" hidden$="[[!inDevMode]]">
<div class="section-title">$i18n{itemIdHeading}</div>
<div class="section-content">[[data.id]]</div>
</div>
<template is="dom-if" if="[[inDevMode]]">
<div class="section block" id="inspectable-views">
<div class="section-title">$i18n{itemInspectViews}</div>
<div class="section-content">
<ul id="inspect-views">
<li hidden="[[data.views.length]]">
$i18n{noActiveViews}
</li>
<template is="dom-repeat" items="[[data.views]]">
<li>
<a is="action-link" class="inspectable-view"
on-click="onInspectTap_">
[[computeInspectLabel_(item)]]
</a>
</li>
</template>
</ul>
</div>
</div>
</template>
<div class="section block">
<div class="section-title">$i18n{itemPermissions}</div>
<div class="section-content">
<span id="no-permissions" hidden$="[[hasPermissions_(data.*)]]">
$i18n{itemPermissionsEmpty}
</span>
<ul id="permissions-list"
hidden$="[[!data.permissions.simplePermissions.length]]">
<template is="dom-repeat"
items="[[data.permissions.simplePermissions]]">
<li>
[[item.message]]
<ul hidden="[[!item.submessages.length]]">
<template is="dom-repeat" items="[[item.submessages]]">
<li>[[item]]</li>
</template>
</ul>
</li>
</template>
</ul>
<template is="dom-if" if="[[showRuntimeHostPermissions_(data.*)]]">
<div id="runtime-host-permissions">
<div id="runtime-host-permissions-mode">
<div class="mid-section-header">
$i18n{itemHostPermissionsHeading}
</div>
<select id="host-access" class="md-select"
value="[[data.permissions.hostAccess]]"
on-change="onHostAccessChanged_">
<option value$="[[HostAccess_.ON_CLICK]]">
$i18n{itemHostAccessOnClick}
</option>
<option value$="[[HostAccess_.ON_SPECIFIC_SITES]]">
$i18n{itemHostAccessOnSpecificSites}
</option>
<option value$="[[HostAccess_.ON_ALL_SITES]]">
$i18n{itemHostAccessOnAllSites}
</option>
</select>
</div>
<template is="dom-if" if="[[showSpecificSites_(data.*)]]">
<div class="mid-section-header">$i18n{itemAllowedHosts}</div>
<ul id="runtime-hosts">
<template is="dom-repeat"
items="[[data.permissions.runtimeHostPermissions]]">
<li>[[item]]</li>
</template>
</ul>
</template>
</div>
</template>
</div>
</div>
<template is="dom-if"
if="[[hasDependentExtensions_(data.dependentExtensions.splices)]]">
<div class="section block">
<div class="section-title">$i18n{itemDependencies}</div>
<div class="section-content">
<ul id="dependent-extensions-list">
<template is="dom-repeat" items="[[data.dependentExtensions]]">
<li>[[computeDependentEntry_(item)]]</li>
</template>
</ul>
</div>
</div>
</template>
<template is="dom-if" if="[[shouldShowOptionsSection_(data.*)]]">
<div id="options-section">
<template is="dom-if"
if="[[shouldShowIncognitoOption_(
data.incognitoAccess.isEnabled, incognitoAvailable)]]">
<extensions-toggle-row id="allow-incognito" class="three-line"
checked="[[data.incognitoAccess.isActive]]"
on-change="onAllowIncognitoChange_">
<div>
<div>$i18n{itemAllowIncognito}</div>
<div class="section-content">$i18n{incognitoInfoWarning}</div>
</div>
</extensions-toggle-row>
</template>
<template is="dom-if" if="[[data.fileAccess.isEnabled]]">
<extensions-toggle-row id="allow-on-file-urls"
checked="[[data.fileAccess.isActive]]"
on-change="onAllowOnFileUrlsChange_">
<span>$i18n{itemAllowOnFileUrls}</span>
</extensions-toggle-row>
</template>
<template is="dom-if" if="[[data.errorCollection.isEnabled]]">
<extensions-toggle-row id="collect-errors"
checked="[[data.errorCollection.isActive]]"
on-change="onCollectErrorsChange_">
<span>$i18n{itemCollectErrors}</span>
</extensions-toggle-row>
</template>
</div>
</template>
<cr-link-row class="hr" is="" id="extensions-options"
disabled="[[!isEnabled_(data.state)]]"
hidden="[[!shouldShowOptionsLink_(data.*)]]"
icon-class="icon-external" label="$i18n{itemOptions}"
on-click="onExtensionOptionsTap_">
</cr-link-row>
<cr-link-row class="hr" hidden="[[!data.manifestHomePageUrl.length]]"
icon-class="icon-external" id="extensionWebsite"
label="$i18n{extensionWebsite}" on-click="onExtensionWebSiteTap_">
</cr-link-row>
<cr-link-row class="hr" hidden="[[!data.webStoreUrl.length]]"
icon-class="icon-external" id="viewInStore"
label="$i18n{viewInStore}" on-click="onViewInStoreTap_">
</cr-link-row>
<div class="section block">
<div class="section-title">$i18n{itemSource}</div>
<div id="source" class="section-content">
[[computeSourceString_(data.*)]]
</div>
<div id="load-path" class="section-content"
hidden$="[[!data.prettifiedPath]]">
<span>$i18n{itemExtensionPath}</span>
<a is="action-link" on-click="onLoadPathTap_">
[[data.prettifiedPath]]
</a>
</div>
</div>
<cr-link-row class="hr"
hidden="[[isControlled_(data.controlledInfo)]]"
icon-class="subpage-arrow" id="remove-extension"
label="$i18n{itemRemoveExtension}" on-click="onRemoveTap_">
</cr-link-row>
</div>
</div>
</template>
<script src="detail_view.js"></script>
</dom-module>