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) * This class provides a "bridge" for communicating between the javascript and 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * the browser. 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)var BrowserBridge = (function() { 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'use strict'; 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Delay in milliseconds between updates of certain browser information. 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var POLL_INTERVAL_MS = 5000; 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @constructor 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) function BrowserBridge() { 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) assertFirstConstructorCall(BrowserBridge); 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // List of observers for various bits of browser state. 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.connectionTestsObservers_ = []; 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.hstsObservers_ = []; 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.constantsObservers_ = []; 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.crosONCFileParseObservers_ = []; 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.storeDebugLogsObservers_ = []; 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.setNetworkDebugModeObservers_ = []; 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Unprocessed data received before the constants. This serves to protect 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // against passing along data before having information on how to interpret 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // it. 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this.earlyReceivedData_ = []; 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.pollableDataHelpers_ = {}; 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.pollableDataHelpers_.proxySettings = 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new PollableDataHelper('onProxySettingsChanged', 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.sendGetProxySettings.bind(this)); 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.pollableDataHelpers_.badProxies = 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new PollableDataHelper('onBadProxiesChanged', 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.sendGetBadProxies.bind(this)); 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.pollableDataHelpers_.httpCacheInfo = 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new PollableDataHelper('onHttpCacheInfoChanged', 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.sendGetHttpCacheInfo.bind(this)); 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.pollableDataHelpers_.hostResolverInfo = 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new PollableDataHelper('onHostResolverInfoChanged', 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.sendGetHostResolverInfo.bind(this)); 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.pollableDataHelpers_.socketPoolInfo = 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new PollableDataHelper('onSocketPoolInfoChanged', 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.sendGetSocketPoolInfo.bind(this)); 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.pollableDataHelpers_.sessionNetworkStats = 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new PollableDataHelper('onSessionNetworkStatsChanged', 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.sendGetSessionNetworkStats.bind(this)); 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.pollableDataHelpers_.historicNetworkStats = 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new PollableDataHelper('onHistoricNetworkStatsChanged', 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.sendGetHistoricNetworkStats.bind(this)); 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this.pollableDataHelpers_.quicInfo = 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) new PollableDataHelper('onQuicInfoChanged', 592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this.sendGetQuicInfo.bind(this)); 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.pollableDataHelpers_.spdySessionInfo = 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new PollableDataHelper('onSpdySessionInfoChanged', 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.sendGetSpdySessionInfo.bind(this)); 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.pollableDataHelpers_.spdyStatus = 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new PollableDataHelper('onSpdyStatusChanged', 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.sendGetSpdyStatus.bind(this)); 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.pollableDataHelpers_.spdyAlternateProtocolMappings = 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new PollableDataHelper('onSpdyAlternateProtocolMappingsChanged', 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.sendGetSpdyAlternateProtocolMappings.bind( 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this)); 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (cr.isWindows) { 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.pollableDataHelpers_.serviceProviders = 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new PollableDataHelper('onServiceProvidersChanged', 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.sendGetServiceProviders.bind(this)); 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.pollableDataHelpers_.prerenderInfo = 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new PollableDataHelper('onPrerenderInfoChanged', 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.sendGetPrerenderInfo.bind(this)); 78c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) this.pollableDataHelpers_.extensionInfo = 79c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) new PollableDataHelper('onExtensionInfoChanged', 80c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) this.sendGetExtensionInfo.bind(this)); 817d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) if (cr.isChromeOS) { 827d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) this.pollableDataHelpers_.systemLog = 837d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) new PollableDataHelper('onSystemLogChanged', 847d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) this.getSystemLog.bind(this, 'syslog')); 857d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Setting this to true will cause messages from the browser to be ignored, 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // and no messages will be sent to the browser, either. Intended for use 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // when viewing log files. 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.disabled_ = false; 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Interval id returned by window.setInterval for polling timer. 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.pollIntervalId_ = null; 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cr.addSingletonGetter(BrowserBridge); 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserBridge.prototype = { 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) //-------------------------------------------------------------------------- 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Messages sent to the browser 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) //-------------------------------------------------------------------------- 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Wraps |chrome.send|. Doesn't send anything when disabled. 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) send: function(value1, value2) { 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!this.disabled_) { 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (arguments.length == 1) { 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome.send(value1); 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (arguments.length == 2) { 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome.send(value1, value2); 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) throw 'Unsupported number of arguments.'; 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sendReady: function() { 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.send('notifyReady'); 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.setPollInterval(POLL_INTERVAL_MS); 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Some of the data we are interested is not currently exposed as a 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * stream. This starts polling those with active observers (visible 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * views) every |intervalMs|. Subsequent calls override previous calls 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * to this function. If |intervalMs| is 0, stops polling. 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) setPollInterval: function(intervalMs) { 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (this.pollIntervalId_ !== null) { 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) window.clearInterval(this.pollIntervalId_); 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.pollIntervalId_ = null; 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (intervalMs > 0) { 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.pollIntervalId_ = 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) window.setInterval(this.checkForUpdatedInfo.bind(this, false), 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) intervalMs); 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sendGetProxySettings: function() { 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The browser will call receivedProxySettings on completion. 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.send('getProxySettings'); 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sendReloadProxySettings: function() { 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.send('reloadProxySettings'); 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sendGetBadProxies: function() { 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The browser will call receivedBadProxies on completion. 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.send('getBadProxies'); 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sendGetHostResolverInfo: function() { 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The browser will call receivedHostResolverInfo on completion. 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.send('getHostResolverInfo'); 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sendClearBadProxies: function() { 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.send('clearBadProxies'); 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sendClearHostResolverCache: function() { 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.send('clearHostResolverCache'); 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sendClearBrowserCache: function() { 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.send('clearBrowserCache'); 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sendClearAllCache: function() { 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.sendClearHostResolverCache(); 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.sendClearBrowserCache(); 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sendStartConnectionTests: function(url) { 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.send('startConnectionTests', [url]); 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sendHSTSQuery: function(domain) { 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.send('hstsQuery', [domain]); 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1877d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) sendHSTSAdd: function(domain, sts_include_subdomains, 1887d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) pkp_include_subdomains, pins) { 1897d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) this.send('hstsAdd', [domain, sts_include_subdomains, 1907d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) pkp_include_subdomains, pins]); 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sendHSTSDelete: function(domain) { 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.send('hstsDelete', [domain]); 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sendGetHttpCacheInfo: function() { 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.send('getHttpCacheInfo'); 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sendGetSocketPoolInfo: function() { 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.send('getSocketPoolInfo'); 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sendGetSessionNetworkStats: function() { 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.send('getSessionNetworkStats'); 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sendGetHistoricNetworkStats: function() { 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.send('getHistoricNetworkStats'); 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sendCloseIdleSockets: function() { 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.send('closeIdleSockets'); 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sendFlushSocketPools: function() { 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.send('flushSocketPools'); 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) sendGetQuicInfo: function() { 2222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this.send('getQuicInfo'); 2232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) }, 2242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sendGetSpdySessionInfo: function() { 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.send('getSpdySessionInfo'); 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sendGetSpdyStatus: function() { 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.send('getSpdyStatus'); 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sendGetSpdyAlternateProtocolMappings: function() { 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.send('getSpdyAlternateProtocolMappings'); 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sendGetServiceProviders: function() { 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.send('getServiceProviders'); 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sendGetPrerenderInfo: function() { 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.send('getPrerenderInfo'); 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 245c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) sendGetExtensionInfo: function() { 246c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) this.send('getExtensionInfo'); 247c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) }, 248c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) enableIPv6: function() { 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.send('enableIPv6'); 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) setLogLevel: function(logLevel) { 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.send('setLogLevel', ['' + logLevel]); 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) refreshSystemLogs: function() { 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.send('refreshSystemLogs'); 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) getSystemLog: function(log_key, cellId) { 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.send('getSystemLog', [log_key, cellId]); 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) importONCFile: function(fileContent, passcode) { 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.send('importONCFile', [fileContent, passcode]); 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) storeDebugLogs: function() { 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.send('storeDebugLogs'); 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) setNetworkDebugMode: function(subsystem) { 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.send('setNetworkDebugMode', [subsystem]); 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) //-------------------------------------------------------------------------- 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Messages received from the browser. 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) //-------------------------------------------------------------------------- 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) receive: function(command, params) { 2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Does nothing if disabled. 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (this.disabled_) 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 2852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // If no constants have been received, and params does not contain the 2872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // constants, delay handling the data. 2882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (Constants == null && command != 'receivedConstants') { 2892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this.earlyReceivedData_.push({ command: command, params: params }); 2902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 2912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this[command](params); 2942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Handle any data that was received early in the order it was received, 2962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // once the constants have been processed. 2972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (this.earlyReceivedData_ != null) { 2982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for (var i = 0; i < this.earlyReceivedData_.length; i++) { 2992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) var command = this.earlyReceivedData_[i]; 3002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this[command.command](command.params); 3012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 3022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this.earlyReceivedData_ = null; 3032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) receivedConstants: function(constants) { 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (var i = 0; i < this.constantsObservers_.length; i++) 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.constantsObservers_[i].onReceivedConstants(constants); 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) receivedLogEntries: function(logEntries) { 3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EventsTracker.getInstance().addLogEntries(logEntries); 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) receivedProxySettings: function(proxySettings) { 3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.pollableDataHelpers_.proxySettings.update(proxySettings); 3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) receivedBadProxies: function(badProxies) { 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.pollableDataHelpers_.badProxies.update(badProxies); 3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) receivedHostResolverInfo: function(hostResolverInfo) { 3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.pollableDataHelpers_.hostResolverInfo.update(hostResolverInfo); 3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) receivedSocketPoolInfo: function(socketPoolInfo) { 3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.pollableDataHelpers_.socketPoolInfo.update(socketPoolInfo); 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) receivedSessionNetworkStats: function(sessionNetworkStats) { 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.pollableDataHelpers_.sessionNetworkStats.update(sessionNetworkStats); 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) receivedHistoricNetworkStats: function(historicNetworkStats) { 3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.pollableDataHelpers_.historicNetworkStats.update( 3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) historicNetworkStats); 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) receivedQuicInfo: function(quicInfo) { 3412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this.pollableDataHelpers_.quicInfo.update(quicInfo); 3422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) }, 3432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) receivedSpdySessionInfo: function(spdySessionInfo) { 3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.pollableDataHelpers_.spdySessionInfo.update(spdySessionInfo); 3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) receivedSpdyStatus: function(spdyStatus) { 3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.pollableDataHelpers_.spdyStatus.update(spdyStatus); 3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) receivedSpdyAlternateProtocolMappings: 3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) function(spdyAlternateProtocolMappings) { 3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.pollableDataHelpers_.spdyAlternateProtocolMappings.update( 3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) spdyAlternateProtocolMappings); 3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) receivedServiceProviders: function(serviceProviders) { 3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.pollableDataHelpers_.serviceProviders.update(serviceProviders); 3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) receivedStartConnectionTestSuite: function() { 3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (var i = 0; i < this.connectionTestsObservers_.length; i++) 3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.connectionTestsObservers_[i].onStartedConnectionTestSuite(); 3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) receivedStartConnectionTestExperiment: function(experiment) { 3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (var i = 0; i < this.connectionTestsObservers_.length; i++) { 3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.connectionTestsObservers_[i].onStartedConnectionTestExperiment( 3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) experiment); 3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) receivedCompletedConnectionTestExperiment: function(info) { 3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (var i = 0; i < this.connectionTestsObservers_.length; i++) { 3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.connectionTestsObservers_[i].onCompletedConnectionTestExperiment( 3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) info.experiment, info.result); 3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) receivedCompletedConnectionTestSuite: function() { 3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (var i = 0; i < this.connectionTestsObservers_.length; i++) 3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.connectionTestsObservers_[i].onCompletedConnectionTestSuite(); 3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) receivedHSTSResult: function(info) { 3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (var i = 0; i < this.hstsObservers_.length; i++) 3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.hstsObservers_[i].onHSTSQueryResult(info); 3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) receivedONCFileParse: function(error) { 3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (var i = 0; i < this.crosONCFileParseObservers_.length; i++) 3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.crosONCFileParseObservers_[i].onONCFileParse(error); 3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) receivedStoreDebugLogs: function(status) { 3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (var i = 0; i < this.storeDebugLogsObservers_.length; i++) 3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.storeDebugLogsObservers_[i].onStoreDebugLogs(status); 3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) receivedSetNetworkDebugMode: function(status) { 4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (var i = 0; i < this.setNetworkDebugModeObservers_.length; i++) 4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.setNetworkDebugModeObservers_[i].onSetNetworkDebugMode(status); 4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) receivedHttpCacheInfo: function(info) { 4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.pollableDataHelpers_.httpCacheInfo.update(info); 4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) receivedPrerenderInfo: function(prerenderInfo) { 4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.pollableDataHelpers_.prerenderInfo.update(prerenderInfo); 4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 414c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) receivedExtensionInfo: function(extensionInfo) { 415c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) this.pollableDataHelpers_.extensionInfo.update(extensionInfo); 416c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) }, 417c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 4187d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) getSystemLogCallback: function(systemLog) { 4197d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) this.pollableDataHelpers_.systemLog.update(systemLog); 4207d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) }, 4217d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) //-------------------------------------------------------------------------- 4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Prevents receiving/sending events to/from the browser. 4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) disable: function() { 4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.disabled_ = true; 4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.setPollInterval(0); 4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Returns true if the BrowserBridge has been disabled. 4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) isDisabled: function() { 4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return this.disabled_; 4375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Adds a listener of the proxy settings. |observer| will be called back 4415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * when data is received, through: 4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * observer.onProxySettingsChanged(proxySettings) 4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * |proxySettings| is a dictionary with (up to) two properties: 4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 4475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * "original" -- The settings that chrome was configured to use 4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * (i.e. system settings.) 4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * "effective" -- The "effective" proxy settings that chrome is using. 4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * (decides between the manual/automatic modes of the 4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * fetched settings). 4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Each of these two configurations is formatted as a string, and may be 4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * omitted if not yet initialized. 4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * If |ignoreWhenUnchanged| is true, data is only sent when it changes. 4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * If it's false, data is sent whenever it's received from the browser. 4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) addProxySettingsObserver: function(observer, ignoreWhenUnchanged) { 4605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.pollableDataHelpers_.proxySettings.addObserver(observer, 4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ignoreWhenUnchanged); 4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 4655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Adds a listener of the proxy settings. |observer| will be called back 4665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * when data is received, through: 4675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 4685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * observer.onBadProxiesChanged(badProxies) 4695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 4705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * |badProxies| is an array, where each entry has the property: 4715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * badProxies[i].proxy_uri: String identify the proxy. 4725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * badProxies[i].bad_until: The time when the proxy stops being considered 4735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * bad. Note the time is in time ticks. 4745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 4755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) addBadProxiesObserver: function(observer, ignoreWhenUnchanged) { 4765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.pollableDataHelpers_.badProxies.addObserver(observer, 4775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ignoreWhenUnchanged); 4785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 4795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 4815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Adds a listener of the host resolver info. |observer| will be called back 4825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * when data is received, through: 4835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 4845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * observer.onHostResolverInfoChanged(hostResolverInfo) 4855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 4865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) addHostResolverInfoObserver: function(observer, ignoreWhenUnchanged) { 4875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.pollableDataHelpers_.hostResolverInfo.addObserver( 4885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) observer, ignoreWhenUnchanged); 4895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 4905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 4925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Adds a listener of the socket pool. |observer| will be called back 4935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * when data is received, through: 4945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 4955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * observer.onSocketPoolInfoChanged(socketPoolInfo) 4965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 4975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) addSocketPoolInfoObserver: function(observer, ignoreWhenUnchanged) { 4985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.pollableDataHelpers_.socketPoolInfo.addObserver(observer, 4995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ignoreWhenUnchanged); 5005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 5015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 5035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Adds a listener of the network session. |observer| will be called back 5045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * when data is received, through: 5055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 5065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * observer.onSessionNetworkStatsChanged(sessionNetworkStats) 5075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 5085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) addSessionNetworkStatsObserver: function(observer, ignoreWhenUnchanged) { 5095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.pollableDataHelpers_.sessionNetworkStats.addObserver( 5105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) observer, ignoreWhenUnchanged); 5115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 5125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 5145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Adds a listener of persistent network session data. |observer| will be 5155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * called back when data is received, through: 5165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 5175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * observer.onHistoricNetworkStatsChanged(historicNetworkStats) 5185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 5195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) addHistoricNetworkStatsObserver: function(observer, ignoreWhenUnchanged) { 5205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.pollableDataHelpers_.historicNetworkStats.addObserver( 5215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) observer, ignoreWhenUnchanged); 5225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 5235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 5252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * Adds a listener of the QUIC info. |observer| will be called back 5262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * when data is received, through: 5272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * 5282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * observer.onQuicInfoChanged(quicInfo) 5292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) */ 5302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) addQuicInfoObserver: function(observer, ignoreWhenUnchanged) { 5312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) this.pollableDataHelpers_.quicInfo.addObserver( 5322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) observer, ignoreWhenUnchanged); 5332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) }, 5342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) /** 5365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Adds a listener of the SPDY info. |observer| will be called back 5375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * when data is received, through: 5385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 5395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * observer.onSpdySessionInfoChanged(spdySessionInfo) 5405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 5415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) addSpdySessionInfoObserver: function(observer, ignoreWhenUnchanged) { 5425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.pollableDataHelpers_.spdySessionInfo.addObserver( 5435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) observer, ignoreWhenUnchanged); 5445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 5455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 5475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Adds a listener of the SPDY status. |observer| will be called back 5485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * when data is received, through: 5495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 5505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * observer.onSpdyStatusChanged(spdyStatus) 5515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 5525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) addSpdyStatusObserver: function(observer, ignoreWhenUnchanged) { 5535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.pollableDataHelpers_.spdyStatus.addObserver(observer, 5545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ignoreWhenUnchanged); 5555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 5565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 5585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Adds a listener of the AlternateProtocolMappings. |observer| will be 5595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * called back when data is received, through: 5605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 5615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * observer.onSpdyAlternateProtocolMappingsChanged( 5625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * spdyAlternateProtocolMappings) 5635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 5645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) addSpdyAlternateProtocolMappingsObserver: function(observer, 5655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ignoreWhenUnchanged) { 5665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.pollableDataHelpers_.spdyAlternateProtocolMappings.addObserver( 5675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) observer, ignoreWhenUnchanged); 5685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 5695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 5715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Adds a listener of the service providers info. |observer| will be called 5725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * back when data is received, through: 5735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 5745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * observer.onServiceProvidersChanged(serviceProviders) 5755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 5765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Will do nothing if on a platform other than Windows, as service providers 5775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * are only present on Windows. 5785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 5795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) addServiceProvidersObserver: function(observer, ignoreWhenUnchanged) { 5805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (this.pollableDataHelpers_.serviceProviders) { 5815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.pollableDataHelpers_.serviceProviders.addObserver( 5825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) observer, ignoreWhenUnchanged); 5835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 5855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 5875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Adds a listener for the progress of the connection tests. 5885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * The observer will be called back with: 5895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 5905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * observer.onStartedConnectionTestSuite(); 5915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * observer.onStartedConnectionTestExperiment(experiment); 5925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * observer.onCompletedConnectionTestExperiment(experiment, result); 5935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * observer.onCompletedConnectionTestSuite(); 5945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 5955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) addConnectionTestsObserver: function(observer) { 5965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.connectionTestsObservers_.push(observer); 5975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 5985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 6005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Adds a listener for the http cache info results. 6015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * The observer will be called back with: 6025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 6035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * observer.onHttpCacheInfoChanged(info); 6045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 6055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) addHttpCacheInfoObserver: function(observer, ignoreWhenUnchanged) { 6065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.pollableDataHelpers_.httpCacheInfo.addObserver( 6075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) observer, ignoreWhenUnchanged); 6085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 6095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 6115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Adds a listener for the results of HSTS (HTTPS Strict Transport Security) 6125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * queries. The observer will be called back with: 6135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 6145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * observer.onHSTSQueryResult(result); 6155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 6165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) addHSTSObserver: function(observer) { 6175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.hstsObservers_.push(observer); 6185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 6195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 6215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Adds a listener for ONC file parse status. The observer will be called 6225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * back with: 6235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 6245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * observer.onONCFileParse(error); 6255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 6265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) addCrosONCFileParseObserver: function(observer) { 6275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.crosONCFileParseObservers_.push(observer); 6285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 6295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 6315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Adds a listener for storing log file status. The observer will be called 6325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * back with: 6335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 6345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * observer.onStoreDebugLogs(status); 6355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 6365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) addStoreDebugLogsObserver: function(observer) { 6375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.storeDebugLogsObservers_.push(observer); 6385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 6395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 6415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Adds a listener for network debugging mode status. The observer 6425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * will be called back with: 6435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 6445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * observer.onSetNetworkDebugMode(status); 6455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 6465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) addSetNetworkDebugModeObserver: function(observer) { 6475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.setNetworkDebugModeObservers_.push(observer); 6485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 6495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 6515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Adds a listener for the received constants event. |observer| will be 6525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * called back when the constants are received, through: 6535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 6545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * observer.onReceivedConstants(constants); 6555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 6565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) addConstantsObserver: function(observer) { 6575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.constantsObservers_.push(observer); 6585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 6595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 6615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Adds a listener for updated prerender info events 6625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * |observer| will be called back with: 6635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 6645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * observer.onPrerenderInfoChanged(prerenderInfo); 6655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 6665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) addPrerenderInfoObserver: function(observer, ignoreWhenUnchanged) { 6675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.pollableDataHelpers_.prerenderInfo.addObserver( 6685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) observer, ignoreWhenUnchanged); 6695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 6705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 672c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * Adds a listener of extension information. |observer| will be called 673c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * back when data is received, through: 674c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * 675c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * observer.onExtensionInfoChanged(extensionInfo) 676c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) */ 677c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) addExtensionInfoObserver: function(observer, ignoreWhenUnchanged) { 678c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) this.pollableDataHelpers_.extensionInfo.addObserver( 679c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) observer, ignoreWhenUnchanged); 680c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) }, 681c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 682c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) /** 6837d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) * Adds a listener of system log information. |observer| will be called 6847d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) * back when data is received, through: 6857d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) * 6867d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) * observer.onSystemLogChanged(systemLogInfo) 6877d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) */ 6887d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) addSystemLogObserver: function(observer, ignoreWhenUnchanged) { 689eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch if (this.pollableDataHelpers_.systemLog) { 690eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch this.pollableDataHelpers_.systemLog.addObserver( 691eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch observer, ignoreWhenUnchanged); 692eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 6937d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) }, 6947d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 6957d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) /** 6965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * If |force| is true, calls all startUpdate functions. Otherwise, just 6975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * runs updates with active observers. 6985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 6995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) checkForUpdatedInfo: function(force) { 7005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (var name in this.pollableDataHelpers_) { 7015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var helper = this.pollableDataHelpers_[name]; 7025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (force || helper.hasActiveObserver()) 7035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper.startUpdate(); 7045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 7065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 7085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Calls all startUpdate functions and, if |callback| is non-null, 7095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * calls it with the results of all updates. 7105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 7115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) updateAllInfo: function(callback) { 7125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (callback) 7135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new UpdateAllObserver(callback, this.pollableDataHelpers_); 7145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.checkForUpdatedInfo(true); 7155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 7175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 7195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * This is a helper class used by BrowserBridge, to keep track of: 7205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * - the list of observers interested in some piece of data. 7215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * - the last known value of that piece of data. 7225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * - the name of the callback method to invoke on observers. 7235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * - the update function. 7245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @constructor 7255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 7265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) function PollableDataHelper(observerMethodName, startUpdateFunction) { 7275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.observerMethodName_ = observerMethodName; 7285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.startUpdate = startUpdateFunction; 7295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.observerInfos_ = []; 7305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PollableDataHelper.prototype = { 7335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) getObserverMethodName: function() { 7345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return this.observerMethodName_; 7355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 7365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) isObserver: function(object) { 7385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (var i = 0; i < this.observerInfos_.length; i++) { 7395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (this.observerInfos_[i].observer === object) 7405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 7415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 7435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 7445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 7465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * If |ignoreWhenUnchanged| is true, we won't send data again until it 7475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * changes. 7485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 7495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) addObserver: function(observer, ignoreWhenUnchanged) { 7505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.observerInfos_.push(new ObserverInfo(observer, ignoreWhenUnchanged)); 7515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 7525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) removeObserver: function(observer) { 7545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (var i = 0; i < this.observerInfos_.length; i++) { 7555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (this.observerInfos_[i].observer === observer) { 7565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.observerInfos_.splice(i, 1); 7575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 7585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 7615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 7635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Helper function to handle calling all the observers, but ONLY if the data 7645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * has actually changed since last time or the observer has yet to receive 7655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * any data. This is used for data we received from browser on an update 7665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * loop. 7675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 7685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) update: function(data) { 7695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var prevData = this.currentData_; 7705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var changed = false; 7715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If the data hasn't changed since last time, will only need to notify 7735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // observers that have not yet received any data. 7745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!prevData || JSON.stringify(prevData) != JSON.stringify(data)) { 7755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) changed = true; 7765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.currentData_ = data; 7775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Notify the observers of the change, as needed. 7805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (var i = 0; i < this.observerInfos_.length; i++) { 7815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var observerInfo = this.observerInfos_[i]; 7825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (changed || !observerInfo.hasReceivedData || 7835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) !observerInfo.ignoreWhenUnchanged) { 7845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) observerInfo.observer[this.observerMethodName_](this.currentData_); 7855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) observerInfo.hasReceivedData = true; 7865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 7895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 7915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Returns true if one of the observers actively wants the data 7925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * (i.e. is visible). 7935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 7945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) hasActiveObserver: function() { 7955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (var i = 0; i < this.observerInfos_.length; i++) { 7965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (this.observerInfos_[i].observer.isActive()) 7975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 7985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 8005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 8015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 8025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 8045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * This is a helper class used by PollableDataHelper, to keep track of 8055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * each observer and whether or not it has received any data. The 8065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * latter is used to make sure that new observers get sent data on the 8075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * update following their creation. 8085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @constructor 8095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 8105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) function ObserverInfo(observer, ignoreWhenUnchanged) { 8115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.observer = observer; 8125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.hasReceivedData = false; 8135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.ignoreWhenUnchanged = ignoreWhenUnchanged; 8145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 8155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) /** 8175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * This is a helper class used by BrowserBridge to send data to 8185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * a callback once data from all polls has been received. 8195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 8205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * It works by keeping track of how many polling functions have 8215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * yet to receive data, and recording the data as it it received. 8225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 8235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * @constructor 8245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 8255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) function UpdateAllObserver(callback, pollableDataHelpers) { 8265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.callback_ = callback; 8275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.observingCount_ = 0; 8285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.updatedData_ = {}; 8295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (var name in pollableDataHelpers) { 8315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ++this.observingCount_; 8325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) var helper = pollableDataHelpers[name]; 8335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper.addObserver(this); 8345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this[helper.getObserverMethodName()] = 8355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.onDataReceived_.bind(this, helper, name); 8365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 8375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 8385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UpdateAllObserver.prototype = { 8405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) isActive: function() { 8415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 8425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 8435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) onDataReceived_: function(helper, name, data) { 8455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper.removeObserver(this); 8465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) --this.observingCount_; 8475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.updatedData_[name] = data; 8485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (this.observingCount_ == 0) 8495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) this.callback_(this.updatedData_); 8505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 8515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 8525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return BrowserBridge; 8545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)})(); 855