Skip to content

Commit 4b4601d

Browse files
committed
Merge pull request mozilla#2481 from yurydelendik/rm-global-pb
Refactors private browsing logic
2 parents d58fad8 + 1e7e586 commit 4b4601d

File tree

1 file changed

+29
-26
lines changed

1 file changed

+29
-26
lines changed

extensions/firefox/components/PdfStreamConverter.js

Lines changed: 29 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -30,31 +30,19 @@ const PDF_CONTENT_TYPE = 'application/pdf';
3030
const PREF_PREFIX = 'PDFJSSCRIPT_PREF_PREFIX';
3131
const PDF_VIEWER_WEB_PAGE = 'resource://pdf.js/web/viewer.html';
3232
const MAX_DATABASE_LENGTH = 4096;
33-
const FIREFOX_ID = '{ec8030f7-c20a-464f-9b0e-13a3a9e97384}';
3433

3534
Cu.import('resource://gre/modules/XPCOMUtils.jsm');
3635
Cu.import('resource://gre/modules/Services.jsm');
3736
Cu.import('resource://gre/modules/NetUtil.jsm');
3837

38+
XPCOMUtils.defineLazyModuleGetter(this, 'PrivateBrowsingUtils',
39+
'resource://gre/modules/PrivateBrowsingUtils.jsm');
3940

40-
let appInfo = Cc['@mozilla.org/xre/app-info;1']
41-
.getService(Ci.nsIXULAppInfo);
4241
let Svc = {};
4342
XPCOMUtils.defineLazyServiceGetter(Svc, 'mime',
4443
'@mozilla.org/mime;1',
4544
'nsIMIMEService');
4645

47-
let isInPrivateBrowsing;
48-
if (appInfo.ID === FIREFOX_ID) {
49-
let privateBrowsing = Cc['@mozilla.org/privatebrowsing;1']
50-
.getService(Ci.nsIPrivateBrowsingService);
51-
isInPrivateBrowsing = function getInPrivateBrowsing() {
52-
return privateBrowsing.privateBrowsingEnabled;
53-
};
54-
} else {
55-
isInPrivateBrowsing = function() { return false; };
56-
}
57-
5846
function getChromeWindow(domWindow) {
5947
var containingBrowser = domWindow.QueryInterface(Ci.nsIInterfaceRequestor)
6048
.getInterface(Ci.nsIWebNavigation)
@@ -219,6 +207,30 @@ function ChromeActions(domWindow, dataListener) {
219207
}
220208

221209
ChromeActions.prototype = {
210+
isInPrivateBrowsing: function() {
211+
let docIsPrivate;
212+
try {
213+
docIsPrivate = PrivateBrowsingUtils.isWindowPrivate(this.domWindow);
214+
} catch (x) {
215+
// unable to use PrivateBrowsingUtils, e.g. FF15
216+
}
217+
if (typeof docIsPrivate === 'undefined') {
218+
// per-window Private Browsing is not supported, trying global service
219+
try {
220+
let privateBrowsing = Cc['@mozilla.org/privatebrowsing;1']
221+
.getService(Ci.nsIPrivateBrowsingService);
222+
docIsPrivate = privateBrowsing.privateBrowsingEnabled;
223+
} catch (x) {
224+
// unable to get nsIPrivateBrowsingService (e.g. not Firefox)
225+
docIsPrivate = false;
226+
}
227+
}
228+
// caching the result
229+
this.isInPrivateBrowsing = function isInPrivateBrowsingCached() {
230+
return docIsPrivate;
231+
};
232+
return docIsPrivate;
233+
},
222234
download: function(data, sendResponse) {
223235
var originalUrl = data.originalUrl;
224236
// The data may not be downloaded so we need just retry getting the pdf with
@@ -231,16 +243,7 @@ ChromeActions.prototype = {
231243
var frontWindow = Cc['@mozilla.org/embedcomp/window-watcher;1'].
232244
getService(Ci.nsIWindowWatcher).activeWindow;
233245

234-
let docIsPrivate = false;
235-
try {
236-
docIsPrivate = this.domWindow
237-
.QueryInterface(Ci.nsIInterfaceRequestor)
238-
.getInterface(Ci.nsIWebNavigation)
239-
.QueryInterface(Ci.nsILoadContext)
240-
.usePrivateBrowsing;
241-
} catch (x) {
242-
}
243-
246+
let docIsPrivate = this.isInPrivateBrowsing();
244247
let netChannel = NetUtil.newChannel(blobUri);
245248
if ('nsIPrivateBrowsingChannel' in Ci &&
246249
netChannel instanceof Ci.nsIPrivateBrowsingChannel) {
@@ -289,15 +292,15 @@ ChromeActions.prototype = {
289292
});
290293
},
291294
setDatabase: function(data) {
292-
if (isInPrivateBrowsing())
295+
if (this.isInPrivateBrowsing())
293296
return;
294297
// Protect against something sending tons of data to setDatabase.
295298
if (data.length > MAX_DATABASE_LENGTH)
296299
return;
297300
setStringPref(PREF_PREFIX + '.database', data);
298301
},
299302
getDatabase: function() {
300-
if (isInPrivateBrowsing())
303+
if (this.isInPrivateBrowsing())
301304
return '{}';
302305
return getStringPref(PREF_PREFIX + '.database', '{}');
303306
},

0 commit comments

Comments
 (0)