home *** CD-ROM | disk | FTP | other *** search
/ Clickx 47 / Clickx 47.iso / assets / software / Miro_Installer.exe / xulrunner / python / xpcom / server / __init__.py next >
Encoding:
Python Source  |  2008-01-10  |  3.5 KB  |  89 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 Python XPCOM language bindings.
  15. #
  16. # The Initial Developer of the Original Code is
  17. # Activestate Tool Corp.
  18. # Portions created by the Initial Developer are Copyright (C) 2000
  19. # the Initial Developer. All Rights Reserved.
  20. #
  21. # Contributor(s):
  22. #    Mark Hammond <MarkH@ActiveState.com>
  23. #
  24. # Alternatively, the contents of this file may be used under the terms of
  25. # either the GNU General Public License Version 2 or later (the "GPL"), or
  26. # the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
  27. # in which case the provisions of the GPL or the LGPL are applicable instead
  28. # of those above. If you wish to allow use of your version of this file only
  29. # under the terms of either the GPL or the LGPL, and not to allow others to
  30. # use your version of this file under the terms of the MPL, indicate your
  31. # decision by deleting the provisions above and replace them with the notice
  32. # and other provisions required by the GPL or the LGPL. If you do not delete
  33. # the provisions above, a recipient may use your version of this file under
  34. # the terms of any one of the MPL, the GPL or the LGPL.
  35. #
  36. # ***** END LICENSE BLOCK *****
  37.  
  38. # The xpcom.server package.
  39.  
  40. from policy import DefaultPolicy
  41. from xpcom import _xpcom
  42.  
  43. # We define the concept of a single "tracer" object - similar to the single
  44. # Python "trace hook" for debugging.  Someone can set
  45. # xpcom.server.tracer to some class/function, and it will be used in place
  46. # of the real xpcom object.  Presumably this "trace" object will delegate
  47. # to the real object, but presumably also taking some other action, such
  48. # as calling a profiler or debugger.
  49. # tracer_unwrap is a function used to "unwrap" the tracer object.
  50. # If is expected that tracer_unwrap will be called with an object
  51. # previously returned by "tracer()".
  52. tracer = tracer_unwrap = None
  53.  
  54. # Wrap an instance in an interface (via a policy)
  55. def WrapObject(ob, iid, policy = None, bWrapClient = 1):
  56.     """Called by the framework to attempt to wrap
  57.     an object in a policy.
  58.     If iid is None, it will use the first interface the object indicates it supports.
  59.     """
  60.     if policy is None:
  61.         policy = DefaultPolicy
  62.     if tracer is not None:
  63.         ob = tracer(ob)
  64.     return _xpcom.WrapObject(policy( ob, iid ), iid, bWrapClient)
  65.  
  66. # Unwrap a Python object back into the Python object
  67. def UnwrapObject(ob):
  68.     if ob is None:
  69.         return None
  70.     ret = _xpcom.UnwrapObject(ob)._obj_
  71.     if tracer_unwrap is not None:
  72.         ret = tracer_unwrap(ret)
  73.     return ret
  74.  
  75. # Create the main module for the Python loader.
  76. # This is a once only init process, and the returned object
  77. # if used to load all other Python components.
  78.  
  79. # This means that we keep all factories, modules etc implemented in
  80. # Python!
  81. def NS_GetModule( serviceManager, nsIFile ):
  82.     import loader
  83.     iid = _xpcom.IID_nsIModule
  84.     return WrapObject(loader.MakePythonComponentLoaderModule(serviceManager, nsIFile), iid, bWrapClient = 0)
  85.  
  86. def _shutdown():
  87.     from policy import _shutdown
  88.     _shutdown()
  89.