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 "PluginProxy.h" 2865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 292fc2651226baac27029e38c9d6ef883fa32084dbSteve Block#if ENABLE(PLUGIN_PROCESS) 302fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 3165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "DataReference.h" 3265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "NPRemoteObjectMap.h" 3365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "NPRuntimeUtilities.h" 3465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "NPVariantData.h" 3565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "PluginController.h" 3665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "PluginControllerProxyMessages.h" 3765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "PluginProcessConnection.h" 3865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "PluginProcessConnectionManager.h" 3965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "ShareableBitmap.h" 4065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "WebCoreArgumentCoders.h" 4165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "WebEvent.h" 4265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "WebProcessConnectionMessages.h" 4365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include <WebCore/GraphicsContext.h> 4465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 4565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochusing namespace WebCore; 4665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 4765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochnamespace WebKit { 4865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 4965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochstatic uint64_t generatePluginInstanceID() 5065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 5165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch static uint64_t uniquePluginInstanceID; 5265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return ++uniquePluginInstanceID; 5365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 5465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 5565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochPassRefPtr<PluginProxy> PluginProxy::create(const String& pluginPath) 5665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 5765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return adoptRef(new PluginProxy(pluginPath)); 5865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 5965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 6065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochPluginProxy::PluginProxy(const String& pluginPath) 6165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch : m_pluginPath(pluginPath) 6265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch , m_pluginInstanceID(generatePluginInstanceID()) 6365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch , m_pluginController(0) 6465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch , m_pluginBackingStoreContainsValidData(false) 6565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch , m_isStarted(false) 6665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch , m_waitingForPaintInResponseToUpdate(false) 6765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch , m_remoteLayerClientID(0) 6865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 6965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 7065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 7165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochPluginProxy::~PluginProxy() 7265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 7365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 7465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 7565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid PluginProxy::pluginProcessCrashed() 7665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 7765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (m_pluginController) 7865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_pluginController->pluginProcessCrashed(); 7965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 8065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 8165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochbool PluginProxy::initialize(PluginController* pluginController, const Parameters& parameters) 8265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 8365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ASSERT(!m_pluginController); 8465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ASSERT(pluginController); 8565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 8665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_pluginController = pluginController; 8765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 8865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ASSERT(!m_connection); 8965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_connection = PluginProcessConnectionManager::shared().getPluginProcessConnection(m_pluginPath); 9065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 9165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (!m_connection) 9265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return false; 9365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 9465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Add the plug-in proxy before creating the plug-in; it needs to be in the map because CreatePlugin 9565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // can call back out to the plug-in proxy. 9665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_connection->addPluginProxy(this); 9765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 9865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Ask the plug-in process to create a plug-in. 9965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch bool result = false; 10065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 10165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch uint32_t remoteLayerClientID = 0; 10265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (!m_connection->connection()->sendSync(Messages::WebProcessConnection::CreatePlugin(m_pluginInstanceID, parameters, pluginController->userAgent(), pluginController->isPrivateBrowsingEnabled(), pluginController->isAcceleratedCompositingEnabled()), Messages::WebProcessConnection::CreatePlugin::Reply(result, remoteLayerClientID), 0) || !result) { 10365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_connection->removePluginProxy(this); 10465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return false; 10565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } 10665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 10765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_remoteLayerClientID = remoteLayerClientID; 10865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_isStarted = true; 10965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 11065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return true; 11165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 11265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 11365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid PluginProxy::destroy() 11465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 11565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ASSERT(m_isStarted); 11665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 11765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_connection->connection()->sendSync(Messages::WebProcessConnection::DestroyPlugin(m_pluginInstanceID), Messages::WebProcessConnection::DestroyPlugin::Reply(), 0); 11865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 11965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_isStarted = false; 12081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch m_pluginController = 0; 12181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 12265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_connection->removePluginProxy(this); 12365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 12465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 12565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid PluginProxy::paint(GraphicsContext* graphicsContext, const IntRect& dirtyRect) 12665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 12765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (!needsBackingStore() || !m_backingStore) 12865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return; 12965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 13065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (!m_pluginBackingStoreContainsValidData) { 13165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_connection->connection()->sendSync(Messages::PluginControllerProxy::PaintEntirePlugin(), Messages::PluginControllerProxy::PaintEntirePlugin::Reply(), m_pluginInstanceID); 13265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 13365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Blit the plug-in backing store into our own backing store. 13465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch OwnPtr<WebCore::GraphicsContext> graphicsContext = m_backingStore->createGraphicsContext(); 1352bde8e466a4451c7319e3a072d118917957d6554Steve Block graphicsContext->setCompositeOperation(CompositeCopy); 1362bde8e466a4451c7319e3a072d118917957d6554Steve Block 13765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_pluginBackingStore->paint(*graphicsContext, IntPoint(), IntRect(0, 0, m_frameRect.width(), m_frameRect.height())); 13865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 13965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_pluginBackingStoreContainsValidData = true; 14065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } 14165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 14265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch IntRect dirtyRectInPluginCoordinates = dirtyRect; 14365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch dirtyRectInPluginCoordinates.move(-m_frameRect.x(), -m_frameRect.y()); 14465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 14565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_backingStore->paint(*graphicsContext, dirtyRect.location(), dirtyRectInPluginCoordinates); 14665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 14765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (m_waitingForPaintInResponseToUpdate) { 14865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_waitingForPaintInResponseToUpdate = false; 14965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_connection->connection()->send(Messages::PluginControllerProxy::DidUpdate(), m_pluginInstanceID); 15065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return; 15165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } 15265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 15365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 15481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen MurdochPassRefPtr<ShareableBitmap> PluginProxy::snapshot() 15581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch{ 1562bde8e466a4451c7319e3a072d118917957d6554Steve Block ShareableBitmap::Handle snapshotStoreHandle; 1572bde8e466a4451c7319e3a072d118917957d6554Steve Block m_connection->connection()->sendSync(Messages::PluginControllerProxy::Snapshot(), Messages::PluginControllerProxy::Snapshot::Reply(snapshotStoreHandle), m_pluginInstanceID); 15881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 1592bde8e466a4451c7319e3a072d118917957d6554Steve Block RefPtr<ShareableBitmap> snapshotBuffer = ShareableBitmap::create(snapshotStoreHandle); 16081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch return snapshotBuffer.release(); 16181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch} 16281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 1632bde8e466a4451c7319e3a072d118917957d6554Steve Blockbool PluginProxy::isTransparent() 1642bde8e466a4451c7319e3a072d118917957d6554Steve Block{ 1652bde8e466a4451c7319e3a072d118917957d6554Steve Block // This should never be called from the web process. 1662bde8e466a4451c7319e3a072d118917957d6554Steve Block ASSERT_NOT_REACHED(); 1672bde8e466a4451c7319e3a072d118917957d6554Steve Block return false; 1682bde8e466a4451c7319e3a072d118917957d6554Steve Block} 1692bde8e466a4451c7319e3a072d118917957d6554Steve Block 17065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid PluginProxy::geometryDidChange(const IntRect& frameRect, const IntRect& clipRect) 17165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 17265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch ASSERT(m_isStarted); 17365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 17465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_frameRect = frameRect; 17565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 17665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (!needsBackingStore()) { 1772bde8e466a4451c7319e3a072d118917957d6554Steve Block ShareableBitmap::Handle pluginBackingStoreHandle; 1782bde8e466a4451c7319e3a072d118917957d6554Steve Block m_connection->connection()->send(Messages::PluginControllerProxy::GeometryDidChange(frameRect, clipRect, pluginBackingStoreHandle), m_pluginInstanceID, CoreIPC::DispatchMessageEvenWhenWaitingForSyncReply); 17965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return; 18065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } 18165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 18265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch bool didUpdateBackingStore = false; 18365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (!m_backingStore) { 1842bde8e466a4451c7319e3a072d118917957d6554Steve Block m_backingStore = ShareableBitmap::create(frameRect.size(), ShareableBitmap::SupportsAlpha); 18565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch didUpdateBackingStore = true; 18665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } else if (frameRect.size() != m_backingStore->size()) { 18765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // The backing store already exists, just resize it. 18865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (!m_backingStore->resize(frameRect.size())) 18965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return; 19065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 19165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch didUpdateBackingStore = true; 19265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } 19365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 1942bde8e466a4451c7319e3a072d118917957d6554Steve Block ShareableBitmap::Handle pluginBackingStoreHandle; 19565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 19665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (didUpdateBackingStore) { 19765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Create a new plug-in backing store. 1982bde8e466a4451c7319e3a072d118917957d6554Steve Block m_pluginBackingStore = ShareableBitmap::createShareable(frameRect.size(), ShareableBitmap::SupportsAlpha); 19965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (!m_pluginBackingStore) 20065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return; 20165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 20265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Create a handle to the plug-in backing store so we can send it over. 20365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (!m_pluginBackingStore->createHandle(pluginBackingStoreHandle)) { 2042bde8e466a4451c7319e3a072d118917957d6554Steve Block m_pluginBackingStore = nullptr; 20565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return; 20665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } 20765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 20865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_pluginBackingStoreContainsValidData = false; 20965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } 21065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 2112bde8e466a4451c7319e3a072d118917957d6554Steve Block m_connection->connection()->send(Messages::PluginControllerProxy::GeometryDidChange(frameRect, clipRect, pluginBackingStoreHandle), m_pluginInstanceID, CoreIPC::DispatchMessageEvenWhenWaitingForSyncReply); 21265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 21365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 21465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid PluginProxy::frameDidFinishLoading(uint64_t requestID) 21565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 21665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_connection->connection()->send(Messages::PluginControllerProxy::FrameDidFinishLoading(requestID), m_pluginInstanceID); 21765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 21865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 21965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid PluginProxy::frameDidFail(uint64_t requestID, bool wasCancelled) 22065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 22165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_connection->connection()->send(Messages::PluginControllerProxy::FrameDidFail(requestID, wasCancelled), m_pluginInstanceID); 22265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 22365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 22465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid PluginProxy::didEvaluateJavaScript(uint64_t requestID, const WTF::String& requestURLString, const WTF::String& result) 22565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 22665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_connection->connection()->send(Messages::PluginControllerProxy::DidEvaluateJavaScript(requestID, requestURLString, result), m_pluginInstanceID); 22765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 22865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 22965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid PluginProxy::streamDidReceiveResponse(uint64_t streamID, const KURL& responseURL, uint32_t streamLength, uint32_t lastModifiedTime, const WTF::String& mimeType, const WTF::String& headers) 23065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 23165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_connection->connection()->send(Messages::PluginControllerProxy::StreamDidReceiveResponse(streamID, responseURL.string(), streamLength, lastModifiedTime, mimeType, headers), m_pluginInstanceID); 23265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 23365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 23465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid PluginProxy::streamDidReceiveData(uint64_t streamID, const char* bytes, int length) 23565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 23665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_connection->connection()->send(Messages::PluginControllerProxy::StreamDidReceiveData(streamID, CoreIPC::DataReference(reinterpret_cast<const uint8_t*>(bytes), length)), m_pluginInstanceID); 23765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 23865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 23965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid PluginProxy::streamDidFinishLoading(uint64_t streamID) 24065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 24165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_connection->connection()->send(Messages::PluginControllerProxy::StreamDidFinishLoading(streamID), m_pluginInstanceID); 24265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 24365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 24465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid PluginProxy::streamDidFail(uint64_t streamID, bool wasCancelled) 24565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 24665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_connection->connection()->send(Messages::PluginControllerProxy::StreamDidFail(streamID, wasCancelled), m_pluginInstanceID); 24765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 24865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 24965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid PluginProxy::manualStreamDidReceiveResponse(const KURL& responseURL, uint32_t streamLength, uint32_t lastModifiedTime, const WTF::String& mimeType, const WTF::String& headers) 25065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 25165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_connection->connection()->send(Messages::PluginControllerProxy::ManualStreamDidReceiveResponse(responseURL.string(), streamLength, lastModifiedTime, mimeType, headers), m_pluginInstanceID); 25265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 25365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 25465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid PluginProxy::manualStreamDidReceiveData(const char* bytes, int length) 25565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 25665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_connection->connection()->send(Messages::PluginControllerProxy::ManualStreamDidReceiveData(CoreIPC::DataReference(reinterpret_cast<const uint8_t*>(bytes), length)), m_pluginInstanceID); 25765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 25865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 25965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid PluginProxy::manualStreamDidFinishLoading() 26065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 26165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_connection->connection()->send(Messages::PluginControllerProxy::ManualStreamDidFinishLoading(), m_pluginInstanceID); 26265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 26365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 26465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid PluginProxy::manualStreamDidFail(bool wasCancelled) 26565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 26665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_connection->connection()->send(Messages::PluginControllerProxy::ManualStreamDidFail(wasCancelled), m_pluginInstanceID); 26765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 26865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 26965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochbool PluginProxy::handleMouseEvent(const WebMouseEvent& mouseEvent) 27065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 27165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch bool handled = false; 27265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (!m_connection->connection()->sendSync(Messages::PluginControllerProxy::HandleMouseEvent(mouseEvent), Messages::PluginControllerProxy::HandleMouseEvent::Reply(handled), m_pluginInstanceID)) 27365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return false; 27465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 27565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return handled; 27665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 27765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 27865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochbool PluginProxy::handleWheelEvent(const WebWheelEvent& wheelEvent) 27965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 28065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch bool handled = false; 28165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (!m_connection->connection()->sendSync(Messages::PluginControllerProxy::HandleWheelEvent(wheelEvent), Messages::PluginControllerProxy::HandleWheelEvent::Reply(handled), m_pluginInstanceID)) 28265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return false; 28365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 28465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return handled; 28565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 28665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 28765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochbool PluginProxy::handleMouseEnterEvent(const WebMouseEvent& mouseEnterEvent) 28865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 28965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch bool handled = false; 29065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (!m_connection->connection()->sendSync(Messages::PluginControllerProxy::HandleMouseEnterEvent(mouseEnterEvent), Messages::PluginControllerProxy::HandleMouseEnterEvent::Reply(handled), m_pluginInstanceID)) 29165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return false; 29265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 29365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return handled; 29465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 29565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 29665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochbool PluginProxy::handleMouseLeaveEvent(const WebMouseEvent& mouseLeaveEvent) 29765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 29865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch bool handled = false; 29965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (!m_connection->connection()->sendSync(Messages::PluginControllerProxy::HandleMouseLeaveEvent(mouseLeaveEvent), Messages::PluginControllerProxy::HandleMouseLeaveEvent::Reply(handled), m_pluginInstanceID)) 30065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return false; 30165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 30265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return handled; 30365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 30465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 30565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochbool PluginProxy::handleKeyboardEvent(const WebKeyboardEvent& keyboardEvent) 30665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 30765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch bool handled = false; 30865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (!m_connection->connection()->sendSync(Messages::PluginControllerProxy::HandleKeyboardEvent(keyboardEvent), Messages::PluginControllerProxy::HandleKeyboardEvent::Reply(handled), m_pluginInstanceID)) 30965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return false; 31065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 31165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return handled; 31265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 31365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 31465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid PluginProxy::setFocus(bool hasFocus) 31565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 31665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_connection->connection()->send(Messages::PluginControllerProxy::SetFocus(hasFocus), m_pluginInstanceID); 31765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 31865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 31965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochNPObject* PluginProxy::pluginScriptableNPObject() 32065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 32165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch uint64_t pluginScriptableNPObjectID = 0; 32265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 32365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (!m_connection->connection()->sendSync(Messages::PluginControllerProxy::GetPluginScriptableNPObject(), Messages::PluginControllerProxy::GetPluginScriptableNPObject::Reply(pluginScriptableNPObjectID), m_pluginInstanceID)) 32465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return 0; 32565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 32665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (!pluginScriptableNPObjectID) 32765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return 0; 32865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 3292bde8e466a4451c7319e3a072d118917957d6554Steve Block return m_connection->npRemoteObjectMap()->createNPObjectProxy(pluginScriptableNPObjectID, this); 33065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 33165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 33265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#if PLATFORM(MAC) 33365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid PluginProxy::windowFocusChanged(bool hasFocus) 33465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 33565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_connection->connection()->send(Messages::PluginControllerProxy::WindowFocusChanged(hasFocus), m_pluginInstanceID); 33665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 33765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 33865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid PluginProxy::windowAndViewFramesChanged(const WebCore::IntRect& windowFrameInScreenCoordinates, const WebCore::IntRect& viewFrameInWindowCoordinates) 33965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 34065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_connection->connection()->send(Messages::PluginControllerProxy::WindowAndViewFramesChanged(windowFrameInScreenCoordinates, viewFrameInWindowCoordinates), m_pluginInstanceID); 34165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 34265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 34365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid PluginProxy::windowVisibilityChanged(bool isVisible) 34465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 34565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_connection->connection()->send(Messages::PluginControllerProxy::WindowVisibilityChanged(isVisible), m_pluginInstanceID); 34665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 34765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 34865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochuint64_t PluginProxy::pluginComplexTextInputIdentifier() const 34965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 35065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return m_pluginInstanceID; 35165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 35265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 35365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid PluginProxy::sendComplexTextInput(const String& textInput) 35465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 35565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_connection->connection()->send(Messages::PluginControllerProxy::SendComplexTextInput(textInput), m_pluginInstanceID); 35665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 35765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 35865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#endif 35965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 36065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid PluginProxy::privateBrowsingStateChanged(bool isPrivateBrowsingEnabled) 36165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 36265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_connection->connection()->send(Messages::PluginControllerProxy::PrivateBrowsingStateChanged(isPrivateBrowsingEnabled), m_pluginInstanceID); 36365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 36465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 36565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochPluginController* PluginProxy::controller() 36665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 36765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return m_pluginController; 36865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 36965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 37065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid PluginProxy::loadURL(uint64_t requestID, const String& method, const String& urlString, const String& target, const HTTPHeaderMap& headerFields, const Vector<uint8_t>& httpBody, bool allowPopups) 37165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 37265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_pluginController->loadURL(requestID, method, urlString, target, headerFields, httpBody, allowPopups); 37365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 37465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 37565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid PluginProxy::proxiesForURL(const String& urlString, String& proxyString) 37665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 37765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch proxyString = m_pluginController->proxiesForURL(urlString); 37865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 37965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 38065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid PluginProxy::cookiesForURL(const String& urlString, String& cookieString) 38165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 38265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch cookieString = m_pluginController->cookiesForURL(urlString); 38365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 38465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 38565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid PluginProxy::setCookiesForURL(const String& urlString, const String& cookieString) 38665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 38765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_pluginController->setCookiesForURL(urlString, cookieString); 38865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 38965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 39065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid PluginProxy::getWindowScriptNPObject(uint64_t& windowScriptNPObjectID) 39165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 39265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch NPObject* windowScriptNPObject = m_pluginController->windowScriptNPObject(); 39365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (!windowScriptNPObject) { 39465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch windowScriptNPObjectID = 0; 39565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return; 39665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } 39765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 3982bde8e466a4451c7319e3a072d118917957d6554Steve Block windowScriptNPObjectID = m_connection->npRemoteObjectMap()->registerNPObject(windowScriptNPObject, this); 39965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch releaseNPObject(windowScriptNPObject); 40065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 40165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 40265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid PluginProxy::getPluginElementNPObject(uint64_t& pluginElementNPObjectID) 40365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 40465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch NPObject* pluginElementNPObject = m_pluginController->pluginElementNPObject(); 40565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (!pluginElementNPObject) { 40665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch pluginElementNPObjectID = 0; 40765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return; 40865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } 40965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 4102bde8e466a4451c7319e3a072d118917957d6554Steve Block pluginElementNPObjectID = m_connection->npRemoteObjectMap()->registerNPObject(pluginElementNPObject, this); 41165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch releaseNPObject(pluginElementNPObject); 41265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 41365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 41465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid PluginProxy::evaluate(const NPVariantData& npObjectAsVariantData, const String& scriptString, bool allowPopups, bool& returnValue, NPVariantData& resultData) 41565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 41681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch PluginController::PluginDestructionProtector protector(m_pluginController); 41781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 4182bde8e466a4451c7319e3a072d118917957d6554Steve Block NPVariant npObjectAsVariant = m_connection->npRemoteObjectMap()->npVariantDataToNPVariant(npObjectAsVariantData, this); 4192bde8e466a4451c7319e3a072d118917957d6554Steve Block if (!NPVARIANT_IS_OBJECT(npObjectAsVariant) || !(NPVARIANT_TO_OBJECT(npObjectAsVariant))) { 4202bde8e466a4451c7319e3a072d118917957d6554Steve Block returnValue = false; 4212bde8e466a4451c7319e3a072d118917957d6554Steve Block return; 4222bde8e466a4451c7319e3a072d118917957d6554Steve Block } 4232bde8e466a4451c7319e3a072d118917957d6554Steve Block 42465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch NPVariant result; 42565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch returnValue = m_pluginController->evaluate(NPVARIANT_TO_OBJECT(npObjectAsVariant), scriptString, &result, allowPopups); 42665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (!returnValue) 42765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch return; 42865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 42965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Convert the NPVariant to an NPVariantData. 4302bde8e466a4451c7319e3a072d118917957d6554Steve Block resultData = m_connection->npRemoteObjectMap()->npVariantToNPVariantData(result, this); 43165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 43265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // And release the result. 43365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch releaseNPVariantValue(&result); 43465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 43565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch releaseNPVariantValue(&npObjectAsVariant); 43665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 43765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 43865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid PluginProxy::cancelStreamLoad(uint64_t streamID) 43965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 44065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_pluginController->cancelStreamLoad(streamID); 44165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 44265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 44365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid PluginProxy::cancelManualStreamLoad() 44465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 44565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_pluginController->cancelManualStreamLoad(); 44665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 44765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 44865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid PluginProxy::setStatusbarText(const String& statusbarText) 44965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 45065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_pluginController->setStatusbarText(statusbarText); 45165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 45265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 45365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#if PLATFORM(MAC) 45465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid PluginProxy::setComplexTextInputEnabled(bool complexTextInputEnabled) 45565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 45665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_pluginController->setComplexTextInputEnabled(complexTextInputEnabled); 45765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 45865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#endif 45965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 46065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid PluginProxy::update(const IntRect& paintedRect) 46165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{ 46265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (paintedRect == m_frameRect) 46365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_pluginBackingStoreContainsValidData = true; 46465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 46565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch IntRect paintedRectPluginCoordinates = paintedRect; 46665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch paintedRectPluginCoordinates.move(-m_frameRect.x(), -m_frameRect.y()); 46765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 46865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch if (m_backingStore) { 46965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Blit the plug-in backing store into our own backing store. 47065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch OwnPtr<GraphicsContext> graphicsContext = m_backingStore->createGraphicsContext(); 4712bde8e466a4451c7319e3a072d118917957d6554Steve Block graphicsContext->setCompositeOperation(CompositeCopy); 47265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_pluginBackingStore->paint(*graphicsContext, paintedRectPluginCoordinates.location(), 47365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch paintedRectPluginCoordinates); 47465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch } 47565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 47665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch // Ask the controller to invalidate the rect for us. 47765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_waitingForPaintInResponseToUpdate = true; 47865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch m_pluginController->invalidate(paintedRectPluginCoordinates); 47965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} 48065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 48165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} // namespace WebKit 48265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 48365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#endif // ENABLE(PLUGIN_PROCESS) 484