home *** CD-ROM | disk | FTP | other *** search
/ PC World 2007 December / PCWorld_2007-12_cd.bin / audio-video / songbird / Songbird_0.3_windows-i686.exe / xulrunner / components / nsWebHandlerApp.js < prev    next >
Text File  |  2007-10-05  |  5KB  |  147 lines

  1. /* ***** BEGIN LICENSE BLOCK *****
  2.  * Version: MPL 1.1/GPL 2.0/LGPL 2.1
  3.  *
  4.  * The contents of this file are subject to the Mozilla Public License Version
  5.  * 1.1 (the "License"); you may not use this file except in compliance with
  6.  * the License. You may obtain a copy of the License at
  7.  * http://www.mozilla.org/MPL/
  8.  *
  9.  * Software distributed under the License is distributed on an "AS IS" basis,
  10.  * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
  11.  * for the specific language governing rights and limitations under the
  12.  * License.
  13.  *
  14.  * The Original Code is the Mozilla browser.
  15.  *
  16.  * The Initial Developer of the Original Code is
  17.  * Mozilla Corporation.
  18.  * Portions created by the Initial Developer are Copyright (C) 2007
  19.  * the Initial Developer. All Rights Reserved.
  20.  *
  21.  * Contributor(s):
  22.  *   Shawn Wilsher <me@shawnwilsher.com>
  23.  *   Myk Melez <myk@mozilla.org>
  24.  *   Dan Mosedale <dmose@mozilla.org>
  25.  *
  26.  * Alternatively, the contents of this file may be used under the terms of
  27.  * either the GNU General Public License Version 2 or later (the "GPL"), or
  28.  * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
  29.  * in which case the provisions of the GPL or the LGPL are applicable instead
  30.  * of those above. If you wish to allow use of your version of this file only
  31.  * under the terms of either the GPL or the LGPL, and not to allow others to
  32.  * use your version of this file under the terms of the MPL, indicate your
  33.  * decision by deleting the provisions above and replace them with the notice
  34.  * and other provisions required by the GPL or the LGPL. If you do not delete
  35.  * the provisions above, a recipient may use your version of this file under
  36.  * the terms of any one of the MPL, the GPL or the LGPL.
  37.  *
  38.  * ***** END LICENSE BLOCK ***** */
  39.  
  40. Components.utils.import("resource://gre/modules/XPCOMUtils.jsm");
  41.  
  42. ////////////////////////////////////////////////////////////////////////////////
  43. //// Constants
  44.  
  45. const Ci = Components.interfaces;
  46. const Cr = Components.results;
  47.  
  48. ////////////////////////////////////////////////////////////////////////////////
  49. //// nsWebHandler class
  50.  
  51. function nsWebHandlerApp() {}
  52.  
  53. nsWebHandlerApp.prototype = {
  54.   //////////////////////////////////////////////////////////////////////////////
  55.   //// nsWebHandler
  56.  
  57.   classDescription: "A web handler for protocols and content",
  58.   classID: Components.ID("8b1ae382-51a9-4972-b930-56977a57919d"),
  59.   contractID: "@mozilla.org/uriloader/web-handler-app;1",
  60.  
  61.   _name: null,
  62.   _uriTemplate: null,
  63.  
  64.   //////////////////////////////////////////////////////////////////////////////
  65.   //// nsIHandlerApp
  66.  
  67.   get name() {
  68.     return this._name;
  69.   },
  70.  
  71.   set name(aName) {
  72.     this._name = aName;
  73.   },
  74.  
  75.   equals: function(aHandlerApp) {
  76.     if (!aHandlerApp)
  77.       throw Cr.NS_ERROR_NULL_POINTER;
  78.  
  79.     if (aHandlerApp instanceof Ci.nsIWebHandlerApp &&
  80.         aHandlerApp.uriTemplate &&
  81.         this.uriTemplate &&
  82.         aHandlerApp.uriTemplate == this.uriTemplate)
  83.       return true;
  84.  
  85.     return false;
  86.   },
  87.  
  88.   launchWithURI: function nWHA__launchWithURI(aURI, aWindowContext) {
  89.  
  90.     // XXX need to strip passwd & username from URI to handle, as per the
  91.     // WhatWG HTML5 draft.  nsSimpleURL, which is what we're going to get,
  92.     // can't do this directly.  Ideally, we'd fix nsStandardURL to make it
  93.     // possible to turn off all of its quirks handling, and use that...
  94.  
  95.     // encode the URI to be handled
  96.     var escapedUriSpecToHandle = encodeURIComponent(aURI.spec);
  97.  
  98.     // insert the encoded URI 
  99.     var uriToSend = this.uriTemplate.replace("%s", escapedUriSpecToHandle);
  100.  
  101.     // create a channel from this URI
  102.     var ioService = Components.classes["@mozilla.org/network/io-service;1"].
  103.                     getService(Components.interfaces.nsIIOService);
  104.     var channel = ioService.newChannel(uriToSend, null, null);
  105.     channel.loadFlags = Components.interfaces.nsIChannel.LOAD_DOCUMENT_URI;
  106.  
  107.     // load the channel
  108.     var uriLoader = Components.classes["@mozilla.org/uriloader;1"].
  109.                     getService(Components.interfaces.nsIURILoader);
  110.     // XXX ideally, aIsContentPreferred (the second param) should really be
  111.     // passed in from above.  Practically, true is probably a reasonable
  112.     // default since browsers don't care much, and link click is likely to be
  113.     // the more interesting case for non-browser apps.  See 
  114.     // <https://bugzilla.mozilla.org/show_bug.cgi?id=392957#c9> for details.
  115.     uriLoader.openURI(channel, true, aWindowContext);
  116.  
  117.     return;
  118.   },
  119.  
  120.   //////////////////////////////////////////////////////////////////////////////
  121.   //// nsIWebHandlerApp
  122.  
  123.   get uriTemplate() {
  124.     return this._uriTemplate;
  125.   },
  126.  
  127.   set uriTemplate(aURITemplate) {
  128.     this._uriTemplate = aURITemplate;
  129.   },
  130.  
  131.   //////////////////////////////////////////////////////////////////////////////
  132.   //// nsISupports
  133.  
  134.   QueryInterface: XPCOMUtils.generateQI([Ci.nsIWebHandlerApp, Ci.nsIHandlerApp])
  135. };
  136.  
  137. ////////////////////////////////////////////////////////////////////////////////
  138. //// Module
  139.  
  140. let components = [nsWebHandlerApp];
  141.  
  142. function NSGetModule(compMgr, fileSpec)
  143. {
  144.   return XPCOMUtils.generateModule(components);
  145. }
  146.  
  147.