| // 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. |
| |
| cr.define('chrome.SnippetsInternals', function() { |
| 'use strict'; |
| |
| // Stores the list of suggestions we received in receiveContentSuggestions. |
| var lastSuggestions = []; |
| var lastDebugLog = ''; |
| |
| function initialize() { |
| $('submit-download').addEventListener('click', function(event) { |
| chrome.send('download'); |
| event.preventDefault(); |
| }); |
| |
| $('submit-dump').addEventListener('click', function(event) { |
| downloadJson(JSON.stringify(lastSuggestions, null, 2)); |
| event.preventDefault(); |
| }); |
| |
| $('debug-log-dump').addEventListener('click', function(event) { |
| downloadDebugLog(lastDebugLog); |
| event.preventDefault(); |
| }); |
| |
| $('last-json-button').addEventListener('click', function(event) { |
| $('last-json-container').classList.toggle('hidden'); |
| }); |
| |
| $('last-json-dump').addEventListener('click', function(event) { |
| downloadJson($('last-json-text').innerText); |
| event.preventDefault(); |
| }); |
| |
| $('clear-classification').addEventListener('click', function(event) { |
| chrome.send('clearClassification'); |
| event.preventDefault(); |
| }); |
| |
| $('background-fetch-button').addEventListener('click', function(event) { |
| chrome.send('fetchRemoteSuggestionsInTheBackgroundIn2Seconds'); |
| event.preventDefault(); |
| }); |
| |
| $('push-dummy-suggestion-10-seconds-button') |
| .addEventListener('click', function(event) { |
| chrome.send('pushDummySuggestionIn10Seconds'); |
| event.preventDefault(); |
| }); |
| |
| if (loadTimeData.getBoolean('contextualSuggestionsEnabled')) { |
| $('contextual-suggestions-section').classList.remove('hidden'); |
| } |
| |
| $('fetch-contextual-suggestions-button') |
| .addEventListener('click', function(event) { |
| let url = $('contextual-url').value; |
| $('contextual-suggestions-request-result').textContent = |
| 'Fetching contextual suggestions for ' + url; |
| chrome.send('fetchContextualSuggestions', [url]); |
| event.preventDefault(); |
| }); |
| |
| $('reset-notifications-state-button') |
| .addEventListener('click', function(event) { |
| chrome.send('resetNotificationsState'); |
| event.preventDefault(); |
| }); |
| |
| window.addEventListener('focus', refreshContent); |
| window.setInterval(refreshContent, 1000); |
| |
| chrome.send('initializationCompleted'); |
| refreshContent(); |
| } |
| |
| function receiveProperty(propertyId, value) { |
| $(propertyId).textContent = value; |
| } |
| |
| function receiveContextualSuggestions(suggestions, status_msg) { |
| $('contextual-suggestions-request-result').textContent = status_msg; |
| displayList( |
| suggestions, 'contextual-suggestions', 'contextual-hidden-toggler'); |
| } |
| |
| function receiveContentSuggestions(categoriesList) { |
| lastSuggestions = categoriesList; |
| displayList(categoriesList, 'content-suggestions', 'hidden-toggler'); |
| |
| var clearCachedButtons = |
| document.getElementsByClassName('submit-clear-cached-suggestions'); |
| for (var button of clearCachedButtons) { |
| button.addEventListener('click', onClearCachedButtonClicked); |
| } |
| |
| var clearDismissedButtons = |
| document.getElementsByClassName('submit-clear-dismissed-suggestions'); |
| for (var button of clearDismissedButtons) { |
| button.addEventListener('click', onClearDismissedButtonClicked); |
| } |
| |
| var toggleDismissedButtons = |
| document.getElementsByClassName('toggle-dismissed-suggestions'); |
| for (var button of toggleDismissedButtons) { |
| button.addEventListener('click', onToggleDismissedButtonClicked); |
| } |
| } |
| |
| function onClearCachedButtonClicked(event) { |
| event.preventDefault(); |
| chrome.send('clearCachedSuggestions'); |
| } |
| |
| function onClearDismissedButtonClicked(event) { |
| event.preventDefault(); |
| var id = parseInt(event.currentTarget.getAttribute('category-id'), 10); |
| chrome.send('clearDismissedSuggestions', [id]); |
| } |
| |
| function onToggleDismissedButtonClicked(event) { |
| event.preventDefault(); |
| var id = parseInt(event.currentTarget.getAttribute('category-id'), 10); |
| var table = $('dismissed-suggestions-' + id); |
| table.classList.toggle('hidden'); |
| chrome.send( |
| 'toggleDismissedSuggestions', |
| [id, !table.classList.contains('hidden')]); |
| } |
| |
| function receiveJson(json) { |
| var trimmed = json.trim(); |
| var hasContent = (trimmed && trimmed != '{}'); |
| |
| if (hasContent) { |
| receiveProperty('last-json-text', trimmed); |
| $('last-json').classList.remove('hidden'); |
| } else { |
| $('last-json').classList.add('hidden'); |
| } |
| } |
| |
| function receiveDebugLog(debugLog) { |
| if (!debugLog) { |
| lastDebugLog = 'empty'; |
| } else { |
| lastDebugLog = debugLog; |
| } |
| } |
| |
| function receiveClassification( |
| userClass, timeToOpenNTP, timeToShow, timeToUse) { |
| receiveProperty('user-class', userClass); |
| receiveProperty('avg-time-to-open-ntp', timeToOpenNTP); |
| receiveProperty('avg-time-to-show', timeToShow); |
| receiveProperty('avg-time-to-use', timeToUse); |
| } |
| |
| function receiveRankerDebugData(itemsList) { |
| displayList(itemsList, 'ranker', 'no-togler'); |
| } |
| |
| function receiveLastRemoteSuggestionsBackgroundFetchTime( |
| lastRemoteSuggestionsBackgroundFetchTime) { |
| receiveProperty( |
| 'last-background-fetch-time-label', |
| lastRemoteSuggestionsBackgroundFetchTime); |
| } |
| |
| function receiveWhetherSuggestionPushingPossible(possible) { |
| $('push-dummy-suggestion-10-seconds-button').disabled = !possible; |
| } |
| |
| function downloadJson(json) { |
| // Redirect the browser to download data in |json| as a file "snippets.json" |
| // (Setting Content-Disposition: attachment via a data: URL is not possible; |
| // create a link with download attribute and simulate a click, instead.) |
| var link = document.createElement('a'); |
| link.download = 'snippets.json'; |
| link.href = 'data:application/json,' + encodeURI(json); |
| link.click(); |
| } |
| |
| function downloadDebugLog(debugLog) { |
| // Redirect the browser to download data in |debugLog| as a file |
| // "debug_log.txt" (Setting Content-Disposition: attachment via a data: URL |
| // is not possible; create a link with download attribute and simulate a |
| // click, instead.) |
| var link = document.createElement('a'); |
| link.download = 'debug_log.txt'; |
| link.href = 'data:text/plain,' + encodeURI(debugLog); |
| link.click(); |
| } |
| |
| function refreshContent() { |
| chrome.send('refreshContent'); |
| } |
| |
| function toggleHidden(event) { |
| var id = event.currentTarget.getAttribute('hidden-id'); |
| $(id).classList.toggle('hidden'); |
| } |
| |
| function displayList(object, domId, toggleClass) { |
| jstProcess(new JsEvalContext(object), $(domId)); |
| |
| var text; |
| var display; |
| |
| if (object.list.length > 0) { |
| text = ''; |
| display = 'inline'; |
| } else { |
| text = 'The list is empty.'; |
| display = 'none'; |
| } |
| |
| if ($(domId + '-empty')) |
| $(domId + '-empty').textContent = text; |
| if ($(domId + '-clear')) |
| $(domId + '-clear').style.display = display; |
| |
| var links = document.getElementsByClassName(toggleClass); |
| for (var link of links) { |
| link.addEventListener('click', toggleHidden); |
| } |
| } |
| |
| // Return an object with all of the exports. |
| return { |
| initialize: initialize, |
| receiveProperty: receiveProperty, |
| receiveContentSuggestions: receiveContentSuggestions, |
| receiveJson: receiveJson, |
| receiveDebugLog: receiveDebugLog, |
| receiveClassification: receiveClassification, |
| receiveRankerDebugData: receiveRankerDebugData, |
| receiveLastRemoteSuggestionsBackgroundFetchTime: |
| receiveLastRemoteSuggestionsBackgroundFetchTime, |
| receiveWhetherSuggestionPushingPossible: |
| receiveWhetherSuggestionPushingPossible, |
| receiveContextualSuggestions: receiveContextualSuggestions, |
| }; |
| }); |
| |
| document.addEventListener( |
| 'DOMContentLoaded', chrome.SnippetsInternals.initialize); |