// Copyright (c) 2011 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
cr.define('options', function() {
var OptionsPage = options.OptionsPage;
/////////////////////////////////////////////////////////////////////////////
// InternetOptions class:
/**
* Encapsulated handling of ChromeOS internet options page.
* @constructor
*/
function InternetOptions() {
OptionsPage.call(this, 'internet', templateData.internetPageTabTitle,
'internetPage');
}
cr.addSingletonGetter(InternetOptions);
// Inherit InternetOptions from OptionsPage.
InternetOptions.prototype = {
__proto__: OptionsPage.prototype,
/**
* Initializes InternetOptions page.
* Calls base class implementation to starts preference initialization.
*/
initializePage: function() {
OptionsPage.prototype.initializePage.call(this);
if (templateData.accessLocked) {
var page = $('internetPage');
page.setAttribute('accesslocked', true);
}
options.internet.NetworkElement.decorate($('wired-list'));
$('wired-list').load(templateData.wiredList);
options.internet.NetworkElement.decorate($('wireless-list'));
$('wireless-list').load(templateData.wirelessList);
options.internet.NetworkElement.decorate($('remembered-list'));
$('remembered-list').load(templateData.rememberedList);
options.internet.CellularPlanElement.decorate($('planList'));
$('wired-section').hidden = (templateData.wiredList.length == 0);
$('wireless-section').hidden = (templateData.wirelessList.length == 0);
$('remembered-section').hidden =
(templateData.rememberedList.length == 0);
InternetOptions.setupAttributes(templateData);
$('detailsInternetDismiss').addEventListener('click', function(event) {
InternetOptions.setDetails();
});
$('detailsInternetLogin').addEventListener('click', function(event) {
InternetOptions.loginFromDetails();
});
$('activateDetails').addEventListener('click', function(event) {
InternetOptions.activateFromDetails();
});
$('enable-wifi').addEventListener('click', function(event) {
event.target.disabled = true;
chrome.send('enableWifi', []);
});
$('disable-wifi').addEventListener('click', function(event) {
event.target.disabled = true;
chrome.send('disableWifi', []);
});
$('enable-cellular').addEventListener('click', function(event) {
event.target.disabled = true;
chrome.send('enableCellular', []);
});
$('disable-cellular').addEventListener('click', function(event) {
event.target.disabled = true;
chrome.send('disableCellular', []);
});
$('buyplanDetails').addEventListener('click', function(event) {
chrome.send('buyDataPlan', []);
OptionsPage.closeOverlay();
});
$('cellularApnClear').addEventListener('click', function(event) {
$('cellularApn').value = "";
$('cellularApnUsername').value = "";
$('cellularApnPassword').value = "";
var data = $('inetAddress').data;
chrome.send('setApn', [String(data.servicePath),
String($('cellularApn').value),
String($('cellularApnUsername').value),
String($('cellularApnPassword').value)]);
});
$('cellularApnSet').addEventListener('click', function(event) {
var data = $('inetAddress').data;
chrome.send('setApn', [String(data.servicePath),
String($('cellularApn').value),
String($('cellularApnUsername').value),
String($('cellularApnPassword').value)]);
});
$('sim-card-lock-enabled').addEventListener('click', function(event) {
var newValue = $('sim-card-lock-enabled').checked;
// Leave value as is because user needs to enter PIN code first.
// When PIN will be entered and value changed,
// we'll update UI to reflect that change.
$('sim-card-lock-enabled').checked = !newValue;
InternetOptions.enableSecurityTab(false);
chrome.send('setSimCardLock', [newValue]);
});
$('change-pin').addEventListener('click', function(event) {
chrome.send('changePin');
});
this.showNetworkDetails_();
},
showNetworkDetails_: function() {
var params = parseQueryParams(window.location);
var servicePath = params.servicePath;
var networkType = params.networkType;
if (!servicePath || !servicePath.length ||
!networkType || !networkType.length)
return;
chrome.send('buttonClickCallback',
[networkType, servicePath, "options"]);
}
};
// A boolean flag from InternerOptionsHandler to indicate whether to use
// inline WebUI for ethernet/wifi login/options.
InternetOptions.useSettingsUI = false;
// Network status update will be blocked while typing in WEP password etc.
InternetOptions.updateLocked = false;
InternetOptions.updatePending = false;
InternetOptions.updataData = null;
InternetOptions.loginFromDetails = function () {
var data = $('inetAddress').data;
var servicePath = data.servicePath;
if (data.type == options.internet.Constants.TYPE_WIFI) {
if (data.certInPkcs) {
chrome.send('loginToCertNetwork',[String(servicePath),
String(data.certPath),
String(data.ident)]);
} else {
chrome.send('loginToCertNetwork',[String(servicePath),
String($('inetCert').value),
String($('inetIdent').value),
String($('inetCertPass').value)]);
}
} else if (data.type == options.internet.Constants.TYPE_CELLULAR) {
chrome.send('buttonClickCallback', [String(data.type),
servicePath,
'connect']);
}
OptionsPage.closeOverlay();
};
InternetOptions.activateFromDetails = function () {
var data = $('inetAddress').data;
var servicePath = data.servicePath;
if (data.type == options.internet.Constants.TYPE_CELLULAR) {
chrome.send('buttonClickCallback', [String(data.type),
String(servicePath),
'activate']);
}
OptionsPage.closeOverlay();
};
InternetOptions.setDetails = function () {
var data = $('inetAddress').data;
var servicePath = data.servicePath;
if (data.type == options.internet.Constants.TYPE_WIFI) {
chrome.send('setDetails',[String(servicePath),
$('autoConnectNetwork').checked ?
"true" : "false"]);
}
OptionsPage.closeOverlay();
};
InternetOptions.enableSecurityTab = function(enabled) {
$('sim-card-lock-enabled').disabled = !enabled;
$('change-pin').disabled = !enabled;
};
InternetOptions.setupAttributes = function(data) {
var buttons = $('wireless-buttons');
if (data.wifiEnabled) {
$('disable-wifi').disabled = false;
$('disable-wifi').hidden = false;
$('enable-wifi').hidden = true;
} else {
$('enable-wifi').disabled = false;
$('enable-wifi').hidden = false;
$('disable-wifi').hidden = true;
}
if (data.cellularAvailable) {
if (data.cellularEnabled) {
$('disable-cellular').disabled = false;
$('disable-cellular').hidden = false;
$('enable-cellular').hidden = true;
} else {
$('enable-cellular').disabled = false;
$('enable-cellular').hidden = false;
$('disable-cellular').hidden = true;
}
if (!AccountsOptions.currentUserIsOwner())
$('internet-owner-only-warning').hidden = false;
} else {
$('enable-cellular').hidden = true;
$('disable-cellular').hidden = true;
$('data-roaming').hidden = true;
}
InternetOptions.useSettingsUI = data.networkUseSettingsUI;
};
// Prevent clobbering of password input field.
InternetOptions.lockUpdates = function () {
InternetOptions.updateLocked = true;
};
InternetOptions.unlockUpdates = function () {
InternetOptions.updateLocked = false;
if (InternetOptions.updatePending) {
InternetOptions.refreshNetworkData(InternetOptions.updateData);
}
};
//
//Chrome callbacks
//
InternetOptions.refreshNetworkData = function (data) {
var page = $('internetPage');
if (data.accessLocked) {
page.setAttribute('accesslocked', true);
return;
}
page.removeAttribute('accesslocked');
if (InternetOptions.updateLocked) {
InternetOptions.updateData = data;
InternetOptions.updatePending = true;
} else {
$('wired-list').load(data.wiredList);
$('wireless-list').load(data.wirelessList);
$('remembered-list').load(data.rememberedList);
$('wired-section').hidden = (data.wiredList.length == 0);
$('wireless-section').hidden = (data.wirelessList.length == 0);
InternetOptions.setupAttributes(data);
$('remembered-section').hidden = (data.rememberedList.length == 0);
InternetOptions.updateData = null;
InternetOptions.updatePending = false;
}
};
InternetOptions.updateCellularPlans = function (data) {
var page = $('detailsInternetPage');
page.removeAttribute('cellplanloading');
if (data.plans && data.plans.length) {
page.removeAttribute('nocellplan');
page.setAttribute('hascellplan', true);
$('planList').load(data.plans);
} else {
page.setAttribute('nocellplan', true);
page.removeAttribute('hascellplan');
}
if (!data.needsPlan)
page.setAttribute('hasactiveplan', true);
else
page.removeAttribute('hasactiveplan');
if (data.activated) {
page.setAttribute('activated', true);
} else {
page.removeAttribute('activated');
$('detailsInternetLogin').classList.add('hidden');
}
// CSS selectors don't like me anymore, switching to classList
if (data.showBuyButton)
$('buyplanDetails').classList.remove('hidden');
else
$('buyplanDetails').classList.add('hidden');
if (data.showActivateButton)
$('activateDetails').classList.remove('hidden');
else
$('activateDetails').classList.add('hidden');
// Nudge webkit so that it redraws the details overlay page.
// See http://crosbug.com/9616 for details.
// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=50176
var dummy = page.ownerDocument.createTextNode(' ');
page.appendChild(dummy);
page.removeChild(dummy);
};
InternetOptions.updateSecurityTab = function(data) {
InternetOptions.enableSecurityTab(true);
$('sim-card-lock-enabled').checked = data.requirePin;
};
InternetOptions.showPasswordEntry = function (data) {
var element = $(data.servicePath);
element.showPassword();
};
InternetOptions.showDetailedInfo = function (data) {
var page = $('detailsInternetPage');
$('buyplanDetails').classList.add('hidden');
$('activateDetails').classList.add('hidden');
$('detailsInternetLogin').classList.add('hidden');
if (data.connecting) {
page.setAttribute('connecting', data.connecting);
} else {
page.removeAttribute('connecting');
}
if (data.connected) {
page.setAttribute('connected', data.connected);
$('inetTitle').textContent = localStrings.getString('inetStatus');
} else {
page.removeAttribute('connected');
$('inetTitle').textContent = localStrings.getString('inetConnect');
$('detailsInternetLogin').classList.remove('hidden');
}
$('connectionState').textContent = data.connectionState;
var address = $('inetAddress');
address.data = data;
if (data.ipconfigs && data.ipconfigs.length) {
// We will be displaying only the first ipconfig info for now until we
// start supporting multiple IP addresses per connection.
address.textContent = data.ipconfigs[0].address;
$('inetSubnetAddress').textContent = data.ipconfigs[0].subnetAddress;
$('inetGateway').textContent = data.ipconfigs[0].gateway;
$('inetDns').textContent = data.ipconfigs[0].dns;
} else {
// This is most likely a transient state due to device still connecting.
address.textContent = '?';
$('inetSubnetAddress').textContent = '?';
$('inetGateway').textContent = '?';
$('inetDns').textContent = '?';
}
if (data.hardwareAddress) {
$('hardwareAddress').textContent = data.hardwareAddress;
$('hardwareAddressRow').style.display = 'table-row';
} else {
// This is most likely a device without a hardware address.
$('hardwareAddressRow').style.display = 'none';
}
if (data.type == 2) {
OptionsPage.showTab($('wifiNetworkNavTab'));
page.setAttribute('wireless', true);
page.removeAttribute('ethernet');
page.removeAttribute('cellular');
page.removeAttribute('gsm');
$('inetSsid').textContent = data.ssid;
$('autoConnectNetwork').checked = data.autoConnect;
if (!AccountsOptions.currentUserIsOwner()) {
// Disable this for guest non-Owners.
$('autoConnectNetwork').disabled = true;
}
page.removeAttribute('password');
if (data.encrypted) {
page.setAttribute('password', true);
}
} else if(data.type == 5) {
if (!data.gsm)
OptionsPage.showTab($('cellularPlanNavTab'));
else
OptionsPage.showTab($('cellularConnNavTab'));
page.removeAttribute('ethernet');
page.removeAttribute('wireless');
page.setAttribute('cellular', true);
if (data.carrierUrl) {
var a = $('carrierUrl');
if (!a) {
a = document.createElement('a');
$('serviceName').appendChild(a);
a.id = 'carrierUrl';
a.target = "_blank";
}
a.href = data.carrierUrl;
a.textContent = data.serviceName;
} else {
$('serviceName').textContent = data.serviceName;
}
$('networkTechnology').textContent = data.networkTechnology;
$('activationState').textContent = data.activationState;
$('roamingState').textContent = data.roamingState;
$('restrictedPool').textContent = data.restrictedPool;
$('errorState').textContent = data.errorState;
$('manufacturer').textContent = data.manufacturer;
$('modelId').textContent = data.modelId;
$('firmwareRevision').textContent = data.firmwareRevision;
$('hardwareRevision').textContent = data.hardwareRevision;
$('prlVersion').textContent = data.prlVersion;
$('meid').textContent = data.meid;
$('imei').textContent = data.imei;
$('mdn').textContent = data.mdn;
$('esn').textContent = data.esn;
$('min').textContent = data.min;
if (!data.gsm) {
page.removeAttribute('gsm');
} else {
$('operatorName').textContent = data.operatorName;
$('operatorCode').textContent = data.operatorCode;
$('imsi').textContent = data.imsi;
// If there's no custom APN show default APN that is used. These will be
// displayed differently when http://crosbug.com/14290 is fixed.
// See also http://crosbug.com/p/4058 for context.
if (data.apn != '') {
$('cellularApn').value = data.apn;
$('cellularApnUsername').value = data.apn_username;
$('cellularApnPassword').value = data.apn_password;
} else {
$('cellularApn').value = data.last_good_apn;
$('cellularApnUsername').value = data.last_good_apn_username;
$('cellularApnPassword').value = data.last_good_apn_password;
}
$('sim-card-lock-enabled').checked = data.simCardLockEnabled;
InternetOptions.enableSecurityTab(true);
page.setAttribute('gsm', true);
}
// CSS selectors don't like me anymore, switching to classList
if (data.showBuyButton)
$('buyplanDetails').classList.remove('hidden');
else
$('buyplanDetails').classList.add('hidden');
if (data.showActivateButton) {
$('activateDetails').classList.remove('hidden')
$('detailsInternetLogin').classList.add('hidden');
} else {
$('activateDetails').classList.add('hidden');
}
page.removeAttribute('hascellplan');
if (data.connected) {
page.removeAttribute('nocellplan');
page.setAttribute('cellplanloading', true);
chrome.send('refreshCellularPlan', [data.servicePath])
} else {
page.setAttribute('nocellplan', true);
page.removeAttribute('cellplanloading');
}
} else {
OptionsPage.showTab($('internetNavTab'));
page.setAttribute('ethernet', true);
page.removeAttribute('wireless');
page.removeAttribute('cellular');
page.removeAttribute('gsm');
}
OptionsPage.navigateToPage('detailsInternetPage');
};
// Export
return {
InternetOptions: InternetOptions
};
});