void WebProcessConnection::createPlugin(const PluginCreationParameters& creationParameters, PassRefPtr<Messages::WebProcessConnection::CreatePlugin::DelayedReply> reply) { PluginControllerProxy* pluginControllerProxy = m_pluginControllers.get(creationParameters.pluginInstanceID); // The controller proxy for the plug-in we're being asked to create synchronously might already exist if it was requested asynchronously before. if (pluginControllerProxy) { // It might still be in the middle of initialization in which case we have to let that initialization complete and respond to this message later. if (pluginControllerProxy->isInitializing()) { pluginControllerProxy->setInitializationReply(reply); return; } // If its initialization is complete then we need to respond to this message with the correct information about its creation. #if PLATFORM(MAC) reply->send(true, pluginControllerProxy->wantsWheelEvents(), pluginControllerProxy->remoteLayerClientID()); #else reply->send(true, pluginControllerProxy->wantsWheelEvents(), 0); #endif return; } // The plugin we're supposed to create might have been requested asynchronously before. // In that case we need to create it synchronously now but flag the instance ID so we don't recreate it asynchronously later. if (creationParameters.asynchronousCreationIncomplete) m_asynchronousInstanceIDsToIgnore.add(creationParameters.pluginInstanceID); bool result = false; bool wantsWheelEvents = false; uint32_t remoteLayerClientID = 0; createPluginInternal(creationParameters, result, wantsWheelEvents, remoteLayerClientID); reply->send(result, wantsWheelEvents, remoteLayerClientID); }
void WebProcessConnection::createPluginInternal(const PluginCreationParameters& creationParameters, bool& result, bool& wantsWheelEvents, uint32_t& remoteLayerClientID) { OwnPtr<PluginControllerProxy> pluginControllerProxy = PluginControllerProxy::create(this, creationParameters); PluginControllerProxy* pluginControllerProxyPtr = pluginControllerProxy.get(); // Make sure to add the proxy to the map before initializing it, since the plug-in might call out to the web process from // its NPP_New function. This will hand over ownership of the proxy to the web process connection. addPluginControllerProxy(pluginControllerProxy.release()); // Now try to initialize the plug-in. result = pluginControllerProxyPtr->initialize(creationParameters); if (!result) return; wantsWheelEvents = pluginControllerProxyPtr->wantsWheelEvents(); #if PLATFORM(MAC) remoteLayerClientID = pluginControllerProxyPtr->remoteLayerClientID(); #else UNUSED_PARAM(remoteLayerClientID); #endif }