Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code

Unified Diff: safari/ext/content.js

Issue 29339314: Issue 3870 - Rewrite legacy options page to use async messages (Closed)
Patch Set: Avoid another race condition Created April 7, 2016, 1:27 p.m.
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « safari/ext/background.js ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: safari/ext/content.js
diff --git a/safari/ext/content.js b/safari/ext/content.js
index 4ae9aab446d12cfdc4da443d5e3e1b4704ee854f..05c615408b15b9d9db11f0d9fa61b455f628b7c0 100644
--- a/safari/ext/content.js
+++ b/safari/ext/content.js
@@ -135,249 +135,6 @@
/* Background page */
- var backgroundPageProxy = {
- objects: [],
- callbacks: [],
-
- send: function(message)
- {
- message.category = "proxy";
- message.documentId = documentId;
-
- return safari.self.tab.canLoad(beforeLoadEvent, message);
- },
- checkResult: function(result)
- {
- if (!result.succeed)
- throw result.error;
- },
- deserializeResult: function(result)
- {
- this.checkResult(result);
- return this.deserialize(result.result);
- },
- serialize: function(obj, memo)
- {
- if (typeof obj == "object" && obj != null || typeof obj == "function")
- {
- if ("__proxyObjectId" in obj)
- return {type: "hosted", objectId: obj.__proxyObjectId};
-
- if (typeof obj == "function")
- {
- var callbackId;
- if ("__proxyCallbackId" in obj)
- callbackId = obj.__proxyCallbackId;
- else
- {
- callbackId = this.callbacks.push(obj) - 1;
- Object.defineProperty(obj, "__proxyCallbackId", {value: callbackId});
- }
-
- return {type: "callback", callbackId: callbackId,
- documentId: documentId};
- }
-
- if (obj.constructor != Date && obj.constructor != RegExp)
- {
- if (!memo)
- memo = {specs: [], objects: []};
-
- var idx = memo.objects.indexOf(obj);
- if (idx != -1)
- return memo.specs[idx];
-
- var spec = {};
- memo.specs.push(spec);
- memo.objects.push(obj);
-
- if (obj.constructor == Array)
- {
- spec.type = "array";
- spec.items = [];
-
- for (var i = 0; i < obj.length; i++)
- spec.items.push(this.serialize(obj[i], memo));
- }
- else
- {
- spec.type = "object";
- spec.properties = {};
-
- for (var k in obj)
- spec.properties[k] = this.serialize(obj[k], memo);
- }
-
- return spec;
- }
- }
-
- return {type: "value", value: obj};
- },
- deserializeSequence: function(specs, array, memo)
- {
- if (!array)
- array = [];
-
- if (!memo)
- memo = {specs: [], arrays: []};
-
- for (var i = 0; i < specs.length; i++)
- array.push(this.deserialize(specs[i], memo));
-
- return array;
- },
- deserialize: function(spec, memo)
- {
- switch (spec.type)
- {
- case "value":
- return spec.value;
- case "object":
- return this.getObject(spec.objectId);
- case "array":
- if (!memo)
- memo = {specs: [], arrays: []};
-
- var idx = memo.specs.indexOf(spec);
- if (idx != -1)
- return memo.arrays[idx];
-
- var array = [];
- memo.specs.push(spec);
- memo.arrays.push(array);
-
- return this.deserializeSequence(spec.items, array, memo);
- }
- },
- getProperty: function(objectId, property)
- {
- return this.deserializeResult(
- this.send(
- {
- type: "getProperty",
- objectId: objectId,
- property: property
- })
- );
- },
- createProperty: function(property, enumerable)
- {
- var proxy = this;
- return {
- get: function()
- {
- return proxy.getProperty(this.__proxyObjectId, property);
- },
- set: function(value)
- {
- proxy.checkResult(
- proxy.send(
- {
- type: "setProperty",
- objectId: this.__proxyObjectId,
- property: property,
- value: proxy.serialize(value)
- })
- );
- },
- enumerable: enumerable,
- configurable: true
- };
- },
- createFunction: function(objectId)
- {
- var proxy = this;
- return function()
- {
- return proxy.deserializeResult(
- proxy.send(
- {
- type: "callFunction",
- functionId: objectId,
- contextId: this.__proxyObjectId,
- args: Array.prototype.map.call(
- arguments,
- proxy.serialize.bind(proxy)
- )
- })
- );
- };
- },
- handleCallback: function(message)
- {
- this.callbacks[message.callbackId].apply(
- this.getObject(message.contextId),
- this.deserializeSequence(message.args)
- );
- },
- getObject: function(objectId)
- {
- var objectInfo = this.send({
- type: "inspectObject",
- objectId: objectId
- });
-
- var obj = this.objects[objectId];
- if (obj)
- Object.getOwnPropertyNames(obj).forEach(function(prop) { delete obj[prop]; });
- else
- {
- if (objectInfo.isFunction)
- obj = this.createFunction(objectId);
- else
- obj = {};
-
- this.objects[objectId] = obj;
- Object.defineProperty(obj, "__proxyObjectId", {value: objectId});
- }
-
- var excluded = [];
- var included = [];
- if ("prototypeOf" in objectInfo)
- {
- var prototype = window[objectInfo.prototypeOf].prototype;
-
- excluded = Object.getOwnPropertyNames(prototype);
- included = ["constructor"];
-
- obj.__proto__ = prototype;
- }
- else
- {
- if (objectInfo.isFunction)
- {
- excluded = Object.getOwnPropertyNames(function() {});
- included = ["prototype"];
- }
-
- if ("prototypeId" in objectInfo)
- obj.__proto__ = this.getObject(objectInfo.prototypeId);
- else
- obj.__proto__ = null;
- }
-
- for (var property in objectInfo.properties)
- {
- if (excluded.indexOf(property) == -1 || included.indexOf(property) != -1)
- {
- var desc = Object.getOwnPropertyDescriptor(obj, property);
-
- if (!desc || desc.configurable)
- {
- Object.defineProperty(obj, property, this.createProperty(
- property, objectInfo.properties[property].enumerable
- ));
- }
- else if (desc.writable)
- obj[property] = this.getProperty(objectId, property);
- }
- }
-
- return obj;
- }
- };
-
ext.backgroundPage = {
sendMessage: function(message, responseCallback)
{
@@ -394,10 +151,6 @@
payload: message
}
);
- },
- getWindow: function()
- {
- return backgroundPageProxy.getObject(0);
}
};
@@ -425,9 +178,6 @@
case "response":
messageProxy.handleResponse(event.message);
break;
- case "proxyCallback":
- backgroundPageProxy.handleCallback(event.message);
- break;
}
}
});
« no previous file with comments | « safari/ext/background.js ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld