blob: 457d4384997feaa1ea608f47d826358a9988b786 [file] [log] [blame]
// Copyright 2018 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import {$} from 'chrome://resources/js/util.m.js';
import {TimeDelta} from 'chrome://resources/mojo/mojo/public/mojom/base/time.mojom-webui.js';
import {FeedOrder, LastFetchProperties, PageHandler, PageHandlerRemote, Properties} from './feed_internals.mojom-webui.js';
/**
* Reference to the backend.
* @type {PageHandlerRemote}
*/
let pageHandler = null;
/**
* Get and display general properties.
*/
function updatePageWithProperties() {
pageHandler.getGeneralProperties().then(response => {
/** @type {!Properties} */
const properties = response.properties;
$('is-feed-enabled').textContent = properties.isFeedEnabled;
$('is-feed-visible').textContent = properties.isFeedVisible;
$('is-feed-allowed').textContent = properties.isFeedAllowed;
$('is-prefetching-enabled').textContent = properties.isPrefetchingEnabled;
$('load-stream-status').textContent = properties.loadStreamStatus;
$('feed-fetch-url').textContent = properties.feedFetchUrl.url;
$('feed-actions-url').textContent = properties.feedActionsUrl.url;
$('enable-webfeed-follow-intro-debug').checked =
properties.isWebFeedFollowIntroDebugEnabled;
$('enable-webfeed-follow-intro-debug').disabled = false;
$('use-feed-query-requests').checked = properties.useFeedQueryRequests;
switch (properties.followingFeedOrder) {
case FeedOrder.kUnspecified:
$('following-feed-order-unset').checked = true;
break;
case FeedOrder.kGrouped:
$('following-feed-order-grouped').checked = true;
break;
case FeedOrder.kReverseChron:
$('following-feed-order-reverse-chron').checked = true;
break;
}
$('following-feed-order-grouped').disabled = false;
$('following-feed-order-reverse-chron').disabled = false;
$('following-feed-order-unset').disabled = false;
});
}
/**
* Get and display last fetch data.
*/
function updatePageWithLastFetchProperties() {
pageHandler.getLastFetchProperties().then(response => {
/** @type {!LastFetchProperties} */
const properties = response.properties;
$('last-fetch-status').textContent = properties.lastFetchStatus;
$('last-fetch-trigger').textContent = properties.lastFetchTrigger;
$('last-fetch-time').textContent = toDateString(properties.lastFetchTime);
$('refresh-suppress-time').textContent =
toDateString(properties.refreshSuppressTime);
$('last-fetch-bless-nonce').textContent = properties.lastBlessNonce;
$('last-action-upload-status').textContent =
properties.lastActionUploadStatus;
$('last-action-upload-time').textContent =
toDateString(properties.lastActionUploadTime);
});
}
/**
* Populate <a> node with hyperlinked URL.
*
* @param {Element} node
* @param {string} url
*/
function setLinkNode(node, url) {
node.textContent = url;
node.href = url;
}
/**
* Convert timeSinceEpoch to string for display.
*
* @param {TimeDelta} timeSinceEpoch
* @return {string}
*/
function toDateString(timeSinceEpoch) {
const microseconds = Number(timeSinceEpoch.microseconds);
return microseconds === 0 ? '' :
new Date(microseconds / 1000).toLocaleString();
}
/**
* Hook up buttons to event listeners.
*/
function setupEventListeners() {
$('refresh-for-you').addEventListener('click', function() {
pageHandler.refreshForYouFeed();
});
$('refresh-following').addEventListener('click', function() {
pageHandler.refreshFollowingFeed();
});
$('refresh-webfeed-suggestions').addEventListener('click', () => {
pageHandler.refreshWebFeedSuggestions();
});
$('dump-feed-process-scope').addEventListener('click', function() {
pageHandler.getFeedProcessScopeDump().then(response => {
$('feed-process-scope-dump').textContent = response.dump;
$('feed-process-scope-details').open = true;
});
});
$('load-feed-histograms').addEventListener('click', function() {
pageHandler.getFeedHistograms().then(response => {
$('feed-histograms-log').textContent = response.log;
$('feed-histograms-details').open = true;
});
});
$('feed-host-override-apply').addEventListener('click', function() {
pageHandler.overrideFeedHost({url: $('feed-host-override').value});
});
$('discover-api-override-apply').addEventListener('click', function() {
pageHandler.overrideDiscoverApiEndpoint(
{url: $('discover-api-override').value});
});
$('feed-stream-data-override').addEventListener('click', function() {
const file = $('feed-stream-data-file').files[0];
if (file && typeof pageHandler.overrideFeedStreamData === 'function') {
const reader = new FileReader();
reader.readAsArrayBuffer(file);
reader.onload = function(e) {
const typedArray = new Uint8Array(e.target.result);
pageHandler.overrideFeedStreamData([...typedArray]);
};
}
});
$('enable-webfeed-follow-intro-debug').addEventListener('click', function() {
pageHandler.setWebFeedFollowIntroDebugEnabled(
$('enable-webfeed-follow-intro-debug').checked);
$('enable-webfeed-follow-intro-debug').disabled = true;
});
$('use-feed-query-requests').addEventListener('click', function() {
pageHandler.setUseFeedQueryRequests($('use-feed-query-requests').checked);
});
const orderRadioClickListener = function(order) {
$('following-feed-order-grouped').disabled = true;
$('following-feed-order-reverse-chron').disabled = true;
$('following-feed-order-unset').disabled = true;
pageHandler.setFollowingFeedOrder(order);
};
$('following-feed-order-unset')
.addEventListener(
'click', () => orderRadioClickListener(FeedOrder.kUnspecified));
$('following-feed-order-grouped')
.addEventListener(
'click', () => orderRadioClickListener(FeedOrder.kGrouped));
$('following-feed-order-reverse-chron')
.addEventListener(
'click', () => orderRadioClickListener(FeedOrder.kReverseChron));
}
function updatePage() {
updatePageWithProperties();
updatePageWithLastFetchProperties();
}
document.addEventListener('DOMContentLoaded', function() {
// Setup backend mojo.
pageHandler = PageHandler.getRemote();
setInterval(updatePage, 2000);
updatePage();
setupEventListeners();
});