18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/** 28e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Copyright (C) 1999 Lars Knoll (knoll@kde.org) 38e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * (C) 1999 Antti Koivisto (koivisto@kde.org) 48e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * (C) 2000 Stefan Schimanski (1Stein@gmx.de) 58e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Copyright (C) 2004, 2005, 2006 Apple Computer, Inc. 68e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 78e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * This library is free software; you can redistribute it and/or 88e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * modify it under the terms of the GNU Library General Public 98e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * License as published by the Free Software Foundation; either 108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * version 2 of the License, or (at your option) any later version. 118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * This library is distributed in the hope that it will be useful, 138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * but WITHOUT ANY WARRANTY; without even the implied warranty of 148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Library General Public License for more details. 168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * You should have received a copy of the GNU Library General Public License 188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * along with this library; see the file COPYING.LIB. If not, write to 198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Boston, MA 02110-1301, USA. 218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 225f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "config.h" 248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "HTMLPlugInElement.h" 258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "CSSPropertyNames.h" 278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "Document.h" 288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "Frame.h" 298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "FrameLoader.h" 308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "FrameTree.h" 318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "HTMLNames.h" 325f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian#include "MappedAttribute.h" 338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "Page.h" 348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "RenderWidget.h" 35635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#include "ScriptController.h" 368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "Settings.h" 378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "Widget.h" 388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if ENABLE(NETSCAPE_PLUGIN_API) 408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "npruntime_impl.h" 418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectnamespace WebCore { 448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectusing namespace HTMLNames; 468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectHTMLPlugInElement::HTMLPlugInElement(const QualifiedName& tagName, Document* doc) 485f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian : HTMLFrameOwnerElement(tagName, doc) 498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if ENABLE(NETSCAPE_PLUGIN_API) 508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project , m_NPObject(0) 518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectHTMLPlugInElement::~HTMLPlugInElement() 568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ASSERT(!m_instance); // cleared in detach() 588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if ENABLE(NETSCAPE_PLUGIN_API) 608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (m_NPObject) { 618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project _NPN_ReleaseObject(m_NPObject); 628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_NPObject = 0; 638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid HTMLPlugInElement::detach() 688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_instance.clear(); 708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project HTMLFrameOwnerElement::detach(); 718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 73635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source ProjectPassScriptInstance HTMLPlugInElement::getInstance() const 748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Frame* frame = document()->frame(); 768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!frame) 778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return 0; 788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // If the host dynamically turns off JavaScript (or Java) we will still return 808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // the cached allocated Bindings::Instance. Not supporting this edge-case is OK. 818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (m_instance) 82635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return m_instance; 838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project RenderWidget* renderWidget = renderWidgetForJSBindings(); 858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (renderWidget && renderWidget->widget()) 868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_instance = frame->script()->createScriptInstanceForWidget(renderWidget->widget()); 878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 88635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return m_instance; 898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectString HTMLPlugInElement::height() const 928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return getAttribute(heightAttr); 948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid HTMLPlugInElement::setHeight(const String& value) 978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project setAttribute(heightAttr, value); 998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectString HTMLPlugInElement::width() const 1028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return getAttribute(widthAttr); 1048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid HTMLPlugInElement::setWidth(const String& value) 1078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project setAttribute(widthAttr, value); 1098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool HTMLPlugInElement::mapToEntry(const QualifiedName& attrName, MappedAttributeEntry& result) const 1128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (attrName == widthAttr || 1148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project attrName == heightAttr || 1158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project attrName == vspaceAttr || 1168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project attrName == hspaceAttr) { 1178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project result = eUniversal; 1188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return false; 1198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 1208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (attrName == alignAttr) { 1228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project result = eReplaced; // Share with <img> since the alignment behavior is the same. 1238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return false; 1248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 1258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return HTMLFrameOwnerElement::mapToEntry(attrName, result); 1278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid HTMLPlugInElement::parseMappedAttribute(MappedAttribute* attr) 1308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (attr->name() == widthAttr) 1328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project addCSSLength(attr, CSSPropertyWidth, attr->value()); 1338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project else if (attr->name() == heightAttr) 1348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project addCSSLength(attr, CSSPropertyHeight, attr->value()); 1358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project else if (attr->name() == vspaceAttr) { 1368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project addCSSLength(attr, CSSPropertyMarginTop, attr->value()); 1378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project addCSSLength(attr, CSSPropertyMarginBottom, attr->value()); 1388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } else if (attr->name() == hspaceAttr) { 1398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project addCSSLength(attr, CSSPropertyMarginLeft, attr->value()); 1408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project addCSSLength(attr, CSSPropertyMarginRight, attr->value()); 1418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } else if (attr->name() == alignAttr) 1428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project addHTMLAlignment(attr); 1438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project else 1448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project HTMLFrameOwnerElement::parseMappedAttribute(attr); 1458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool HTMLPlugInElement::checkDTD(const Node* newChild) 1488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return newChild->hasTagName(paramTag) || HTMLFrameOwnerElement::checkDTD(newChild); 1508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid HTMLPlugInElement::defaultEventHandler(Event* event) 1538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project RenderObject* r = renderer(); 1558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!r || !r->isWidget()) 1568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 1570bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch Widget* widget = toRenderWidget(r)->widget(); 1580bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!widget) 1590bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return; 1600bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch widget->handleEvent(event); 1618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if ENABLE(NETSCAPE_PLUGIN_API) 1648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectNPObject* HTMLPlugInElement::getNPObject() 1668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ASSERT(document()->frame()); 1688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!m_NPObject) 1698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_NPObject = document()->frame()->script()->createScriptObjectForPluginElement(this); 1708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return m_NPObject; 1718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif /* ENABLE(NETSCAPE_PLUGIN_API) */ 1748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid HTMLPlugInElement::updateWidgetCallback(Node* n) 1768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project static_cast<HTMLPlugInElement*>(n)->updateWidget(); 1788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 180a622a48d6cc2bea33d2467de9d31feb1b03b03ebGrace Kloba#if PLATFORM(ANDROID) 181a622a48d6cc2bea33d2467de9d31feb1b03b03ebGrace Klobabool HTMLPlugInElement::supportsFocus() const 182a622a48d6cc2bea33d2467de9d31feb1b03b03ebGrace Kloba{ 183a622a48d6cc2bea33d2467de9d31feb1b03b03ebGrace Kloba return true; 184a622a48d6cc2bea33d2467de9d31feb1b03b03ebGrace Kloba} 185a622a48d6cc2bea33d2467de9d31feb1b03b03ebGrace Kloba#endif 186a622a48d6cc2bea33d2467de9d31feb1b03b03ebGrace Kloba 1878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 188