15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/* 25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 1999 Lars Knoll (knoll@kde.org) 35c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * (C) 1999 Antti Koivisto (koivisto@kde.org) 45c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * (C) 2000 Stefan Schimanski (1Stein@gmx.de) 55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2004, 2005, 2006, 2008, 2009, 2012 Apple Inc. All rights reserved. 65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies) 75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * This library is free software; you can redistribute it and/or 95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * modify it under the terms of the GNU Library General Public 105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * License as published by the Free Software Foundation; either 115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * version 2 of the License, or (at your option) any later version. 125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * This library is distributed in the hope that it will be useful, 145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * but WITHOUT ANY WARRANTY; without even the implied warranty of 155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Library General Public License for more details. 175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * You should have received a copy of the GNU Library General Public License 195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * along with this library; see the file COPYING.LIB. If not, write to 205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Boston, MA 02110-1301, USA. 225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "config.h" 2553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/html/HTMLAppletElement.h" 265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "HTMLNames.h" 28a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)#include "core/dom/shadow/ShadowRoot.h" 2953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/html/HTMLParamElement.h" 3053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/loader/FrameLoader.h" 31fff8884795cb540f87cf6e6d67b629519b00eb8bBen Murdoch#include "core/loader/FrameLoaderClient.h" 321e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)#include "core/frame/ContentSecurityPolicy.h" 331e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)#include "core/frame/Frame.h" 34e08f70592b3fc0d5e68b9b914c9196e813720070Torne (Richard Coles)#include "core/frame/Settings.h" 3553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/rendering/RenderApplet.h" 361e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)#include "platform/Widget.h" 37a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)#include "platform/weborigin/KURL.h" 3851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)#include "platform/weborigin/SecurityOrigin.h" 395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)namespace WebCore { 415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)using namespace HTMLNames; 435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)HTMLAppletElement::HTMLAppletElement(Document& document, bool createdByParser) 4551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) : HTMLPlugInElement(appletTag, document, createdByParser, ShouldNotPreferPlugInsForImages) 465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 4753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) ScriptWrappable::init(this); 485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_serviceType = "application/x-java-applet"; 505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)PassRefPtr<HTMLAppletElement> HTMLAppletElement::create(Document& document, bool createdByParser) 535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 54a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) RefPtr<HTMLAppletElement> element = adoptRef(new HTMLAppletElement(document, createdByParser)); 55a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) element->ensureUserAgentShadowRoot(); 56a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) return element.release(); 575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 59926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)void HTMLAppletElement::parseAttribute(const QualifiedName& name, const AtomicString& value) 605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 61926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (name == altAttr 62926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) || name == archiveAttr 63926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) || name == codeAttr 64926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) || name == codebaseAttr 65926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) || name == mayscriptAttr 66926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) || name == objectAttr) { 675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Do nothing. 685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 71f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) HTMLPlugInElement::parseAttribute(name, value); 725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)bool HTMLAppletElement::isURLAttribute(const Attribute& attribute) const 7551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles){ 7651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) return attribute.name() == codebaseAttr || attribute.name() == objectAttr 7751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) || HTMLPlugInElement::isURLAttribute(attribute); 7851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)} 7951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 808abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)bool HTMLAppletElement::rendererIsNeeded(const RenderStyle& style) 815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 82a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) if (!fastHasAttribute(codeAttr) && !hasAuthorShadowRoot()) 835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 84f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) return HTMLPlugInElement::rendererIsNeeded(style); 855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 87591b958dee2cf159d33a0b931e6231072eaf38d5Ben MurdochRenderObject* HTMLAppletElement::createRenderer(RenderStyle* style) 885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 89a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) if (!canEmbedJava() || hasAuthorShadowRoot()) 905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return RenderObject::createObject(this, style); 915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 92f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) return new RenderApplet(this); 935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)RenderWidget* HTMLAppletElement::renderWidgetForJSBindings() const 965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!canEmbedJava()) 985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return 0; 99f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) return HTMLPlugInElement::renderWidgetForJSBindings(); 100c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)} 1015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 102c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)RenderWidget* HTMLAppletElement::existingRenderWidget() const 103c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles){ 1045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return renderPart(); 1055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 107a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)void HTMLAppletElement::updateWidgetInternal() 1085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 109a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) ASSERT(!m_isDelayingLoadEvent); 1105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) setNeedsWidgetUpdate(false); 1115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // FIXME: This should ASSERT isFinishedParsingChildren() instead. 1125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!isFinishedParsingChildren()) 1135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 1145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) RenderEmbeddedObject* renderer = renderEmbeddedObject(); 1165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1178abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) Frame* frame = document().frame(); 118fff8884795cb540f87cf6e6d67b629519b00eb8bBen Murdoch ASSERT(frame); 119fff8884795cb540f87cf6e6d67b629519b00eb8bBen Murdoch 1205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) LayoutUnit contentWidth = renderer->style()->width().isFixed() ? LayoutUnit(renderer->style()->width().value()) : 1215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) renderer->width() - renderer->borderAndPaddingWidth(); 1225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) LayoutUnit contentHeight = renderer->style()->height().isFixed() ? LayoutUnit(renderer->style()->height().value()) : 1235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) renderer->height() - renderer->borderAndPaddingHeight(); 1245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) Vector<String> paramNames; 1265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) Vector<String> paramValues; 1275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) const AtomicString& codeBase = getAttribute(codebaseAttr); 1295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!codeBase.isNull()) { 1308abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) KURL codeBaseURL = document().completeURL(codeBase); 1315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) paramNames.append("codeBase"); 1325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) paramValues.append(codeBase.string()); 1335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 1345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) const AtomicString& archive = getAttribute(archiveAttr); 1365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!archive.isNull()) { 1375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) paramNames.append("archive"); 1385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) paramValues.append(archive.string()); 1395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 1405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 141a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) const AtomicString& code = getAttribute(codeAttr); 142a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) paramNames.append("code"); 143a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) paramValues.append(code.string()); 144a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) 145a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) // If the 'codebase' attribute is set, it serves as a relative root for the file that the Java 146a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) // plugin will load. If the 'code' attribute is set, and the 'archive' is not set, then we need 147a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) // to check the url generated by resolving 'code' against 'codebase'. If the 'archive' 148a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) // attribute is set, then 'code' points to a class inside the archive, so we need to check the 149a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) // url generated by resolving 'archive' against 'codebase'. 150a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) KURL urlToCheck; 151a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) KURL rootURL = codeBase.isNull() ? document().url() : document().completeURL(codeBase); 152a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) if (!archive.isNull()) 153a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) urlToCheck = KURL(rootURL, archive); 154a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) else if (!code.isNull()) 155a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) urlToCheck = KURL(rootURL, code); 156a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) if (!canEmbedURL(urlToCheck)) 157a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) return; 158a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) 159a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) const AtomicString& name = document().isHTMLDocument() ? getNameAttribute() : getIdAttribute(); 160a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) if (!name.isNull()) { 161a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) paramNames.append("name"); 162a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) paramValues.append(name.string()); 163a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) } 164a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) 1655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) paramNames.append("baseURL"); 1668abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) KURL baseURL = document().baseURL(); 167fff8884795cb540f87cf6e6d67b629519b00eb8bBen Murdoch paramValues.append(baseURL.string()); 1685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) const AtomicString& mayScript = getAttribute(mayscriptAttr); 1705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!mayScript.isNull()) { 1715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) paramNames.append("mayScript"); 1725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) paramValues.append(mayScript.string()); 1735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 1745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) for (Node* child = firstChild(); child; child = child->nextSibling()) { 1765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!child->hasTagName(paramTag)) 1775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) continue; 1785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1798abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) HTMLParamElement* param = toHTMLParamElement(child); 1805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (param->name().isEmpty()) 1815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) continue; 1825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) paramNames.append(param->name()); 1845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) paramValues.append(param->value()); 1855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 1865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 187fff8884795cb540f87cf6e6d67b629519b00eb8bBen Murdoch RefPtr<Widget> widget; 188f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) if (frame->loader().allowPlugins(AboutToInstantiatePlugin)) 189f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) widget = frame->loader().client()->createJavaAppletWidget(roundedIntSize(LayoutSize(contentWidth, contentHeight)), this, baseURL, paramNames, paramValues); 1905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 191fff8884795cb540f87cf6e6d67b629519b00eb8bBen Murdoch if (!widget) { 192fff8884795cb540f87cf6e6d67b629519b00eb8bBen Murdoch if (!renderer->showsUnavailablePluginIndicator()) 193fff8884795cb540f87cf6e6d67b629519b00eb8bBen Murdoch renderer->setPluginUnavailabilityReason(RenderEmbeddedObject::PluginMissing); 194fff8884795cb540f87cf6e6d67b629519b00eb8bBen Murdoch return; 195fff8884795cb540f87cf6e6d67b629519b00eb8bBen Murdoch } 19619cde67944066db31e633d9e386f2aa9bf9fadb3Torne (Richard Coles) document().setContainsPlugins(); 197fff8884795cb540f87cf6e6d67b629519b00eb8bBen Murdoch renderer->setWidget(widget); 1985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool HTMLAppletElement::canEmbedJava() const 2015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2028abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) if (document().isSandboxed(SandboxPlugins)) 2035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 2045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2058abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) Settings* settings = document().settings(); 2065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!settings) 2075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 2085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 209e08f70592b3fc0d5e68b9b914c9196e813720070Torne (Richard Coles) if (!settings->javaEnabled()) 2105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 2115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return true; 2135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 215a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)bool HTMLAppletElement::canEmbedURL(const KURL& url) const 216a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles){ 217a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) DEFINE_STATIC_LOCAL(String, appletMimeType, ("application/x-java-applet")); 218a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) 219a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) if (!document().securityOrigin()->canDisplay(url)) { 220a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) FrameLoader::reportLocalLoadFailed(document().frame(), url.string()); 221a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) return false; 222a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) } 223a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) 224a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) if (!document().contentSecurityPolicy()->allowObjectFromSource(url) 225a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) || !document().contentSecurityPolicy()->allowPluginType(appletMimeType, appletMimeType, url)) { 226a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) renderEmbeddedObject()->setPluginUnavailabilityReason(RenderEmbeddedObject::PluginBlockedByContentSecurityPolicy); 227a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) return false; 228a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) } 229a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) return true; 230a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)} 231a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) 2325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 233