]> git.evergreen-ils.org Git - working/Evergreen.git/blob - Open-ILS/xul/staff_client/components/forceexternal.js
Improve Firefox/XULRunner Support
[working/Evergreen.git] / Open-ILS / xul / staff_client / components / forceexternal.js
1 Components.utils.import("resource://gre/modules/XPCOMUtils.jsm");
2
3 // This content policy component tries to prevent outside sites from getting xulG hooks
4 // It does so by forcing them to open outside of Evergreen
5
6 function oilsForceExternal() {}
7 oilsForceExternal.prototype = {
8     classDescription: "OpenILS Force External",
9     classID:          Components.ID("{D969ED61-DF4C-FA12-A2A6-70AA94C222FB}"),
10     contractID:       "@mozilla.org/content-policy;1?type=egfe",
11     _xpcom_categories: [{
12         category: "content-policy",
13         entry: "m-egfe"
14     }],
15     QueryInterface:   XPCOMUtils.generateQI([Components.interfaces.nsIContentPolicy]),
16     shouldLoad: function(contentType, contentLocation, requestOrigin, node, mimeTypeGuess, extra)
17     {
18         if ((contentType == Components.interfaces.nsIContentPolicy.TYPE_DOCUMENT || contentType == Components.interfaces.nsIContentPolicy.TYPE_SUBDOCUMENT)
19           && (contentLocation.scheme == 'http' || contentLocation.scheme == 'https')
20           && node && node.getAttribute('oils_force_external') == 'true') {
21             var data_cache = Components.classes["@open-ils.org/openils_data_cache;1"].getService().wrappedJSObject.data;
22             var host = data_cache.server_unadorned;
23             if(host && contentLocation.host != host) {
24                 // first construct an nsIURI object using the ioservice
25                 var ioservice = Components.classes["@mozilla.org/network/io-service;1"]
26                                 .getService(Components.interfaces.nsIIOService);
27
28                 var uriToOpen = ioservice.newURI(contentLocation.spec, null, null);
29
30                 var extps = Components.classes["@mozilla.org/uriloader/external-protocol-service;1"]
31                             .getService(Components.interfaces.nsIExternalProtocolService);
32
33                 // now, open it!
34                 extps.loadURI(uriToOpen, null);
35
36                 return Components.interfaces.nsIContentPolicy.REJECT_REQUEST;
37             }
38         }
39         return Components.interfaces.nsIContentPolicy.ACCEPT;
40     },
41
42     shouldProcess: function(contentType, contentLocation, requestOrigin, insecNode, mimeType, extra)
43     {
44         return Components.interfaces.nsIContentPolicy.ACCEPT;
45     },
46 };
47
48 if (XPCOMUtils.generateNSGetFactory)
49     var NSGetFactory = XPCOMUtils.generateNSGetFactory([oilsForceExternal]);
50 else
51     var NSGetModule = XPCOMUtils.generateNSGetModule([oilsForceExternal]);
52