void refresh(bool reload);
- struct MimeClassInfo;
- struct PluginInfo;
-
- struct MimeClassInfo {
- QString type;
- QString desc;
- QString suffixes;
- PluginInfo *plugin;
- };
-
- struct PluginInfo {
- QString name;
- QString file;
- QString desc;
- QPtrList<MimeClassInfo> mimes;
- };
-
- static QPtrList<PluginInfo> *plugins;
- static QPtrList<MimeClassInfo> *mimes;
+ static Vector<PluginInfo*> *plugins;
+ static Vector<MimeClassInfo*> *mimes;
private:
static int m_refCount;
const ClassInfo Plugin::info = { "Plugin", 0, &PluginTable, 0 };
const ClassInfo MimeType::info = { "MimeType", 0, &MimeTypeTable, 0 };
-QPtrList<PluginBase::PluginInfo> *KJS::PluginBase::plugins = 0;
-QPtrList<PluginBase::MimeClassInfo> *KJS::PluginBase::mimes = 0;
+Vector<PluginInfo*> *KJS::PluginBase::plugins = 0;
+Vector<MimeClassInfo*> *KJS::PluginBase::mimes = 0;
int KJS::PluginBase::m_refCount = 0;
const ClassInfo Navigator::info = { "Navigator", 0, &NavigatorTable, 0 };
PluginBase::PluginBase(ExecState *exec)
: JSObject(exec->lexicalInterpreter()->builtinObjectPrototype() )
{
- if ( !plugins ) {
- plugins = new QPtrList<PluginInfo>;
- mimes = new QPtrList<MimeClassInfo>;
- plugins->setAutoDelete( true );
- mimes->setAutoDelete( true );
-
+ if (!plugins) {
+ plugins = new Vector<PluginInfo*>;
+ mimes = new Vector<MimeClassInfo*>;
+
// read configuration
- KConfig c("pluginsinfo");
- unsigned num = (unsigned int)c.readNumEntry("number");
- for ( unsigned n=0; n<num; n++ ) {
-
- c.setGroup( QString::number(n) );
- PluginInfo *plugin = new PluginInfo;
-
- plugin->name = c.readEntry("name");
- plugin->file = c.readEntry("file");
- plugin->desc = c.readEntry("description");
-
- //kdDebug(6070) << "plugin : " << plugin->name << " - " << plugin->desc << endl;
-
- plugins->append( plugin );
-
- // get mime types from string
- QStringList types = QStringList::split( ';', c.readEntry("mime") );
- QStringList::Iterator type;
- for ( type=types.begin(); type!=types.end(); ++type ) {
-
- // get mime information
- MimeClassInfo *mime = new MimeClassInfo;
- QStringList tokens = QStringList::split(':', *type, true);
- QStringList::Iterator token;
-
- token = tokens.begin();
- if (token == tokens.end()) {
- delete mime;
- continue;
- }
- mime->type = (*token).lower();
- //kdDebug(6070) << "mime->type=" << mime->type << endl;
- ++token;
-
- if (token == tokens.end()) {
- delete mime;
- continue;
- }
- mime->suffixes = *token;
- ++token;
-
- if (token == tokens.end()) {
- delete mime;
- continue;
- }
- mime->desc = *token;
- ++token;
-
- mime->plugin = plugin;
-
- mimes->append( mime );
- plugin->mimes.append( mime );
- }
+ PluginInfoStore c;
+ unsigned pluginCount = c.pluginCount();
+ for (unsigned n = 0; n < pluginCount; n++) {
+ PluginInfo* plugin = c.createPluginInfoForPluginAtIndex(n);
+ if (!plugin)
+ continue;
+
+ plugins->append(plugin);
+ if (!plugin->mimes)
+ continue;
+
+ Vector<MimeClassInfo*>::iterator end = plugin->mimes.end();
+ for (Vector<MimeClassInfo*>::iterator itr = plugin->mimes.begin(); itr != end; itr++)
+ mimes->append(*itr);
}
}
{
m_refCount--;
if ( m_refCount==0 ) {
+ deleteAllValues(*plugins);
delete plugins;
+ deleteAllValues(*mimes);
delete mimes;
plugins = 0;
mimes = 0;
void PluginBase::refresh(bool reload)
{
+ deleteAllValues(*plugins);
delete plugins;
+ deleteAllValues(*mimes);
delete mimes;
plugins = 0;
mimes = 0;
- RefreshPlugins(reload);
+ refreshPlugins(reload);
}
JSValue *Plugins::getValueProperty(ExecState *exec, int token) const
{
assert(token == Length);
- return jsNumber(plugins->count());
+ return jsNumber(plugins->size());
}
JSValue *Plugins::indexGetter(ExecState *exec, JSObject *originalObject, const Identifier& propertyName, const PropertySlot& slot)
JSValue *Plugins::nameGetter(ExecState *exec, JSObject *originalObject, const Identifier& propertyName, const PropertySlot& slot)
{
- for (PluginInfo *pl = plugins->first(); pl; pl = plugins->next()) {
- if (pl->name == propertyName.qstring()) {
- return new Plugin(exec, pl);
+ Vector<PluginInfo*>::iterator end = plugins->end();
+ for (Vector<PluginInfo*>::iterator itr = plugins->begin(); itr != end; itr++) {
+ PluginInfo *pl = *itr;
+ if (pl->name == propertyName.domString())
+ return new Plugin(exec, pl);
}
- }
- return jsUndefined();
+ return jsUndefined();
}
bool Plugins::getOwnPropertySlot(ExecState *exec, const Identifier& propertyName, PropertySlot& slot)
// plugins[#]
bool ok;
unsigned int i = propertyName.toUInt32(&ok);
- if (ok && i < plugins->count()) {
+ if (ok && i < plugins->size()) {
slot.setCustomIndex(this, i, indexGetter);
return true;
}
// plugin[name]
- for (PluginInfo *pl = plugins->first(); pl; pl = plugins->next()) {
- if (pl->name == propertyName.qstring()) {
+ Vector<PluginInfo*>::iterator end = plugins->end();
+ for (Vector<PluginInfo*>::iterator itr = plugins->begin(); itr != end; itr++) {
+ if ((*itr)->name == propertyName.domString()) {
slot.setCustom(this, nameGetter);
return true;
}
JSValue *MimeTypes::getValueProperty(ExecState *exec, int token) const
{
assert(token == Length);
- return jsNumber(plugins->count());
+ return jsNumber(plugins->size());
}
JSValue *MimeTypes::indexGetter(ExecState *exec, JSObject *originalObject, const Identifier& propertyName, const PropertySlot& slot)
JSValue *MimeTypes::nameGetter(ExecState *exec, JSObject *originalObject, const Identifier& propertyName, const PropertySlot& slot)
{
- for (MimeClassInfo *m = mimes->first(); m; m = mimes->next()) {
- if (m->type == propertyName.qstring())
- return new MimeType(exec, m);
- }
- return jsUndefined();
+ Vector<MimeClassInfo*>::iterator end = mimes->end();
+ for (Vector<MimeClassInfo*>::iterator itr = mimes->begin(); itr != end; itr++) {
+ MimeClassInfo *m = (*itr);
+ if (m->type == propertyName.domString())
+ return new MimeType(exec, m);
+ }
+ return jsUndefined();
}
bool MimeTypes::getOwnPropertySlot(ExecState *exec, const Identifier& propertyName, PropertySlot& slot)
// mimeTypes[#]
bool ok;
unsigned int i = propertyName.toUInt32(&ok);
- if (ok && i < mimes->count()) {
+ if (ok && i < mimes->size()) {
slot.setCustomIndex(this, i, indexGetter);
return true;
}
// mimeTypes[name]
- for (MimeClassInfo *m = mimes->first(); m; m = mimes->next()) {
- if (m->type == propertyName.qstring()) {
+ Vector<MimeClassInfo*>::iterator end = mimes->end();
+ for (Vector<MimeClassInfo*>::iterator itr = mimes->begin(); itr != end; itr++) {
+ if ((*itr)->type == propertyName.domString()) {
slot.setCustom(this, nameGetter);
return true;
}
case Description:
return jsString(m_info->desc);
case Length:
- return jsNumber(m_info->mimes.count());
+ return jsNumber(m_info->mimes.size());
default:
assert(0);
return jsUndefined();
JSValue *Plugin::nameGetter(ExecState *exec, JSObject *originalObject, const Identifier& propertyName, const PropertySlot& slot)
{
Plugin *thisObj = static_cast<Plugin *>(slot.slotBase());
- for (MimeClassInfo *m = thisObj->m_info->mimes.first(); m; m = thisObj->m_info->mimes.next()) {
- if (m->type == propertyName.qstring())
+ Vector<MimeClassInfo*>::iterator end = thisObj->m_info->mimes.end();
+ for (Vector<MimeClassInfo*>::iterator itr = thisObj->m_info->mimes.begin(); itr != end; itr++) {
+ MimeClassInfo *m = (*itr);
+ if (m->type == propertyName.domString())
return new MimeType(exec, m);
}
return jsUndefined();
// plugin[#]
bool ok;
unsigned int i = propertyName.toUInt32(&ok);
- if (ok && i < m_info->mimes.count()) {
+ if (ok && i < m_info->mimes.size()) {
slot.setCustomIndex(this, i, indexGetter);
return true;
}
// plugin["name"]
- for (MimeClassInfo *m=m_info->mimes.first(); m; m = m_info->mimes.next()) {
- if (m->type == propertyName.qstring()) {
+ Vector<MimeClassInfo*>::iterator end = m_info->mimes.end();
+ for (Vector<MimeClassInfo*>::iterator itr = m_info->mimes.begin(); itr != end; itr++) {
+ if ((*itr)->type == propertyName.domString()) {
slot.setCustom(this, nameGetter);
return true;
}
#include "config.h"
#import "KWQKConfigBase.h"
-#import "Color.h"
#import "KWQExceptions.h"
-#import "KWQKHTMLSettings.h"
#import "KWQLogging.h"
-#import "QStringList.h"
-#import "WebCoreSettings.h"
#import "WebCoreViewFactory.h"
-class KWQKConfigImpl
-{
-public:
- bool isPluginInfo;
- bool isKonquerorRC;
- int pluginIndex;
-};
+namespace WebCore {
-KConfig::KConfig(const QString &n, bool bReadOnly, bool bUseKDEGlobals)
+PluginInfo *PluginInfoStore::createPluginInfoForPluginAtIndex(unsigned index)
{
- impl = new KWQKConfigImpl;
- impl->isPluginInfo = n.contains("pluginsinfo");
- impl->isKonquerorRC = (n == "konquerorrc");
- impl->pluginIndex = 0;
-}
-
-KConfig::~KConfig()
-{
- delete impl;
-}
-
-void KConfig::setGroup(const QString &pGroup)
-{
- if (impl->isPluginInfo) {
- impl->pluginIndex = pGroup.toUInt();
- }
-}
-
-QString KConfig::readEntry(const char *pKey, const QString& aDefault) const
-{
- if (impl->isPluginInfo) {
- KWQ_BLOCK_EXCEPTIONS;
-
- NSString *result = nil;
-
- id <WebCorePluginInfo> plugin = [[[WebCoreViewFactory sharedFactory] pluginsInfo] objectAtIndex:impl->pluginIndex];
- if (strcmp(pKey, "name") == 0) {
- result = [plugin name];
- } else if (strcmp(pKey, "file") == 0) {
- result = [plugin filename];
- } else if (strcmp(pKey, "description") == 0) {
- result = [plugin pluginDescription];
- } else if (strcmp(pKey, "mime") == 0) {
- NSEnumerator *MIMETypeEnumerator = [plugin MIMETypeEnumerator], *extensionEnumerator;
- NSMutableString *MIMEString = [NSMutableString string];
- NSString *MIME, *extension;
- NSArray *extensions;
-
- while ((MIME = [MIMETypeEnumerator nextObject]) != nil) {
- [MIMEString appendFormat:@"%@:", MIME];
-
- extensions = [plugin extensionsForMIMEType:MIME];
- extensionEnumerator = [extensions objectEnumerator];
-
- while ((extension = [extensionEnumerator nextObject]) != nil) {
- [MIMEString appendFormat:@"%@,", extension];
- }
- // Delete the last ",".
- NSRange tempRange = { [MIMEString length]-1, 1 }; // workaround for 4213314
- [MIMEString deleteCharactersInRange:tempRange];
- [MIMEString appendFormat:@":%@;", [plugin descriptionForMIMEType:MIME]];
- }
-
- result = MIMEString;
- }
-
- return QString::fromNSString(result);
-
- KWQ_UNBLOCK_EXCEPTIONS;
+ PluginInfo *pluginInfo = new PluginInfo;
+
+ KWQ_BLOCK_EXCEPTIONS;
- return QString();
+ id <WebCorePluginInfo> plugin = [[[WebCoreViewFactory sharedFactory] pluginsInfo] objectAtIndex:index];
+
+ pluginInfo->name = [plugin name];
+ pluginInfo->file = [plugin filename];
+ pluginInfo->desc = [plugin pluginDescription];
+
+ NSEnumerator *MIMETypeEnumerator = [plugin MIMETypeEnumerator];
+ while (NSString *MIME = [MIMETypeEnumerator nextObject]) {
+ MimeClassInfo *mime = new MimeClassInfo;
+ pluginInfo->mimes.append(mime);
+ mime->type = String(MIME).lower();
+ mime->suffixes = [[plugin extensionsForMIMEType:MIME] componentsJoinedByString:@","];
+ mime->desc = [plugin descriptionForMIMEType:MIME];
+ mime->plugin = pluginInfo;
}
- LOG_ERROR("config %s not implemented", pKey);
- return QString();
-}
+ return pluginInfo;
-int KConfig::readNumEntry(const char *pKey, int nDefault) const
-{
- if (impl->isPluginInfo && strcmp(pKey, "number") == 0) {
- KWQ_BLOCK_EXCEPTIONS;
- return [[[WebCoreViewFactory sharedFactory] pluginsInfo] count];
- KWQ_UNBLOCK_EXCEPTIONS;
-
- return 0;
- }
- LOG_ERROR("config %s not implemented", pKey);
- return nDefault;
-}
+ KWQ_UNBLOCK_EXCEPTIONS;
+
+ if (pluginInfo && pluginInfo->mimes)
+ deleteAllValues(pluginInfo->mimes);
+ delete pluginInfo;
-unsigned KConfig::readUnsignedNumEntry(const KHTMLSettings *settings, const char *pKey, unsigned nDefault) const
-{
- if (impl->isKonquerorRC && strcmp(pKey, "WindowOpenPolicy") == 0) {
- if (settings->JavaScriptCanOpenWindowsAutomatically()) {
- return 0;
- } else {
- return 3;
- }
- }
- LOG_ERROR("config %s not implemented", pKey);
- return nDefault;
+ return 0;
}
-Color KConfig::readColorEntry(const char *pKey, const Color *pDefault) const
+unsigned PluginInfoStore::pluginCount() const
{
- return pDefault ? *pDefault : Color(0, 0, 0);
+ KWQ_BLOCK_EXCEPTIONS;
+ return [[[WebCoreViewFactory sharedFactory] pluginsInfo] count];
+ KWQ_UNBLOCK_EXCEPTIONS;
+
+ return 0;
}
-void RefreshPlugins(bool reload)
+void refreshPlugins(bool reload)
{
KWQ_BLOCK_EXCEPTIONS;
[[WebCoreViewFactory sharedFactory] refreshPlugins:reload];
KWQ_UNBLOCK_EXCEPTIONS;
}
+}
+