[EFL] Remove netscape plugin implementation from WebCore
authorryuan.choi@samsung.com <ryuan.choi@samsung.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 30 Jun 2014 04:43:29 +0000 (04:43 +0000)
committerryuan.choi@samsung.com <ryuan.choi@samsung.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 30 Jun 2014 04:43:29 +0000 (04:43 +0000)
https://bugs.webkit.org/show_bug.cgi?id=134438

Reviewed by Gyuyoung Kim.

Because WebKit1/Efl was dropped, PluginPackageEfl.cpp and PluginViewEfl.cpp are not necessary.

* PlatformEfl.cmake:
* plugins/efl/PluginPackageEfl.cpp: Removed.
* plugins/efl/PluginViewEfl.cpp: Removed.
* plugins/x11/PluginViewX11.cpp: Removed.
This file is to share common code between WebKit1/Efl and WebKit1/GTk.
Now, both ports are dropped WebKit1 support and the GTK port already removed the related files at r167016.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@170577 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/WebCore/ChangeLog
Source/WebCore/PlatformEfl.cmake
Source/WebCore/plugins/efl/PluginPackageEfl.cpp [deleted file]
Source/WebCore/plugins/efl/PluginViewEfl.cpp [deleted file]
Source/WebCore/plugins/x11/PluginViewX11.cpp [deleted file]

index 3fef8f3..16a5cc0 100644 (file)
@@ -1,3 +1,19 @@
+2014-06-29  Ryuan Choi  <ryuan.choi@samsung.com>
+
+        [EFL] Remove netscape plugin implementation from WebCore
+        https://bugs.webkit.org/show_bug.cgi?id=134438
+
+        Reviewed by Gyuyoung Kim.
+
+        Because WebKit1/Efl was dropped, PluginPackageEfl.cpp and PluginViewEfl.cpp are not necessary.
+
+        * PlatformEfl.cmake:
+        * plugins/efl/PluginPackageEfl.cpp: Removed.
+        * plugins/efl/PluginViewEfl.cpp: Removed.
+        * plugins/x11/PluginViewX11.cpp: Removed.
+        This file is to share common code between WebKit1/Efl and WebKit1/GTk.
+        Now, both ports are dropped WebKit1 support and the GTK port already removed the related files at r167016.
+
 2014-06-29  Yoav Weiss  <yoav@yoav.ws>
 
         Add support for HTMLImageElement's sizes attribute
index 675b1d1..60c8c61 100644 (file)
@@ -197,6 +197,9 @@ list(APPEND WebCore_SOURCES
     platform/text/efl/TextBreakIteratorInternalICUEfl.cpp
 
     platform/text/enchant/TextCheckerEnchant.cpp
+
+    plugins/PluginPackageNone.cpp
+    plugins/PluginViewNone.cpp
 )
 
 if (ENABLE_BATTERY_STATUS OR (EFL_REQUIRED_VERSION VERSION_LESS 1.8))
@@ -208,19 +211,6 @@ if (ENABLE_BATTERY_STATUS OR (EFL_REQUIRED_VERSION VERSION_LESS 1.8))
     list(APPEND WebCore_LIBRARIES ${E_DBUS_EUKIT_LIBRARIES})
 endif ()
 
-if (ENABLE_NETSCAPE_PLUGIN_API)
-    list(APPEND WebCore_SOURCES
-        plugins/PluginPackage.cpp
-        plugins/PluginView.cpp
-        plugins/npapi.cpp
-
-        plugins/efl/PluginPackageEfl.cpp
-        plugins/efl/PluginViewEfl.cpp
-
-        plugins/x11/PluginViewX11.cpp
-    )
-endif ()
-
 list(APPEND WebCore_USER_AGENT_STYLE_SHEETS
     ${WEBCORE_DIR}/Modules/mediacontrols/mediaControlsApple.css
 )
