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