bool HTMLPlugInImageElement::isTopLevelFullPagePlugin(const RenderEmbeddedObject& renderer) const { Frame& frame = *document().frame(); if (!frame.isMainFrame()) return false; auto& style = renderer.style(); IntSize visibleSize = frame.view()->visibleSize(); LayoutRect contentRect = renderer.contentBoxRect(); int contentWidth = contentRect.width(); int contentHeight = contentRect.height(); return is100Percent(style.width()) && is100Percent(style.height()) && contentWidth * contentHeight > visibleSize.area() * sizingFullPageAreaRatioThreshold; }
void HTMLAppletElement::updateWidget(PluginCreationOption pluginCreationOption) { setNeedsWidgetUpdate(false); // FIXME: This should ASSERT isFinishedParsingChildren() instead. if (!isFinishedParsingChildren()) return; #if PLATFORM(IOS) UNUSED_PARAM(pluginCreationOption); #else // FIXME: It's sadness that we have this special case here. // See http://trac.webkit.org/changeset/25128 and // plugins/netscape-plugin-setwindow-size.html if (pluginCreationOption == CreateOnlyNonNetscapePlugins) { // Ensure updateWidget() is called again during layout to create the Netscape plug-in. setNeedsWidgetUpdate(true); return; } RenderEmbeddedObject* renderer = renderEmbeddedObject(); LayoutUnit contentWidth = renderer->style().width().isFixed() ? LayoutUnit(renderer->style().width().value()) : renderer->width() - renderer->horizontalBorderAndPaddingExtent(); LayoutUnit contentHeight = renderer->style().height().isFixed() ? LayoutUnit(renderer->style().height().value()) : renderer->height() - renderer->verticalBorderAndPaddingExtent(); Vector<String> paramNames; Vector<String> paramValues; paramNames.append("code"); paramValues.append(fastGetAttribute(codeAttr).string()); const AtomicString& codeBase = fastGetAttribute(codebaseAttr); if (!codeBase.isNull()) { paramNames.append(ASCIILiteral("codeBase")); paramValues.append(codeBase.string()); } const AtomicString& name = document().isHTMLDocument() ? getNameAttribute() : getIdAttribute(); if (!name.isNull()) { paramNames.append("name"); paramValues.append(name.string()); } const AtomicString& archive = fastGetAttribute(archiveAttr); if (!archive.isNull()) { paramNames.append(ASCIILiteral("archive")); paramValues.append(archive.string()); } paramNames.append(ASCIILiteral("baseURL")); paramValues.append(document().baseURL().string()); const AtomicString& mayScript = fastGetAttribute(mayscriptAttr); if (!mayScript.isNull()) { paramNames.append(ASCIILiteral("mayScript")); paramValues.append(mayScript.string()); } for (auto& param : childrenOfType<HTMLParamElement>(*this)) { if (param.name().isEmpty()) continue; paramNames.append(param.name()); paramValues.append(param.value()); } Frame* frame = document().frame(); ASSERT(frame); renderer->setWidget(frame->loader().subframeLoader().createJavaAppletWidget(roundedIntSize(LayoutSize(contentWidth, contentHeight)), *this, paramNames, paramValues)); #endif // !PLATFORM(IOS) }
void HTMLAppletElement::updateWidget(PluginCreationOption) { setNeedsWidgetUpdate(false); // FIXME: This should ASSERT isFinishedParsingChildren() instead. if (!isFinishedParsingChildren()) return; RenderEmbeddedObject* renderer = renderEmbeddedObject(); Frame* frame = document().frame(); ASSERT(frame); LayoutUnit contentWidth = renderer->style()->width().isFixed() ? LayoutUnit(renderer->style()->width().value()) : renderer->width() - renderer->borderAndPaddingWidth(); LayoutUnit contentHeight = renderer->style()->height().isFixed() ? LayoutUnit(renderer->style()->height().value()) : renderer->height() - renderer->borderAndPaddingHeight(); Vector<String> paramNames; Vector<String> paramValues; paramNames.append("code"); paramValues.append(getAttribute(codeAttr).string()); const AtomicString& codeBase = getAttribute(codebaseAttr); if (!codeBase.isNull()) { KURL codeBaseURL = document().completeURL(codeBase); if (!document().securityOrigin()->canDisplay(codeBaseURL)) { FrameLoader::reportLocalLoadFailed(frame, codeBaseURL.string()); return; } const char javaAppletMimeType[] = "application/x-java-applet"; if (!document().contentSecurityPolicy()->allowObjectFromSource(codeBaseURL) || !document().contentSecurityPolicy()->allowPluginType(javaAppletMimeType, javaAppletMimeType, codeBaseURL)) return; paramNames.append("codeBase"); paramValues.append(codeBase.string()); } const AtomicString& name = document().isHTMLDocument() ? getNameAttribute() : getIdAttribute(); if (!name.isNull()) { paramNames.append("name"); paramValues.append(name.string()); } const AtomicString& archive = getAttribute(archiveAttr); if (!archive.isNull()) { paramNames.append("archive"); paramValues.append(archive.string()); } paramNames.append("baseURL"); KURL baseURL = document().baseURL(); paramValues.append(baseURL.string()); const AtomicString& mayScript = getAttribute(mayscriptAttr); if (!mayScript.isNull()) { paramNames.append("mayScript"); paramValues.append(mayScript.string()); } for (Node* child = firstChild(); child; child = child->nextSibling()) { if (!child->hasTagName(paramTag)) continue; HTMLParamElement* param = toHTMLParamElement(child); if (param->name().isEmpty()) continue; paramNames.append(param->name()); paramValues.append(param->value()); } RefPtr<Widget> widget; if (frame->loader()->allowPlugins(AboutToInstantiatePlugin)) widget = frame->loader()->client()->createJavaAppletWidget(roundedIntSize(LayoutSize(contentWidth, contentHeight)), this, baseURL, paramNames, paramValues); if (!widget) { if (!renderer->showsUnavailablePluginIndicator()) renderer->setPluginUnavailabilityReason(RenderEmbeddedObject::PluginMissing); return; } frame->loader()->setContainsPlugins(); renderer->setWidget(widget); }
void HTMLAppletElement::updateWidgetInternal() { ASSERT(!m_isDelayingLoadEvent); setNeedsWidgetUpdate(false); // FIXME: This should ASSERT isFinishedParsingChildren() instead. if (!isFinishedParsingChildren()) return; RenderEmbeddedObject* renderer = renderEmbeddedObject(); Frame* frame = document().frame(); ASSERT(frame); LayoutUnit contentWidth = renderer->style()->width().isFixed() ? LayoutUnit(renderer->style()->width().value()) : renderer->width() - renderer->borderAndPaddingWidth(); LayoutUnit contentHeight = renderer->style()->height().isFixed() ? LayoutUnit(renderer->style()->height().value()) : renderer->height() - renderer->borderAndPaddingHeight(); Vector<String> paramNames; Vector<String> paramValues; const AtomicString& codeBase = getAttribute(codebaseAttr); if (!codeBase.isNull()) { KURL codeBaseURL = document().completeURL(codeBase); paramNames.append("codeBase"); paramValues.append(codeBase.string()); } const AtomicString& archive = getAttribute(archiveAttr); if (!archive.isNull()) { paramNames.append("archive"); paramValues.append(archive.string()); } const AtomicString& code = getAttribute(codeAttr); paramNames.append("code"); paramValues.append(code.string()); // If the 'codebase' attribute is set, it serves as a relative root for the file that the Java // plugin will load. If the 'code' attribute is set, and the 'archive' is not set, then we need // to check the url generated by resolving 'code' against 'codebase'. If the 'archive' // attribute is set, then 'code' points to a class inside the archive, so we need to check the // url generated by resolving 'archive' against 'codebase'. KURL urlToCheck; KURL rootURL = codeBase.isNull() ? document().url() : document().completeURL(codeBase); if (!archive.isNull()) urlToCheck = KURL(rootURL, archive); else if (!code.isNull()) urlToCheck = KURL(rootURL, code); if (!canEmbedURL(urlToCheck)) return; const AtomicString& name = document().isHTMLDocument() ? getNameAttribute() : getIdAttribute(); if (!name.isNull()) { paramNames.append("name"); paramValues.append(name.string()); } paramNames.append("baseURL"); KURL baseURL = document().baseURL(); paramValues.append(baseURL.string()); const AtomicString& mayScript = getAttribute(mayscriptAttr); if (!mayScript.isNull()) { paramNames.append("mayScript"); paramValues.append(mayScript.string()); } for (Node* child = firstChild(); child; child = child->nextSibling()) { if (!child->hasTagName(paramTag)) continue; HTMLParamElement* param = toHTMLParamElement(child); if (param->name().isEmpty()) continue; paramNames.append(param->name()); paramValues.append(param->value()); } RefPtr<Widget> widget; if (frame->loader().allowPlugins(AboutToInstantiatePlugin)) widget = frame->loader().client()->createJavaAppletWidget(roundedIntSize(LayoutSize(contentWidth, contentHeight)), this, baseURL, paramNames, paramValues); if (!widget) { if (!renderer->showsUnavailablePluginIndicator()) renderer->setPluginUnavailabilityReason(RenderEmbeddedObject::PluginMissing); return; } document().setContainsPlugins(); renderer->setWidget(widget); }
void HTMLAppletElement::updateWidget(PluginCreationOption) { setNeedsWidgetUpdate(false); // FIXME: This should ASSERT isFinishedParsingChildren() instead. if (!isFinishedParsingChildren()) return; RenderEmbeddedObject* renderer = renderEmbeddedObject(); LayoutUnit contentWidth = renderer->style()->width().isFixed() ? LayoutUnit(renderer->style()->width().value()) : renderer->width() - renderer->borderAndPaddingWidth(); LayoutUnit contentHeight = renderer->style()->height().isFixed() ? LayoutUnit(renderer->style()->height().value()) : renderer->height() - renderer->borderAndPaddingHeight(); Vector<String> paramNames; Vector<String> paramValues; paramNames.append("code"); paramValues.append(getAttribute(codeAttr).string()); const AtomicString& codeBase = getAttribute(codebaseAttr); if (!codeBase.isNull()) { paramNames.append("codeBase"); paramValues.append(codeBase.string()); } const AtomicString& name = document()->isHTMLDocument() ? getNameAttribute() : getIdAttribute(); if (!name.isNull()) { paramNames.append("name"); paramValues.append(name.string()); } const AtomicString& archive = getAttribute(archiveAttr); if (!archive.isNull()) { paramNames.append("archive"); paramValues.append(archive.string()); } paramNames.append("baseURL"); paramValues.append(document()->baseURL().string()); const AtomicString& mayScript = getAttribute(mayscriptAttr); if (!mayScript.isNull()) { paramNames.append("mayScript"); paramValues.append(mayScript.string()); } for (Node* child = firstChild(); child; child = child->nextSibling()) { if (!child->hasTagName(paramTag)) continue; HTMLParamElement* param = static_cast<HTMLParamElement*>(child); if (param->name().isEmpty()) continue; paramNames.append(param->name()); paramValues.append(param->value()); } Frame* frame = document()->frame(); ASSERT(frame); renderer->setWidget(frame->loader()->subframeLoader()->createJavaAppletWidget(roundedIntSize(LayoutSize(contentWidth, contentHeight)), this, paramNames, paramValues)); }