diff --git a/Source/WebCore/plugins/efl/PluginPackageEfl.cpp b/Source/WebCore/plugins/efl/PluginPackageEfl.cpp
deleted file mode 100644 (file)
index 275d743..0000000
+++ /dev/null
@@ -1,168 +0,0 @@
-/*
- * Copyright (C) 2006, 2007 Apple Inc.  All rights reserved.
- * Copyright (C) 2008 Collabora Ltd. All rights reserved.
- * Copyright (C) 2008 Nuanti Ltd.
- * Copyright (C) 2008 INdT - Instituto Nokia de Tecnologia
- * Copyright (C) 2009-2010 ProFUSION embedded systems
- * Copyright (C) 2009-2011 Samsung Electronics
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "config.h"
-#include "PluginPackage.h"
-
-#include "MIMETypeRegistry.h"
-#include "NotImplemented.h"
-#include "PluginDatabase.h"
-#include "PluginDebug.h"
-#include "npruntime_impl.h"
-
-#include <Eina.h>
-#include <dlfcn.h>
-#include <wtf/text/CString.h>
-
-namespace WebCore {
-
-bool PluginPackage::fetchInfo()
-{
-    const char *errmsg;
-
-    if (!load())
-        return false;
-
-    NPP_GetValueProcPtr getValue = 0;
-    NP_GetMIMEDescriptionFuncPtr getMIMEDescription = 0;
-
-    getValue = reinterpret_cast<NPP_GetValueProcPtr>(eina_module_symbol_get(m_module, "NP_GetValue"));
-    if ((errmsg = dlerror())) {
-        EINA_LOG_ERR("Could not get symbol NP_GetValue: %s", errmsg);
-        return false;
-    }
-
-    getMIMEDescription = reinterpret_cast<NP_GetMIMEDescriptionFuncPtr>(eina_module_symbol_get(m_module, "NP_GetMIMEDescription"));
-    if ((errmsg = dlerror())) {
-        EINA_LOG_ERR("Could not get symbol NP_GetMIMEDescription: %s", errmsg);
-        return false;
-    }
-
-    char* buffer = 0;
-    NPError err = getValue(0, NPPVpluginNameString, static_cast<void*>(&buffer));
-    if (err != NPERR_NO_ERROR)
-        return false;
-    m_name = String::fromUTF8(buffer);
-
-    buffer = 0;
-    err = getValue(0, NPPVpluginDescriptionString, static_cast<void*>(&buffer));
-    if (err != NPERR_NO_ERROR)
-        return false;
-    m_description = String::fromUTF8(buffer);
-    determineModuleVersionFromDescription();
-
-    String description = String::fromUTF8(getMIMEDescription());
-
-    Vector<String> types;
-    description.split(UChar(';'), false, types);
-
-    for (size_t i = 0; i < types.size(); ++i) {
-        Vector<String> mime;
-        types[i].split(UChar(':'), true, mime);
-
-        if (!mime.isEmpty() > 0) {
-            Vector<String> exts;
-
-            if (mime.size() > 1)
-                mime[1].split(UChar(','), false, exts);
-
-            determineQuirks(mime[0]);
-            m_mimeToExtensions.add(mime[0], exts);
-
-            if (mime.size() > 2)
-                m_mimeToDescriptions.add(mime[0], mime[2]);
-        }
-    }
-
-    return true;
-}
-
-uint16_t PluginPackage::NPVersion() const
-{
-    return NPVERS_HAS_PLUGIN_THREAD_ASYNC_CALL;
-}
-
-bool PluginPackage::load()
-{
-    if (m_isLoaded) {
-        ++m_loadCount;
-        return true;
-    }
-
-    m_module = eina_module_new(m_path.utf8().data());
-    if (!m_module) {
-        EINA_LOG_WARN("%s not loaded: eina_module_new() failed", m_path.utf8().data());
-        return false;
-    }
-    if (!eina_module_load(m_module)) {
-        const char* errorMessage = eina_error_msg_get(eina_error_get());
-        EINA_LOG_WARN("%s not loaded: %s", m_path.utf8().data(), errorMessage ? errorMessage : "None");
-        return false;
-    }
-
-    m_isLoaded = true;
-
-    NPError err;
-
-    NP_InitializeFuncPtr initialize = reinterpret_cast<NP_InitializeFuncPtr>(eina_module_symbol_get(m_module, "NP_Initialize"));
-    if (!initialize) {
-        EINA_LOG_ERR("Could not get symbol NP_Initialize");
-        goto abort;
-    }
-
-    m_NPP_Shutdown = reinterpret_cast<NPP_ShutdownProcPtr>(eina_module_symbol_get(m_module, "NP_Shutdown"));
-    if (!m_NPP_Shutdown) {
-        EINA_LOG_ERR("Could not get symbol NP_Shutdown");
-        goto abort;
-    }
-
-    memset(&m_pluginFuncs, 0, sizeof(m_pluginFuncs));
-    m_pluginFuncs.size = sizeof(m_pluginFuncs);
-
-    initializeBrowserFuncs();
-
-#if defined(XP_UNIX)
-    err = initialize(&m_browserFuncs, &m_pluginFuncs);
-#else
-    err = initialize(&m_browserFuncs);
-#endif
-    if (err != NPERR_NO_ERROR)
-        goto abort;
-
-    ++m_loadCount;
-    return true;
-
-abort:
-    EINA_LOG_DBG("failed to load plugin, unload it without shutting it down.");
-    unloadWithoutShutdown();
-    return false;
-}
-
-}
diff --git a/Source/WebCore/plugins/efl/PluginViewEfl.cpp b/Source/WebCore/plugins/efl/PluginViewEfl.cpp
deleted file mode 100644 (file)
index 33e9a33..0000000
+++ /dev/null
@@ -1,320 +0,0 @@
-/*
- * Copyright (C) 2006, 2007 Apple Inc.  All rights reserved.
- * Copyright (C) 2008 Collabora Ltd. All rights reserved.
- * Copyright (C) 2008 INdT - Instituto Nokia de Tecnologia
- * Copyright (C) 2009-2010 ProFUSION embedded systems
- * Copyright (C) 2009-2014 Samsung Electronics
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "config.h"
-#include "PluginView.h"
-
-#include "Frame.h"
-#include "FrameView.h"
-#include "HTMLNames.h"
-#include "HTMLPlugInElement.h"
-#include "MouseEvent.h"
-#include "NotImplemented.h"
-#include "PluginPackage.h"
-#include "ScriptController.h"
-#include "npruntime_impl.h"
-#include "runtime/JSLock.h"
-#include "runtime/Operations.h"
-#include <Ecore_Evas.h>
-#include <Ecore_X.h>
-#include <Evas.h>
-
-namespace WebCore {
-
-using namespace HTMLNames;
-
-Window PluginView::getRootWindow(Frame* parentFrame)
-{
-    Evas* evas = evas_object_evas_get(parentFrame->view()->evasObject());
-    Ecore_Evas* ecoreEvas = ecore_evas_ecore_evas_get(evas);
-    return static_cast<Window>(ecore_evas_window_get(ecoreEvas));
-}
-
-void PluginView::handleKeyboardEvent(KeyboardEvent*)
-{
-    notImplemented();
-}
-
-void PluginView::handleMouseEvent(MouseEvent* event)
-{
-    NPEvent xEvent;
-
-#if defined(XP_UNIX)
-    const IntRect rect = parent()->contentsToScreen(IntRect(0, 0, event->offsetX(), event->offsetY()));
-    const int eventX = rect.width();
-    const int eventY = rect.height();
-    if (event->type() == eventNames().mousemoveEvent
-            || event->type() == eventNames().mouseoutEvent
-            || event->type() == eventNames().mouseoverEvent) {
-        xEvent.type = MotionNotify;
-        xEvent.xmotion.x = eventX;
-        xEvent.xmotion.y = eventY;
-    } else if (event->type() == eventNames().mousedownEvent) {
-        xEvent.type = ButtonPress;
-        xEvent.xbutton.x = eventX;
-        xEvent.xbutton.y = eventY;
-        xEvent.xbutton.button = event->button() + 1; // DOM MouseEvent counts from 0, and XButtonEvent from 1.
-    } else if (event->type() == eventNames().mouseupEvent) {
-        xEvent.type = ButtonRelease;
-        xEvent.xbutton.x = eventX;
-        xEvent.xbutton.y = eventY;
-        xEvent.xbutton.button = event->button() + 1;
-    } else
-        return;
-#endif
-
-    if (dispatchNPEvent(xEvent))
-        event->setDefaultHandled();
-}
-
-void PluginView::setFocus(bool focused)
-{
-    if (focused)
-        m_element->document().setFocusedElement(m_element);
-
-    Widget::setFocus(focused);
-}
-
-void PluginView::show()
-{
-    setSelfVisible(true);
-
-    Widget::show();
-}
-
-void PluginView::hide()
-{
-    setSelfVisible(false);
-
-    Widget::hide();
-}
-
-void PluginView::setParentVisible(bool visible)
-{
-    Widget::setParentVisible(visible);
-}
-
-NPError PluginView::handlePostReadFile(Vector<char>& buffer, uint32_t len, const char* buf)
-{
-    String filename(buf, len);
-
-    if (filename.startsWith("file:///"))
-#if defined(XP_UNIX)
-        filename = filename.substring(7);
-#else
-        filename = filename.substring(8);
-#endif
-
-    long long size;
-    if (!getFileSize(filename, size))
-        return NPERR_FILE_NOT_FOUND;
-
-    FILE* fileHandle = fopen(filename.utf8().data(), "r");
-    if (!fileHandle)
-        return NPERR_FILE_NOT_FOUND;
-
-    buffer.resize(size);
-    int bytesRead = fread(buffer.data(), 1, size, fileHandle);
-
-    fclose(fileHandle);
-
-    if (bytesRead <= 0)
-        return NPERR_FILE_NOT_FOUND;
-
-    return NPERR_NO_ERROR;
-}
-
-bool PluginView::platformGetValueStatic(NPNVariable variable, void* value, NPError* result)
-{
-    switch (variable) {
-    case NPNVToolkit:
-        *static_cast<uint32_t*>(value) = 0;
-        *result = NPERR_NO_ERROR;
-        return true;
-
-    case NPNVSupportsXEmbedBool:
-        *static_cast<NPBool*>(value) = false;
-        *result = NPERR_NO_ERROR;
-        return true;
-
-    case NPNVjavascriptEnabledBool:
-        *static_cast<NPBool*>(value) = true;
-        *result = NPERR_NO_ERROR;
-        return true;
-
-    case NPNVSupportsWindowless:
-        *static_cast<NPBool*>(value) = true;
-        *result = NPERR_NO_ERROR;
-        return true;
-
-    default:
-        return false;
-    }
-}
-
-bool PluginView::platformGetValue(NPNVariable variable, void* value, NPError* result)
-{
-    if (!value || !result)
-        return false;
-
-    switch (variable) {
-    case NPNVxDisplay:
-        *static_cast<void**>(value) = static_cast<Display*>(ecore_x_display_get());
-        *result = NPERR_NO_ERROR;
-        return true;
-
-    case NPNVxtAppContext:
-        *result = NPERR_GENERIC_ERROR;
-        return true;
-
-    case NPNVWindowNPObject: {
-        if (m_isJavaScriptPaused) {
-            *result = NPERR_GENERIC_ERROR;
-            return true;
-        }
-
-        NPObject* windowScriptObject = m_parentFrame->script().windowScriptNPObject();
-
-        // Return value is expected to be retained, as described here: <http://www.mozilla.org/projects/plugin/npruntime.html>
-        if (windowScriptObject)
-            _NPN_RetainObject(windowScriptObject);
-
-        *static_cast<void**>(value) = windowScriptObject;
-
-        *result = NPERR_NO_ERROR;
-        return true;
-    }
-
-    case NPNVPluginElementNPObject: {
-        if (m_isJavaScriptPaused) {
-            *result = NPERR_GENERIC_ERROR;
-            return true;
-        }
-
-        NPObject* pluginScriptObject = 0;
-
-        if (m_element->hasTagName(appletTag) || m_element->hasTagName(embedTag) || m_element->hasTagName(objectTag))
-            pluginScriptObject = static_cast<HTMLPlugInElement*>(m_element)->getNPObject();
-
-        // Return value is expected to be retained, as described here: <http://www.mozilla.org/projects/plugin/npruntime.html>
-        if (pluginScriptObject)
-            _NPN_RetainObject(pluginScriptObject);
-
-        *static_cast<void**>(value) = pluginScriptObject;
-
-        *result = NPERR_NO_ERROR;
-        return true;
-    }
-
-    case NPNVnetscapeWindow: {
-        Evas* evas = evas_object_evas_get(m_parentFrame->view()->evasObject());
-        if (!evas)
-            return false;
-
-        Ecore_Evas* ecoreEvas = ecore_evas_ecore_evas_get(evas);
-        *static_cast<XID*>(value) = static_cast<Window>(ecore_evas_window_get(ecoreEvas));
-        *result = NPERR_NO_ERROR;
-        return true;
-    }
-
-    case NPNVToolkit:
-        if (m_plugin->quirks().contains(PluginQuirkRequiresGtkToolKit)) {
-            *static_cast<uint32_t*>(value) = 2;
-            *result = NPERR_NO_ERROR;
-            return true;
-        }
-        return false;
-    default:
-        return false;
-    }
-}
-
-void PluginView::invalidateRect(const IntRect& rect)
-{
-    invalidateWindowlessPluginRect(rect);
-}
-
-Display* PluginView::getPluginDisplay(Frame*)
-{
-    return static_cast<Display*>(ecore_x_display_get());
-}
-
-void PluginView::forceRedraw()
-{
-    notImplemented();
-}
-
-bool PluginView::platformStart()
-{
-    ASSERT(m_isStarted);
-    ASSERT(m_status == PluginStatusLoadedSuccessfully);
-
-    if (m_plugin->pluginFuncs()->getvalue) {
-        PluginView::setCurrentPluginView(this);
-        JSC::JSLock::DropAllLocks dropAllLocks(JSDOMWindowBase::commonVM());
-        setCallingPlugin(true);
-        m_plugin->pluginFuncs()->getvalue(m_instance, NPPVpluginNeedsXEmbed, &m_needsXEmbed);
-        setCallingPlugin(false);
-        PluginView::setCurrentPluginView(0);
-    }
-
-    setPlatformWidget(0);
-    m_pluginDisplay = getPluginDisplay(nullptr);
-
-    show();
-
-    NPSetWindowCallbackStruct* ws = new NPSetWindowCallbackStruct();
-    ws->type = 0;
-
-    m_npWindow.type = NPWindowTypeDrawable;
-    m_npWindow.window = 0; // Not used?
-
-    Screen* screen = static_cast<Screen*>(ecore_x_default_screen_get());
-    m_visual = static_cast<Visual*>(ecore_x_default_visual_get(m_pluginDisplay, screen));
-    m_colormap = ecore_x_default_colormap_get(m_pluginDisplay, screen);
-
-    ws->depth = ecore_x_default_depth_get(m_pluginDisplay, screen);
-    ws->display = m_pluginDisplay;
-    ws->visual = m_visual;
-    ws->colormap = m_colormap;
-
-    m_npWindow.ws_info = ws;
-
-    // FIXME: remove in favor of null events, like mac port?
-    if (!(m_plugin->quirks().contains(PluginQuirkDeferFirstSetWindowCall)))
-        updatePluginWidget(); // was: setNPWindowIfNeeded(), but this doesn't produce 0x0 rects at first go
-
-    return true;
-}
-
-void PluginView::platformDestroy()
-{
-}
-
-} // namespace WebCore
diff --git a/Source/WebCore/plugins/x11/PluginViewX11.cpp b/Source/WebCore/plugins/x11/PluginViewX11.cpp
deleted file mode 100644 (file)
index c79bb6a..0000000
+++ /dev/null
@@ -1,330 +0,0 @@
-/*
- * Copyright (C) 2006, 2007 Apple Inc.  All rights reserved.
- * Copyright (C) 2008 Collabora Ltd. All rights reserved.
- * Copyright (C) 2009, 2010 Kakai, Inc. <brian@kakai.com>
- * Copyright (C) 2010 Igalia S.L.
- * Copyright (C) 2014 Samsung Electronics
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
- */
-
-#include "config.h"
-#include "PluginView.h"
-
-#include "FrameView.h"
-#include "GraphicsContext.h"
-#include "JSDOMWindowBase.h"
-#include "PlatformContextCairo.h"
-#include "PluginPackage.h"
-#include "RefPtrCairo.h"
-#include <X11/X.h>
-#include <cairo-xlib.h>
-#include <runtime/JSLock.h>
-
-#if PLATFORM(GTK)
-#define String XtStringType
-#include "gtk2xtbin.h"
-#endif
-
-#define Bool int // this became undefined in npruntime_internal.h
-#define None 0L // ditto
-#define Status int // ditto
-#include <X11/extensions/Xrender.h>
-
-namespace WebCore {
-
-bool PluginView::dispatchNPEvent(NPEvent& event)
-{
-    if (!m_plugin->pluginFuncs()->event)
-        return false;
-
-    PluginView::setCurrentPluginView(this);
-    JSC::JSLock::DropAllLocks dropAllLocks(JSDOMWindowBase::commonVM());
-    setCallingPlugin(true);
-
-    bool accepted = m_plugin->pluginFuncs()->event(m_instance, &event);
-
-    setCallingPlugin(false);
-    PluginView::setCurrentPluginView(0);
-    return accepted;
-}
-
-void PluginView::updatePluginWidget()
-{
-    if (!parent())
-        return;
-
-    ASSERT(parent()->isFrameView());
-    FrameView* frameView = toFrameView(parent());
-
-    IntRect oldWindowRect = m_windowRect;
-    IntRect oldClipRect = m_clipRect;
-
-    m_windowRect = IntRect(frameView->contentsToWindow(frameRect().location()), frameRect().size());
-    m_clipRect = windowClipRect();
-    m_clipRect.move(-m_windowRect.x(), -m_windowRect.y());
-
-    if (m_windowRect == oldWindowRect && m_clipRect == oldClipRect)
-        return;
-
-    if (m_status != PluginStatusLoadedSuccessfully)
-        return;
-
-    if (!m_isWindowed && !m_windowRect.isEmpty()) {
-        Display* display = getPluginDisplay(nullptr);
-        if (m_drawable)
-            XFreePixmap(display, m_drawable);
-            
-        m_drawable = XCreatePixmap(display, getRootWindow(m_parentFrame.get()),
-            m_windowRect.width(), m_windowRect.height(),
-            ((NPSetWindowCallbackStruct*)m_npWindow.ws_info)->depth);
-        XSync(display, false); // make sure that the server knows about the Drawable
-    }
-
-    setNPWindowIfNeeded();
-}
-
-void PluginView::handleFocusInEvent()
-{
-    if (!m_isStarted || m_status != PluginStatusLoadedSuccessfully)
-        return;
-
-    XEvent npEvent;
-    initXEvent(&npEvent);
-
-    XFocusChangeEvent& event = npEvent.xfocus;
-    event.type = 9; // FocusIn gets unset somewhere
-    event.mode = NotifyNormal;
-    event.detail = NotifyDetailNone;
-
-    dispatchNPEvent(npEvent);
-}
-
-void PluginView::invalidateRect(NPRect* rect)
-{
-    if (!rect) {
-        invalidate();
-        return;
-    }
-
-    IntRect r(rect->left, rect->top, rect->right - rect->left, rect->bottom - rect->top);
-    invalidateWindowlessPluginRect(r);
-}
-
-void PluginView::invalidateRegion(NPRegion)
-{
-    invalidate();
-}
-
-void PluginView::handleFocusOutEvent()
-{
-    if (!m_isStarted || m_status != PluginStatusLoadedSuccessfully)
-        return;
-
-    XEvent npEvent;
-    initXEvent(&npEvent);
-
-    XFocusChangeEvent& event = npEvent.xfocus;
-    event.type = 10; // FocusOut gets unset somewhere
-    event.mode = NotifyNormal;
-    event.detail = NotifyDetailNone;
-
-    dispatchNPEvent(npEvent);
-}
-
-void PluginView::initXEvent(XEvent* xEvent)
-{
-    memset(xEvent, 0, sizeof(XEvent));
-
-    xEvent->xany.serial = 0; // we are unaware of the last request processed by X Server
-    xEvent->xany.send_event = false;
-    xEvent->xany.display = getPluginDisplay(m_parentFrame.get());
-
-    // Mozilla also sends None here for windowless plugins. See nsObjectFrame.cpp in the Mozilla sources.
-    // This method also sets up FocusIn and FocusOut events for windows plugins, but Mozilla doesn't
-    // even send these types of events to windowed plugins. In the future, it may be good to only
-    // send them to windowless plugins.
-    xEvent->xany.window = None;
-}
-
-void PluginView::paint(GraphicsContext* context, const IntRect& rect)
-{
-    if (!m_isStarted || m_status != PluginStatusLoadedSuccessfully) {
-        paintMissingPluginIcon(context, rect);
-        return;
-    }
-
-    if (context->paintingDisabled())
-        return;
-
-    setNPWindowIfNeeded();
-
-    if (m_isWindowed)
-        return;
-
-    if (!m_drawable)
-        return;
-
-    Display* display = getPluginDisplay(nullptr);
-    const bool syncX = m_pluginDisplay && m_pluginDisplay != display;
-
-    IntRect exposedRect(rect);
-    exposedRect.intersect(frameRect());
-    exposedRect.move(-frameRect().x(), -frameRect().y());
-
-    RefPtr<cairo_surface_t> drawableSurface = adoptRef(cairo_xlib_surface_create(display,
-        m_drawable, m_visual, m_windowRect.width(), m_windowRect.height()));
-
-    if (m_isTransparent) {
-        // If we have a 32 bit drawable and the plugin wants transparency,
-        // we'll clear the exposed area to transparent first. Otherwise,
-        // we'd end up with junk in there from the last paint, or, worse,
-        // uninitialized data.
-        RefPtr<cairo_t> cr = adoptRef(cairo_create(drawableSurface.get()));
-
-        if (!(cairo_surface_get_content(drawableSurface.get()) & CAIRO_CONTENT_ALPHA)) {
-            // Attempt to fake it when we don't have an alpha channel on our
-            // pixmap. If that's not possible, at least clear the window to
-            // avoid drawing artifacts.
-
-            // This Would not work without double buffering, but we always use it.
-            cairo_set_source_surface(cr.get(), cairo_get_group_target(context->platformContext()->cr()),
-                -m_windowRect.x(), -m_windowRect.y());
-            cairo_set_operator(cr.get(), CAIRO_OPERATOR_SOURCE);
-        } else
-            cairo_set_operator(cr.get(), CAIRO_OPERATOR_CLEAR);
-
-        cairo_rectangle(cr.get(), exposedRect.x(), exposedRect.y(),
-            exposedRect.width(), exposedRect.height());
-        cairo_fill(cr.get());
-    }
-
-    XEvent xevent;
-    memset(&xevent, 0, sizeof(XEvent));
-    XGraphicsExposeEvent& exposeEvent = xevent.xgraphicsexpose;
-    exposeEvent.type = GraphicsExpose;
-    exposeEvent.display = display;
-    exposeEvent.drawable = m_drawable;
-    exposeEvent.x = exposedRect.x();
-    exposeEvent.y = exposedRect.y();
-    exposeEvent.width = exposedRect.x() + exposedRect.width(); // flash bug? it thinks width is the right in transparent mode
-    exposeEvent.height = exposedRect.y() + exposedRect.height(); // flash bug? it thinks height is the bottom in transparent mode
-
-    dispatchNPEvent(xevent);
-
-    if (syncX)
-        XSync(m_pluginDisplay, false); // sync changes by plugin
-
-    cairo_t* cr = context->platformContext()->cr();
-    cairo_save(cr);
-
-    cairo_set_source_surface(cr, drawableSurface.get(), frameRect().x(), frameRect().y());
-
-    cairo_rectangle(cr, frameRect().x() + exposedRect.x(), frameRect().y() + exposedRect.y(), exposedRect.width(), exposedRect.height());
-    cairo_clip(cr);
-
-    if (m_isTransparent)
-        cairo_set_operator(cr, CAIRO_OPERATOR_OVER);
-    else
-        cairo_set_operator(cr, CAIRO_OPERATOR_SOURCE);
-    cairo_paint(cr);
-
-    cairo_restore(cr);
-}
-
-void PluginView::setParent(ScrollView* parent)
-{
-    Widget::setParent(parent);
-
-    if (parent)
-        init();
-}
-
-void PluginView::setNPWindowRect(const IntRect&)
-{
-    if (!m_isWindowed)
-        setNPWindowIfNeeded();
-}
-
-void PluginView::setNPWindowIfNeeded()
-{
-    if (!m_isStarted || !parent() || !m_plugin->pluginFuncs()->setwindow)
-        return;
-
-    // If the plugin didn't load sucessfully, no point in calling setwindow
-    if (m_status != PluginStatusLoadedSuccessfully)
-        return;
-
-    // On Unix, only call plugin's setwindow if it's full-page or windowed
-    if (m_mode != NP_FULL && m_mode != NP_EMBED)
-        return;
-
-    // Check if the platformPluginWidget still exists
-    if (m_isWindowed && !platformPluginWidget())
-        return;
-
-    if (m_clipRect.isEmpty()) {
-        // If width or height are null, set the clipRect to null,
-        // indicating that the plugin is not visible/scrolled out.
-        m_npWindow.clipRect.left = 0;
-        m_npWindow.clipRect.right = 0;
-        m_npWindow.clipRect.top = 0;
-        m_npWindow.clipRect.bottom = 0;
-    } else {
-        // Clipping rectangle of the plug-in; the origin is the top left corner of the drawable or window. 
-        m_npWindow.clipRect.left = m_npWindow.x + m_clipRect.x();
-        m_npWindow.clipRect.top = m_npWindow.y + m_clipRect.y();
-        m_npWindow.clipRect.right = m_npWindow.x + m_clipRect.x() + m_clipRect.width();
-        m_npWindow.clipRect.bottom = m_npWindow.y + m_clipRect.y() + m_clipRect.height();
-    }
-
-    // FLASH WORKAROUND: Only set initially. Multiple calls to
-    // setNPWindow() cause the plugin to crash in windowed mode.
-    if (!m_plugin->quirks().contains(PluginQuirkDontCallSetWindowMoreThanOnce) || !m_isWindowed
-        || m_npWindow.width == static_cast<uint32_t>(-1) || m_npWindow.height == static_cast<uint32_t>(-1)) {
-        m_npWindow.width = m_windowRect.width();
-        m_npWindow.height = m_windowRect.height();
-    }
-
-    PluginView::setCurrentPluginView(this);
-    JSC::JSLock::DropAllLocks dropAllLocks(JSDOMWindowBase::commonVM());
-    setCallingPlugin(true);
-    m_plugin->pluginFuncs()->setwindow(m_instance, &m_npWindow);
-    setCallingPlugin(false);
-    PluginView::setCurrentPluginView(0);
-
-    if (!m_isWindowed)
-        return;
-
-#if PLATFORM(GTK)
-    // GtkXtBin will call gtk_widget_size_allocate, so we don't need to do it here.
-    if (!m_needsXEmbed) {
-        gtk_xtbin_set_position(GTK_XTBIN(platformPluginWidget()), m_windowRect.x(), m_windowRect.y());
-        gtk_xtbin_resize(platformPluginWidget(), m_windowRect.width(), m_windowRect.height());
-        return;
-    }
-
-    m_delayedAllocation = m_windowRect;
-    updateWidgetAllocationAndClip();
-#endif
-}
-} // namespace WebCore