blob: 17540e1d8765b8f744cd47ab9b06e6ba1307ece0 [file] [log] [blame]
// Copyright 2016 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.
(function() {
'use strict';
Polymer({
is: 'website-usage-private-api',
properties: {
/**
* The amount of data used by the given website.
*/
websiteDataUsage: {
type: String,
notify: true,
},
/**
* The type of data used by the given website.
*/
websiteStorageType: {
type: Number,
notify: true,
},
},
/** @override */
attached: function() {
settings.WebsiteUsagePrivateApi.websiteUsagePolymerInstance = this;
},
/** @param {string} host */
fetchUsageTotal: function(host) {
settings.WebsiteUsagePrivateApi.fetchUsageTotal(host);
},
/**
* @param {string} origin
* @param {number} type
*/
clearUsage: function(origin, type) {
settings.WebsiteUsagePrivateApi.clearUsage(origin, type);
},
/** @param {string} origin */
notifyUsageDeleted: function(origin) {
this.fire('usage-deleted', {origin: origin});
},
});
})();
cr.define('settings.WebsiteUsagePrivateApi', function() {
/**
* @type {Object} An instance of the polymer object defined above.
* All data will be set here.
*/
const websiteUsagePolymerInstance = null;
/**
* @type {string} The host for which the usage total is being fetched.
*/
let hostName;
/**
* Encapsulates the calls between JS and C++ to fetch how much storage the
* host is using.
* Will update the data in |websiteUsagePolymerInstance|.
*/
const fetchUsageTotal = function(host) {
const instance =
settings.WebsiteUsagePrivateApi.websiteUsagePolymerInstance;
if (instance != null)
instance.websiteDataUsage = '';
hostName = host;
chrome.send('fetchUsageTotal', [host]);
};
/**
* Callback for when the usage total is known.
* @param {string} host The host that the usage was fetched for.
* @param {string} usage The string showing how much data the given host
* is using.
* @param {number} type The storage type.
*/
const returnUsageTotal = function(host, usage, type) {
const instance =
settings.WebsiteUsagePrivateApi.websiteUsagePolymerInstance;
if (instance == null)
return;
if (hostName == host) {
instance.websiteDataUsage = usage;
instance.websiteStorageType = type;
}
};
/**
* Deletes the storage being used for a given origin.
* @param {string} origin The origin to delete storage for.
* @param {number} type The type of storage to delete.
*/
const clearUsage = function(origin, type) {
chrome.send('clearUsage', [origin, type]);
};
/**
* Callback for when the usage has been cleared.
* @param {string} origin The origin that the usage was fetched for.
*/
const onUsageCleared = function(origin) {
const instance =
settings.WebsiteUsagePrivateApi.websiteUsagePolymerInstance;
if (instance == null)
return;
instance.notifyUsageDeleted(origin);
};
return {
websiteUsagePolymerInstance: websiteUsagePolymerInstance,
fetchUsageTotal: fetchUsageTotal,
returnUsageTotal: returnUsageTotal,
clearUsage: clearUsage,
onUsageCleared: onUsageCleared,
};
});