1 // Copyright (c) 2012 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 // Custom binding for the browserAction API. 6 7 var binding = require('binding').Binding.create('browserAction'); 8 9 var setIcon = require('setIcon').setIcon; 10 var getExtensionViews = requireNative('runtime').GetExtensionViews; 11 var sendRequest = require('sendRequest').sendRequest; 12 13 binding.registerCustomHook(function(bindingsAPI) { 14 var apiFunctions = bindingsAPI.apiFunctions; 15 16 apiFunctions.setHandleRequest('setIcon', function(details, callback) { 17 setIcon(details, function(args) { 18 sendRequest(this.name, [args, callback], this.definition.parameters); 19 }.bind(this)); 20 }); 21 22 apiFunctions.setCustomCallback('openPopup', 23 function(name, request, response) { 24 if (!request.callback) 25 return; 26 27 if (chrome.runtime.lastError) { 28 request.callback(); 29 } else { 30 var views = getExtensionViews(-1, 'POPUP'); 31 request.callback(views.length > 0 ? views[0] : null); 32 } 33 request.callback = null; 34 }); 35 }); 36 37 exports.binding = binding.generate(); 38