15f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian/* 28e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Copyright (C) 1999 Lars Knoll (knoll@kde.org) 38e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * (C) 2000 Simon Hausmann <hausmann@kde.org> 48e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * (C) 2000 Stefan Schimanski (1Stein@gmx.de) 55f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian * Copyright (C) 2004, 2005, 2006, 2009 Apple Inc. All rights reserved. 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 * 228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 235f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "config.h" 258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "RenderPart.h" 268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "Frame.h" 288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "FrameView.h" 29dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include "HTMLFrameElementBase.h" 302daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#include "PluginViewBase.h" 312daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#include "RenderView.h" 328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectnamespace WebCore { 348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 358f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng QianRenderPart::RenderPart(Element* node) 368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project : RenderWidget(node) 378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project setInline(false); 398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectRenderPart::~RenderPart() 428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 435f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian clearWidget(); 448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 460bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvoid RenderPart::setWidget(PassRefPtr<Widget> widget) 478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 485f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian if (widget == this->widget()) 495f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian return; 508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 515f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian RenderWidget::setWidget(widget); 525f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 535f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian // make sure the scrollbars are set correctly for restore 545f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian // ### find better fix 555f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian viewCleared(); 568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid RenderPart::viewCleared() 598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 622daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#if USE(ACCELERATED_COMPOSITING) 632daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochbool RenderPart::requiresLayer() const 642daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch{ 652daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch if (RenderWidget::requiresLayer()) 662daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch return true; 672daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 682daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch return requiresAcceleratedCompositing(); 692daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch} 702daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 712daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochbool RenderPart::requiresAcceleratedCompositing() const 722daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch{ 732daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch // There are two general cases in which we can return true. First, if this is a plugin 742daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch // renderer and the plugin has a layer, then we need a layer. Second, if this is 752daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch // a renderer with a contentDocument and that document needs a layer, then we need 762daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch // a layer. 772daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch if (widget() && widget()->isPluginViewBase() && static_cast<PluginViewBase*>(widget())->platformLayer()) 782daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch return true; 792daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 802daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch if (!node() || !node()->isFrameOwnerElement()) 812daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch return false; 822daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 83bbcce278be9be6a85f47928c38a74c8d36a13a85Ben Murdoch#if PLATFORM(ANDROID) 84bbcce278be9be6a85f47928c38a74c8d36a13a85Ben Murdoch // FIXME: Upstream this to webkit.org 85bbcce278be9be6a85f47928c38a74c8d36a13a85Ben Murdoch // https://bugs.webkit.org/show_bug.cgi?id=52655 86bbcce278be9be6a85f47928c38a74c8d36a13a85Ben Murdoch if (style()->visibility() != VISIBLE) 87bbcce278be9be6a85f47928c38a74c8d36a13a85Ben Murdoch return false; 88bbcce278be9be6a85f47928c38a74c8d36a13a85Ben Murdoch#endif 89bbcce278be9be6a85f47928c38a74c8d36a13a85Ben Murdoch 902daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch HTMLFrameOwnerElement* element = static_cast<HTMLFrameOwnerElement*>(node()); 912daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch if (Document* contentDocument = element->contentDocument()) { 922daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch if (RenderView* view = contentDocument->renderView()) 932daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch return view->usesCompositing(); 942daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch } 952daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 962daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch return false; 972daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch} 982daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#endif 992daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 1008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 101