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) * @fileoverview This file contains methods that allow to tweak 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * internal page UI based on the status of current user (owner/user/guest). 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * It is assumed that required data is passed via i18n strings 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * (using loadTimeData dictionary) that are filled with call to 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * AddAccountUITweaksLocalizedValues in ui_account_tweaks.cc. 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * It is also assumed that tweaked page has chrome://resources/css/widgets.css 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * included. 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)cr.define('uiAccountTweaks', function() { 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ///////////////////////////////////////////////////////////////////////////// 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // UIAccountTweaks class: 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Encapsulated handling of ChromeOS accounts options page. 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @constructor 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) function UIAccountTweaks() { 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @return {boolean} Whether the current user is owner or not. 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UIAccountTweaks.currentUserIsOwner = function() { 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return loadTimeData.getBoolean('currentUserIsOwner'); 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @return {boolean} Whether we're currently in guest mode. 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UIAccountTweaks.loggedInAsGuest = function() { 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return loadTimeData.getBoolean('loggedInAsGuest'); 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 42eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch * @return {boolean} Whether we're currently in supervised user mode. 43eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch */ 44eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch UIAccountTweaks.loggedInAsLocallyManagedUser = function() { 45eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch return loadTimeData.getBoolean('loggedInAsLocallyManagedUser'); 46eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch }; 47eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 48eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch /** 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Disables or hides some elements in Guest mode in ChromeOS. 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * All elements within given document with guest-visibility 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * attribute are either hidden (for guest-visibility="hidden") 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * or disabled (for guest-visibility="disabled"). 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param {Document} document Document that should processed. 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UIAccountTweaks.applyGuestModeVisibility = function(document) { 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!cr.isChromeOS || !UIAccountTweaks.loggedInAsGuest()) 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var elements = document.querySelectorAll('[guest-visibility]'); 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (var i = 0; i < elements.length; i++) { 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var element = elements[i]; 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var visibility = element.getAttribute('guest-visibility'); 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (visibility == 'hidden') 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) element.hidden = true; 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else if (visibility == 'disabled') 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UIAccountTweaks.disableElementsForGuest(element); 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Disables and marks page elements for Guest mode. 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Adds guest-disabled css class to all elements within given subtree, 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * disables interactive elements (input/select/button), and removes href 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * attribute from <a> elements. 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param {Element} element Root element of DOM subtree that should be 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * disabled. 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UIAccountTweaks.disableElementsForGuest = function(element) { 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UIAccountTweaks.disableElementForGuest_(element); 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Walk the tree, searching each ELEMENT node. 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var walker = document.createTreeWalker(element, 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NodeFilter.SHOW_ELEMENT, 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) null, 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) false); 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var node = walker.nextNode(); 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) while (node) { 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UIAccountTweaks.disableElementForGuest_(node); 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) node = walker.nextNode(); 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Disables single element for Guest mode. 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Adds guest-disabled css class, adds disabled attribute for appropriate 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * elements (input/select/button), and removes href attribute from 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * <a> element. 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @private 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @param {Element} element Element that should be disabled. 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UIAccountTweaks.disableElementForGuest_ = function(element) { 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) element.classList.add('guest-disabled'); 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (element.nodeName == 'INPUT' || 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) element.nodeName == 'SELECT' || 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) element.nodeName == 'BUTTON') 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) element.disabled = true; 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (element.nodeName == 'A') { 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) element.onclick = function() { 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Export 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return { 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UIAccountTweaks: UIAccountTweaks 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}); 123