1/* 2 * Copyright (C) 2010, 2011 Nokia Inc. All rights reserved. 3 * Copyright (C) 2011 University of Szeged. All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright 9 * notice, this list of conditions and the following disclaimer. 10 * 2. Redistributions in binary form must reproduce the above copyright 11 * notice, this list of conditions and the following disclaimer in the 12 * documentation and/or other materials provided with the distribution. 13 * 14 * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' 15 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 16 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 17 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS 18 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 19 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 20 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 21 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 22 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 23 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF 24 * THE POSSIBILITY OF SUCH DAMAGE. 25 */ 26 27#include "config.h" 28 29#if ENABLE(PLUGIN_PROCESS) 30 31#include "NetscapePluginModule.h" 32#include "PluginProcess.h" 33#include "WebKit2Initialize.h" 34#include <QDebug> 35#include <QGuiApplication> 36#include <QStringList> 37#include <QtGlobal> 38#include <WebCore/RunLoop.h> 39 40using namespace WebCore; 41 42namespace WebKit { 43 44static void messageHandler(QtMsgType type, const QMessageLogContext&, const QString& message) 45{ 46 if (type == QtCriticalMsg) { 47 fprintf(stderr, "%s\n", qPrintable(message)); 48 return; 49 } 50 51 // Do nothing 52} 53 54static bool initializeGtk() 55{ 56 QLibrary gtkLibrary(QLatin1String("libgtk-x11-2.0"), 0); 57 if (!gtkLibrary.load()) 58 return false; 59 typedef void* (*gtk_init_ptr)(void*, void*); 60 gtk_init_ptr gtkInit = reinterpret_cast<gtk_init_ptr>(gtkLibrary.resolve("gtk_init")); 61 if (!gtkInit) 62 return false; 63 gtkInit(0, 0); 64 return true; 65} 66 67Q_DECL_EXPORT int PluginProcessMain(int argc, char** argv) 68{ 69 QByteArray suppressOutput = qgetenv("QT_WEBKIT_SUPPRESS_WEB_PROCESS_OUTPUT"); 70 if (!suppressOutput.isEmpty() && suppressOutput != "0") 71 qInstallMessageHandler(messageHandler); 72 73 QGuiApplication app(argc, argv); 74 75 // Workaround the issue that some versions of flash does not initialize Gtk properly. 76 if (!initializeGtk()) 77 return EXIT_FAILURE; 78 79 InitializeWebKit2(); 80 81 if (argc <= 1) 82 return EXIT_FAILURE; 83 84 if (app.arguments().at(1) == QLatin1String("-scanPlugin")) { 85 if (argc != 3) 86 return EXIT_FAILURE; 87 String pluginPath(app.arguments().at(2)); 88 if (!NetscapePluginModule::scanPlugin(pluginPath)) 89 return EXIT_FAILURE; 90 return EXIT_SUCCESS; 91 } 92 93 // Create the connection. 94 bool isNumber = false; 95 int identifier = app.arguments().at(1).toInt(&isNumber, 10); 96 if (!isNumber) 97 return EXIT_FAILURE; 98 99 WebKit::ChildProcessInitializationParameters parameters; 100 parameters.connectionIdentifier = identifier; 101 parameters.extraInitializationData.add("plugin-path", app.arguments().at(2)); 102 103 WebKit::PluginProcess::shared().initialize(parameters); 104 105 RunLoop::run(); 106 107 return 0; 108} 109 110} 111 112#endif // ENABLE(PLUGIN_PROCESS) 113