Home | History | Annotate | Download | only in extension
      1 // Copyright (c) 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 /*
      6  * Checks for an extension error that occurred during the asynchronous call.
      7  * If an error occurs, will invoke the error callback and throw an exception.
      8  *
      9  * @param {function(!Error)} errCallback The callback to invoke for error
     10  *     reporting.
     11  */
     12 function checkForExtensionError(errCallback) {
     13   if (typeof(chrome.extension.lastError) != 'undefined') {
     14     var error = new Error(chrome.extension.lastError.message);
     15     errCallback(error);
     16     throw error;
     17   }
     18 }
     19 
     20 /**
     21  * Captures a screenshot of the visible tab.
     22  *
     23  * @param {function(string)} callback The callback to invoke with the base64
     24  *     encoded PNG.
     25  * @param {function(!Error)} errCallback The callback to invoke for error
     26  *     reporting.
     27  */
     28 function captureScreenshot(callback, errCallback) {
     29   chrome.tabs.captureVisibleTab({format:'png'}, function(dataUrl) {
     30     if (chrome.extension.lastError &&
     31         chrome.extension.lastError.message.indexOf('permission') != -1) {
     32       var error = new Error(chrome.extension.lastError.message);
     33       error.code = 103;  // kForbidden
     34       errCallback(error);
     35       return;
     36     }
     37     checkForExtensionError(errCallback);
     38     var base64 = ';base64,';
     39     callback(dataUrl.substr(dataUrl.indexOf(base64) + base64.length))
     40   });
     41 }
     42 
     43 /**
     44  * Gets info about the current window.
     45  *
     46  * @param {function(*)} callback The callback to invoke with the window info.
     47  * @param {function(!Error)} errCallback The callback to invoke for error
     48  *     reporting.
     49  */
     50 function getWindowInfo(callback, errCallback) {
     51   chrome.windows.getCurrent({populate: true}, function(window) {
     52     checkForExtensionError(errCallback);
     53     callback(window);
     54   });
     55 }
     56 
     57 /**
     58  * Updates the properties of the current window.
     59  *
     60  * @param {Object} updateInfo Update info to pass to chrome.windows.update.
     61  * @param {function()} callback Invoked when the updating is complete.
     62  * @param {function(!Error)} errCallback The callback to invoke for error
     63  *     reporting.
     64  */
     65 function updateWindow(updateInfo, callback, errCallback) {
     66   chrome.windows.getCurrent({}, function(window) {
     67     checkForExtensionError(errCallback);
     68     chrome.windows.update(window.id, updateInfo, function(window) {
     69       checkForExtensionError(errCallback);
     70       callback();
     71     });
     72   });
     73 }
     74 
     75 /**
     76  * Launches an app with the specified id.
     77  *
     78  * @param {string} id The ID of the app to launch.
     79  * @param {function()} callback Invoked when the launch event is complete.
     80  * @param {function(!Error)} errCallback The callback to invoke for error
     81  *     reporting.
     82  */
     83 function launchApp(id, callback, errCallback) {
     84   chrome.management.launchApp(id, function() {
     85     checkForExtensionError(errCallback);
     86     callback();
     87   });
     88 }
     89