blob: 4ce8da3585312875dd18a731fa60d0261e9f00bd [file] [log] [blame]
aroben@apple.com90f955d2010-08-04 19:09:39 +00001/*
2 * Copyright (C) 2010 Apple Inc. All rights reserved.
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
6 * are met:
7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 *
13 * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
14 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
15 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
17 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
18 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
19 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
20 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
21 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
22 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
23 * THE POSSIBILITY OF SUCH DAMAGE.
24 */
25
26#ifndef Module_h
27#define Module_h
28
aroben@apple.com90f955d2010-08-04 19:09:39 +000029#include <wtf/Noncopyable.h>
weinig@apple.com7bf96832010-08-16 23:00:34 +000030#include <wtf/text/WTFString.h>
aroben@apple.com90f955d2010-08-04 19:09:39 +000031
32#if PLATFORM(MAC)
33#include <wtf/RetainPtr.h>
34#endif
35
commit-queue@webkit.orgabc07db2010-08-25 09:28:50 +000036#if PLATFORM(QT)
37#include <QLibrary>
38#endif
39
alex@webkit.orgac2829a2011-02-09 17:52:04 +000040#if PLATFORM(GTK)
41typedef struct _GModule GModule;
42#endif
43
commit-queue@webkit.orgfb2066e2012-02-07 11:45:29 +000044#if PLATFORM(EFL)
45#include <Eina.h>
46#endif
47
aroben@apple.com90f955d2010-08-04 19:09:39 +000048namespace WebKit {
49
ossy@webkit.org95c1bc42011-01-20 16:30:54 +000050class Module {
51 WTF_MAKE_NONCOPYABLE(Module);
aroben@apple.com90f955d2010-08-04 19:09:39 +000052public:
weinig@apple.comc3c27e82010-09-18 05:34:21 +000053 Module(const String& path);
aroben@apple.com90f955d2010-08-04 19:09:39 +000054 ~Module();
55
56 bool load();
57 // Note: On Mac this leaks the CFBundle to avoid crashes when a bundle is unloaded and there are
58 // live Objective-C objects whose methods come from that bundle.
59 void unload();
60
ap@apple.com488ad372012-03-20 23:30:39 +000061#if PLATFORM(MAC)
62 String bundleIdentifier() const;
63#endif
64
aroben@apple.com90f955d2010-08-04 19:09:39 +000065 template<typename FunctionType> FunctionType functionPointer(const char* functionName) const;
66
andersca@apple.com377f23e2011-03-21 23:11:21 +000067#if PLATFORM(MAC) && !defined(__LP64__)
68 CFBundleRefNum bundleResourceMap();
69#endif
70
aroben@apple.comce66a822011-04-22 16:48:35 +000071#if PLATFORM(WIN)
72 void installIATHook(const char* importDLLName, const char* importFunctionName, const void* hookFunction);
73#endif
74
aroben@apple.com90f955d2010-08-04 19:09:39 +000075private:
76 void* platformFunctionPointer(const char* functionName) const;
77
weinig@apple.comc3c27e82010-09-18 05:34:21 +000078 String m_path;
aroben@apple.com90f955d2010-08-04 19:09:39 +000079#if PLATFORM(MAC)
80 RetainPtr<CFBundleRef> m_bundle;
andersca@apple.com377f23e2011-03-21 23:11:21 +000081#if !defined(__LP64__)
82 CFBundleRefNum m_bundleResourceMap;
83#endif
aroben@apple.com8e98a392010-08-05 14:02:15 +000084#elif PLATFORM(WIN)
85 HMODULE m_module;
commit-queue@webkit.orgabc07db2010-08-25 09:28:50 +000086#elif PLATFORM(QT)
87 QLibrary m_lib;
alex@webkit.orgac2829a2011-02-09 17:52:04 +000088#elif PLATFORM(GTK)
89 GModule* m_handle;
commit-queue@webkit.orgfb2066e2012-02-07 11:45:29 +000090#elif PLATFORM(EFL)
91 OwnPtr<Eina_Module> m_module;
aroben@apple.com90f955d2010-08-04 19:09:39 +000092#endif
93};
94
95template<typename FunctionType> FunctionType Module::functionPointer(const char* functionName) const
96{
97 return reinterpret_cast<FunctionType>(platformFunctionPointer(functionName));
98}
99
100}
101
102#endif