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