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

Side by Side Diff: lib/hooks.js

Issue 29562599: Issue 5751 - Removing legacy gecko support (Closed)
Patch Set: Rebase against current master ( 489:293593da6033 ) Created Oct. 10, 2017, 9:25 a.m.
Left:
Right:
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View unified diff | Download patch
« build.py ('K') | « build.py ('k') | lib/keySelector.js » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 /* This Source Code Form is subject to the terms of the Mozilla Public
2 * License, v. 2.0. If a copy of the MPL was not distributed with this
3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
4
5 function hook(obj, name, func, cleanup)
6 {
7 let orig = obj[name];
8 let origDesc = Object.getOwnPropertyDescriptor(obj, name);
9 let dumbOverrideAttempt = false;
10
11 let newFunc = function()
12 {
13 let params = arguments;
14 try
15 {
16 let result = func.apply(this, params);
17 if (typeof result == "object")
18 params = result;
19 }
20 catch(e)
21 {
22 Cu.reportError(e);
23 }
24
25 try
26 {
27 return orig.apply(this, params);
28 }
29 finally
30 {
31 if (typeof cleanup == "function")
32 cleanup();
33 }
34 };
35 newFunc.toString = function()
36 {
37 dumbOverrideAttempt = true;
38 return orig.toString();
39 };
40 newFunc.toSource = function()
41 {
42 dumbOverrideAttempt = true;
43 return orig.toSource();
44 };
45
46 Object.defineProperty(obj, name, {
47 get: function()
48 {
49 dumbOverrideAttempt = false;
50 return newFunc;
51 },
52 set: function(value)
53 {
54 if (dumbOverrideAttempt)
55 {
56 orig = value;
57 }
58 else
59 {
60 delete obj[name];
61 obj[name] = value;
62 }
63 },
64 enumerable: true,
65 configurable: true
66 });
67
68 return function()
69 {
70 Object.defineProperty(obj, name, origDesc);
71 };
72 }
73 exports.hook = hook;
OLDNEW
« build.py ('K') | « build.py ('k') | lib/keySelector.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld