- add sources.
[platform/framework/web/crosswalk.git] / src / chrome / browser / resources / hangout_services / thunk.js
1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 chrome.runtime.onMessageExternal.addListener(
6     function(message, sender, sendResponse) {
7   function doSendResponse(value, error) {
8     var errorMessage = error || chrome.extension.lastError;
9     sendResponse({'value': value, 'error': errorMessage});
10   }
11
12   function getHost(url) {
13     if (!url)
14       return '';
15     // Use the DOM to parse the URL. Since we don't add the anchor to
16     // the page, this is the only reference to it and it will be
17     // deleted once it's gone out of scope.
18     var a = document.createElement('a');
19     a.href = url;
20     var origin = a.protocol + '//' + a.hostname;
21     if (a.port != '')
22       origin = origin + ':' + a.port;
23     origin = origin + '/';
24     return origin;
25   }
26
27   try {
28     var method = message['method'];
29     var origin = getHost(sender.url);
30     if (method == 'chooseDesktopMedia') {
31       var cancelId;
32       function sendResponseWithCancelId(streamId) {
33         var value = {'cancelId': cancelId,
34                      'streamId': streamId};
35         doSendResponse(value);
36       }
37       cancelId = chrome.desktopCapture.chooseDesktopMedia(
38           ['screen', 'window'], sender.tab, sendResponseWithCancelId);
39       return true;
40     } else if (method == 'cancelChooseDesktopMedia') {
41       var cancelId = message['cancelId'];
42       chrome.desktopCapture.cancelChooseDesktopMedia(cancelId);
43       doSendResponse();
44       return false;
45     } else if (method == 'cpu.getInfo') {
46       chrome.system.cpu.getInfo(doSendResponse);
47       return true;
48     } else if (method == 'logging.setMetadata') {
49       var metaData = message['metaData'];
50       chrome.webrtcLoggingPrivate.setMetaData(
51           sender.tab.id, origin, metaData, doSendResponse);
52       return true;
53     } else if (method == 'logging.start') {
54       chrome.webrtcLoggingPrivate.start(sender.tab.id, origin, doSendResponse);
55       return true;
56     } else if (method == 'logging.uploadOnRenderClose') {
57       chrome.webrtcLoggingPrivate.setUploadOnRenderClose(
58           sender.tab.id, origin, true);
59       doSendResponse();
60       return false;
61     } else if (method == 'logging.noUploadOnRenderClose') {
62       chrome.webrtcLoggingPrivate.setUploadOnRenderClose(
63           sender.tab.id, origin, false);
64       doSendResponse();
65       return false;
66     } else if (method == 'logging.stop') {
67       chrome.webrtcLoggingPrivate.stop(sender.tab.id, origin, doSendResponse);
68       return true;
69     } else if (method == 'logging.upload') {
70       chrome.webrtcLoggingPrivate.upload(sender.tab.id, origin, doSendResponse);
71       return true;
72     } else if (method == 'logging.discard') {
73       chrome.webrtcLoggingPrivate.discard(
74           sender.tab.id, origin, doSendResponse);
75       return true;
76     } else if (method == 'getSinks') {
77       chrome.webrtcAudioPrivate.getSinks(doSendResponse);
78       return true;
79     } else if (method == 'getActiveSink') {
80       chrome.webrtcAudioPrivate.getActiveSink(sender.tab.id, doSendResponse);
81       return true;
82     } else if (method == 'setActiveSink') {
83       var sinkId = message['sinkId'];
84       chrome.webrtcAudioPrivate.setActiveSink(
85           sender.tab.id, sinkId, doSendResponse);
86       return true;
87     } else if (method == 'getAssociatedSink') {
88       var sourceId = message['sourceId'];
89       chrome.webrtcAudioPrivate.getAssociatedSink(
90           origin, sourceId, doSendResponse);
91       return true;
92     } else if (method == 'isExtensionEnabled') {
93       // This method is necessary because there may be more than one
94       // version of this extension, under different extension IDs. By
95       // first calling this method on the extension ID, the client can
96       // check if it's loaded; if it's not, the extension system will
97       // call the callback with no arguments and set
98       // chrome.runtime.lastError.
99       doSendResponse();
100       return false;
101     }
102     throw new Error('Unknown method: ' + method);
103   } catch (e) {
104     doSendResponse(null, e.name + ': ' + e.message);
105   }
106 });
107
108 // If Hangouts connects with a port named 'onSinksChangedListener', we
109 // will register a listener and send it a message {'eventName':
110 // 'onSinksChanged'} whenever the event fires.
111 chrome.runtime.onConnectExternal.addListener(
112     function(port) {
113   if (port.name == 'onSinksChangedListener') {
114     function clientListener() {
115       port.postMessage({'eventName': 'onSinksChanged'});
116     }
117     chrome.webrtcAudioPrivate.onSinksChanged.addListener(clientListener);
118
119     port.onDisconnect(function() {
120         chrome.webrtcAudioPrivate.onSinksChanged.removeListener(
121             clientListener);
122       });
123   }
124 });