static NPError NPN_GetURLNotify(NPP npp, const char* url, const char* target, void* notifyData) { if (!url) return NPERR_GENERIC_ERROR; RefPtr<NetscapePlugin> plugin = NetscapePlugin::fromNPP(npp); plugin->loadURL("GET", makeURLString(url), target, HTTPHeaderMap(), Vector<uint8_t>(), true, notifyData); return NPERR_NO_ERROR; }
bool NetscapePlugin::initialize(const Parameters& parameters) { uint16_t mode = parameters.isFullFramePlugin ? NP_FULL : NP_EMBED; m_shouldUseManualLoader = parameters.shouldUseManualLoader; CString mimeTypeCString = parameters.mimeType.utf8(); ASSERT(parameters.names.size() == parameters.values.size()); Vector<CString> paramNames; Vector<CString> paramValues; for (size_t i = 0; i < parameters.names.size(); ++i) { String parameterName = parameters.names[i]; #if PLUGIN_ARCHITECTURE(MAC) if (m_pluginModule->pluginQuirks().contains(PluginQuirks::WantsLowercaseParameterNames)) parameterName = parameterName.lower(); #endif paramNames.append(parameterName.utf8()); paramValues.append(parameters.values[i].utf8()); } // The strings that these pointers point to are kept alive by paramNames and paramValues. Vector<const char*> names; Vector<const char*> values; for (size_t i = 0; i < paramNames.size(); ++i) { names.append(paramNames[i].data()); values.append(paramValues[i].data()); } #if PLUGIN_ARCHITECTURE(MAC) if (m_pluginModule->pluginQuirks().contains(PluginQuirks::MakeOpaqueUnlessTransparentSilverlightBackgroundAttributeExists)) { for (size_t i = 0; i < parameters.names.size(); ++i) { if (equalIgnoringCase(parameters.names[i], "background")) { setIsTransparent(isTransparentSilverlightBackgroundValue(parameters.values[i].lower())); break; } } } m_layerHostingMode = parameters.layerHostingMode; #endif platformPreInitialize(); NetscapePlugin* previousNPPNewPlugin = currentNPPNewPlugin; m_inNPPNew = true; currentNPPNewPlugin = this; NPError error = NPP_New(const_cast<char*>(mimeTypeCString.data()), mode, names.size(), const_cast<char**>(names.data()), const_cast<char**>(values.data()), 0); m_inNPPNew = false; currentNPPNewPlugin = previousNPPNewPlugin; if (error != NPERR_NO_ERROR) return false; m_isStarted = true; // FIXME: This is not correct in all cases. m_npWindow.type = NPWindowTypeDrawable; if (!platformPostInitialize()) { destroy(); return false; } // Load the src URL if needed. if (!parameters.shouldUseManualLoader && !parameters.url.isEmpty() && shouldLoadSrcURL()) loadURL("GET", parameters.url.string(), String(), HTTPHeaderMap(), Vector<uint8_t>(), false, 0); return true; }
bool NetscapePlugin::initialize(PluginController* pluginController, const Parameters& parameters) { ASSERT(!m_pluginController); ASSERT(pluginController); m_pluginController = pluginController; uint16_t mode = parameters.loadManually ? NP_FULL : NP_EMBED; m_loadManually = parameters.loadManually; CString mimeTypeCString = parameters.mimeType.utf8(); ASSERT(parameters.names.size() == parameters.values.size()); Vector<CString> paramNames; Vector<CString> paramValues; for (size_t i = 0; i < parameters.names.size(); ++i) { paramNames.append(parameters.names[i].utf8()); paramValues.append(parameters.values[i].utf8()); } // The strings that these pointers point to are kept alive by paramNames and paramValues. Vector<const char*> names; Vector<const char*> values; for (size_t i = 0; i < paramNames.size(); ++i) { names.append(paramNames[i].data()); values.append(paramValues[i].data()); } #if PLATFORM(MAC) if (m_pluginModule->pluginQuirks().contains(PluginQuirks::MakeTransparentIfBackgroundAttributeExists)) { for (size_t i = 0; i < parameters.names.size(); ++i) { if (equalIgnoringCase(parameters.names[i], "background")) { setIsTransparent(true); break; } } } #endif NetscapePlugin* previousNPPNewPlugin = currentNPPNewPlugin; m_inNPPNew = true; currentNPPNewPlugin = this; NPError error = NPP_New(const_cast<char*>(mimeTypeCString.data()), mode, names.size(), const_cast<char**>(names.data()), const_cast<char**>(values.data()), 0); m_inNPPNew = false; currentNPPNewPlugin = previousNPPNewPlugin; if (error != NPERR_NO_ERROR) return false; m_isStarted = true; // FIXME: This is not correct in all cases. m_npWindow.type = NPWindowTypeDrawable; if (!platformPostInitialize()) { destroy(); return false; } // Load the src URL if needed. if (!parameters.loadManually && !parameters.url.isEmpty() && shouldLoadSrcURL()) loadURL("GET", parameters.url.string(), String(), HTTPHeaderMap(), Vector<uint8_t>(), false, 0); return true; }
bool NetscapePlugin::initialize(const Parameters& parameters) { uint16_t mode = parameters.isFullFramePlugin ? NP_FULL : NP_EMBED; m_shouldUseManualLoader = parameters.shouldUseManualLoader; CString mimeTypeCString = parameters.mimeType.utf8(); ASSERT(parameters.names.size() == parameters.values.size()); Vector<CString> paramNames; Vector<CString> paramValues; for (size_t i = 0; i < parameters.names.size(); ++i) { String parameterName = parameters.names[i]; #if PLUGIN_ARCHITECTURE(MAC) if (m_pluginModule->pluginQuirks().contains(PluginQuirks::WantsLowercaseParameterNames)) parameterName = parameterName.lower(); #endif paramNames.append(parameterName.utf8()); paramValues.append(parameters.values[i].utf8()); } #if PLUGIN_ARCHITECTURE(X11) if (equalIgnoringCase(parameters.mimeType, "application/x-shockwave-flash")) { size_t wmodeIndex = parameters.names.find("wmode"); if (wmodeIndex != notFound) { // Transparent window mode is not supported by X11 backend. if (equalIgnoringCase(parameters.values[wmodeIndex], "transparent") || ((m_pluginModule->pluginQuirks().contains(PluginQuirks::ForceFlashWindowlessMode) && equalIgnoringCase(parameters.values[wmodeIndex], "window"))) || m_pluginModule->pluginQuirks().contains(PluginQuirks::DoNotCancelSrcStreamInWindowedMode)) paramValues[wmodeIndex] = "opaque"; } else if (m_pluginModule->pluginQuirks().contains(PluginQuirks::ForceFlashWindowlessMode) //add by luyue // support notFound wmode || m_pluginModule->pluginQuirks().contains(PluginQuirks::DoNotCancelSrcStreamInWindowedMode)) { paramNames.append("wmode"); paramValues.append("opaque"); } } else if (equalIgnoringCase(parameters.mimeType, "application/x-webkit-test-netscape")) { paramNames.append("windowedPlugin"); paramValues.append("false"); } #endif // The strings that these pointers point to are kept alive by paramNames and paramValues. Vector<const char*> names; Vector<const char*> values; for (size_t i = 0; i < paramNames.size(); ++i) { names.append(paramNames[i].data()); values.append(paramValues[i].data()); } #if PLUGIN_ARCHITECTURE(MAC) if (m_pluginModule->pluginQuirks().contains(PluginQuirks::MakeOpaqueUnlessTransparentSilverlightBackgroundAttributeExists)) { for (size_t i = 0; i < parameters.names.size(); ++i) { if (equalIgnoringCase(parameters.names[i], "background")) { setIsTransparent(isTransparentSilverlightBackgroundValue(parameters.values[i].lower())); break; } } } m_layerHostingMode = parameters.layerHostingMode; #endif platformPreInitialize(); NetscapePlugin* previousNPPNewPlugin = currentNPPNewPlugin; m_inNPPNew = true; currentNPPNewPlugin = this; NPError error = NPP_New(const_cast<char*>(mimeTypeCString.data()), mode, names.size(), const_cast<char**>(names.data()), const_cast<char**>(values.data()), 0); m_inNPPNew = false; currentNPPNewPlugin = previousNPPNewPlugin; if (error != NPERR_NO_ERROR) return false; m_isStarted = true; // FIXME: This is not correct in all cases. m_npWindow.type = NPWindowTypeDrawable; if (!platformPostInitialize()) { destroy(); return false; } // Load the src URL if needed. if (!parameters.shouldUseManualLoader && !parameters.url.isEmpty() && shouldLoadSrcURL()) loadURL("GET", parameters.url.string(), String(), HTTPHeaderMap(), Vector<uint8_t>(), false, 0); return true; }