Index: chrome/browser/resources/chromeos/arc_support/background.js |
diff --git a/chrome/browser/resources/chromeos/arc_support/background.js b/chrome/browser/resources/chromeos/arc_support/background.js |
index 65a459c0cf210e94a30358978081050282a6f221..e290396e3e4ec7ad94e503139d19f7f39630fbfe 100644 |
--- a/chrome/browser/resources/chromeos/arc_support/background.js |
+++ b/chrome/browser/resources/chromeos/arc_support/background.js |
@@ -66,6 +66,18 @@ var currentDeviceId = null; |
var termsAccepted = false; |
/** |
+ * Indicates that current user has managed Arc. |
+ * @type {boolean} |
+ */ |
+var arcManaged = false; |
+ |
+/** |
+ * Tooltip text used in 'controlled by policy' indicator. |
+ * @type {boolean} |
+ */ |
+var controlledByPolicyText = ''; |
+ |
+/** |
* Host window inner default width. |
* @const {number} |
*/ |
@@ -99,6 +111,31 @@ function sendNativeMessage(code, opt_Props) { |
} |
/** |
+ * Helper function that sets inner content for an option which includes text, |
+ * link to 'learn more' section. This also creates an indicator showing that |
+ * option is controlled by policy and inserts it before link element. |
+ * @param {string} textId Id of the label element to process. |
+ * @param {string} learnMoreLinkId Id inner link to 'learn more' element. |
+ * @param {string} indicatorId Id of indicator to create. |
+ * @param {string} text Inner text to set. Includes link declaration. |
+ */ |
+function createConsentOption(textId, learnMoreLinkId, indicatorId, text) { |
+ var doc = appWindow.contentWindow.document; |
+ var textElement = doc.getElementById(textId); |
+ textElement.innerHTML = text; |
+ var linkLearnMoreElement = doc.getElementById(learnMoreLinkId); |
+ linkLearnMoreElement.addEventListener('click', onLearnMore); |
+ |
+ // Create controlled by policy indicator. |
+ var policyIndicator = new appWindow.contentWindow.cr.ui.ControlledIndicator(); |
+ policyIndicator.id = indicatorId; |
+ policyIndicator.getBubbleText = function() { |
+ return controlledByPolicyText; |
+ }; |
+ textElement.insertBefore(policyIndicator, linkLearnMoreElement); |
+} |
+ |
+/** |
* Applies localization for html content and sets terms webview. |
* @param {!Object} data Localized strings and relevant information. |
* @param {string} deviceId Current device id. |
@@ -110,8 +147,18 @@ function initialize(data, deviceId) { |
loadTimeData.data = data; |
appWindow.contentWindow.i18nTemplate.process(doc, loadTimeData); |
var countryCode = data.countryCode.toLowerCase(); |
- setBackupRestoreMode(data.textBackupRestore, data.backupRestoreEnabled); |
- setLocationServiceMode(data.textLocationService, data.locationServiceEnabled); |
+ controlledByPolicyText = data.controlledByPolicy; |
+ arcManaged = data.arcManaged; |
+ setTermsVisible(!arcManaged); |
+ |
+ createConsentOption('text-backup-restore', |
+ 'learn-more-link-backup-restore', |
+ 'policy-indicator-backup-restore', |
+ data.textBackupRestore); |
+ createConsentOption('text-location-service', |
+ 'learn-more-link-location-service', |
+ 'policy-indicator-location-service', |
+ data.textLocationService); |
var scriptSetCountryCode = 'document.countryCode = \'' + countryCode + '\';'; |
termsView.addContentScripts([ |
@@ -169,32 +216,50 @@ function setMetricsMode(text, canEnable, on) { |
/** |
* Sets current backup and restore mode. |
- * @param {string} text String used to display next to checkbox. |
- * @param {boolean} defaultCheckValue Defines the default value for backup and |
- * restore checkbox. |
+ * @param {boolean} enabled Defines the value for backup and restore checkbox. |
+ * @param {boolean} managed Defines whether this setting is set by policy. |
*/ |
-function setBackupRestoreMode(text, defaultCheckValue) { |
+function setBackupRestoreMode(enabled, managed) { |
var doc = appWindow.contentWindow.document; |
- doc.getElementById('enable-backup-restore').checked = defaultCheckValue; |
- |
- doc.getElementById('text-backup-restore').innerHTML = text; |
- doc.getElementById('learn-more-link-backup-restore').addEventListener('click', |
- onLearnMore); |
+ doc.getElementById('enable-backup-restore').checked = enabled; |
+ doc.getElementById('enable-backup-restore').disabled = managed; |
+ doc.getElementById('text-backup-restore').disabled = managed; |
+ var policyIconElement = doc.getElementById('policy-indicator-backup-restore'); |
+ if (managed) { |
+ policyIconElement.setAttribute('controlled-by', 'policy'); |
+ } else { |
+ policyIconElement.removeAttribute('controlled-by'); |
+ } |
} |
/** |
* Sets current usage of location service opt in mode. |
- * @param {string} text String used to display next to checkbox. |
- * @param {boolean} defaultCheckValue Defines the default value for location |
- * service opt in. |
+ * @param {boolean} enabled Defines the value for location service opt in. |
+ * @param {boolean} managed Defines whether this setting is set by policy. |
*/ |
-function setLocationServiceMode(text, defaultCheckValue) { |
+function setLocationServiceMode(enabled, managed) { |
var doc = appWindow.contentWindow.document; |
- doc.getElementById('enable-location-service').checked = defaultCheckValue; |
+ doc.getElementById('enable-location-service').checked = enabled; |
+ doc.getElementById('enable-location-service').disabled = managed; |
+ doc.getElementById('text-location-service').disabled = managed; |
+ var policyIconElement = doc.getElementById( |
+ 'policy-indicator-location-service'); |
+ if (managed) { |
+ policyIconElement.setAttribute('controlled-by', 'policy'); |
+ } else { |
+ policyIconElement.removeAttribute('controlled-by'); |
+ } |
+} |
- doc.getElementById('text-location-service').innerHTML = text; |
- doc.getElementById('learn-more-link-location-service'). |
- addEventListener('click', onLearnMore); |
+/** |
+ * Sets visibility of Terms of Service. |
+ * @param {boolean} visible Whether the Terms of Service visible or not. |
+ */ |
+function setTermsVisible(visible) { |
+ var doc = appWindow.contentWindow.document; |
+ var styleVisibility = visible ? 'visible' : 'hidden'; |
+ doc.getElementById('terms-title').style.visibility = styleVisibility; |
+ doc.getElementById('terms-container').style.visibility = styleVisibility; |
} |
/** |
@@ -233,6 +298,10 @@ function onNativeMessage(message) { |
initialize(message.data, message.deviceId); |
} else if (message.action == 'setMetricsMode') { |
setMetricsMode(message.text, message.canEnable, message.on); |
+ } else if (message.action == 'setBackupAndRestoreMode') { |
+ setBackupRestoreMode(message.enabled, message.managed); |
+ } else if (message.action == 'setLocationServiceMode') { |
+ setLocationServiceMode(message.enabled, message.managed); |
} else if (message.action == 'closeUI') { |
closeWindowInternally(); |
} else if (message.action == 'showPage') { |
@@ -289,6 +358,9 @@ function showPage(pageDivId) { |
'&hl=' + navigator.language; |
} |
appWindow.show(); |
+ if (pageDivId == 'terms') { |
khmel
2016/08/12 20:33:23
Now showing 'terms' is called from 2 places. So I
|
+ updateTermsHeight(); |
+ } |
} |
/** |
@@ -317,7 +389,11 @@ function showPageWithStatus(pageId, status) { |
} |
if (UI_PAGES[pageId] == 'terms-loading') { |
- termsAccepted = false; |
+ termsAccepted = arcManaged; |
+ if (termsAccepted) { |
+ showPage('terms'); |
+ return; |
+ } |
loadInitialTerms(); |
} else { |
// Explicit request to start not from start page. Assume terms are |
@@ -461,7 +537,6 @@ chrome.app.runtime.onLaunched.addListener(function() { |
return; |
} |
showPage('terms'); |
- updateTermsHeight(); |
}; |
termsView.request.onBeforeRequest.addListener(onTermsViewBeforeRequest, |