summaryrefslogtreecommitdiff
path: root/Source/WebCore/rendering/RenderEmbeddedObject.cpp
diff options
context:
space:
mode:
authorSimon Hausmann <simon.hausmann@nokia.com>2012-05-11 09:43:24 +0200
committerSimon Hausmann <simon.hausmann@nokia.com>2012-05-11 09:43:24 +0200
commit1b914638db989aaa98631a1c1e02c7b2d44805d8 (patch)
tree87f4fd2c7b38db320079a5de8877890d2ca3c485 /Source/WebCore/rendering/RenderEmbeddedObject.cpp
parent2cf6c8816a73e0132bd8fa3b509d62d7c51b6e47 (diff)
downloadqtwebkit-1b914638db989aaa98631a1c1e02c7b2d44805d8.tar.gz
Imported WebKit commit 9a52e27980f47e8b0d8f8b7cc0fd7b5741bceb92 (http://svn.webkit.org/repository/webkit/trunk@116736)
New snapshot to include QDeclarative* -> QQml* build fixes
Diffstat (limited to 'Source/WebCore/rendering/RenderEmbeddedObject.cpp')
-rw-r--r--Source/WebCore/rendering/RenderEmbeddedObject.cpp91
1 files changed, 50 insertions, 41 deletions
diff --git a/Source/WebCore/rendering/RenderEmbeddedObject.cpp b/Source/WebCore/rendering/RenderEmbeddedObject.cpp
index 2168a400a..55cfcfd4d 100644
--- a/Source/WebCore/rendering/RenderEmbeddedObject.cpp
+++ b/Source/WebCore/rendering/RenderEmbeddedObject.cpp
@@ -74,9 +74,9 @@ static const Color& replacementTextRoundedRectPressedColor()
RenderEmbeddedObject::RenderEmbeddedObject(Element* element)
: RenderPart(element)
, m_hasFallbackContent(false)
- , m_showsMissingPluginIndicator(false)
- , m_missingPluginIndicatorIsPressed(false)
- , m_mouseDownWasInMissingPluginIndicator(false)
+ , m_showsUnavailablePluginIndicator(false)
+ , m_unavailablePluginIndicatorIsPressed(false)
+ , m_mouseDownWasInUnavailablePluginIndicator(false)
{
view()->frameView()->setIsVisuallyNonEmpty();
}
@@ -102,30 +102,24 @@ bool RenderEmbeddedObject::allowsAcceleratedCompositing() const
}
#endif
-void RenderEmbeddedObject::setShowsMissingPluginIndicator()
+void RenderEmbeddedObject::setPluginUnavailabilityReason(PluginUnavailabilityReason pluginUnavailabilityReason)
{
- ASSERT(m_replacementText.isEmpty());
- m_replacementText = missingPluginText();
- m_showsMissingPluginIndicator = true;
+ ASSERT(!m_showsUnavailablePluginIndicator);
+ m_showsUnavailablePluginIndicator = true;
+ m_pluginUnavailabilityReason = pluginUnavailabilityReason;
}
-void RenderEmbeddedObject::setShowsCrashedPluginIndicator()
+bool RenderEmbeddedObject::showsUnavailablePluginIndicator() const
{
- ASSERT(m_replacementText.isEmpty());
- m_replacementText = crashedPluginText();
+ return m_showsUnavailablePluginIndicator;
}
-bool RenderEmbeddedObject::pluginCrashedOrWasMissing() const
+void RenderEmbeddedObject::setUnavailablePluginIndicatorIsPressed(bool pressed)
{
- return !m_replacementText.isNull();
-}
-
-void RenderEmbeddedObject::setMissingPluginIndicatorIsPressed(bool pressed)
-{
- if (m_missingPluginIndicatorIsPressed == pressed)
+ if (m_unavailablePluginIndicatorIsPressed == pressed)
return;
- m_missingPluginIndicatorIsPressed = pressed;
+ m_unavailablePluginIndicatorIsPressed = pressed;
repaint();
}
@@ -135,7 +129,7 @@ void RenderEmbeddedObject::paint(PaintInfo& paintInfo, const LayoutPoint& paintO
if (Frame* frame = this->frame())
page = frame->page();
- if (pluginCrashedOrWasMissing()) {
+ if (showsUnavailablePluginIndicator()) {
if (page && paintInfo.phase == PaintPhaseForeground)
page->addRelevantUnpaintedObject(this, visualOverflowRect());
RenderReplaced::paint(paintInfo, paintOffset);
@@ -150,7 +144,7 @@ void RenderEmbeddedObject::paint(PaintInfo& paintInfo, const LayoutPoint& paintO
void RenderEmbeddedObject::paintReplaced(PaintInfo& paintInfo, const LayoutPoint& paintOffset)
{
- if (!pluginCrashedOrWasMissing())
+ if (!showsUnavailablePluginIndicator())
return;
if (paintInfo.phase == PaintPhaseSelection)
@@ -171,14 +165,14 @@ void RenderEmbeddedObject::paintReplaced(PaintInfo& paintInfo, const LayoutPoint
GraphicsContextStateSaver stateSaver(*context);
context->clip(contentRect);
- context->setAlpha(m_missingPluginIndicatorIsPressed ? replacementTextPressedRoundedRectOpacity : replacementTextRoundedRectOpacity);
- context->setFillColor(m_missingPluginIndicatorIsPressed ? replacementTextRoundedRectPressedColor() : Color::white, style()->colorSpace());
+ context->setAlpha(m_unavailablePluginIndicatorIsPressed ? replacementTextPressedRoundedRectOpacity : replacementTextRoundedRectOpacity);
+ context->setFillColor(m_unavailablePluginIndicatorIsPressed ? replacementTextRoundedRectPressedColor() : Color::white, style()->colorSpace());
context->fillPath(path);
const FontMetrics& fontMetrics = font.fontMetrics();
float labelX = roundf(replacementTextRect.location().x() + (replacementTextRect.size().width() - textWidth) / 2);
float labelY = roundf(replacementTextRect.location().y() + (replacementTextRect.size().height() - fontMetrics.height()) / 2 + fontMetrics.ascent());
- context->setAlpha(m_missingPluginIndicatorIsPressed ? replacementTextPressedTextOpacity : replacementTextTextOpacity);
+ context->setAlpha(m_unavailablePluginIndicatorIsPressed ? replacementTextPressedTextOpacity : replacementTextTextOpacity);
context->setFillColor(Color::black, style()->colorSpace());
context->drawBidiText(font, run, FloatPoint(labelX, labelY));
}
@@ -200,7 +194,7 @@ bool RenderEmbeddedObject::getReplacementTextGeometry(const LayoutPoint& accumul
font = Font(fontDescription, 0, 0);
font.update(0);
- run = TextRun(m_replacementText);
+ run = TextRun(unavailablePluginReplacementText());
textWidth = font.width(run);
replacementTextRect.setSize(FloatSize(textWidth + replacementTextRoundedRectLeftRightTextMargin * 2, replacementTextRoundedRectHeight));
@@ -213,6 +207,21 @@ bool RenderEmbeddedObject::getReplacementTextGeometry(const LayoutPoint& accumul
return true;
}
+String RenderEmbeddedObject::unavailablePluginReplacementText() const
+{
+ switch (m_pluginUnavailabilityReason) {
+ case PluginMissing:
+ return missingPluginText();
+ case PluginCrashed:
+ return crashedPluginText();
+ case InsecurePluginVersion:
+ return insecurePluginVersionText();
+ }
+
+ ASSERT_NOT_REACHED();
+ return String();
+}
+
void RenderEmbeddedObject::layout()
{
ASSERT(needsLayout());
@@ -295,7 +304,7 @@ bool RenderEmbeddedObject::logicalScroll(ScrollLogicalDirection direction, Scrol
}
-bool RenderEmbeddedObject::isInMissingPluginIndicator(const LayoutPoint& point) const
+bool RenderEmbeddedObject::isInUnavailablePluginIndicator(const LayoutPoint& point) const
{
FloatRect contentRect;
Path path;
@@ -307,20 +316,20 @@ bool RenderEmbeddedObject::isInMissingPluginIndicator(const LayoutPoint& point)
&& path.contains(point);
}
-bool RenderEmbeddedObject::isInMissingPluginIndicator(MouseEvent* event) const
+bool RenderEmbeddedObject::isInUnavailablePluginIndicator(MouseEvent* event) const
{
- return isInMissingPluginIndicator(roundedLayoutPoint(absoluteToLocal(event->absoluteLocation(), false, true)));
+ return isInUnavailablePluginIndicator(roundedLayoutPoint(absoluteToLocal(event->absoluteLocation(), false, true)));
}
-static bool shouldMissingPluginMessageBeButton(Document* document)
+static bool shouldUnavailablePluginMessageBeButton(Document* document, RenderEmbeddedObject::PluginUnavailabilityReason pluginUnavailabilityReason)
{
Page* page = document->page();
- return page && page->chrome()->client()->shouldMissingPluginMessageBeButton();
+ return page && page->chrome()->client()->shouldUnavailablePluginMessageBeButton(pluginUnavailabilityReason);
}
-void RenderEmbeddedObject::handleMissingPluginIndicatorEvent(Event* event)
+void RenderEmbeddedObject::handleUnavailablePluginIndicatorEvent(Event* event)
{
- if (!shouldMissingPluginMessageBeButton(document()))
+ if (!shouldUnavailablePluginMessageBeButton(document(), m_pluginUnavailabilityReason))
return;
if (!event->isMouseEvent())
@@ -329,40 +338,40 @@ void RenderEmbeddedObject::handleMissingPluginIndicatorEvent(Event* event)
MouseEvent* mouseEvent = static_cast<MouseEvent*>(event);
HTMLPlugInElement* element = static_cast<HTMLPlugInElement*>(node());
if (event->type() == eventNames().mousedownEvent && static_cast<MouseEvent*>(event)->button() == LeftButton) {
- m_mouseDownWasInMissingPluginIndicator = isInMissingPluginIndicator(mouseEvent);
- if (m_mouseDownWasInMissingPluginIndicator) {
+ m_mouseDownWasInUnavailablePluginIndicator = isInUnavailablePluginIndicator(mouseEvent);
+ if (m_mouseDownWasInUnavailablePluginIndicator) {
if (Frame* frame = document()->frame()) {
frame->eventHandler()->setCapturingMouseEventsNode(element);
element->setIsCapturingMouseEvents(true);
}
- setMissingPluginIndicatorIsPressed(true);
+ setUnavailablePluginIndicatorIsPressed(true);
}
event->setDefaultHandled();
}
if (event->type() == eventNames().mouseupEvent && static_cast<MouseEvent*>(event)->button() == LeftButton) {
- if (m_missingPluginIndicatorIsPressed) {
+ if (m_unavailablePluginIndicatorIsPressed) {
if (Frame* frame = document()->frame()) {
frame->eventHandler()->setCapturingMouseEventsNode(0);
element->setIsCapturingMouseEvents(false);
}
- setMissingPluginIndicatorIsPressed(false);
+ setUnavailablePluginIndicatorIsPressed(false);
}
- if (m_mouseDownWasInMissingPluginIndicator && isInMissingPluginIndicator(mouseEvent)) {
+ if (m_mouseDownWasInUnavailablePluginIndicator && isInUnavailablePluginIndicator(mouseEvent)) {
if (Page* page = document()->page())
- page->chrome()->client()->missingPluginButtonClicked(element);
+ page->chrome()->client()->unavailablePluginButtonClicked(element, m_pluginUnavailabilityReason);
}
- m_mouseDownWasInMissingPluginIndicator = false;
+ m_mouseDownWasInUnavailablePluginIndicator = false;
event->setDefaultHandled();
}
if (event->type() == eventNames().mousemoveEvent) {
- setMissingPluginIndicatorIsPressed(m_mouseDownWasInMissingPluginIndicator && isInMissingPluginIndicator(mouseEvent));
+ setUnavailablePluginIndicatorIsPressed(m_mouseDownWasInUnavailablePluginIndicator && isInUnavailablePluginIndicator(mouseEvent));
event->setDefaultHandled();
}
}
CursorDirective RenderEmbeddedObject::getCursor(const LayoutPoint& point, Cursor& cursor) const
{
- if (m_showsMissingPluginIndicator && shouldMissingPluginMessageBeButton(document()) && isInMissingPluginIndicator(point)) {
+ if (showsUnavailablePluginIndicator() && shouldUnavailablePluginMessageBeButton(document(), m_pluginUnavailabilityReason) && isInUnavailablePluginIndicator(point)) {
cursor = handCursor();
return SetCursor;
}