// Copyright 2013 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. chrome.runtime.onStartup.addListener( function() { chrome.alarms.create('hangout_services_fxpre', {'delayInMinutes': 2}); }); chrome.alarms.onAlarm.addListener(function(alarm) { if (!alarm || alarm.name != 'hangout_services_fxpre') return; var e = document.createElement('iframe'); e.src = 'https://plus.google.com/hangouts/_/fxpre'; document.body.appendChild(e); }); chrome.runtime.onMessageExternal.addListener( function(message, sender, sendResponse) { function doSendResponse(value, error) { var errorMessage = error || chrome.extension.lastError; sendResponse({'value': value, 'error': errorMessage}); } function getHost(url) { if (!url) return ''; // Use the DOM to parse the URL. Since we don't add the anchor to // the page, this is the only reference to it and it will be // deleted once it's gone out of scope. var a = document.createElement('a'); a.href = url; var origin = a.protocol + '//' + a.hostname; if (a.port != '') origin = origin + ':' + a.port; origin = origin + '/'; return origin; } try { var method = message['method']; var origin = getHost(sender.url); if (method == 'chooseDesktopMedia') { var cancelId; function sendResponseWithCancelId(streamId) { var value = {'cancelId': cancelId, 'streamId': streamId}; doSendResponse(value); } cancelId = chrome.desktopCapture.chooseDesktopMedia( ['screen', 'window'], sender.tab, sendResponseWithCancelId); return true; } else if (method == 'cancelChooseDesktopMedia') { var cancelId = message['cancelId']; chrome.desktopCapture.cancelChooseDesktopMedia(cancelId); doSendResponse(); return false; } else if (method == 'cpu.getInfo') { chrome.system.cpu.getInfo(doSendResponse); return true; } else if (method == 'logging.setMetadata') { var metaData = message['metaData']; chrome.webrtcLoggingPrivate.setMetaData( sender.tab.id, origin, metaData, doSendResponse); return true; } else if (method == 'logging.start') { chrome.webrtcLoggingPrivate.start(sender.tab.id, origin, doSendResponse); return true; } else if (method == 'logging.uploadOnRenderClose') { chrome.webrtcLoggingPrivate.setUploadOnRenderClose( sender.tab.id, origin, true); doSendResponse(); return false; } else if (method == 'logging.noUploadOnRenderClose') { chrome.webrtcLoggingPrivate.setUploadOnRenderClose( sender.tab.id, origin, false); doSendResponse(); return false; } else if (method == 'logging.stop') { chrome.webrtcLoggingPrivate.stop(sender.tab.id, origin, doSendResponse); return true; } else if (method == 'logging.upload') { chrome.webrtcLoggingPrivate.upload(sender.tab.id, origin, doSendResponse); return true; } else if (method == 'logging.stopAndUpload') { chrome.webrtcLoggingPrivate.stop( sender.tab.id, origin, function() { chrome.webrtcLoggingPrivate.upload( sender.tab.id, origin, doSendResponse); }); return true; } else if (method == 'logging.discard') { chrome.webrtcLoggingPrivate.discard( sender.tab.id, origin, doSendResponse); return true; } else if (method == 'getSinks') { chrome.webrtcAudioPrivate.getSinks(doSendResponse); return true; } else if (method == 'getActiveSink') { chrome.webrtcAudioPrivate.getActiveSink(sender.tab.id, doSendResponse); return true; } else if (method == 'setActiveSink') { var sinkId = message['sinkId']; chrome.webrtcAudioPrivate.setActiveSink( sender.tab.id, sinkId, doSendResponse); return true; } else if (method == 'getAssociatedSink') { var sourceId = message['sourceId']; chrome.webrtcAudioPrivate.getAssociatedSink( origin, sourceId, doSendResponse); return true; } else if (method == 'isExtensionEnabled') { // This method is necessary because there may be more than one // version of this extension, under different extension IDs. By // first calling this method on the extension ID, the client can // check if it's loaded; if it's not, the extension system will // call the callback with no arguments and set // chrome.runtime.lastError. doSendResponse(); return false; } else if (method == 'getNaclArchitecture') { chrome.runtime.getPlatformInfo(function(obj) { doSendResponse(obj.nacl_arch); }); return true; } throw new Error('Unknown method: ' + method); } catch (e) { doSendResponse(null, e.name + ': ' + e.message); } }); // If Hangouts connects with a port named 'onSinksChangedListener', we // will register a listener and send it a message {'eventName': // 'onSinksChanged'} whenever the event fires. chrome.runtime.onConnectExternal.addListener( function(port) { if (port.name == 'onSinksChangedListener') { function clientListener() { port.postMessage({'eventName': 'onSinksChanged'}); } chrome.webrtcAudioPrivate.onSinksChanged.addListener(clientListener); port.onDisconnect(function() { chrome.webrtcAudioPrivate.onSinksChanged.removeListener( clientListener); }); } });