void PluginStream::cancelAndDestroyStream(NPReason reason) { RefPtr<PluginStream> protect(this); destroyStream(reason); stop(); }
void PluginStream::deliverData() { ASSERT(m_deliveryData); if (m_streamState == StreamStopped) // FIXME: We should cancel our job in the SubresourceLoader on error so we don't reach this case return; ASSERT(m_streamState != StreamBeforeStarted); if (!m_stream.ndata || m_deliveryData->size() == 0) return; int32_t totalBytes = m_deliveryData->size(); int32_t totalBytesDelivered = 0; if (m_loader) m_loader->setDefersLoading(true); while (totalBytesDelivered < totalBytes) { int32_t deliveryBytes = m_pluginFuncs->writeready(m_instance, &m_stream); if (deliveryBytes <= 0) { m_delayDeliveryTimer.startOneShot(0); break; } else { deliveryBytes = min(deliveryBytes, totalBytes - totalBytesDelivered); int32_t dataLength = deliveryBytes; char* data = m_deliveryData->data() + totalBytesDelivered; // Write the data deliveryBytes = m_pluginFuncs->write(m_instance, &m_stream, m_offset, dataLength, (void*)data); if (deliveryBytes < 0) { LOG_PLUGIN_NET_ERROR(); if (m_loader) m_loader->setDefersLoading(false); cancelAndDestroyStream(NPRES_NETWORK_ERR); return; } deliveryBytes = min(deliveryBytes, dataLength); m_offset += deliveryBytes; totalBytesDelivered += deliveryBytes; } } if (m_loader) m_loader->setDefersLoading(false); if (totalBytesDelivered > 0) { if (totalBytesDelivered < totalBytes) { int remainingBytes = totalBytes - totalBytesDelivered; memmove(m_deliveryData->data(), m_deliveryData->data() + totalBytesDelivered, remainingBytes); m_deliveryData->resize(remainingBytes); } else { m_deliveryData->resize(0); if (m_reason != WebReasonNone) destroyStream(); } } }
void PluginStream::didFinishLoading(NetscapePlugInStreamLoader* loader) { ASSERT(loader == m_loader); ASSERT(m_streamState == StreamStarted); // destroyStream can result in our being deleted RefPtr<PluginStream> protect(this); destroyStream(NPRES_DONE); m_loader = 0; }
void PluginStream::didFail(NetscapePlugInStreamLoader* loader, const ResourceError&) { ASSERT(loader == m_loader); LOG_PLUGIN_NET_ERROR(); // destroyStream can result in our being deleted RefPtr<PluginStream> protect(this); destroyStream(NPRES_NETWORK_ERR); m_loader = 0; }
void PluginStream::destroyStream(NPReason reason) { m_reason = reason; if (m_reason != NPRES_DONE) { // Stop any pending data from being streamed if (m_deliveryData) m_deliveryData->resize(0); } else if (m_deliveryData && m_deliveryData->size() > 0) { // There is more data to be streamed, don't destroy the stream now. return; } destroyStream(); }
void PluginStream::sendJavaScriptStream(const KURL& requestURL, const CString& resultString) { didReceiveResponse(0, ResourceResponse(requestURL, "text/plain", resultString.length(), "", "")); if (m_streamState == StreamStopped) return; if (!resultString.isNull()) { didReceiveData(0, resultString.data(), resultString.length()); if (m_streamState == StreamStopped) return; } m_loader = 0; destroyStream(resultString.isNull() ? NPRES_NETWORK_ERR : NPRES_DONE); }
void Display::terminate() { makeCurrent(nullptr, nullptr, nullptr); while (!mContextSet.empty()) { destroyContext(*mContextSet.begin()); } while (!mImageSet.empty()) { destroyImage(*mImageSet.begin()); } while (!mStreamSet.empty()) { destroyStream(*mStreamSet.begin()); } while (!mImplementation->getSurfaceSet().empty()) { destroySurface(*mImplementation->getSurfaceSet().begin()); } mConfigSet.clear(); if (mDevice != nullptr && mDevice->getOwningDisplay() != nullptr) { // Don't delete the device if it was created externally using eglCreateDeviceANGLE // We also shouldn't set it to null in case eglInitialize() is called again later SafeDelete(mDevice); } mImplementation->terminate(); mInitialized = false; // Never de-init default platform.. terminate is not that final. }
static bool pluginInvoke(NPObject* header, NPIdentifier name, const NPVariant* args, uint32_t argCount, NPVariant* result) { PluginObject* plugin = reinterpret_cast<PluginObject*>(header); if (name == pluginMethodIdentifiers[ID_TEST_CALLBACK_METHOD]) return testCallback(plugin, args, argCount, result); if (name == pluginMethodIdentifiers[ID_TEST_CALLBACK_METHOD_RETURN]) return testCallbackReturn(plugin, args, argCount, result); if (name == pluginMethodIdentifiers[ID_TEST_GETURL]) return getURL(plugin, args, argCount, result); if (name == pluginMethodIdentifiers[ID_TEST_DOM_ACCESS]) return testDOMAccess(plugin, args, argCount, result); if (name == pluginMethodIdentifiers[ID_TEST_GET_URL_NOTIFY]) return getURLNotify(plugin, args, argCount, result); if (name == pluginMethodIdentifiers[ID_TEST_INVOKE_DEFAULT]) return testInvokeDefault(plugin, args, argCount, result); if (name == pluginMethodIdentifiers[ID_TEST_ENUMERATE]) return testEnumerate(plugin, args, argCount, result); if (name == pluginMethodIdentifiers[ID_DESTROY_STREAM]) return destroyStream(plugin, args, argCount, result); if (name == pluginMethodIdentifiers[ID_TEST_GETINTIDENTIFIER]) return testGetIntIdentifier(plugin, args, argCount, result); if (name == pluginMethodIdentifiers[ID_TEST_EVALUATE]) return testEvaluate(plugin, args, argCount, result); if (name == pluginMethodIdentifiers[ID_TEST_GET_PROPERTY]) return testGetProperty(plugin, args, argCount, result); if (name == pluginMethodIdentifiers[ID_TEST_GET_PROPERTY_RETURN_VALUE]) return testGetPropertyReturnValue(plugin, args, argCount, result); if (name == pluginMethodIdentifiers[ID_TEST_HAS_PROPERTY]) return testHasProperty(plugin, args, argCount, result); if (name == pluginMethodIdentifiers[ID_TEST_HAS_METHOD]) return testHasMethod(plugin, args, argCount, result); if (name == pluginMethodIdentifiers[ID_TEST_IDENTIFIER_TO_STRING]) return testIdentifierToString(plugin, args, argCount, result); if (name == pluginMethodIdentifiers[ID_TEST_IDENTIFIER_TO_INT]) return testIdentifierToInt(plugin, args, argCount, result); if (name == pluginMethodIdentifiers[ID_TEST_PASS_TEST_OBJECT]) return testPassTestObject(plugin, args, argCount, result); if (name == pluginMethodIdentifiers[ID_TEST_POSTURL_FILE]) return testPostURLFile(plugin, args, argCount, result); if (name == pluginMethodIdentifiers[ID_TEST_CONSTRUCT]) return testConstruct(plugin, args, argCount, result); if (name == pluginMethodIdentifiers[ID_TEST_SCRIPT_OBJECT_INVOKE]) return testScriptObjectInvoke(plugin, args, argCount, result); if (name == pluginMethodIdentifiers[ID_TEST_THROW_EXCEPTION_METHOD]) { browser->setexception(header, "plugin object testThrowException SUCCESS"); return true; } if (name == pluginMethodIdentifiers[ID_TEST_FAIL_METHOD]) { NPObject* windowScriptObject; browser->getvalue(plugin->npp, NPNVWindowNPObject, &windowScriptObject); browser->invoke(plugin->npp, windowScriptObject, name, args, argCount, result); return false; } if (name == pluginMethodIdentifiers[ID_TEST_CLONE_OBJECT]) { NPObject* new_object = browser->createobject(plugin->npp, &pluginClass); assert(new_object->referenceCount == 1); OBJECT_TO_NPVARIANT(new_object, *result); return true; } if (name == pluginMethodIdentifiers[ID_TEST_CREATE_TEST_OBJECT]) { NPObject* testObject = browser->createobject(plugin->npp, getTestClass()); assert(testObject->referenceCount == 1); OBJECT_TO_NPVARIANT(testObject, *result); return true; } if (name == pluginMethodIdentifiers[ID_DESTROY_NULL_STREAM]) return destroyNullStream(plugin, args, argCount, result); if (name == pluginMethodIdentifiers[ID_TEST_RELOAD_PLUGINS_NO_PAGES]) { browser->reloadplugins(false); return true; } if (name == pluginMethodIdentifiers[ID_TEST_RELOAD_PLUGINS_AND_PAGES]) { browser->reloadplugins(true); return true; } if (name == pluginMethodIdentifiers[ID_TEST_GET_BROWSER_PROPERTY]) { browser->getproperty(plugin->npp, NPVARIANT_TO_OBJECT(args[0]), stringVariantToIdentifier(args[1]), result); return true; } if (name == pluginMethodIdentifiers[ID_TEST_SET_BROWSER_PROPERTY]) { browser->setproperty(plugin->npp, NPVARIANT_TO_OBJECT(args[0]), stringVariantToIdentifier(args[1]), &args[2]); return true; } if (name == pluginMethodIdentifiers[ID_REMEMBER]) { if (plugin->rememberedObject) browser->releaseobject(plugin->rememberedObject); plugin->rememberedObject = NPVARIANT_TO_OBJECT(args[0]); browser->retainobject(plugin->rememberedObject); VOID_TO_NPVARIANT(*result); return true; } if (name == pluginMethodIdentifiers[ID_GET_REMEMBERED_OBJECT]) { assert(plugin->rememberedObject); browser->retainobject(plugin->rememberedObject); OBJECT_TO_NPVARIANT(plugin->rememberedObject, *result); return true; } if (name == pluginMethodIdentifiers[ID_GET_AND_FORGET_REMEMBERED_OBJECT]) { assert(plugin->rememberedObject); OBJECT_TO_NPVARIANT(plugin->rememberedObject, *result); plugin->rememberedObject = 0; return true; } if (name == pluginMethodIdentifiers[ID_REF_COUNT]) { uint32_t refCount = NPVARIANT_TO_OBJECT(args[0])->referenceCount; INT32_TO_NPVARIANT(refCount, *result); return true; } if (name == pluginMethodIdentifiers[ID_SET_STATUS]) return testSetStatus(plugin, args, argCount, result); if (name == pluginMethodIdentifiers[ID_RESIZE_TO]) return testResizeTo(plugin, args, argCount, result); if (name == pluginMethodIdentifiers[ID_NORMALIZE]) return normalizeOverride(plugin, args, argCount, result); if (name == pluginMethodIdentifiers[ID_INVALIDATE_RECT]) return invalidateRect(plugin, args, argCount, result); if (name == pluginMethodIdentifiers[ID_OBJECTS_ARE_SAME]) return objectsAreSame(plugin, args, argCount, result); return false; }
AsyncSecureStream::~AsyncSecureStream() { destroyStream(&_stream.lowest_layer(), _connected); }