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