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" 3281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch#include "ShareableBitmap.h" 3365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include <WebCore/GraphicsContext.h> 3465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include <WebCore/HTTPHeaderMap.h> 3565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include <WebCore/IntRect.h> 3665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include <WebCore/KURL.h> 3765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include <utility> 3865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include <wtf/text/CString.h> 3965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 4065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochusing namespace WebCore; 4165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochusing namespace std; 4265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 4365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochnamespace WebKit { 4465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 4565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch// The plug-in that we're currently calling NPP_New for. 4665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochstatic NetscapePlugin* currentNPPNewPlugin; 4765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 4865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochPassRefPtr<NetscapePlugin> NetscapePlugin::create(PassRefPtr<NetscapePluginModule> pluginModule) 4965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 5065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (!pluginModule) 5165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return 0; 5265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 5365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return adoptRef(new NetscapePlugin(pluginModule)); 5465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 5565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 5665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochNetscapePlugin::NetscapePlugin(PassRefPtr<NetscapePluginModule> pluginModule) 5765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch : m_pluginController(0) 5865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch , m_nextRequestID(0) 5965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch , m_pluginModule(pluginModule) 6065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch , m_npWindow() 6165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch , m_isStarted(false) 6265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#if PLATFORM(MAC) 6365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch , m_isWindowed(false) 6465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#else 6565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch , m_isWindowed(true) 6665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#endif 672bde8e466a4451c7319e3a072d118917957d6554Steve Block , m_isTransparent(false) 6865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch , m_inNPPNew(false) 6965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch , m_loadManually(false) 7065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#if PLATFORM(MAC) 7165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch , m_drawingModel(static_cast<NPDrawingModel>(-1)) 7265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch , m_eventModel(static_cast<NPEventModel>(-1)) 73ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch , m_currentMouseEvent(0) 7465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch , m_pluginHasFocus(false) 7565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch , m_windowHasFocus(false) 7665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#ifndef NP_NO_CARBON 7765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch , m_nullEventTimer(RunLoop::main(), this, &NetscapePlugin::nullEventTimerFired) 7865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch , m_npCGContext() 792bde8e466a4451c7319e3a072d118917957d6554Steve Block#endif 802bde8e466a4451c7319e3a072d118917957d6554Steve Block#elif PLUGIN_ARCHITECTURE(X11) 812bde8e466a4451c7319e3a072d118917957d6554Steve Block , m_drawable(0) 822bde8e466a4451c7319e3a072d118917957d6554Steve Block , m_pluginDisplay(0) 8365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#endif 8465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 8565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_npp.ndata = this; 8665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_npp.pdata = 0; 8765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 882bde8e466a4451c7319e3a072d118917957d6554Steve Block m_pluginModule->incrementLoadCount(); 8965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 9065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 9165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochNetscapePlugin::~NetscapePlugin() 9265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 9365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ASSERT(!m_isStarted); 9465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 952bde8e466a4451c7319e3a072d118917957d6554Steve Block m_pluginModule->decrementLoadCount(); 9665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 9765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 9865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochPassRefPtr<NetscapePlugin> NetscapePlugin::fromNPP(NPP npp) 9965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 10065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (npp) 10165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return static_cast<NetscapePlugin*>(npp->ndata); 10265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 10365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // FIXME: Return the current NetscapePlugin here. 10465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ASSERT_NOT_REACHED(); 10565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return 0; 10665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 10765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 10865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid NetscapePlugin::invalidate(const NPRect* invalidRect) 10965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 11065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch IntRect rect; 11165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 11265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (!invalidRect) 11365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch rect = IntRect(0, 0, m_frameRect.width(), m_frameRect.height()); 11465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch else 11565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch rect = IntRect(invalidRect->left, invalidRect->top, 11665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch invalidRect->right - invalidRect->left, invalidRect->bottom - invalidRect->top); 11765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 11865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (platformInvalidate(rect)) 11965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return; 12065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 12165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_pluginController->invalidate(rect); 12265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 12365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 12465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochconst char* NetscapePlugin::userAgent(NPP npp) 12565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 12665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (npp) 12765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return fromNPP(npp)->userAgent(); 12865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 12965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (currentNPPNewPlugin) 13065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return currentNPPNewPlugin->userAgent(); 13165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 13265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return 0; 13365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 13465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 13565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochconst char* NetscapePlugin::userAgent() 13665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 13765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (m_userAgent.isNull()) { 13865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_userAgent = m_pluginController->userAgent().utf8(); 13965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ASSERT(!m_userAgent.isNull()); 14065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } 14165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return m_userAgent.data(); 14265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 14365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 14465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid NetscapePlugin::loadURL(const String& method, const String& urlString, const String& target, const HTTPHeaderMap& headerFields, const Vector<uint8_t>& httpBody, 14565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch bool sendNotification, void* notificationData) 14665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 14765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch uint64_t requestID = ++m_nextRequestID; 14865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 14965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_pluginController->loadURL(requestID, method, urlString, target, headerFields, httpBody, allowPopups()); 15065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 15165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (target.isNull()) { 15265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // The browser is going to send the data in a stream, create a plug-in stream. 15365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch RefPtr<NetscapePluginStream> pluginStream = NetscapePluginStream::create(this, requestID, sendNotification, notificationData); 15465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ASSERT(!m_streams.contains(requestID)); 15565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 15665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_streams.set(requestID, pluginStream.release()); 15765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return; 15865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } 15965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 16065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (sendNotification) { 16165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Eventually we are going to get a frameDidFinishLoading or frameDidFail call for this request. 16265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Keep track of the notification data so we can call NPP_URLNotify. 16365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ASSERT(!m_pendingURLNotifications.contains(requestID)); 16465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_pendingURLNotifications.set(requestID, make_pair(urlString, notificationData)); 16565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } 16665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 16765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 16865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochNPError NetscapePlugin::destroyStream(NPStream* stream, NPReason reason) 16965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 17065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch NetscapePluginStream* pluginStream = 0; 17165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 17265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch for (StreamsMap::const_iterator it = m_streams.begin(), end = m_streams.end(); it != end; ++it) { 17365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (it->second->npStream() == stream) { 17465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch pluginStream = it->second.get(); 17565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch break; 17665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } 17765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } 17865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 17965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (!pluginStream) 18065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return NPERR_INVALID_INSTANCE_ERROR; 18165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 18265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return pluginStream->destroy(reason); 18365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 18465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 18565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid NetscapePlugin::setIsWindowed(bool isWindowed) 18665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 18765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Once the plugin has started, it's too late to change whether the plugin is windowed or not. 18865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // (This is true in Firefox and Chrome, too.) Disallow setting m_isWindowed in that case to 18965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // keep our internal state consistent. 19065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (m_isStarted) 19165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return; 19265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 19365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_isWindowed = isWindowed; 19465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 19565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 1962bde8e466a4451c7319e3a072d118917957d6554Steve Blockvoid NetscapePlugin::setIsTransparent(bool isTransparent) 1972bde8e466a4451c7319e3a072d118917957d6554Steve Block{ 1982bde8e466a4451c7319e3a072d118917957d6554Steve Block m_isTransparent = isTransparent; 1992bde8e466a4451c7319e3a072d118917957d6554Steve Block} 2002bde8e466a4451c7319e3a072d118917957d6554Steve Block 20165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid NetscapePlugin::setStatusbarText(const String& statusbarText) 20265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 20365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_pluginController->setStatusbarText(statusbarText); 20465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 20565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 20665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid NetscapePlugin::setException(const String& exceptionString) 20765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 20865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // FIXME: If the plug-in is running in its own process, this needs to send a CoreIPC message instead of 20965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // calling the runtime object map directly. 21065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch NPRuntimeObjectMap::setGlobalException(exceptionString); 21165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 21265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 21365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochbool NetscapePlugin::evaluate(NPObject* npObject, const String& scriptString, NPVariant* result) 21465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 21565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return m_pluginController->evaluate(npObject, scriptString, result, allowPopups()); 21665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 21765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 21865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochbool NetscapePlugin::isPrivateBrowsingEnabled() 21965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 22065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return m_pluginController->isPrivateBrowsingEnabled(); 22165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 22265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 22365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochNPObject* NetscapePlugin::windowScriptNPObject() 22465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 22565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return m_pluginController->windowScriptNPObject(); 22665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 22765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 22865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochNPObject* NetscapePlugin::pluginElementNPObject() 22965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 23065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return m_pluginController->pluginElementNPObject(); 23165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 23265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 23365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid NetscapePlugin::cancelStreamLoad(NetscapePluginStream* pluginStream) 23465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 23565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (pluginStream == m_manualStream) { 23665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_pluginController->cancelManualStreamLoad(); 23765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return; 23865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } 23965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 24065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Ask the plug-in controller to cancel this stream load. 24165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_pluginController->cancelStreamLoad(pluginStream->streamID()); 24265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 24365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 24465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid NetscapePlugin::removePluginStream(NetscapePluginStream* pluginStream) 24565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 24665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (pluginStream == m_manualStream) { 24765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_manualStream = 0; 24865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return; 24965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } 25065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 25165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ASSERT(m_streams.get(pluginStream->streamID()) == pluginStream); 25265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_streams.remove(pluginStream->streamID()); 25365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 25465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 25565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochbool NetscapePlugin::isAcceleratedCompositingEnabled() 25665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 25765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#if USE(ACCELERATED_COMPOSITING) 25865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return m_pluginController->isAcceleratedCompositingEnabled(); 25965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#else 26065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return false; 26165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#endif 26265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 26365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 26465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid NetscapePlugin::pushPopupsEnabledState(bool state) 26565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 26665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_popupEnabledStates.append(state); 26765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 26865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 26965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid NetscapePlugin::popPopupsEnabledState() 27065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 27165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ASSERT(!m_popupEnabledStates.isEmpty()); 27265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 27365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_popupEnabledStates.removeLast(); 27465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 27565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 27665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochString NetscapePlugin::proxiesForURL(const String& urlString) 27765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 27865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return m_pluginController->proxiesForURL(urlString); 27965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 28065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 28165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochString NetscapePlugin::cookiesForURL(const String& urlString) 28265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 28365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return m_pluginController->cookiesForURL(urlString); 28465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 28565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 28665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid NetscapePlugin::setCookiesForURL(const String& urlString, const String& cookieString) 28765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 28865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_pluginController->setCookiesForURL(urlString, cookieString); 28965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 29065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 29165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochNPError NetscapePlugin::NPP_New(NPMIMEType pluginType, uint16_t mode, int16_t argc, char* argn[], char* argv[], NPSavedData* savedData) 29265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 29365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return m_pluginModule->pluginFuncs().newp(pluginType, &m_npp, mode, argc, argn, argv, savedData); 29465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 29565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 29665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochNPError NetscapePlugin::NPP_Destroy(NPSavedData** savedData) 29765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 29865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return m_pluginModule->pluginFuncs().destroy(&m_npp, savedData); 29965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 30065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 30165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochNPError NetscapePlugin::NPP_SetWindow(NPWindow* npWindow) 30265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 30365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return m_pluginModule->pluginFuncs().setwindow(&m_npp, npWindow); 30465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 30565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 30665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochNPError NetscapePlugin::NPP_NewStream(NPMIMEType mimeType, NPStream* stream, NPBool seekable, uint16_t* streamType) 30765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 30865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return m_pluginModule->pluginFuncs().newstream(&m_npp, mimeType, stream, seekable, streamType); 30965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 31065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 31165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochNPError NetscapePlugin::NPP_DestroyStream(NPStream* stream, NPReason reason) 31265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 31365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return m_pluginModule->pluginFuncs().destroystream(&m_npp, stream, reason); 31465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 31565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 31665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid NetscapePlugin::NPP_StreamAsFile(NPStream* stream, const char* filename) 31765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 31865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return m_pluginModule->pluginFuncs().asfile(&m_npp, stream, filename); 31965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 32065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 32165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochint32_t NetscapePlugin::NPP_WriteReady(NPStream* stream) 32265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 32365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return m_pluginModule->pluginFuncs().writeready(&m_npp, stream); 32465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 32565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 32665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochint32_t NetscapePlugin::NPP_Write(NPStream* stream, int32_t offset, int32_t len, void* buffer) 32765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 32865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return m_pluginModule->pluginFuncs().write(&m_npp, stream, offset, len, buffer); 32965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 33065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 33165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochint16_t NetscapePlugin::NPP_HandleEvent(void* event) 33265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 33365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return m_pluginModule->pluginFuncs().event(&m_npp, event); 33465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 33565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 33665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid NetscapePlugin::NPP_URLNotify(const char* url, NPReason reason, void* notifyData) 33765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 33865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_pluginModule->pluginFuncs().urlnotify(&m_npp, url, reason, notifyData); 33965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 34065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 34165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochNPError NetscapePlugin::NPP_GetValue(NPPVariable variable, void *value) 34265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 34365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (!m_pluginModule->pluginFuncs().getvalue) 34465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return NPERR_GENERIC_ERROR; 34565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 34665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return m_pluginModule->pluginFuncs().getvalue(&m_npp, variable, value); 34765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 34865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 34965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochNPError NetscapePlugin::NPP_SetValue(NPNVariable variable, void *value) 35065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 35165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (!m_pluginModule->pluginFuncs().setvalue) 35265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return NPERR_GENERIC_ERROR; 35365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 35465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return m_pluginModule->pluginFuncs().setvalue(&m_npp, variable, value); 35565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 35665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 35765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid NetscapePlugin::callSetWindow() 35865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 3592bde8e466a4451c7319e3a072d118917957d6554Steve Block#if PLUGIN_ARCHITECTURE(X11) 3602bde8e466a4451c7319e3a072d118917957d6554Steve Block // We use a backing store as the painting area for the plugin. 3612bde8e466a4451c7319e3a072d118917957d6554Steve Block m_npWindow.x = 0; 3622bde8e466a4451c7319e3a072d118917957d6554Steve Block m_npWindow.y = 0; 3632bde8e466a4451c7319e3a072d118917957d6554Steve Block#else 36465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_npWindow.x = m_frameRect.x(); 36565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_npWindow.y = m_frameRect.y(); 3662bde8e466a4451c7319e3a072d118917957d6554Steve Block#endif 36765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_npWindow.width = m_frameRect.width(); 36865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_npWindow.height = m_frameRect.height(); 36965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_npWindow.clipRect.top = m_clipRect.y(); 37065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_npWindow.clipRect.left = m_clipRect.x(); 3712fc2651226baac27029e38c9d6ef883fa32084dbSteve Block m_npWindow.clipRect.bottom = m_clipRect.maxY(); 3722fc2651226baac27029e38c9d6ef883fa32084dbSteve Block m_npWindow.clipRect.right = m_clipRect.maxX(); 37365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 37465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch NPP_SetWindow(&m_npWindow); 37565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 37665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 37765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochbool NetscapePlugin::shouldLoadSrcURL() 37865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 37965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Check if we should cancel the load 38065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch NPBool cancelSrcStream = false; 38165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 38265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (NPP_GetValue(NPPVpluginCancelSrcStream, &cancelSrcStream) != NPERR_NO_ERROR) 38365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return true; 38465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 38565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return !cancelSrcStream; 38665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 38765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 38865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochNetscapePluginStream* NetscapePlugin::streamFromID(uint64_t streamID) 38965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 39065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return m_streams.get(streamID).get(); 39165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 39265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 39365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid NetscapePlugin::stopAllStreams() 39465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 39565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch Vector<RefPtr<NetscapePluginStream> > streams; 39665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch copyValuesToVector(m_streams, streams); 39765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 39865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch for (size_t i = 0; i < streams.size(); ++i) 39965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch streams[i]->stop(NPRES_USER_BREAK); 40065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 40165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 40265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochbool NetscapePlugin::allowPopups() const 40365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 40465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (m_pluginModule->pluginFuncs().version >= NPVERS_HAS_POPUPS_ENABLED_STATE) { 40565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (!m_popupEnabledStates.isEmpty()) 40665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return m_popupEnabledStates.last(); 40765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } 40865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 40965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // FIXME: Check if the current event is a user gesture. 41065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Really old versions of Flash required this for popups to work, but all newer versions 41165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // support NPN_PushPopupEnabledState/NPN_PopPopupEnabledState. 41265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return false; 41365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 41465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 41565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochbool NetscapePlugin::initialize(PluginController* pluginController, const Parameters& parameters) 41665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 41765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ASSERT(!m_pluginController); 41865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ASSERT(pluginController); 41965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 42065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_pluginController = pluginController; 42165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 42265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch uint16_t mode = parameters.loadManually ? NP_FULL : NP_EMBED; 42365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 42465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_loadManually = parameters.loadManually; 42565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 42665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch CString mimeTypeCString = parameters.mimeType.utf8(); 42765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 42865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ASSERT(parameters.names.size() == parameters.values.size()); 42965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 43065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch Vector<CString> paramNames; 43165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch Vector<CString> paramValues; 43265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch for (size_t i = 0; i < parameters.names.size(); ++i) { 43365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch paramNames.append(parameters.names[i].utf8()); 43465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch paramValues.append(parameters.values[i].utf8()); 43565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } 43665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 43765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // The strings that these pointers point to are kept alive by paramNames and paramValues. 43865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch Vector<const char*> names; 43965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch Vector<const char*> values; 44065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch for (size_t i = 0; i < paramNames.size(); ++i) { 44165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch names.append(paramNames[i].data()); 44265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch values.append(paramValues[i].data()); 44365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } 44465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 4452bde8e466a4451c7319e3a072d118917957d6554Steve Block#if PLATFORM(MAC) 4462bde8e466a4451c7319e3a072d118917957d6554Steve Block if (m_pluginModule->pluginQuirks().contains(PluginQuirks::MakeTransparentIfBackgroundAttributeExists)) { 4472bde8e466a4451c7319e3a072d118917957d6554Steve Block for (size_t i = 0; i < parameters.names.size(); ++i) { 4482bde8e466a4451c7319e3a072d118917957d6554Steve Block if (equalIgnoringCase(parameters.names[i], "background")) { 4492bde8e466a4451c7319e3a072d118917957d6554Steve Block setIsTransparent(true); 4502bde8e466a4451c7319e3a072d118917957d6554Steve Block break; 4512bde8e466a4451c7319e3a072d118917957d6554Steve Block } 4522bde8e466a4451c7319e3a072d118917957d6554Steve Block } 4532bde8e466a4451c7319e3a072d118917957d6554Steve Block } 4542bde8e466a4451c7319e3a072d118917957d6554Steve Block#endif 4552bde8e466a4451c7319e3a072d118917957d6554Steve Block 45665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch NetscapePlugin* previousNPPNewPlugin = currentNPPNewPlugin; 45765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 45865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_inNPPNew = true; 45965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch currentNPPNewPlugin = this; 46065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 46165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch NPError error = NPP_New(const_cast<char*>(mimeTypeCString.data()), mode, names.size(), 46265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch const_cast<char**>(names.data()), const_cast<char**>(values.data()), 0); 46365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 46465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_inNPPNew = false; 46565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch currentNPPNewPlugin = previousNPPNewPlugin; 46665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 46765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (error != NPERR_NO_ERROR) 46865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return false; 46965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 47065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_isStarted = true; 47165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 47265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // FIXME: This is not correct in all cases. 47365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_npWindow.type = NPWindowTypeDrawable; 47465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 47565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (!platformPostInitialize()) { 47665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch destroy(); 47765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return false; 47865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } 47965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 48065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Load the src URL if needed. 48165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (!parameters.loadManually && !parameters.url.isEmpty() && shouldLoadSrcURL()) 48265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch loadURL("GET", parameters.url.string(), String(), HTTPHeaderMap(), Vector<uint8_t>(), false, 0); 48365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 48465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return true; 48565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 48665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 48765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid NetscapePlugin::destroy() 48865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 48965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ASSERT(m_isStarted); 49065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 49165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Stop all streams. 49265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch stopAllStreams(); 49365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 4942daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#if !PLUGIN_ARCHITECTURE(MAC) 4952daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch m_npWindow.window = 0; 4962daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch callSetWindow(); 4972daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#endif 4982daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 49965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch NPP_Destroy(0); 50065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 50165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_isStarted = false; 50265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_pluginController = 0; 50365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 50465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch platformDestroy(); 50565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 50665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 50765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid NetscapePlugin::paint(GraphicsContext* context, const IntRect& dirtyRect) 50865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 50965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ASSERT(m_isStarted); 51065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 51165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch platformPaint(context, dirtyRect); 51265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 51365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 51481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen MurdochPassRefPtr<ShareableBitmap> NetscapePlugin::snapshot() 51581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch{ 51681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch if (!supportsSnapshotting() || m_frameRect.isEmpty()) 51781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch return 0; 51881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 51981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch ASSERT(m_isStarted); 52081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 5212bde8e466a4451c7319e3a072d118917957d6554Steve Block RefPtr<ShareableBitmap> bitmap = ShareableBitmap::createShareable(m_frameRect.size(), ShareableBitmap::SupportsAlpha); 52281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch OwnPtr<GraphicsContext> context = bitmap->createGraphicsContext(); 52381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 52481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch context->translate(-m_frameRect.x(), -m_frameRect.y()); 52581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 52681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch platformPaint(context.get(), m_frameRect, true); 52781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 52881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch return bitmap.release(); 52981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch} 53081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 5312bde8e466a4451c7319e3a072d118917957d6554Steve Blockbool NetscapePlugin::isTransparent() 5322bde8e466a4451c7319e3a072d118917957d6554Steve Block{ 5332bde8e466a4451c7319e3a072d118917957d6554Steve Block return m_isTransparent; 5342bde8e466a4451c7319e3a072d118917957d6554Steve Block} 5352bde8e466a4451c7319e3a072d118917957d6554Steve Block 53665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid NetscapePlugin::geometryDidChange(const IntRect& frameRect, const IntRect& clipRect) 53765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 53865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ASSERT(m_isStarted); 53965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 54065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (m_frameRect == frameRect && m_clipRect == clipRect) { 54165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Nothing to do. 54265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return; 54365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } 54465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 54565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_frameRect = frameRect; 54665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_clipRect = clipRect; 54765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 54865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch platformGeometryDidChange(); 54965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch callSetWindow(); 55065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 55165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 55265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid NetscapePlugin::frameDidFinishLoading(uint64_t requestID) 55365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 55465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ASSERT(m_isStarted); 55565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 55665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch PendingURLNotifyMap::iterator it = m_pendingURLNotifications.find(requestID); 55765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (it == m_pendingURLNotifications.end()) 55865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return; 55965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 56065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch String url = it->second.first; 56165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch void* notificationData = it->second.second; 56265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 56365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_pendingURLNotifications.remove(it); 56465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 56565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch NPP_URLNotify(url.utf8().data(), NPRES_DONE, notificationData); 56665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 56765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 56865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid NetscapePlugin::frameDidFail(uint64_t requestID, bool wasCancelled) 56965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 57065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ASSERT(m_isStarted); 57165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 57265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch PendingURLNotifyMap::iterator it = m_pendingURLNotifications.find(requestID); 57365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (it == m_pendingURLNotifications.end()) 57465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return; 57565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 57665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch String url = it->second.first; 57765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch void* notificationData = it->second.second; 57865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 57965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_pendingURLNotifications.remove(it); 58065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 58165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch NPP_URLNotify(url.utf8().data(), wasCancelled ? NPRES_USER_BREAK : NPRES_NETWORK_ERR, notificationData); 58265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 58365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 58465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid NetscapePlugin::didEvaluateJavaScript(uint64_t requestID, const String& requestURLString, const String& result) 58565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 58665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ASSERT(m_isStarted); 58765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 58865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (NetscapePluginStream* pluginStream = streamFromID(requestID)) 58965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch pluginStream->sendJavaScriptStream(requestURLString, result); 59065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 59165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 59265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid NetscapePlugin::streamDidReceiveResponse(uint64_t streamID, const KURL& responseURL, uint32_t streamLength, 59365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch uint32_t lastModifiedTime, const String& mimeType, const String& headers) 59465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 59565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ASSERT(m_isStarted); 59665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 59765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (NetscapePluginStream* pluginStream = streamFromID(streamID)) 59865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch pluginStream->didReceiveResponse(responseURL, streamLength, lastModifiedTime, mimeType, headers); 59965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 60065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 60165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid NetscapePlugin::streamDidReceiveData(uint64_t streamID, const char* bytes, int length) 60265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 60365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ASSERT(m_isStarted); 60465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 60565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (NetscapePluginStream* pluginStream = streamFromID(streamID)) 60665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch pluginStream->didReceiveData(bytes, length); 60765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 60865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 60965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid NetscapePlugin::streamDidFinishLoading(uint64_t streamID) 61065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 61165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ASSERT(m_isStarted); 61265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 61365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (NetscapePluginStream* pluginStream = streamFromID(streamID)) 61465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch pluginStream->didFinishLoading(); 61565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 61665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 61765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid NetscapePlugin::streamDidFail(uint64_t streamID, bool wasCancelled) 61865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 61965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ASSERT(m_isStarted); 62065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 62165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (NetscapePluginStream* pluginStream = streamFromID(streamID)) 62265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch pluginStream->didFail(wasCancelled); 62365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 62465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 62565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid NetscapePlugin::manualStreamDidReceiveResponse(const KURL& responseURL, uint32_t streamLength, uint32_t lastModifiedTime, 62665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch const String& mimeType, const String& headers) 62765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 62865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ASSERT(m_isStarted); 62965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ASSERT(m_loadManually); 63065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ASSERT(!m_manualStream); 63165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 63265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_manualStream = NetscapePluginStream::create(this, 0, false, 0); 63365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_manualStream->didReceiveResponse(responseURL, streamLength, lastModifiedTime, mimeType, headers); 63465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 63565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 63665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid NetscapePlugin::manualStreamDidReceiveData(const char* bytes, int length) 63765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 63865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ASSERT(m_isStarted); 63965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ASSERT(m_loadManually); 64065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ASSERT(m_manualStream); 64165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 64265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_manualStream->didReceiveData(bytes, length); 64365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 64465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 64565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid NetscapePlugin::manualStreamDidFinishLoading() 64665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 64765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ASSERT(m_isStarted); 64865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ASSERT(m_loadManually); 64965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ASSERT(m_manualStream); 65065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 65165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_manualStream->didFinishLoading(); 65265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 65365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 65465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid NetscapePlugin::manualStreamDidFail(bool wasCancelled) 65565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 65665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ASSERT(m_isStarted); 65765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ASSERT(m_loadManually); 65865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ASSERT(m_manualStream); 65965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 66065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_manualStream->didFail(wasCancelled); 66165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 66265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 66365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochbool NetscapePlugin::handleMouseEvent(const WebMouseEvent& mouseEvent) 66465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 66565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ASSERT(m_isStarted); 66665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 66765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return platformHandleMouseEvent(mouseEvent); 66865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 66965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 67065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochbool NetscapePlugin::handleWheelEvent(const WebWheelEvent& wheelEvent) 67165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 67265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ASSERT(m_isStarted); 67365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 67465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return platformHandleWheelEvent(wheelEvent); 67565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 67665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 67765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochbool NetscapePlugin::handleMouseEnterEvent(const WebMouseEvent& mouseEvent) 67865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 67965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ASSERT(m_isStarted); 68065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 68165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return platformHandleMouseEnterEvent(mouseEvent); 68265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 68365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 68465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochbool NetscapePlugin::handleMouseLeaveEvent(const WebMouseEvent& mouseEvent) 68565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 68665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ASSERT(m_isStarted); 68765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 68865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return platformHandleMouseLeaveEvent(mouseEvent); 68965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 69065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 69165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochbool NetscapePlugin::handleKeyboardEvent(const WebKeyboardEvent& keyboardEvent) 69265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 69365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ASSERT(m_isStarted); 69465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 69565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return platformHandleKeyboardEvent(keyboardEvent); 69665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 69765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 69865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid NetscapePlugin::setFocus(bool hasFocus) 69965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 70065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ASSERT(m_isStarted); 70165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 70265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch platformSetFocus(hasFocus); 70365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 70465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 70565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochNPObject* NetscapePlugin::pluginScriptableNPObject() 70665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 70765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ASSERT(m_isStarted); 70865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch NPObject* scriptableNPObject = 0; 70965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 71065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (NPP_GetValue(NPPVpluginScriptableNPObject, &scriptableNPObject) != NPERR_NO_ERROR) 71165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return 0; 71265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 71365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return scriptableNPObject; 71465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 71565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 71665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid NetscapePlugin::privateBrowsingStateChanged(bool privateBrowsingEnabled) 71765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 71865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ASSERT(m_isStarted); 71965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 72065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // From https://wiki.mozilla.org/Plugins:PrivateMode 72165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // When the browser turns private mode on or off it will call NPP_SetValue for "NPNVprivateModeBool" 72265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // (assigned enum value 18) with a pointer to an NPBool value on all applicable instances. 72365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Plugins should check the boolean value pointed to, not the pointer itself. 72465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // The value will be true when private mode is on. 72565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch NPBool value = privateBrowsingEnabled; 72665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch NPP_SetValue(NPNVprivateModeBool, &value); 72765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 72865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 72981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochbool NetscapePlugin::supportsSnapshotting() const 73081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch{ 73181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch#if PLATFORM(MAC) 73281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch return m_pluginModule && m_pluginModule->pluginQuirks().contains(PluginQuirks::SupportsSnapshotting); 73381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch#endif 73481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch return false; 73581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch} 73681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 73765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochPluginController* NetscapePlugin::controller() 73865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 73965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return m_pluginController; 74065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 74165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 74265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} // namespace WebKit 743