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

Side by Side Diff: lib/main.js

Issue 8788183: Detect and handle the case of our own typo correction extension being installed in parallel (Closed)
Patch Set: Created Nov. 15, 2012, 1:18 p.m.
Left:
Right:
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | lib/typoFixer.js » ('j') | lib/typoFixer.js » ('J')
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * This Source Code is subject to the terms of the Mozilla Public License 2 * This Source Code is subject to the terms of the Mozilla Public License
3 * version 2.0 (the "License"). You can obtain a copy of the License at 3 * version 2.0 (the "License"). You can obtain a copy of the License at
4 * http://mozilla.org/MPL/2.0/. 4 * http://mozilla.org/MPL/2.0/.
5 */ 5 */
6 6
7 /** 7 /**
8 * @fileOverview Starts up Adblock Plus 8 * @fileOverview Starts up Adblock Plus
9 */ 9 */
10 10
11 Cu.import("resource://gre/modules/XPCOMUtils.jsm"); 11 Cu.import("resource://gre/modules/XPCOMUtils.jsm");
12 Cu.import("resource://gre/modules/Services.jsm"); 12 Cu.import("resource://gre/modules/Services.jsm");
13 Cu.import("resource://gre/modules/AddonManager.jsm");
13 14
14 let {TimeLine} = require("timeline"); 15 let {TimeLine} = require("timeline");
15 16
16 TimeLine.enter("Adblock Plus startup"); 17 TimeLine.enter("Adblock Plus startup");
17 let {Prefs} = require("prefs"); 18 let {Prefs} = require("prefs");
18 TimeLine.log("Done loading preferences"); 19 TimeLine.log("Done loading preferences");
19 registerPublicAPI(); 20 registerPublicAPI();
20 TimeLine.log("Done registering public API"); 21 TimeLine.log("Done registering public API");
21 require("filterListener"); 22 require("filterListener");
22 TimeLine.log("Done loading filter listener"); 23 TimeLine.log("Done loading filter listener");
23 require("contentPolicy"); 24 require("contentPolicy");
24 TimeLine.log("Done loading content policy"); 25 TimeLine.log("Done loading content policy");
25 require("synchronizer"); 26 require("synchronizer");
26 TimeLine.log("Done loading subscription synchronizer"); 27 TimeLine.log("Done loading subscription synchronizer");
27 require("sync"); 28 require("sync");
28 TimeLine.log("Done loading sync support"); 29 TimeLine.log("Done loading sync support");
29 require("ui"); 30 require("ui");
30 TimeLine.log("Done loading UI integration code"); 31 TimeLine.log("Done loading UI integration code");
31 if (!Prefs.correctTyposAsked || (Prefs.correctTyposAsked && Prefs.correctTypos)) 32 (function()
Wladimir Palant 2012/11/19 07:30:02 Please move that entire logic into a separate typo
32 { 33 {
33 require("typoFixer"); 34 let urlfixerID = "{0fa2149e-bb2c-4ac2-a8d3-479599819475}";
34 TimeLine.log("Done loading typo correction"); 35 let isTypoCorrectionEnabled;
35 } 36 let typoFixerLoaded = false;
36 else 37
37 { 38 function enableTypoCorrection()
38 let onPrefChange = function(name)
39 { 39 {
40 if (name == "correctTypos") 40 if (isTypoCorrectionEnabled)
41 return;
42
43 if (typoFixerLoaded)
44 {
45 require("typoFixer").attachWindowObserver();
46 }
47 else
41 { 48 {
42 require("typoFixer"); 49 require("typoFixer");
43 Prefs.removeListener(onPrefChange); 50 typoFixerLoaded = true;
51 }
Wladimir Palant 2012/11/19 07:30:02 How about just doing require("typoFixer").attachWi
52
53 isTypoCorrectionEnabled = true;
54 }
55
56 function disableTypoCorrection()
57 {
58 if (!isTypoCorrectionEnabled)
59 return;
60
61 if (typoFixerLoaded)
62 {
63 require("typoFixer").detachWindowObserver();
64 }
Wladimir Palant 2012/11/19 07:30:02 How about just doing require("typoFixer").detachWi
65
66 isTypoCorrectionEnabled = false;
67 }
68
69 function checkAddonStatusAndEnable()
70 {
71 AddonManager.getAddonByID(urlfixerID, function(addon)
72 {
73 checkAndEnable(addon && !addon.userDisabled);
74 });
75 }
76
77 function checkAndEnable(isInstalledAndEnabled)
78 {
79 if (isInstalledAndEnabled)
80 {
81 disableTypoCorrection();
82 }
83 else
84 {
85 if (!Prefs.correctTyposAsked || (Prefs.correctTyposAsked && Prefs.correctT ypos))
Wladimir Palant 2012/11/19 07:30:02 This logic seems wrong. If typo corrections are di
86 {
87 enableTypoCorrection();
88 }
89 else if (!typoFixerLoaded)
90 {
91 function onPrefChange(name)
92 {
93 if (name == "correctTypos")
94 {
95 checkAddonStatusAndEnable();
96 Prefs.removeListener(onPrefChange);
97 }
98 }
99
100 Prefs.addListener(onPrefChange);
101 }
44 } 102 }
45 } 103 }
46 104
47 Prefs.addListener(onPrefChange); 105 let addonListener = {
48 } 106 onEnabling: function(addon, needsRestart)
107 {
108 if (addon.id == urlfixerID)
109 checkAndEnable(true);
110 },
111 onDisabled: function(addon)
112 {
113 if (addon.id == urlfixerID)
114 checkAndEnable(false);
115 },
116 onInstalling: function(addon, needsRestart)
117 {
118 if (addon.id == urlfixerID)
119 checkAndEnable(true);
120 },
121 onUninstalled: function(addon)
122 {
123 if (addon.id == urlfixerID)
124 checkAndEnable(false);
125 },
126 onOperationCancelled: function(addon)
127 {
128 if (addon.id == urlfixerID)
129 checkAddonStatusAndEnable();
Wladimir Palant 2012/11/19 07:30:02 Please ignore this call - URL Fixer is restartless
130 }
131 }
132 AddonManager.addAddonListener(addonListener);
133
134 checkAddonStatusAndEnable();
135 })();
136 TimeLine.log("Done loading typo correction");
49 TimeLine.leave("Started up"); 137 TimeLine.leave("Started up");
50 138
51 function registerPublicAPI() 139 function registerPublicAPI()
52 { 140 {
53 let {addonRoot} = require("info"); 141 let {addonRoot} = require("info");
54 142
55 let uri = Services.io.newURI(addonRoot + "lib/Public.jsm", null, null); 143 let uri = Services.io.newURI(addonRoot + "lib/Public.jsm", null, null);
56 if (uri instanceof Ci.nsIMutable) 144 if (uri instanceof Ci.nsIMutable)
57 uri.mutable = false; 145 uri.mutable = false;
58 146
(...skipping 12 matching lines...) Expand all
71 159
72 let registrar = Components.manager.QueryInterface(Ci.nsIComponentRegistrar); 160 let registrar = Components.manager.QueryInterface(Ci.nsIComponentRegistrar);
73 registrar.registerFactory(classID, "Adblock Plus public API URL", contractID, factory); 161 registrar.registerFactory(classID, "Adblock Plus public API URL", contractID, factory);
74 162
75 onShutdown.add(function() 163 onShutdown.add(function()
76 { 164 {
77 registrar.unregisterFactory(classID, factory); 165 registrar.unregisterFactory(classID, factory);
78 Cu.unload(uri.spec); 166 Cu.unload(uri.spec);
79 }); 167 });
80 } 168 }
OLDNEW
« no previous file with comments | « no previous file | lib/typoFixer.js » ('j') | lib/typoFixer.js » ('J')

Powered by Google App Engine
This is Rietveld