NetscapePlugin.cpp revision 2fc2651226baac27029e38c9d6ef883fa32084db
165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch/* 265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * Copyright (C) 2010 Apple Inc. All rights reserved. 365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * 465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * Redistribution and use in source and binary forms, with or without 565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * modification, are permitted provided that the following conditions 665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * are met: 765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * 1. Redistributions of source code must retain the above copyright 865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * notice, this list of conditions and the following disclaimer. 965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * 2. Redistributions in binary form must reproduce the above copyright 1065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * notice, this list of conditions and the following disclaimer in the 1165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * documentation and/or other materials provided with the distribution. 1265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * 1365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' 1465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 1565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 1665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS 1765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 1865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 1965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 2065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 2165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 2265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF 2365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * THE POSSIBILITY OF SUCH DAMAGE. 2465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch */ 2565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 262fc2651226baac27029e38c9d6ef883fa32084dbSteve Block#include "config.h" 2765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "NetscapePlugin.h" 2865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 2965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "NPRuntimeObjectMap.h" 3065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "NetscapePluginStream.h" 3165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "PluginController.h" 3265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include <WebCore/GraphicsContext.h> 3365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include <WebCore/HTTPHeaderMap.h> 3465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include <WebCore/IntRect.h> 3565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include <WebCore/KURL.h> 3665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include <utility> 3765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include <wtf/text/CString.h> 3865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 3965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochusing namespace WebCore; 4065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochusing namespace std; 4165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 4265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochnamespace WebKit { 4365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 4465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch// The plug-in that we're currently calling NPP_New for. 4565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochstatic NetscapePlugin* currentNPPNewPlugin; 4665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 4765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochPassRefPtr<NetscapePlugin> NetscapePlugin::create(PassRefPtr<NetscapePluginModule> pluginModule) 4865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 4965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (!pluginModule) 5065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return 0; 5165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 5265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return adoptRef(new NetscapePlugin(pluginModule)); 5365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 5465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 5565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochNetscapePlugin::NetscapePlugin(PassRefPtr<NetscapePluginModule> pluginModule) 5665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch : m_pluginController(0) 5765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch , m_nextRequestID(0) 5865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch , m_pluginModule(pluginModule) 5965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch , m_npWindow() 6065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch , m_isStarted(false) 6165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#if PLATFORM(MAC) 6265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch , m_isWindowed(false) 6365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#else 6465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch , m_isWindowed(true) 6565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#endif 6665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch , m_inNPPNew(false) 6765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch , m_loadManually(false) 6865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#if PLATFORM(MAC) 6965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch , m_drawingModel(static_cast<NPDrawingModel>(-1)) 7065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch , m_eventModel(static_cast<NPEventModel>(-1)) 71ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch , m_currentMouseEvent(0) 7265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch , m_pluginHasFocus(false) 7365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch , m_windowHasFocus(false) 7465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#ifndef NP_NO_CARBON 7565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch , m_nullEventTimer(RunLoop::main(), this, &NetscapePlugin::nullEventTimerFired) 7665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch , m_npCGContext() 7765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#endif 7865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#endif 7965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 8065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_npp.ndata = this; 8165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_npp.pdata = 0; 8265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 8365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_pluginModule->pluginCreated(); 8465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 8565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 8665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochNetscapePlugin::~NetscapePlugin() 8765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 8865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ASSERT(!m_isStarted); 8965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 9065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_pluginModule->pluginDestroyed(); 9165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 9265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 9365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochPassRefPtr<NetscapePlugin> NetscapePlugin::fromNPP(NPP npp) 9465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 9565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (npp) 9665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return static_cast<NetscapePlugin*>(npp->ndata); 9765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 9865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // FIXME: Return the current NetscapePlugin here. 9965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ASSERT_NOT_REACHED(); 10065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return 0; 10165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 10265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 10365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid NetscapePlugin::invalidate(const NPRect* invalidRect) 10465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 10565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch IntRect rect; 10665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 10765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (!invalidRect) 10865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch rect = IntRect(0, 0, m_frameRect.width(), m_frameRect.height()); 10965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch else 11065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch rect = IntRect(invalidRect->left, invalidRect->top, 11165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch invalidRect->right - invalidRect->left, invalidRect->bottom - invalidRect->top); 11265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 11365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (platformInvalidate(rect)) 11465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return; 11565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 11665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_pluginController->invalidate(rect); 11765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 11865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 11965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochconst char* NetscapePlugin::userAgent(NPP npp) 12065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 12165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (npp) 12265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return fromNPP(npp)->userAgent(); 12365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 12465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (currentNPPNewPlugin) 12565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return currentNPPNewPlugin->userAgent(); 12665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 12765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return 0; 12865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 12965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 13065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochconst char* NetscapePlugin::userAgent() 13165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 13265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (m_userAgent.isNull()) { 13365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_userAgent = m_pluginController->userAgent().utf8(); 13465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ASSERT(!m_userAgent.isNull()); 13565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } 13665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return m_userAgent.data(); 13765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 13865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 13965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid NetscapePlugin::loadURL(const String& method, const String& urlString, const String& target, const HTTPHeaderMap& headerFields, const Vector<uint8_t>& httpBody, 14065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch bool sendNotification, void* notificationData) 14165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 14265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch uint64_t requestID = ++m_nextRequestID; 14365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 14465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_pluginController->loadURL(requestID, method, urlString, target, headerFields, httpBody, allowPopups()); 14565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 14665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (target.isNull()) { 14765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // The browser is going to send the data in a stream, create a plug-in stream. 14865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch RefPtr<NetscapePluginStream> pluginStream = NetscapePluginStream::create(this, requestID, sendNotification, notificationData); 14965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ASSERT(!m_streams.contains(requestID)); 15065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 15165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_streams.set(requestID, pluginStream.release()); 15265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return; 15365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } 15465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 15565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (sendNotification) { 15665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Eventually we are going to get a frameDidFinishLoading or frameDidFail call for this request. 15765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Keep track of the notification data so we can call NPP_URLNotify. 15865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ASSERT(!m_pendingURLNotifications.contains(requestID)); 15965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_pendingURLNotifications.set(requestID, make_pair(urlString, notificationData)); 16065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } 16165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 16265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 16365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochNPError NetscapePlugin::destroyStream(NPStream* stream, NPReason reason) 16465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 16565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch NetscapePluginStream* pluginStream = 0; 16665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 16765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch for (StreamsMap::const_iterator it = m_streams.begin(), end = m_streams.end(); it != end; ++it) { 16865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (it->second->npStream() == stream) { 16965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch pluginStream = it->second.get(); 17065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch break; 17165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } 17265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } 17365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 17465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (!pluginStream) 17565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return NPERR_INVALID_INSTANCE_ERROR; 17665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 17765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return pluginStream->destroy(reason); 17865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 17965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 18065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid NetscapePlugin::setIsWindowed(bool isWindowed) 18165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 18265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Once the plugin has started, it's too late to change whether the plugin is windowed or not. 18365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // (This is true in Firefox and Chrome, too.) Disallow setting m_isWindowed in that case to 18465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // keep our internal state consistent. 18565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (m_isStarted) 18665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return; 18765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 18865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_isWindowed = isWindowed; 18965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 19065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 19165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid NetscapePlugin::setStatusbarText(const String& statusbarText) 19265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 19365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_pluginController->setStatusbarText(statusbarText); 19465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 19565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 19665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid NetscapePlugin::setException(const String& exceptionString) 19765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 19865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // FIXME: If the plug-in is running in its own process, this needs to send a CoreIPC message instead of 19965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // calling the runtime object map directly. 20065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch NPRuntimeObjectMap::setGlobalException(exceptionString); 20165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 20265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 20365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochbool NetscapePlugin::evaluate(NPObject* npObject, const String& scriptString, NPVariant* result) 20465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 20565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return m_pluginController->evaluate(npObject, scriptString, result, allowPopups()); 20665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 20765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 20865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochbool NetscapePlugin::isPrivateBrowsingEnabled() 20965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 21065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return m_pluginController->isPrivateBrowsingEnabled(); 21165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 21265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 21365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochNPObject* NetscapePlugin::windowScriptNPObject() 21465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 21565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return m_pluginController->windowScriptNPObject(); 21665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 21765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 21865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochNPObject* NetscapePlugin::pluginElementNPObject() 21965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 22065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return m_pluginController->pluginElementNPObject(); 22165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 22265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 22365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid NetscapePlugin::cancelStreamLoad(NetscapePluginStream* pluginStream) 22465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 22565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (pluginStream == m_manualStream) { 22665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_pluginController->cancelManualStreamLoad(); 22765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return; 22865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } 22965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 23065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Ask the plug-in controller to cancel this stream load. 23165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_pluginController->cancelStreamLoad(pluginStream->streamID()); 23265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 23365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 23465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid NetscapePlugin::removePluginStream(NetscapePluginStream* pluginStream) 23565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 23665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (pluginStream == m_manualStream) { 23765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_manualStream = 0; 23865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return; 23965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } 24065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 24165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ASSERT(m_streams.get(pluginStream->streamID()) == pluginStream); 24265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_streams.remove(pluginStream->streamID()); 24365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 24465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 24565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochbool NetscapePlugin::isAcceleratedCompositingEnabled() 24665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 24765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#if USE(ACCELERATED_COMPOSITING) 24865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return m_pluginController->isAcceleratedCompositingEnabled(); 24965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#else 25065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return false; 25165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#endif 25265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 25365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 25465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid NetscapePlugin::pushPopupsEnabledState(bool state) 25565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 25665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_popupEnabledStates.append(state); 25765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 25865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 25965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid NetscapePlugin::popPopupsEnabledState() 26065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 26165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ASSERT(!m_popupEnabledStates.isEmpty()); 26265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 26365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_popupEnabledStates.removeLast(); 26465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 26565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 26665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochString NetscapePlugin::proxiesForURL(const String& urlString) 26765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 26865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return m_pluginController->proxiesForURL(urlString); 26965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 27065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 27165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochString NetscapePlugin::cookiesForURL(const String& urlString) 27265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 27365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return m_pluginController->cookiesForURL(urlString); 27465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 27565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 27665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid NetscapePlugin::setCookiesForURL(const String& urlString, const String& cookieString) 27765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 27865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_pluginController->setCookiesForURL(urlString, cookieString); 27965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 28065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 28165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochNPError NetscapePlugin::NPP_New(NPMIMEType pluginType, uint16_t mode, int16_t argc, char* argn[], char* argv[], NPSavedData* savedData) 28265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 28365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return m_pluginModule->pluginFuncs().newp(pluginType, &m_npp, mode, argc, argn, argv, savedData); 28465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 28565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 28665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochNPError NetscapePlugin::NPP_Destroy(NPSavedData** savedData) 28765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 28865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return m_pluginModule->pluginFuncs().destroy(&m_npp, savedData); 28965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 29065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 29165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochNPError NetscapePlugin::NPP_SetWindow(NPWindow* npWindow) 29265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 29365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return m_pluginModule->pluginFuncs().setwindow(&m_npp, npWindow); 29465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 29565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 29665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochNPError NetscapePlugin::NPP_NewStream(NPMIMEType mimeType, NPStream* stream, NPBool seekable, uint16_t* streamType) 29765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 29865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return m_pluginModule->pluginFuncs().newstream(&m_npp, mimeType, stream, seekable, streamType); 29965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 30065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 30165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochNPError NetscapePlugin::NPP_DestroyStream(NPStream* stream, NPReason reason) 30265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 30365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return m_pluginModule->pluginFuncs().destroystream(&m_npp, stream, reason); 30465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 30565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 30665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid NetscapePlugin::NPP_StreamAsFile(NPStream* stream, const char* filename) 30765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 30865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return m_pluginModule->pluginFuncs().asfile(&m_npp, stream, filename); 30965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 31065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 31165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochint32_t NetscapePlugin::NPP_WriteReady(NPStream* stream) 31265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 31365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return m_pluginModule->pluginFuncs().writeready(&m_npp, stream); 31465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 31565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 31665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochint32_t NetscapePlugin::NPP_Write(NPStream* stream, int32_t offset, int32_t len, void* buffer) 31765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 31865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return m_pluginModule->pluginFuncs().write(&m_npp, stream, offset, len, buffer); 31965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 32065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 32165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochint16_t NetscapePlugin::NPP_HandleEvent(void* event) 32265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 32365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return m_pluginModule->pluginFuncs().event(&m_npp, event); 32465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 32565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 32665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid NetscapePlugin::NPP_URLNotify(const char* url, NPReason reason, void* notifyData) 32765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 32865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_pluginModule->pluginFuncs().urlnotify(&m_npp, url, reason, notifyData); 32965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 33065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 33165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochNPError NetscapePlugin::NPP_GetValue(NPPVariable variable, void *value) 33265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 33365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (!m_pluginModule->pluginFuncs().getvalue) 33465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return NPERR_GENERIC_ERROR; 33565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 33665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return m_pluginModule->pluginFuncs().getvalue(&m_npp, variable, value); 33765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 33865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 33965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochNPError NetscapePlugin::NPP_SetValue(NPNVariable variable, void *value) 34065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 34165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (!m_pluginModule->pluginFuncs().setvalue) 34265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return NPERR_GENERIC_ERROR; 34365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 34465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return m_pluginModule->pluginFuncs().setvalue(&m_npp, variable, value); 34565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 34665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 34765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid NetscapePlugin::callSetWindow() 34865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 34965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_npWindow.x = m_frameRect.x(); 35065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_npWindow.y = m_frameRect.y(); 35165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_npWindow.width = m_frameRect.width(); 35265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_npWindow.height = m_frameRect.height(); 35365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_npWindow.clipRect.top = m_clipRect.y(); 35465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_npWindow.clipRect.left = m_clipRect.x(); 3552fc2651226baac27029e38c9d6ef883fa32084dbSteve Block m_npWindow.clipRect.bottom = m_clipRect.maxY(); 3562fc2651226baac27029e38c9d6ef883fa32084dbSteve Block m_npWindow.clipRect.right = m_clipRect.maxX(); 35765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 35865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch NPP_SetWindow(&m_npWindow); 35965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 36065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 36165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochbool NetscapePlugin::shouldLoadSrcURL() 36265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 36365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Check if we should cancel the load 36465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch NPBool cancelSrcStream = false; 36565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 36665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (NPP_GetValue(NPPVpluginCancelSrcStream, &cancelSrcStream) != NPERR_NO_ERROR) 36765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return true; 36865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 36965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return !cancelSrcStream; 37065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 37165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 37265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochNetscapePluginStream* NetscapePlugin::streamFromID(uint64_t streamID) 37365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 37465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return m_streams.get(streamID).get(); 37565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 37665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 37765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid NetscapePlugin::stopAllStreams() 37865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 37965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch Vector<RefPtr<NetscapePluginStream> > streams; 38065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch copyValuesToVector(m_streams, streams); 38165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 38265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch for (size_t i = 0; i < streams.size(); ++i) 38365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch streams[i]->stop(NPRES_USER_BREAK); 38465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 38565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 38665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochbool NetscapePlugin::allowPopups() const 38765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 38865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (m_pluginModule->pluginFuncs().version >= NPVERS_HAS_POPUPS_ENABLED_STATE) { 38965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (!m_popupEnabledStates.isEmpty()) 39065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return m_popupEnabledStates.last(); 39165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } 39265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 39365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // FIXME: Check if the current event is a user gesture. 39465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Really old versions of Flash required this for popups to work, but all newer versions 39565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // support NPN_PushPopupEnabledState/NPN_PopPopupEnabledState. 39665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return false; 39765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 39865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 39965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochbool NetscapePlugin::initialize(PluginController* pluginController, const Parameters& parameters) 40065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 40165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ASSERT(!m_pluginController); 40265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ASSERT(pluginController); 40365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 40465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_pluginController = pluginController; 40565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 40665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch uint16_t mode = parameters.loadManually ? NP_FULL : NP_EMBED; 40765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 40865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_loadManually = parameters.loadManually; 40965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 41065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch CString mimeTypeCString = parameters.mimeType.utf8(); 41165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 41265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ASSERT(parameters.names.size() == parameters.values.size()); 41365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 41465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch Vector<CString> paramNames; 41565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch Vector<CString> paramValues; 41665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch for (size_t i = 0; i < parameters.names.size(); ++i) { 41765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch paramNames.append(parameters.names[i].utf8()); 41865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch paramValues.append(parameters.values[i].utf8()); 41965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } 42065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 42165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // The strings that these pointers point to are kept alive by paramNames and paramValues. 42265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch Vector<const char*> names; 42365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch Vector<const char*> values; 42465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch for (size_t i = 0; i < paramNames.size(); ++i) { 42565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch names.append(paramNames[i].data()); 42665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch values.append(paramValues[i].data()); 42765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } 42865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 42965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch NetscapePlugin* previousNPPNewPlugin = currentNPPNewPlugin; 43065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 43165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_inNPPNew = true; 43265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch currentNPPNewPlugin = this; 43365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 43465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch NPError error = NPP_New(const_cast<char*>(mimeTypeCString.data()), mode, names.size(), 43565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch const_cast<char**>(names.data()), const_cast<char**>(values.data()), 0); 43665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 43765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_inNPPNew = false; 43865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch currentNPPNewPlugin = previousNPPNewPlugin; 43965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 44065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (error != NPERR_NO_ERROR) 44165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return false; 44265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 44365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_isStarted = true; 44465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 44565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // FIXME: This is not correct in all cases. 44665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_npWindow.type = NPWindowTypeDrawable; 44765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 44865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (!platformPostInitialize()) { 44965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch destroy(); 45065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return false; 45165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } 45265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 45365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Load the src URL if needed. 45465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (!parameters.loadManually && !parameters.url.isEmpty() && shouldLoadSrcURL()) 45565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch loadURL("GET", parameters.url.string(), String(), HTTPHeaderMap(), Vector<uint8_t>(), false, 0); 45665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 45765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return true; 45865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 45965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 46065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid NetscapePlugin::destroy() 46165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 46265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ASSERT(m_isStarted); 46365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 46465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Stop all streams. 46565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch stopAllStreams(); 46665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 46765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch NPP_Destroy(0); 46865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 46965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_isStarted = false; 47065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_pluginController = 0; 47165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 47265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch platformDestroy(); 47365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 47465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 47565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid NetscapePlugin::paint(GraphicsContext* context, const IntRect& dirtyRect) 47665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 47765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ASSERT(m_isStarted); 47865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 47965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch platformPaint(context, dirtyRect); 48065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 48165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 48265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid NetscapePlugin::geometryDidChange(const IntRect& frameRect, const IntRect& clipRect) 48365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 48465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ASSERT(m_isStarted); 48565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 48665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (m_frameRect == frameRect && m_clipRect == clipRect) { 48765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Nothing to do. 48865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return; 48965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } 49065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 49165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_frameRect = frameRect; 49265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_clipRect = clipRect; 49365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 49465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch platformGeometryDidChange(); 49565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch callSetWindow(); 49665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 49765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 49865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid NetscapePlugin::frameDidFinishLoading(uint64_t requestID) 49965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 50065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ASSERT(m_isStarted); 50165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 50265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch PendingURLNotifyMap::iterator it = m_pendingURLNotifications.find(requestID); 50365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (it == m_pendingURLNotifications.end()) 50465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return; 50565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 50665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch String url = it->second.first; 50765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch void* notificationData = it->second.second; 50865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 50965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_pendingURLNotifications.remove(it); 51065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 51165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch NPP_URLNotify(url.utf8().data(), NPRES_DONE, notificationData); 51265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 51365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 51465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid NetscapePlugin::frameDidFail(uint64_t requestID, bool wasCancelled) 51565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 51665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ASSERT(m_isStarted); 51765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 51865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch PendingURLNotifyMap::iterator it = m_pendingURLNotifications.find(requestID); 51965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (it == m_pendingURLNotifications.end()) 52065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return; 52165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 52265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch String url = it->second.first; 52365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch void* notificationData = it->second.second; 52465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 52565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_pendingURLNotifications.remove(it); 52665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 52765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch NPP_URLNotify(url.utf8().data(), wasCancelled ? NPRES_USER_BREAK : NPRES_NETWORK_ERR, notificationData); 52865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 52965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 53065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid NetscapePlugin::didEvaluateJavaScript(uint64_t requestID, const String& requestURLString, const String& result) 53165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 53265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ASSERT(m_isStarted); 53365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 53465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (NetscapePluginStream* pluginStream = streamFromID(requestID)) 53565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch pluginStream->sendJavaScriptStream(requestURLString, result); 53665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 53765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 53865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid NetscapePlugin::streamDidReceiveResponse(uint64_t streamID, const KURL& responseURL, uint32_t streamLength, 53965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch uint32_t lastModifiedTime, const String& mimeType, const String& headers) 54065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 54165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ASSERT(m_isStarted); 54265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 54365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (NetscapePluginStream* pluginStream = streamFromID(streamID)) 54465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch pluginStream->didReceiveResponse(responseURL, streamLength, lastModifiedTime, mimeType, headers); 54565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 54665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 54765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid NetscapePlugin::streamDidReceiveData(uint64_t streamID, const char* bytes, int length) 54865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 54965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ASSERT(m_isStarted); 55065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 55165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (NetscapePluginStream* pluginStream = streamFromID(streamID)) 55265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch pluginStream->didReceiveData(bytes, length); 55365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 55465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 55565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid NetscapePlugin::streamDidFinishLoading(uint64_t streamID) 55665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 55765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ASSERT(m_isStarted); 55865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 55965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (NetscapePluginStream* pluginStream = streamFromID(streamID)) 56065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch pluginStream->didFinishLoading(); 56165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 56265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 56365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid NetscapePlugin::streamDidFail(uint64_t streamID, bool wasCancelled) 56465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 56565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ASSERT(m_isStarted); 56665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 56765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (NetscapePluginStream* pluginStream = streamFromID(streamID)) 56865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch pluginStream->didFail(wasCancelled); 56965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 57065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 57165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid NetscapePlugin::manualStreamDidReceiveResponse(const KURL& responseURL, uint32_t streamLength, uint32_t lastModifiedTime, 57265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch const String& mimeType, const String& headers) 57365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 57465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ASSERT(m_isStarted); 57565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ASSERT(m_loadManually); 57665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ASSERT(!m_manualStream); 57765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 57865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_manualStream = NetscapePluginStream::create(this, 0, false, 0); 57965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_manualStream->didReceiveResponse(responseURL, streamLength, lastModifiedTime, mimeType, headers); 58065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 58165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 58265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid NetscapePlugin::manualStreamDidReceiveData(const char* bytes, int length) 58365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 58465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ASSERT(m_isStarted); 58565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ASSERT(m_loadManually); 58665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ASSERT(m_manualStream); 58765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 58865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_manualStream->didReceiveData(bytes, length); 58965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 59065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 59165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid NetscapePlugin::manualStreamDidFinishLoading() 59265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 59365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ASSERT(m_isStarted); 59465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ASSERT(m_loadManually); 59565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ASSERT(m_manualStream); 59665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 59765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_manualStream->didFinishLoading(); 59865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 59965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 60065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid NetscapePlugin::manualStreamDidFail(bool wasCancelled) 60165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 60265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ASSERT(m_isStarted); 60365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ASSERT(m_loadManually); 60465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ASSERT(m_manualStream); 60565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 60665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_manualStream->didFail(wasCancelled); 60765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 60865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 60965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochbool NetscapePlugin::handleMouseEvent(const WebMouseEvent& mouseEvent) 61065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 61165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ASSERT(m_isStarted); 61265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 61365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return platformHandleMouseEvent(mouseEvent); 61465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 61565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 61665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochbool NetscapePlugin::handleWheelEvent(const WebWheelEvent& wheelEvent) 61765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 61865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ASSERT(m_isStarted); 61965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 62065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return platformHandleWheelEvent(wheelEvent); 62165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 62265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 62365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochbool NetscapePlugin::handleMouseEnterEvent(const WebMouseEvent& mouseEvent) 62465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 62565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ASSERT(m_isStarted); 62665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 62765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return platformHandleMouseEnterEvent(mouseEvent); 62865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 62965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 63065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochbool NetscapePlugin::handleMouseLeaveEvent(const WebMouseEvent& mouseEvent) 63165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 63265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ASSERT(m_isStarted); 63365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 63465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return platformHandleMouseLeaveEvent(mouseEvent); 63565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 63665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 63765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochbool NetscapePlugin::handleKeyboardEvent(const WebKeyboardEvent& keyboardEvent) 63865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 63965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ASSERT(m_isStarted); 64065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 64165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return platformHandleKeyboardEvent(keyboardEvent); 64265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 64365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 64465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid NetscapePlugin::setFocus(bool hasFocus) 64565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 64665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ASSERT(m_isStarted); 64765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 64865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch platformSetFocus(hasFocus); 64965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 65065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 65165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochNPObject* NetscapePlugin::pluginScriptableNPObject() 65265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 65365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ASSERT(m_isStarted); 65465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch NPObject* scriptableNPObject = 0; 65565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 65665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (NPP_GetValue(NPPVpluginScriptableNPObject, &scriptableNPObject) != NPERR_NO_ERROR) 65765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return 0; 65865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 65965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return scriptableNPObject; 66065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 66165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 66265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid NetscapePlugin::privateBrowsingStateChanged(bool privateBrowsingEnabled) 66365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 66465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ASSERT(m_isStarted); 66565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 66665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // From https://wiki.mozilla.org/Plugins:PrivateMode 66765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // When the browser turns private mode on or off it will call NPP_SetValue for "NPNVprivateModeBool" 66865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // (assigned enum value 18) with a pointer to an NPBool value on all applicable instances. 66965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Plugins should check the boolean value pointed to, not the pointer itself. 67065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // The value will be true when private mode is on. 67165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch NPBool value = privateBrowsingEnabled; 67265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch NPP_SetValue(NPNVprivateModeBool, &value); 67365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 67465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 67565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochPluginController* NetscapePlugin::controller() 67665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 67765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return m_pluginController; 67865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 67965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 68065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} // namespace WebKit 681