Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(6102)

Unified Diff: chrome/renderer/resources/extension_process_bindings.js

Issue 1527015: Support PNG and quality control in chrome.tabs.captureVisibleTab(). (Closed)
Patch Set: Rebase for checkin. Created 10 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/renderer/extensions/extension_api_client_unittest.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/renderer/resources/extension_process_bindings.js
diff --git a/chrome/renderer/resources/extension_process_bindings.js b/chrome/renderer/resources/extension_process_bindings.js
index 0879e91cc7939f1555d1e0f6fe4522a8158109a1..d7b0aac630de4eb3f2fbe431d368c1807b2acc1c 100644
--- a/chrome/renderer/resources/extension_process_bindings.js
+++ b/chrome/renderer/resources/extension_process_bindings.js
@@ -351,17 +351,27 @@ var chrome = chrome || {};
var apiFunction = {};
apiFunction.definition = functionDef;
- apiFunction.name = apiDef.namespace + "." + functionDef.name;;
+ apiFunction.name = apiDef.namespace + "." + functionDef.name;
apiFunctions[apiFunction.name] = apiFunction;
module[functionDef.name] = bind(apiFunction, function() {
- chromeHidden.validate(arguments, this.definition.parameters);
+ var args = arguments;
+ if (this.updateArguments) {
+ // Functions whose signature has changed can define an
+ // |updateArguments| function to transform old argument lists
+ // into the new form, preserving compatibility.
+ // TODO(skerner): Once optional args can be omitted (crbug/29215),
+ // this mechanism will become unnecessary. Consider removing it
+ // when crbug/29215 is fixed.
+ args = this.updateArguments.apply(this, args);
+ }
+ chromeHidden.validate(args, this.definition.parameters);
var retval;
if (this.handleRequest) {
- retval = this.handleRequest.apply(this, arguments);
+ retval = this.handleRequest.apply(this, args);
} else {
- retval = sendRequest(this.name, arguments,
+ retval = sendRequest(this.name, args,
this.definition.parameters,
this.customCallback);
}
@@ -405,7 +415,7 @@ var chrome = chrome || {};
var portId = OpenChannelToTab(
tabId, chromeHidden.extensionId, name);
return chromeHidden.Port.createPort(portId, name);
- }
+ };
apiFunctions["tabs.sendRequest"].handleRequest =
function(tabId, request, responseCallback) {
@@ -417,7 +427,7 @@ var chrome = chrome || {};
responseCallback(response);
port.disconnect();
});
- }
+ };
apiFunctions["extension.getViews"].handleRequest = function(properties) {
var windowId = -1;
@@ -431,25 +441,25 @@ var chrome = chrome || {};
}
}
return GetExtensionViews(windowId, type) || null;
- }
+ };
apiFunctions["extension.getBackgroundPage"].handleRequest = function() {
return GetExtensionViews(-1, "BACKGROUND")[0] || null;
- }
+ };
apiFunctions["extension.getToolstrips"].handleRequest =
function(windowId) {
if (typeof(windowId) == "undefined")
windowId = -1;
return GetExtensionViews(windowId, "TOOLSTRIP");
- }
+ };
apiFunctions["extension.getExtensionTabs"].handleRequest =
function(windowId) {
if (typeof(windowId) == "undefined")
windowId = -1;
return GetExtensionViews(windowId, "TAB");
- }
+ };
apiFunctions["devtools.getTabEvents"].handleRequest = function(tabId) {
var tabIdProxy = {};
@@ -461,7 +471,7 @@ var chrome = chrome || {};
tabIdProxy[name] = new chrome.Event("devtools." + tabId + "." + name);
});
return tabIdProxy;
- }
+ };
apiFunctions["experimental.popup.show"].handleRequest =
function(url, showDetails, callback) {
@@ -503,17 +513,17 @@ var chrome = chrome || {};
},
callback],
internalSchema);
- }
+ };
apiFunctions["experimental.extension.getPopupView"].handleRequest =
function() {
return GetPopupView();
- }
+ };
apiFunctions["experimental.popup.getParentWindow"].handleRequest =
function() {
return GetPopupParentWindow();
- }
+ };
var canvas;
function setIconCommon(details, name, parameters, actionType) {
@@ -601,7 +611,26 @@ var chrome = chrome || {};
var menuItemId = request.args[0];
delete chromeHidden.contextMenuHandlers[menuItemId];
}
- }
+ };
+
+ apiFunctions["tabs.captureVisibleTab"].updateArguments = function() {
+ // Old signature:
+ // captureVisibleTab(int windowId, function callback);
+ // New signature:
+ // captureVisibleTab(int windowId, object details, function callback);
+ //
+ // TODO(skerner): The next step to omitting optional arguments is the
+ // replacement of this code with code that matches arguments by type.
+ // Once this is working for captureVisibleTab() it can be enabled for
+ // the rest of the API. See crbug/29215 .
+ if (arguments.length == 2 && typeof(arguments[1]) == "function") {
+ // If the old signature is used, add a null details object.
+ newArgs = [arguments[0], null, arguments[1]];
+ } else {
+ newArgs = arguments;
+ }
+ return newArgs;
+ };
if (chrome.test) {
chrome.test.getApiDefinitions = GetExtensionAPIDefinition;
« no previous file with comments | « chrome/renderer/extensions/extension_api_client_unittest.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698