<html i18n-values="dir:textdirection;"> <head> <title></title> <style type="text/css"> body { } body { } h4 { margin: 10px 0; } hr { background-color: #ddd; border: 0; height: 1px; margin: 5px 0; text-align: left; width: 100%; } form { -webkit-user-select: none; } .content-area { padding: 10px 15px; } .action-area { -webkit-box-align: center; -webkit-box-orient: horizontal; -webkit-box-pack: end; border-top: 1px solid rgba(188, 193, 208, .5); display: -webkit-box; padding: 12px; } .sync-header { font-size: 1.2em; font-weight: bold; margin-bottom: 10px; } .sync-select-customization { margin-top: 10px; } .action-area-link-container { -webkit-box-flex: 1; } #sync-passphrase-container { margin: 10px 0; } #sync-custom-passphrase { margin: 0 25px; } #sync-passphrase-message { color: gray; } .sync-custom-passphrase-input { margin: 10px 0; } #sync-select-container { margin-bottom: 10px; } #sync-instructions-container { margin-bottom: 30px; } #chooseDataTypesRadio { vertical-align: top; } #chooseDataTypes > div { display: inline-block; } #chooseDataTypesBody { margin: 10px 0; } #chooseDataTypesBody > div { -webkit-column-count: 3; } .sync-config-tab-contents-inactive { display: none; } .sync-config-tab-contents-active { display: block; margin: 10px 15px; } .sync-config-tabstrip { border-bottom: 1px solid gray; height: 25px; margin-bottom: 10px; padding-top: 10px; background-color: #DDD; } .sync-config-tab-active { background-color: white; border-top: 1px solid gray; border-left: 1px solid gray; border-right: 1px solid gray; border-top-left-radius: 5px 5px; border-top-right-radius: 5px 5px; } .sync-config-tab-active, .sync-config-tab-inactive { float: left; height: 22px; padding: 3px 5px 0px; margin-left: 15px; min-width: 100px; text-align: center; } .sync-config-tab-active A, .sync-config-tab-inactive A, .sync-config-tab-active A:visited, .sync-config-tab-inactive A:visited, .sync-config-tab-active A:hover, .sync-config-tab-inactive A:hover { color: black; text-decoration: none; } #sync-encryption-instructions { margin-bottom: 5px; } #sync-passphrase-warning { margin-bottom: 5px; } #encryption-tab-contents > .sync_item_show { margin-bottom: 5px; } .sync-item-show { display: block; white-space: nowrap; } .sync-item-show > label { overflow: hidden; white-space: nowrap; text-overflow: ellipsis; display: inline-block; width: 92%; } .sync-item-hide { display: none; } .sync-label-inactive { color: #9B9B9B; } .sync-label-active { color: #000000; } .sync-data-types { margin-left: 5px; } .sync-errors { margin-top: 5px; } .sync-error-show { display: block; width: 80%; margin-left: auto; margin-right: auto; text-align: center; padding: 1px 10px; background-color: #eeb939; border-radius: 4px; font-weight: bold; } .sync-error-hide { display: none; } .sync-footer { position: fixed; right: 0px; bottom: 0px; margin-right: 10px; margin-bottom: 10px; } .sync-section { background: #EEE; margin: 5px 0px 5px 19px; padding: 6px; } #explicit-message { margin-bottom: 5px; } #change-passphrase { margin: 10px 0; background: #EEE; padding: 8px; } #clear-data-button { margin-top: 10px; } html[dir='rtl'] .sync-footer { text-align: left; left: 0px; bottom: 0px; margin-left: 20px; } input[type='button'], input[type='submit'] { min-width: 87px; min-height: 26px; } html[os='mac'] input[type='button'], html[os='mac'] input[type='submit'] { font-size: 12pt; } </style> <script src="chrome://resources/js/cr.js"></script> <!-- TODO(jhawkins): util.js for $(). --> <script> // Called once, when this html/js is loaded. function initializeConfigureDialog(args) { // Allow platform specific rules if (cr.isMac) { document.documentElement.setAttribute('os', 'mac'); } else if (!cr.isWindows) { document.documentElement.setAttribute('os', 'linux'); } var datatypeSelect = document.getElementById('sync-select-datatypes'); datatypeSelect.onchange = function() { var syncAll = this.selectedIndex == 0; setCheckboxesToKeepEverythingSynced(syncAll); document.getElementById('chooseDataTypesBody').hidden = syncAll; }; if (args) { setCheckboxesAndErrors(args); // Whether to display the 'Sync everything' confirmation screen or the // customize data types screen. // TODO(jhawkins): Rename |keepEverythingSynced| to |syncAllDataTypes|. var syncEverything = args['syncEverything']; var syncAllDataTypes = args['keepEverythingSynced']; var usePassphrase = args['usePassphrase']; if (syncEverything == false || syncAllDataTypes == false || usePassphrase) { showCustomizePage(); } } } function showCustomizePage() { document.getElementById('confirm-sync-preferences').hidden = true; document.getElementById('customize-sync-preferences').hidden = false; // If the user is shown the 'Customize' page, it's likely he intends to // change the data types. Select the 'Choose data types' option in this // case. document.getElementById('sync-select-datatypes').selectedIndex = 1; document.getElementById('chooseDataTypesBody').hidden = false; setDataTypeCheckboxesEnabled(true); } function showSyncEverythingPage() { document.getElementById('confirm-sync-preferences').hidden = false; document.getElementById('customize-sync-preferences').hidden = true; // The default state is to sync everything and to not use a custom // passphrase. setCheckboxesToKeepEverythingSynced(true); document.getElementById("google-option").checked = true; } function setCheckboxesAndErrors(args) { setChooseDataTypesCheckboxes(args); setEncryptionCheckboxes(args); setErrorState(args); } function checkAllDataTypeCheckboxes() { var checkboxes = document.getElementsByName("dataTypeCheckbox"); for (var i = 0; i < checkboxes.length; i++) { // Only check the visible ones (since there's no way to uncheck // the invisible ones). if (checkboxes[i].parentElement.className == "sync-item-show") { checkboxes[i].checked = true; } } } function setCheckboxesToKeepEverythingSynced(value) { setDataTypeCheckboxesEnabled(!value); if (value) checkAllDataTypeCheckboxes(); } // Can be called multiple times. function setChooseDataTypesCheckboxes(args) { // If this frame is on top, the focus should be on it, so pressing enter // submits this form. if (args.iframeToShow == 'configure') { document.getElementById("okButton").focus(); } var datatypeSelect = document.getElementById('sync-select-datatypes'); datatypeSelect.selectedIndex = args.keepEverythingSynced ? 0 : 1; document.getElementById('chooseDataTypesBody').hidden = args.keepEverythingSynced; document.getElementById("bookmarksCheckbox").checked = args.syncBookmarks; document.getElementById("preferencesCheckbox").checked = args.syncPreferences; document.getElementById("themesCheckbox").checked = args.syncThemes; if (args.passwordsRegistered) { document.getElementById("passwordsCheckbox").checked = args.syncPasswords; document.getElementById("passwordsItem").className = "sync-item-show"; } else { document.getElementById("passwordsItem").className = "sync-item-hide"; } if (args.autofillRegistered) { document.getElementById("autofillCheckbox").checked = args.syncAutofill; document.getElementById("autofillItem").className = "sync-item-show"; } else { document.getElementById("autofillItem").className = "sync-item-hide"; } if (args.extensionsRegistered) { document.getElementById("extensionsCheckbox").checked = args.syncExtensions; document.getElementById("extensionsItem").className = "sync-item-show"; } else { document.getElementById("extensionsItem").className = "sync-item-hide"; } if (args.typedUrlsRegistered) { document.getElementById("typedUrlsCheckbox").checked = args.syncTypedUrls; document.getElementById("omniboxItem").className = "sync-item-show"; } else { document.getElementById("omniboxItem").className = "sync-item-hide"; } if (args.appsRegistered) { document.getElementById("appsCheckbox").checked = args.syncApps; document.getElementById("appsItem").className = "sync-item-show"; } else { document.getElementById("appsItem").className = "sync-item-hide"; } setCheckboxesToKeepEverythingSynced(args.keepEverythingSynced); if (args.sessionsRegistered) { document.getElementById("sessionsCheckbox").checked = args.syncSessions; document.getElementById("sessionsItem").className = "sync-item-show"; } else { document.getElementById("sessionsItem").className = "sync-item-hide"; } } function setEncryptionCheckboxes(args) { if (args["usePassphrase"]) { document.getElementById("explicit-option").checked = true; // The passphrase, once set, cannot be unset, but we show a reset link. document.getElementById("explicit-option").disabled = true; document.getElementById("google-option").disabled = true; document.getElementById("sync-custom-passphrase").hidden = true; } else { document.getElementById("google-option").checked = true; } switchToMode(""); } function setErrorState(args) { if (!args.was_aborted) return; document.getElementById("aborted-text").className = "sync-error-show"; document.getElementById("okButton").disabled = true; document.getElementById("keepEverythingSyncedRadio").disabled = true; document.getElementById("chooseDataTypesRadio").disabled = true; } function setDataTypeCheckboxesEnabled(enabled) { var checkboxes = document.getElementsByName("dataTypeCheckbox"); var labels = document.getElementsByName("dataTypeLabel"); for (var i = 0; i < checkboxes.length; i++) { checkboxes[i].disabled = !enabled; if (checkboxes[i].disabled) { labels[i].className = "sync-label-inactive"; } else { labels[i].className = "sync-label-active"; } } } // Returns true if at least one data type is enabled and no data types are // checked. (If all data type checkboxes are disabled, it's because "keep // everything synced" is checked.) function noDataTypesChecked() { var checkboxes = document.getElementsByName("dataTypeCheckbox"); var atLeastOneChecked = false; var atLeastOneEnabled = false; for (var i = 0; i < checkboxes.length; i++) { if (!checkboxes[i].disabled && checkboxes[i].parentElement.className == "sync-item-show") { atLeastOneEnabled = true; if (checkboxes[i].checked) { atLeastOneChecked = true; } } } return atLeastOneEnabled && !atLeastOneChecked; } function sendConfiguration() { // Trying to submit, so hide previous errors. document.getElementById("aborted-text").className = "sync-error-hide"; document.getElementById("error-text").className = "sync-error-hide"; if (noDataTypesChecked()) { document.getElementById("error-text").className = "sync-error-show"; return; } var f = document.getElementById("chooseDataTypesForm"); if (!checkPassphraseMatch()) { return false; } var syncAll = document.getElementById('sync-select-datatypes').selectedIndex == 0; // These values need to be kept in sync with where they are read in // SyncSetupFlow::GetDataTypeChoiceData(). var result = JSON.stringify({ "keepEverythingSynced": syncAll, "syncBookmarks": syncAll || f.bookmarksCheckbox.checked, "syncPreferences": syncAll || f.preferencesCheckbox.checked, "syncThemes": syncAll || f.themesCheckbox.checked, "syncPasswords": syncAll || f.passwordsCheckbox.checked, "syncAutofill": syncAll || f.autofillCheckbox.checked, "syncExtensions": syncAll || f.extensionsCheckbox.checked, "syncTypedUrls": syncAll || f.typedUrlsCheckbox.checked, "syncApps": syncAll || f.appsCheckbox.checked, "syncSessions": syncAll || f.sessionsCheckbox.checked, "usePassphrase": (getRadioCheckedValue() == 'explicit'), "passphrase": f.passphrase.value }); chrome.send("Configure", [result]); } function switchToMode(mode) { if (mode == "google") document.getElementById("sync-custom-passphrase").hidden = true; else if (mode =="explicit") document.getElementById("sync-custom-passphrase").hidden = false; } function getRadioCheckedValue() { var f = document.getElementById("chooseDataTypesForm"); for (var i = 0; i < f.option.length; ++i) { if (f.option[i].checked) { return f.option[i].value; } } return undefined; } function onRadioChange() { switchToMode(getRadioCheckedValue()); } function checkPassphraseMatch() { var emptyError = document.getElementById("emptyerror"); var mismatchError = document.getElementById("mismatcherror"); emptyError.style.display = "none"; mismatchError.style.display = "none"; var f = document.getElementById("chooseDataTypesForm"); if (getRadioCheckedValue() != "explicit" || f.option[0].disabled) { return true; } if (f.passphrase.value.length == 0) { emptyError.style.display = "block"; return false; } var confirmPassphrase = document.getElementById("confirm-passphrase"); var passphrase = document.getElementById("passphrase"); if (confirmPassphrase.value != passphrase.value) { mismatchError.style.display = "block"; return false; } return true; } function goToDashboard() { chrome.send("GoToDashboard", [""]); chrome.send("DialogClose", [""]); } </script> </head> <body i18n-values=".style.fontFamily:fontfamily" onload="initializeConfigureDialog(JSON.parse(chrome.dialogArguments));"> <div id="confirm-sync-preferences"> <div class="sync-header" i18n-content="confirmSyncPreferences"></div> <div id="sync-instructions-container" class="content-area"> <span i18n-content="choosedatatypesinstructions"></span> <a i18n-values="href:encryptionhelpurl" target="_blank" i18n-content="learnmore"></a> </div> <div> <div class="action-area"> <div class="action-area-link-container"> <a id="customize-link" href="#" i18n-content="customizelinklabel" onclick="showCustomizePage();"></a> </div> <input id="okButton" type="button" i18n-values="value:syncEverything" onclick="sendConfiguration();"> <input id="cancelButton" type="button" i18n-values="value:cancel" onclick="chrome.send('DialogClose', [''])"> </div> </div> </div> <div id="customize-sync-preferences" hidden> <form id="chooseDataTypesForm" onSubmit="sendConfiguration(); return false;"> <div class="sync-header">Customize Sync Preferences</div> <hr> <div id="sync-configure-content" class="content-area"> <div id="sync-select-container"> <select id="sync-select-datatypes"> <option i18n-content="keepeverythingsynced"></option> <option i18n-content="choosedatatypes" selected></option> </select> <div id="chooseDataTypesBody" hidden> <div> <!-- Apps --> <div class="sync-item-show" id="appsItem"> <input id="appsCheckbox" name="dataTypeCheckbox" type="checkbox"> <label id="appsCheckboxLabel" name="dataTypeLabel" for="appsCheckbox" i18n-content="apps" i18n-values="title:apps"></label> </div> <!-- Autofill --> <div class="sync-item-show" id="autofillItem"> <input id="autofillCheckbox" name="dataTypeCheckbox" type="checkbox"> <label id="autofillCheckboxLabel" name="dataTypeLabel" for="autofillCheckbox" i18n-content="autofill" i18n-values="title:autofill"></label> </div> <!-- Bookmarks --> <div class="sync-item-show" id="bookmarksItem"> <input id="bookmarksCheckbox" name="dataTypeCheckbox" type="checkbox"> <label id="bookmarksCheckboxLabel" name="dataTypeLabel" for="bookmarksCheckbox" i18n-content="bookmarks" i18n-values="title:bookmarks"></label> </div> <!-- Extensions --> <div class="sync-item-show" id="extensionsItem"> <input id="extensionsCheckbox" name="dataTypeCheckbox" type="checkbox"> <label id="extensionsCheckboxLabel" name="dataTypeLabel" for="extensionsCheckbox" i18n-content="extensions" i18n-values="title:extensions"></label> </div> <!-- Omnibox --> <div class="sync-item-show" id="omniboxItem"> <input id="typedUrlsCheckbox" name="dataTypeCheckbox" type="checkbox"> <label id="typedUrlsCheckboxLabel" name="dataTypeLabel" for="typedUrlsCheckbox" i18n-content="typedurls" i18n-values="title:typedurls"></label> </div> <!-- Passwords --> <div class="sync-item-show" id="passwordsItem"> <input id="passwordsCheckbox" name="dataTypeCheckbox" type="checkbox"> <label id="passwordsCheckboxLabel" name="dataTypeLabel" for="passwordsCheckbox" i18n-content="passwords" i18n-values="title:passwords"></label> </div> <!-- Preferences --> <div class="sync-item-show" id="preferencesItem"> <input id="preferencesCheckbox" name="dataTypeCheckbox" type="checkbox"> <label id="preferencesCheckboxLabel" name="dataTypeLabel" for="preferencesCheckbox" i18n-content="preferences" i18n-values="title:preferences"></label> </div> <!-- Themes --> <div class="sync-item-show" id="themesItem"> <input id="themesCheckbox" name="dataTypeCheckbox" type="checkbox"> <label id="themesCheckboxLabel" name="dataTypeLabel" for="themesCheckbox" i18n-content="themes" i18n-values="title:themes"></label> </div> <!-- Sessions --> <div class="sync-item-show" id="sessionsItem"> <input id="sessionsCheckbox" name="dataTypeCheckbox" type="checkbox"> <label id="sessionsCheckboxLabel" name="dataTypeLabel" for="sessionsCheckbox" i18n-content="foreignsessions" il8n-values="title:sessions"></label> </div> </div> </div> </div> <div class="sync-errors"> <span id="error-text" i18n-content="synczerodatatypeserror" class="sync-error-hide"></span> <span id="aborted-text" i18n-content="abortederror" class="sync-error-hide"></span> </div> <hr> <h4 i18n-content="passphraseSectionTitle"></h4> <div id="sync-passphrase-container"> <div> <input id="google-option" name="option" type="radio" value="google" onchange="onRadioChange();"> <label for="google-option" i18n-content="googleOption"></label> </div> <div> <input id="explicit-option" name="option" type="radio" value="explicit" onchange="onRadioChange();"> <label for="explicit-option" i18n-content="explicitOption"></label> <a i18n-values="href:encryptionhelpurl" target="_blank" i18n-content="learnmore"></a> </div> <div id="sync-custom-passphrase" hidden> <div id="sync-passphrase-message"> <span i18n-content="sectionExplicitMessagePrefix"></span> <a href="http://google.com/dashboard" target="_blank" i18n-content="sectionExplicitMessagePostfix"></a> <span>.</span> </div> <div class="sync-custom-passphrase-input"> <input id="passphrase" type="password" i18n-values="placeholder:passphraseLabel"> </div> <div class="sync-custom-passphrase-input"> <input id="confirm-passphrase" type="password" i18n-values="placeholder:confirmLabel"> </div> <div class="error" style="display:none" id="emptyerror" i18n-content="emptyErrorMessage"></div> <div class="error" style="display:none" id="mismatcherror" i18n-content="mismatchErrorMessage"></div> </div> </div> <div class="action-area"> <div class="action-area-link-container"> <a id="use-default-link" href="#" i18n-content="useDefaultSettings" onclick="showSyncEverythingPage();"></a> </div> <input id="okButton" type="submit" i18n-values="value:ok" /> <input id="cancelButton" type="button" i18n-values="value:cancel" onclick='chrome.send("DialogClose", [""])' /> </div> </div> </form> </div> </body> </html>