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