18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/* 28e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Copyright (C) 2006, 2007 Apple Inc. All rights reserved. 38e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Copyright (C) 2008 Collabora, Ltd. All rights reserved. 48e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 58e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Redistribution and use in source and binary forms, with or without 68e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * modification, are permitted provided that the following conditions 78e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * are met: 88e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 1. Redistributions of source code must retain the above copyright 98e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * notice, this list of conditions and the following disclaimer. 108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 2. Redistributions in binary form must reproduce the above copyright 118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * notice, this list of conditions and the following disclaimer in the 128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * documentation and/or other materials provided with the distribution. 138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY 158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR 188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 240bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2706ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen#ifndef PluginPackage_h 2806ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen#define PluginPackage_h 298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "FileSystem.h" 318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "PlatformString.h" 328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "PluginQuirkSet.h" 338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "Timer.h" 348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "npruntime_internal.h" 358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include <wtf/HashMap.h> 368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include <wtf/RefCounted.h> 37f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick#include <wtf/text/StringHash.h> 388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 39d0825bca7fe65beaee391d30da42e937db621564Steve Block#if OS(SYMBIAN) 40cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Blockclass QPluginLoader; 41cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Blockclass NPInterface; 42cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block#endif 43cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectnamespace WebCore { 458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project typedef HashMap<String, String> MIMEToDescriptionsMap; 468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project typedef HashMap<String, Vector<String> > MIMEToExtensionsMap; 478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project class PluginPackage : public RefCounted<PluginPackage> { 498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project public: 508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ~PluginPackage(); 518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project static PassRefPtr<PluginPackage> createPackage(const String& path, const time_t& lastModified); 525ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen#if ENABLE(NETSCAPE_PLUGIN_METADATA_CACHE) 535ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen static PassRefPtr<PluginPackage> createPackageFromCache(const String& path, const time_t& lastModified, const String& name, const String& description, const String& mimeDescription); 545ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen#endif 550bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project const String& name() const { return m_name; } 578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project const String& description() const { return m_description; } 588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project const String& path() const { return m_path; } 598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project const String& fileName() const { return m_fileName; } 608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project const String& parentDirectory() const { return m_parentDirectory; } 6121939df44de1705786c545cd1bf519d47250322dBen Murdoch uint16_t NPVersion() const; 628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project time_t lastModified() const { return m_lastModified; } 638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project const MIMEToDescriptionsMap& mimeToDescriptions() const { return m_mimeToDescriptions; } 658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project const MIMEToExtensionsMap& mimeToExtensions() const { return m_mimeToExtensions; } 668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project unsigned hash() const; 688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project static bool equal(const PluginPackage& a, const PluginPackage& b); 698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool load(); 718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void unload(); 728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void unloadWithoutShutdown(); 738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 740bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch bool isEnabled() const { return m_isEnabled; } 750bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch void setEnabled(bool); 760bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project const NPPluginFuncs* pluginFuncs() const { return &m_pluginFuncs; } 788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project int compareFileVersion(const PlatformModuleVersion&) const; 798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project int compare(const PluginPackage&) const; 808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project PluginQuirkSet quirks() const { return m_quirks; } 818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project const PlatformModuleVersion& version() const { return m_moduleVersion; } 82d0825bca7fe65beaee391d30da42e937db621564Steve Block#if OS(SYMBIAN) 83cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block NPInterface* npInterface() const { return m_npInterface; } 84d0825bca7fe65beaee391d30da42e937db621564Steve Block#endif // OS(SYMBIAN) 858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 865ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen#if ENABLE(NETSCAPE_PLUGIN_METADATA_CACHE) 875ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen bool ensurePluginLoaded(); 885ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen void setMIMEDescription(const String& mimeDescription); 895ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen String fullMIMEDescription() const { return m_fullMIMEDescription;} 905ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen#endif 918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project private: 928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project PluginPackage(const String& path, const time_t& lastModified); 93cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 94d0825bca7fe65beaee391d30da42e937db621564Steve Block#if OS(SYMBIAN) 95cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block NPInterface* m_npInterface; 96cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block QPluginLoader* m_pluginLoader; 97d0825bca7fe65beaee391d30da42e937db621564Steve Block#endif // OS(SYMBIAN) 988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool fetchInfo(); 998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool isPluginBlacklisted(); 1008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void determineQuirks(const String& mimeType); 1018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 102635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project void determineModuleVersionFromDescription(); 1035f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian void initializeBrowserFuncs(); 104635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 1050bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch bool m_isEnabled; 1068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool m_isLoaded; 1078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project int m_loadCount; 1088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project String m_description; 1108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project String m_path; 1118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project String m_fileName; 1128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project String m_name; 1138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project String m_parentDirectory; 1148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project PlatformModuleVersion m_moduleVersion; 1168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project MIMEToDescriptionsMap m_mimeToDescriptions; 1188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project MIMEToExtensionsMap m_mimeToExtensions; 1198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project PlatformModule m_module; 1218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project time_t m_lastModified; 1228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NPP_ShutdownProcPtr m_NPP_Shutdown; 1248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NPPluginFuncs m_pluginFuncs; 1258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NPNetscapeFuncs m_browserFuncs; 1268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void freeLibrarySoon(); 1288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void freeLibraryTimerFired(Timer<PluginPackage>*); 1298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Timer<PluginPackage> m_freeLibraryTimer; 1308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project PluginQuirkSet m_quirks; 1325ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen#if ENABLE(NETSCAPE_PLUGIN_METADATA_CACHE) 1335ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen String m_fullMIMEDescription; 1345ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen bool m_infoIsFromCache; 1355ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen#endif 1368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project }; 1378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project struct PluginPackageHash { 1398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project static unsigned hash(const uintptr_t key) { return reinterpret_cast<PluginPackage*>(key)->hash(); } 1408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project static unsigned hash(const RefPtr<PluginPackage>& key) { return key->hash(); } 1418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project static bool equal(const uintptr_t a, const uintptr_t b) { return equal(reinterpret_cast<PluginPackage*>(a), reinterpret_cast<PluginPackage*>(b)); } 1438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project static bool equal(const RefPtr<PluginPackage>& a, const RefPtr<PluginPackage>& b) { return PluginPackage::equal(*a.get(), *b.get()); } 1448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project static const bool safeToCompareToEmptyOrDeleted = false; 1458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project }; 1468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} // namespace WebCore 1488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 150