1
0
mirror of https://github.com/webrecorder/pywb.git synced 2025-03-24 06:59:52 +01:00

client side fixes for proxy obj:

- add general override_func_first_arg_proxy_to_obj() to dereference proxy->obj for first arg
- used for MutationObserver.observe() and Node.compareDocumentPosition() for now
This commit is contained in:
Ilya Kreymer 2017-08-16 22:08:00 -07:00 committed by Ilya Kreymer
parent 2115817792
commit bbe3cebd2f

View File

@ -2138,15 +2138,15 @@ var _WBWombat = function($wbwindow, wbinfo) {
} }
//============================================ //============================================
function init_mo_from_proxy() { function override_func_first_arg_proxy_to_obj(prototype, method) {
var orig_observe = $wbwindow.MutationObserver.prototype.observe; var orig = prototype[method];
function observe_deproxy(target, options) { function deproxy() {
target = proxy_to_obj(target); arguments[0] = proxy_to_obj(arguments[0]);
return orig_observe.call(this, target, options); orig.apply(this, arguments);
} }
$wbwindow.MutationObserver.prototype.observe = observe_deproxy; prototype[method] = deproxy;
} }
//============================================ //============================================
@ -2817,6 +2817,10 @@ var _WBWombat = function($wbwindow, wbinfo) {
override_iframe_content_access("contentWindow"); override_iframe_content_access("contentWindow");
override_iframe_content_access("contentDocument"); override_iframe_content_access("contentDocument");
// override funcs to convert first arg proxy->obj
override_func_first_arg_proxy_to_obj($wbwindow.MutationObserver.prototype, "observe");
override_func_first_arg_proxy_to_obj($wbwindow.Node.prototype, "compareDocumentPosition");
override_frames_access($wbwindow); override_frames_access($wbwindow);
// setAttribute // setAttribute
@ -2880,8 +2884,6 @@ var _WBWombat = function($wbwindow, wbinfo) {
init_window_obj_proxy($wbwindow); init_window_obj_proxy($wbwindow);
init_document_obj_proxy($wbwindow.document); init_document_obj_proxy($wbwindow.document);
init_mo_from_proxy();
// expose functions // expose functions
var obj = {} var obj = {}
obj.extract_orig = extract_orig; obj.extract_orig = extract_orig;