summaryrefslogtreecommitdiffstats
path: root/chrome/renderer
diff options
context:
space:
mode:
authordewittj@chromium.org <dewittj@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-06-13 06:36:59 +0000
committerdewittj@chromium.org <dewittj@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-06-13 06:36:59 +0000
commitacf883a85d1bafb447d4c4ebae4687da988bf1cc (patch)
treedb1a3581153dad897217b0a47ff0594ff922a71b /chrome/renderer
parenta6d0eaab927118f866c1418ac038aecf5337b826 (diff)
downloadchromium_src-acf883a85d1bafb447d4c4ebae4687da988bf1cc.zip
chromium_src-acf883a85d1bafb447d4c4ebae4687da988bf1cc.tar.gz
chromium_src-acf883a85d1bafb447d4c4ebae4687da988bf1cc.tar.bz2
Make notifications API send bitmaps instead of data URLs to the browser.
Currently we encode the image data downloaded from the net as a data URL, which still needs to be sent back to a renderer to be converted into a bitmap. This patch sends over an ImageData object which is ready to be put into an SkBitmap (with a RGBA->ARGB conversion). TBR=sky@chromium.org - Changes for ash/ tests with notifications BUG=238823,232288,168943 Review URL: https://chromiumcodereview.appspot.com/15927043 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@206009 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/renderer')
-rw-r--r--chrome/renderer/resources/extensions/image_util.js16
-rw-r--r--chrome/renderer/resources/extensions/notifications_custom_bindings.js31
2 files changed, 17 insertions, 30 deletions
diff --git a/chrome/renderer/resources/extensions/image_util.js b/chrome/renderer/resources/extensions/image_util.js
index c9a3994..7075c94 100644
--- a/chrome/renderer/resources/extensions/image_util.js
+++ b/chrome/renderer/resources/extensions/image_util.js
@@ -6,7 +6,7 @@
// corresponding to the internet URL to be translated - and optionally
// |width| and |height| which are the maximum dimensions to be used when
// converting the image.
-function loadDataUrl(imageSpec, callbacks) {
+function loadImageData(imageSpec, callbacks) {
var path = imageSpec.path;
var img = new Image();
if (typeof callbacks.onerror === 'function') {
@@ -39,9 +39,11 @@ function loadDataUrl(imageSpec, callbacks) {
canvas_context.clearRect(0, 0, canvas.width, canvas.height);
canvas_context.drawImage(img, 0, 0, canvas.width, canvas.height);
try {
- var dataUrl = canvas.toDataURL();
+ var imageData = canvas_context.getImageData(
+ 0, 0, canvas.width, canvas.height);
if (typeof callbacks.oncomplete === 'function') {
- callbacks.oncomplete(dataUrl);
+ callbacks.oncomplete(
+ imageData.width, imageData.height, imageData.data.buffer);
}
} catch (e) {
if (typeof callbacks.onerror === 'function') {
@@ -53,9 +55,9 @@ function loadDataUrl(imageSpec, callbacks) {
}
function on_complete_index(index, err, loading, finished, callbacks) {
- return function(imageData) {
+ return function(width, height, imageData) {
delete loading[index];
- finished[index] = imageData;
+ finished[index] = { width: width, height: height, data: imageData };
if (err)
callbacks.onerror(index);
if (Object.keys(loading).length == 0)
@@ -69,12 +71,12 @@ function loadAllImages(imageSpecs, callbacks) {
for (var index = 0; index < imageSpecs.length; index++) {
loading[index] = imageSpecs[index];
- loadDataUrl(imageSpecs[index], {
+ loadImageData(imageSpecs[index], {
oncomplete: on_complete_index(index, false, loading, finished, callbacks),
onerror: on_complete_index(index, true, loading, finished, callbacks)
});
}
}
-exports.loadDataUrl = loadDataUrl;
+exports.loadImageData = loadImageData;
exports.loadAllImages = loadAllImages;
diff --git a/chrome/renderer/resources/extensions/notifications_custom_bindings.js b/chrome/renderer/resources/extensions/notifications_custom_bindings.js
index 7c0aba3..0a5d13d 100644
--- a/chrome/renderer/resources/extensions/notifications_custom_bindings.js
+++ b/chrome/renderer/resources/extensions/notifications_custom_bindings.js
@@ -9,14 +9,7 @@ var sendRequest = require('sendRequest').sendRequest;
var imageUtil = require('imageUtil');
var lastError = require('lastError');
-function url_getter(context, key) {
- var f = function() {
- return this[key];
- };
- return f.bind(context);
-}
-
-function url_setter(context, key) {
+function image_data_setter(context, key) {
var f = function(val) {
this[key] = val;
};
@@ -26,36 +19,28 @@ function url_setter(context, key) {
function replaceNotificationOptionURLs(notification_details, callback) {
// A URL Spec is an object with the following keys:
// path: The resource to be downloaded.
+ // width: (optional) The maximum width of the image to be downloaded.
+ // height: (optional) The maximum height of the image to be downloaded.
// callback: A function to be called when the URL is complete. It
// should accept an ImageData object and set the appropriate
// field in the output of create.
- // TODO(dewittj): Try to remove hard-coding.
+ // TODO(dewittj): Try to remove hard-coding of image sizes.
// |iconUrl| is required.
var url_specs = [{
path: notification_details.iconUrl,
width: 80,
height: 80,
- callback: url_setter(notification_details, 'iconUrl')
+ callback: image_data_setter(notification_details, 'iconBitmap')
}];
- // |secondIconUrl| is optional.
- if (notification_details.secondIconUrl) {
- url_specs.push({
- path: notification_details.secondIconUrl,
- width: 80,
- height: 80,
- callback: url_setter(notification_details, 'secondIconUrl')
- });
- }
-
// |imageUrl| is optional.
if (notification_details.imageUrl) {
url_specs.push({
path: notification_details.imageUrl,
width: 360,
height: 540,
- callback: url_setter(notification_details, 'imageUrl')
+ callback: image_data_setter(notification_details, 'imageBitmap')
});
}
@@ -69,7 +54,7 @@ function replaceNotificationOptionURLs(notification_details, callback) {
path: button_list[i].iconUrl,
width: 16,
height: 16,
- callback: url_setter(button_list[i], 'iconUrl')
+ callback: image_data_setter(button_list[i], 'iconBitmap')
});
}
}
@@ -125,7 +110,7 @@ var handleUpdate = genHandle('notifications.update',
var notificationsCustomHook = function(bindingsAPI, extensionId) {
var apiFunctions = bindingsAPI.apiFunctions;
apiFunctions.setHandleRequest('create', handleCreate);
- apiFunctions.setHandleRequest('update', handleCreate);
+ apiFunctions.setHandleRequest('update', handleUpdate);
};
binding.registerCustomHook(notificationsCustomHook);