15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)var pref = chrome.privacy.websites.thirdPartyCookiesAllowed; 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)function $(id) { 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return document.getElementById(id); 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/** 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Returns whether the |levelOfControl| means that the extension can change the 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * preference value. 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param levelOfControl{string} 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)function settingIsControllable(levelOfControl) { 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return (levelOfControl == 'controllable_by_this_extension' || 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) levelOfControl == 'controlled_by_this_extension'); 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/** 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Updates the UI to reflect the state of the preference. 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param settings{object} A settings object, as returned from |get()| or the 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * |onchange| event. 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)function updateUI(settings) { 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var disableUI = !settingIsControllable(settings.levelOfControl); 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) document.getElementById('regularValue').disabled = disableUI; 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) document.getElementById('useSeparateIncognitoSettings').disabled = disableUI; 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (settings.hasOwnProperty('incognitoSpecific')) { 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var hasIncognitoValue = settings.incognitoSpecific; 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) document.getElementById('useSeparateIncognitoSettings').checked = 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) hasIncognitoValue; 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) document.getElementById('incognitoValue').disabled = 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) disableUI || !hasIncognitoValue; 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) document.getElementById('incognitoValue').checked = settings.value; 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) document.getElementById('regularValue').checked = settings.value; 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/** 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Wrapper for |updateUI| which is used as callback for the |get()| method and 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * which logs the result. 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * If there was an error getting the preference, does nothing. 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param settings{object} A settings object, as returned from |get()|. 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)function updateUIFromGet(settings) { 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (settings) { 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) console.log('pref.get result:' + JSON.stringify(settings)); 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) updateUI(settings); 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/** 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Wrapper for |updateUI| which is used as handler for the |onchange| event 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * and which logs the result. 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param settings{object} A settings object, as returned from the |onchange| 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * event. 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)function updateUIFromOnChange(settings) { 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) console.log('pref.onChange event:' + JSON.stringify(settings)); 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) updateUI(settings); 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Initializes the UI. 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)function init() { 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome.extension.isAllowedIncognitoAccess(function(allowed) { 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (allowed) { 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pref.get({'incognito': true}, updateUIFromGet); 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) $('incognito').style.display = 'block'; 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) $('incognito-forbidden').style.display = 'none'; 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }); 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pref.get({}, updateUIFromGet); 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pref.onChange.addListener(updateUIFromOnChange); 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) $('regularValue').addEventListener('click', function () { 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) setPrefValue(this.checked, false); 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }); 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) $('useSeparateIncognitoSettings').addEventListener('click', function () { 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) setUseSeparateIncognitoSettings(this.checked); 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }); 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) $('incognitoValue').addEventListener('click', function () { 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) setPrefValue(this.checked, true); 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }); 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/** 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Called from the UI to change the preference value. 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param enabled{boolean} The new preference value. 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param incognito{boolean} Whether the value is specific to incognito mode. 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)function setPrefValue(enabled, incognito) { 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var scope = incognito ? 'incognito_session_only' : 'regular'; 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pref.set({'value': enabled, 'scope': scope}); 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/** 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Called from the UI to change whether to use separate settings for 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * incognito mode. 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param value{boolean} whether to use separate settings for 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * incognito mode. 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)function setUseSeparateIncognitoSettings(value) { 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!value) { 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pref.clear({'incognito': true}); 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Explicitly set the value for incognito mode. 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pref.get({'incognito': true}, function(settings) { 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pref.set({'incognito': true, 'value': settings.value}); 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }); 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) document.getElementById('incognitoValue').disabled = !value; 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Call `init` to kick things off. 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)document.addEventListener('DOMContentLoaded', init); 128