summaryrefslogtreecommitdiffstats
path: root/chromium/third_party/WebKit/Source/core/html/shadow
diff options
context:
space:
mode:
authorJocelyn Turcotte <jocelyn.turcotte@digia.com>2014-08-08 14:30:41 +0200
committerJocelyn Turcotte <jocelyn.turcotte@digia.com>2014-08-12 13:49:54 +0200
commitab0a50979b9eb4dfa3320eff7e187e41efedf7a9 (patch)
tree498dfb8a97ff3361a9f7486863a52bb4e26bb898 /chromium/third_party/WebKit/Source/core/html/shadow
parent4ce69f7403811819800e7c5ae1318b2647e778d1 (diff)
Update Chromium to beta version 37.0.2062.68
Change-Id: I188e3b5aff1bec75566014291b654eb19f5bc8ca Reviewed-by: Andras Becsi <andras.becsi@digia.com>
Diffstat (limited to 'chromium/third_party/WebKit/Source/core/html/shadow')
-rw-r--r--chromium/third_party/WebKit/Source/core/html/shadow/ClearButtonElement.cpp28
-rw-r--r--chromium/third_party/WebKit/Source/core/html/shadow/ClearButtonElement.h14
-rw-r--r--chromium/third_party/WebKit/Source/core/html/shadow/DateTimeEditElement.cpp62
-rw-r--r--chromium/third_party/WebKit/Source/core/html/shadow/DateTimeEditElement.h35
-rw-r--r--chromium/third_party/WebKit/Source/core/html/shadow/DateTimeFieldElement.cpp51
-rw-r--r--chromium/third_party/WebKit/Source/core/html/shadow/DateTimeFieldElement.h15
-rw-r--r--chromium/third_party/WebKit/Source/core/html/shadow/DateTimeFieldElements.cpp52
-rw-r--r--chromium/third_party/WebKit/Source/core/html/shadow/DateTimeFieldElements.h104
-rw-r--r--chromium/third_party/WebKit/Source/core/html/shadow/DateTimeNumericFieldElement.cpp27
-rw-r--r--chromium/third_party/WebKit/Source/core/html/shadow/DateTimeNumericFieldElement.h4
-rw-r--r--chromium/third_party/WebKit/Source/core/html/shadow/DetailsMarkerControl.cpp2
-rw-r--r--chromium/third_party/WebKit/Source/core/html/shadow/DetailsMarkerControl.h14
-rw-r--r--chromium/third_party/WebKit/Source/core/html/shadow/HTMLContentElement.cpp120
-rw-r--r--chromium/third_party/WebKit/Source/core/html/shadow/HTMLContentElement.h107
-rw-r--r--chromium/third_party/WebKit/Source/core/html/shadow/HTMLContentElement.idl32
-rw-r--r--chromium/third_party/WebKit/Source/core/html/shadow/HTMLShadowElement.cpp86
-rw-r--r--chromium/third_party/WebKit/Source/core/html/shadow/HTMLShadowElement.h62
-rw-r--r--chromium/third_party/WebKit/Source/core/html/shadow/HTMLShadowElement.idl35
-rw-r--r--chromium/third_party/WebKit/Source/core/html/shadow/MediaControlElementTypes.cpp128
-rw-r--r--chromium/third_party/WebKit/Source/core/html/shadow/MediaControlElementTypes.h84
-rw-r--r--chromium/third_party/WebKit/Source/core/html/shadow/MediaControlElements.cpp411
-rw-r--r--chromium/third_party/WebKit/Source/core/html/shadow/MediaControlElements.h130
-rw-r--r--chromium/third_party/WebKit/Source/core/html/shadow/MediaControls.cpp410
-rw-r--r--chromium/third_party/WebKit/Source/core/html/shadow/MediaControls.h137
-rw-r--r--chromium/third_party/WebKit/Source/core/html/shadow/MediaControlsChromium.cpp225
-rw-r--r--chromium/third_party/WebKit/Source/core/html/shadow/MediaControlsChromium.h65
-rw-r--r--chromium/third_party/WebKit/Source/core/html/shadow/MediaControlsChromiumAndroid.cpp99
-rw-r--r--chromium/third_party/WebKit/Source/core/html/shadow/MediaControlsChromiumAndroid.h54
-rw-r--r--chromium/third_party/WebKit/Source/core/html/shadow/MeterShadowElement.cpp20
-rw-r--r--chromium/third_party/WebKit/Source/core/html/shadow/MeterShadowElement.h18
-rw-r--r--chromium/third_party/WebKit/Source/core/html/shadow/PasswordGeneratorButtonElement.cpp172
-rw-r--r--chromium/third_party/WebKit/Source/core/html/shadow/PasswordGeneratorButtonElement.h73
-rw-r--r--chromium/third_party/WebKit/Source/core/html/shadow/PickerIndicatorElement.cpp24
-rw-r--r--chromium/third_party/WebKit/Source/core/html/shadow/PickerIndicatorElement.h14
-rw-r--r--chromium/third_party/WebKit/Source/core/html/shadow/ProgressShadowElement.cpp12
-rw-r--r--chromium/third_party/WebKit/Source/core/html/shadow/ProgressShadowElement.h33
-rw-r--r--chromium/third_party/WebKit/Source/core/html/shadow/ShadowElementNames.cpp18
-rw-r--r--chromium/third_party/WebKit/Source/core/html/shadow/ShadowElementNames.h3
-rw-r--r--chromium/third_party/WebKit/Source/core/html/shadow/SliderThumbElement.cpp68
-rw-r--r--chromium/third_party/WebKit/Source/core/html/shadow/SliderThumbElement.h34
-rw-r--r--chromium/third_party/WebKit/Source/core/html/shadow/SpinButtonElement.cpp42
-rw-r--r--chromium/third_party/WebKit/Source/core/html/shadow/SpinButtonElement.h28
-rw-r--r--chromium/third_party/WebKit/Source/core/html/shadow/TextControlInnerElements.cpp277
-rw-r--r--chromium/third_party/WebKit/Source/core/html/shadow/TextControlInnerElements.h83
44 files changed, 1022 insertions, 2490 deletions
diff --git a/chromium/third_party/WebKit/Source/core/html/shadow/ClearButtonElement.cpp b/chromium/third_party/WebKit/Source/core/html/shadow/ClearButtonElement.cpp
index cb928e81dce..adbd8f8adde 100644
--- a/chromium/third_party/WebKit/Source/core/html/shadow/ClearButtonElement.cpp
+++ b/chromium/third_party/WebKit/Source/core/html/shadow/ClearButtonElement.cpp
@@ -27,9 +27,9 @@
#include "core/html/shadow/ClearButtonElement.h"
#include "core/events/MouseEvent.h"
+#include "core/frame/LocalFrame.h"
#include "core/html/shadow/ShadowElementNames.h"
#include "core/page/EventHandler.h"
-#include "core/frame/Frame.h"
#include "core/rendering/RenderView.h"
namespace WebCore {
@@ -43,10 +43,10 @@ inline ClearButtonElement::ClearButtonElement(Document& document, ClearButtonOwn
{
}
-PassRefPtr<ClearButtonElement> ClearButtonElement::create(Document& document, ClearButtonOwner& clearButtonOwner)
+PassRefPtrWillBeRawPtr<ClearButtonElement> ClearButtonElement::create(Document& document, ClearButtonOwner& clearButtonOwner)
{
- RefPtr<ClearButtonElement> element = adoptRef(new ClearButtonElement(document, clearButtonOwner));
- element->setPseudo(AtomicString("-webkit-clear-button", AtomicString::ConstructFromLiteral));
+ RefPtrWillBeRawPtr<ClearButtonElement> element = adoptRefWillBeNoop(new ClearButtonElement(document, clearButtonOwner));
+ element->setShadowPseudoId(AtomicString("-webkit-clear-button", AtomicString::ConstructFromLiteral));
element->setAttribute(idAttr, ShadowElementNames::clearButton());
return element.release();
}
@@ -54,8 +54,8 @@ PassRefPtr<ClearButtonElement> ClearButtonElement::create(Document& document, Cl
void ClearButtonElement::detach(const AttachContext& context)
{
if (m_capturing) {
- if (Frame* frame = document().frame())
- frame->eventHandler().setCapturingMouseEventsNode(0);
+ if (LocalFrame* frame = document().frame())
+ frame->eventHandler().setCapturingMouseEventsNode(nullptr);
}
HTMLDivElement::detach(context);
}
@@ -65,8 +65,8 @@ void ClearButtonElement::releaseCapture()
if (!m_capturing)
return;
- if (Frame* frame = document().frame()) {
- frame->eventHandler().setCapturingMouseEventsNode(0);
+ if (LocalFrame* frame = document().frame()) {
+ frame->eventHandler().setCapturingMouseEventsNode(nullptr);
m_capturing = false;
}
}
@@ -87,7 +87,7 @@ void ClearButtonElement::defaultEventHandler(Event* event)
if (event->type() == EventTypeNames::mousedown && event->isMouseEvent() && toMouseEvent(event)->button() == LeftButton) {
if (renderer() && renderer()->visibleToHitTesting()) {
- if (Frame* frame = document().frame()) {
+ if (LocalFrame* frame = document().frame()) {
frame->eventHandler().setCapturingMouseEventsNode(this);
m_capturing = true;
}
@@ -97,8 +97,8 @@ void ClearButtonElement::defaultEventHandler(Event* event)
}
if (event->type() == EventTypeNames::mouseup && event->isMouseEvent() && toMouseEvent(event)->button() == LeftButton) {
if (m_capturing) {
- if (Frame* frame = document().frame()) {
- frame->eventHandler().setCapturingMouseEventsNode(0);
+ if (LocalFrame* frame = document().frame()) {
+ frame->eventHandler().setCapturingMouseEventsNode(nullptr);
m_capturing = false;
}
if (hovered()) {
@@ -117,4 +117,10 @@ bool ClearButtonElement::isClearButtonElement() const
return true;
}
+void ClearButtonElement::trace(Visitor* visitor)
+{
+ visitor->trace(m_clearButtonOwner);
+ HTMLDivElement::trace(visitor);
+}
+
}
diff --git a/chromium/third_party/WebKit/Source/core/html/shadow/ClearButtonElement.h b/chromium/third_party/WebKit/Source/core/html/shadow/ClearButtonElement.h
index 47c91115e31..eba5309fa30 100644
--- a/chromium/third_party/WebKit/Source/core/html/shadow/ClearButtonElement.h
+++ b/chromium/third_party/WebKit/Source/core/html/shadow/ClearButtonElement.h
@@ -33,7 +33,7 @@ namespace WebCore {
class ClearButtonElement FINAL : public HTMLDivElement {
public:
- class ClearButtonOwner {
+ class ClearButtonOwner : public WillBeGarbageCollectedMixin {
public:
virtual ~ClearButtonOwner() { }
virtual void focusAndSelectClearButtonOwner() = 0;
@@ -41,18 +41,20 @@ public:
virtual void clearValue() = 0;
};
- static PassRefPtr<ClearButtonElement> create(Document&, ClearButtonOwner&);
+ static PassRefPtrWillBeRawPtr<ClearButtonElement> create(Document&, ClearButtonOwner&);
void releaseCapture();
- void removeClearButtonOwner() { m_clearButtonOwner = 0; }
+ void removeClearButtonOwner() { m_clearButtonOwner = nullptr; }
+
+ virtual void trace(Visitor*) OVERRIDE;
private:
ClearButtonElement(Document&, ClearButtonOwner&);
virtual void detach(const AttachContext& = AttachContext()) OVERRIDE;
- virtual bool isMouseFocusable() const { return false; }
- virtual void defaultEventHandler(Event*);
+ virtual bool isMouseFocusable() const OVERRIDE { return false; }
+ virtual void defaultEventHandler(Event*) OVERRIDE;
virtual bool isClearButtonElement() const OVERRIDE;
- ClearButtonOwner* m_clearButtonOwner;
+ RawPtrWillBeMember<ClearButtonOwner> m_clearButtonOwner;
bool m_capturing;
};
diff --git a/chromium/third_party/WebKit/Source/core/html/shadow/DateTimeEditElement.cpp b/chromium/third_party/WebKit/Source/core/html/shadow/DateTimeEditElement.cpp
index eb3508e9dc8..3b337ddf0f1 100644
--- a/chromium/third_party/WebKit/Source/core/html/shadow/DateTimeEditElement.cpp
+++ b/chromium/third_party/WebKit/Source/core/html/shadow/DateTimeEditElement.cpp
@@ -27,8 +27,9 @@
#if ENABLE(INPUT_MULTIPLE_FIELDS_UI)
#include "core/html/shadow/DateTimeEditElement.h"
-#include "HTMLNames.h"
#include "bindings/v8/ExceptionStatePlaceholder.h"
+#include "core/HTMLNames.h"
+#include "core/dom/Document.h"
#include "core/dom/Text.h"
#include "core/events/MouseEvent.h"
#include "core/html/forms/DateTimeFieldsState.h"
@@ -147,7 +148,7 @@ void DateTimeEditBuilder::visitField(DateTimeFormat::FieldType fieldType, int co
switch (fieldType) {
case DateTimeFormat::FieldTypeDayOfMonth: {
- RefPtr<DateTimeFieldElement> field = DateTimeDayFieldElement::create(document, m_editElement, m_parameters.placeholderForDay, m_dayRange);
+ RefPtrWillBeRawPtr<DateTimeFieldElement> field = DateTimeDayFieldElement::create(document, m_editElement, m_parameters.placeholderForDay, m_dayRange);
m_editElement.addField(field);
if (shouldDayOfMonthFieldDisabled()) {
field->setValueAsDate(m_dateValue);
@@ -158,7 +159,7 @@ void DateTimeEditBuilder::visitField(DateTimeFormat::FieldType fieldType, int co
case DateTimeFormat::FieldTypeHour11: {
DateTimeNumericFieldElement::Step step = createStep(msPerHour, msPerHour * 12);
- RefPtr<DateTimeFieldElement> field = DateTimeHour11FieldElement::create(document, m_editElement, m_hour23Range, step);
+ RefPtrWillBeRawPtr<DateTimeFieldElement> field = DateTimeHour11FieldElement::create(document, m_editElement, m_hour23Range, step);
m_editElement.addField(field);
if (shouldHourFieldDisabled()) {
field->setValueAsDate(m_dateValue);
@@ -169,7 +170,7 @@ void DateTimeEditBuilder::visitField(DateTimeFormat::FieldType fieldType, int co
case DateTimeFormat::FieldTypeHour12: {
DateTimeNumericFieldElement::Step step = createStep(msPerHour, msPerHour * 12);
- RefPtr<DateTimeFieldElement> field = DateTimeHour12FieldElement::create(document, m_editElement, m_hour23Range, step);
+ RefPtrWillBeRawPtr<DateTimeFieldElement> field = DateTimeHour12FieldElement::create(document, m_editElement, m_hour23Range, step);
m_editElement.addField(field);
if (shouldHourFieldDisabled()) {
field->setValueAsDate(m_dateValue);
@@ -180,7 +181,7 @@ void DateTimeEditBuilder::visitField(DateTimeFormat::FieldType fieldType, int co
case DateTimeFormat::FieldTypeHour23: {
DateTimeNumericFieldElement::Step step = createStep(msPerHour, msPerDay);
- RefPtr<DateTimeFieldElement> field = DateTimeHour23FieldElement::create(document, m_editElement, m_hour23Range, step);
+ RefPtrWillBeRawPtr<DateTimeFieldElement> field = DateTimeHour23FieldElement::create(document, m_editElement, m_hour23Range, step);
m_editElement.addField(field);
if (shouldHourFieldDisabled()) {
field->setValueAsDate(m_dateValue);
@@ -191,7 +192,7 @@ void DateTimeEditBuilder::visitField(DateTimeFormat::FieldType fieldType, int co
case DateTimeFormat::FieldTypeHour24: {
DateTimeNumericFieldElement::Step step = createStep(msPerHour, msPerDay);
- RefPtr<DateTimeFieldElement> field = DateTimeHour24FieldElement::create(document, m_editElement, m_hour23Range, step);
+ RefPtrWillBeRawPtr<DateTimeFieldElement> field = DateTimeHour24FieldElement::create(document, m_editElement, m_hour23Range, step);
m_editElement.addField(field);
if (shouldHourFieldDisabled()) {
field->setValueAsDate(m_dateValue);
@@ -202,7 +203,7 @@ void DateTimeEditBuilder::visitField(DateTimeFormat::FieldType fieldType, int co
case DateTimeFormat::FieldTypeMinute: {
DateTimeNumericFieldElement::Step step = createStep(msPerMinute, msPerHour);
- RefPtr<DateTimeNumericFieldElement> field = DateTimeMinuteFieldElement::create(document, m_editElement, m_minuteRange, step);
+ RefPtrWillBeRawPtr<DateTimeNumericFieldElement> field = DateTimeMinuteFieldElement::create(document, m_editElement, m_minuteRange, step);
m_editElement.addField(field);
if (shouldMinuteFieldDisabled()) {
field->setValueAsDate(m_dateValue);
@@ -221,7 +222,7 @@ void DateTimeEditBuilder::visitField(DateTimeFormat::FieldType fieldType, int co
minMonth = m_parameters.minimum.month();
maxMonth = m_parameters.maximum.month();
}
- RefPtr<DateTimeFieldElement> field;
+ RefPtrWillBeRawPtr<DateTimeFieldElement> field;
switch (count) {
case countForNarrowMonth: // Fallthrough.
case countForAbbreviatedMonth:
@@ -243,7 +244,7 @@ void DateTimeEditBuilder::visitField(DateTimeFormat::FieldType fieldType, int co
}
case DateTimeFormat::FieldTypePeriod: {
- RefPtr<DateTimeFieldElement> field = DateTimeAMPMFieldElement::create(document, m_editElement, m_parameters.locale.timeAMPMLabels());
+ RefPtrWillBeRawPtr<DateTimeFieldElement> field = DateTimeAMPMFieldElement::create(document, m_editElement, m_parameters.locale.timeAMPMLabels());
m_editElement.addField(field);
if (shouldAMPMFieldDisabled()) {
field->setValueAsDate(m_dateValue);
@@ -254,7 +255,7 @@ void DateTimeEditBuilder::visitField(DateTimeFormat::FieldType fieldType, int co
case DateTimeFormat::FieldTypeSecond: {
DateTimeNumericFieldElement::Step step = createStep(msPerSecond, msPerMinute);
- RefPtr<DateTimeNumericFieldElement> field = DateTimeSecondFieldElement::create(document, m_editElement, m_secondRange, step);
+ RefPtrWillBeRawPtr<DateTimeNumericFieldElement> field = DateTimeSecondFieldElement::create(document, m_editElement, m_secondRange, step);
m_editElement.addField(field);
if (shouldSecondFieldDisabled()) {
field->setValueAsDate(m_dateValue);
@@ -270,7 +271,7 @@ void DateTimeEditBuilder::visitField(DateTimeFormat::FieldType fieldType, int co
case DateTimeFormat::FieldTypeFractionalSecond: {
DateTimeNumericFieldElement::Step step = createStep(1, msPerSecond);
- RefPtr<DateTimeNumericFieldElement> field = DateTimeMillisecondFieldElement::create(document, m_editElement, m_millisecondRange, step);
+ RefPtrWillBeRawPtr<DateTimeNumericFieldElement> field = DateTimeMillisecondFieldElement::create(document, m_editElement, m_millisecondRange, step);
m_editElement.addField(field);
if (shouldMillisecondFieldDisabled()) {
field->setValueAsDate(m_dateValue);
@@ -313,7 +314,7 @@ void DateTimeEditBuilder::visitField(DateTimeFormat::FieldType fieldType, int co
std::swap(yearParams.minIsSpecified, yearParams.maxIsSpecified);
}
yearParams.placeholder = m_parameters.placeholderForYear;
- RefPtr<DateTimeFieldElement> field = DateTimeYearFieldElement::create(document, m_editElement, yearParams);
+ RefPtrWillBeRawPtr<DateTimeFieldElement> field = DateTimeYearFieldElement::create(document, m_editElement, yearParams);
m_editElement.addField(field);
if (shouldYearFieldDisabled()) {
field->setValueAsDate(m_dateValue);
@@ -401,8 +402,8 @@ void DateTimeEditBuilder::visitLiteral(const String& text)
{
DEFINE_STATIC_LOCAL(AtomicString, textPseudoId, ("-webkit-datetime-edit-text", AtomicString::ConstructFromLiteral));
ASSERT(text.length());
- RefPtr<HTMLDivElement> element = HTMLDivElement::create(m_editElement.document());
- element->setPseudo(textPseudoId);
+ RefPtrWillBeRawPtr<HTMLDivElement> element = HTMLDivElement::create(m_editElement.document());
+ element->setShadowPseudoId(textPseudoId);
if (m_parameters.locale.isRTL() && text.length()) {
Direction dir = direction(text[0]);
if (dir == SegmentSeparator || dir == WhiteSpaceNeutral || dir == OtherNeutral)
@@ -448,8 +449,19 @@ DateTimeEditElement::DateTimeEditElement(Document& document, EditControlOwner& e
DateTimeEditElement::~DateTimeEditElement()
{
+#if !ENABLE(OILPAN)
for (size_t fieldIndex = 0; fieldIndex < m_fields.size(); ++fieldIndex)
m_fields[fieldIndex]->removeEventHandler();
+#endif
+}
+
+void DateTimeEditElement::trace(Visitor* visitor)
+{
+#if ENABLE(OILPAN)
+ visitor->trace(m_fields);
+#endif
+ visitor->trace(m_editControlOwner);
+ HTMLDivElement::trace(visitor);
}
inline Element* DateTimeEditElement::fieldsWrapperElement() const
@@ -458,7 +470,7 @@ inline Element* DateTimeEditElement::fieldsWrapperElement() const
return toElement(firstChild());
}
-void DateTimeEditElement::addField(PassRefPtr<DateTimeFieldElement> field)
+void DateTimeEditElement::addField(PassRefPtrWillBeRawPtr<DateTimeFieldElement> field)
{
if (m_fields.size() == m_fields.capacity())
return;
@@ -481,10 +493,10 @@ void DateTimeEditElement::blurByOwner()
field->blur();
}
-PassRefPtr<DateTimeEditElement> DateTimeEditElement::create(Document& document, EditControlOwner& editControlOwner)
+PassRefPtrWillBeRawPtr<DateTimeEditElement> DateTimeEditElement::create(Document& document, EditControlOwner& editControlOwner)
{
- RefPtr<DateTimeEditElement> container = adoptRef(new DateTimeEditElement(document, editControlOwner));
- container->setPseudo(AtomicString("-webkit-datetime-edit", AtomicString::ConstructFromLiteral));
+ RefPtrWillBeRawPtr<DateTimeEditElement> container = adoptRefWillBeNoop(new DateTimeEditElement(document, editControlOwner));
+ container->setShadowPseudoId(AtomicString("-webkit-datetime-edit", AtomicString::ConstructFromLiteral));
container->setAttribute(idAttr, ShadowElementNames::dateTimeEdit());
return container.release();
}
@@ -534,7 +546,7 @@ void DateTimeEditElement::disabledStateChanged()
DateTimeFieldElement* DateTimeEditElement::fieldAt(size_t fieldIndex) const
{
- return fieldIndex < m_fields.size() ? m_fields[fieldIndex] : 0;
+ return fieldIndex < m_fields.size() ? m_fields[fieldIndex].get() : 0;
}
size_t DateTimeEditElement::fieldIndexOf(const DateTimeFieldElement& field) const
@@ -651,8 +663,8 @@ void DateTimeEditElement::layout(const LayoutParameters& layoutParameters, const
{
DEFINE_STATIC_LOCAL(AtomicString, fieldsWrapperPseudoId, ("-webkit-datetime-edit-fields-wrapper", AtomicString::ConstructFromLiteral));
if (!firstChild()) {
- RefPtr<HTMLDivElement> element = HTMLDivElement::create(document());
- element->setPseudo(fieldsWrapperPseudoId);
+ RefPtrWillBeRawPtr<HTMLDivElement> element = HTMLDivElement::create(document());
+ element->setShadowPseudoId(fieldsWrapperPseudoId);
appendChild(element.get());
}
Element* fieldsWrapper = fieldsWrapperElement();
@@ -685,7 +697,7 @@ void DateTimeEditElement::layout(const LayoutParameters& layoutParameters, const
if (childNode == lastChildToBeRemoved)
break;
}
- setNeedsStyleRecalc();
+ setNeedsStyleRecalc(SubtreeStyleChange);
}
}
@@ -694,6 +706,12 @@ AtomicString DateTimeEditElement::localeIdentifier() const
return m_editControlOwner ? m_editControlOwner->localeIdentifier() : nullAtom;
}
+void DateTimeEditElement::fieldDidChangeValueByKeyboard()
+{
+ if (m_editControlOwner)
+ m_editControlOwner->editControlDidChangeValueByKeyboard();
+}
+
void DateTimeEditElement::readOnlyStateChanged()
{
updateUIState();
diff --git a/chromium/third_party/WebKit/Source/core/html/shadow/DateTimeEditElement.h b/chromium/third_party/WebKit/Source/core/html/shadow/DateTimeEditElement.h
index 87226cb136b..8621afdad8e 100644
--- a/chromium/third_party/WebKit/Source/core/html/shadow/DateTimeEditElement.h
+++ b/chromium/third_party/WebKit/Source/core/html/shadow/DateTimeEditElement.h
@@ -45,11 +45,12 @@ class StepRange;
// - Hour, Minute, Second, Millisecond, AM/PM
class DateTimeEditElement FINAL : public HTMLDivElement, public DateTimeFieldElement::FieldOwner {
WTF_MAKE_NONCOPYABLE(DateTimeEditElement);
+ WILL_BE_USING_GARBAGE_COLLECTED_MIXIN(DateTimeEditElement);
public:
// EditControlOwner implementer must call removeEditControlOwner when
// it doesn't handle event, e.g. at destruction.
- class EditControlOwner {
+ class EditControlOwner : public WillBeGarbageCollectedMixin {
public:
virtual ~EditControlOwner();
virtual void didBlurFromControl() = 0;
@@ -59,6 +60,7 @@ public:
virtual bool isEditControlOwnerDisabled() const = 0;
virtual bool isEditControlOwnerReadOnly() const = 0;
virtual AtomicString localeIdentifier() const = 0;
+ virtual void editControlDidChangeValueByKeyboard() = 0;
};
struct LayoutParameters {
@@ -79,10 +81,12 @@ public:
}
};
- static PassRefPtr<DateTimeEditElement> create(Document&, EditControlOwner&);
+ static PassRefPtrWillBeRawPtr<DateTimeEditElement> create(Document&, EditControlOwner&);
virtual ~DateTimeEditElement();
- void addField(PassRefPtr<DateTimeFieldElement>);
+ virtual void trace(Visitor*) OVERRIDE;
+
+ void addField(PassRefPtrWillBeRawPtr<DateTimeFieldElement>);
bool anyEditableFieldsHaveValues() const;
void blurByOwner();
virtual void defaultEventHandler(Event*) OVERRIDE;
@@ -94,7 +98,7 @@ public:
void focusByOwner(Element* oldFocusedElement = 0);
bool hasFocusedField();
void readOnlyStateChanged();
- void removeEditControlOwner() { m_editControlOwner = 0; }
+ void removeEditControlOwner() { m_editControlOwner = nullptr; }
void resetFields();
void setEmptyValue(const LayoutParameters&, const DateComponents& dateForReadOnlyField);
void setValueAsDate(const LayoutParameters&, const DateComponents&);
@@ -136,17 +140,18 @@ private:
virtual bool isDateTimeEditElement() const OVERRIDE;
// DateTimeFieldElement::FieldOwner functions.
- virtual void didBlurFromField() OVERRIDE FINAL;
- virtual void didFocusOnField() OVERRIDE FINAL;
- virtual void fieldValueChanged() OVERRIDE FINAL;
- virtual bool focusOnNextField(const DateTimeFieldElement&) OVERRIDE FINAL;
- virtual bool focusOnPreviousField(const DateTimeFieldElement&) OVERRIDE FINAL;
- virtual bool isFieldOwnerDisabled() const OVERRIDE FINAL;
- virtual bool isFieldOwnerReadOnly() const OVERRIDE FINAL;
- virtual AtomicString localeIdentifier() const OVERRIDE FINAL;
-
- Vector<DateTimeFieldElement*, maximumNumberOfFields> m_fields;
- EditControlOwner* m_editControlOwner;
+ virtual void didBlurFromField() OVERRIDE;
+ virtual void didFocusOnField() OVERRIDE;
+ virtual void fieldValueChanged() OVERRIDE;
+ virtual bool focusOnNextField(const DateTimeFieldElement&) OVERRIDE;
+ virtual bool focusOnPreviousField(const DateTimeFieldElement&) OVERRIDE;
+ virtual bool isFieldOwnerDisabled() const OVERRIDE;
+ virtual bool isFieldOwnerReadOnly() const OVERRIDE;
+ virtual AtomicString localeIdentifier() const OVERRIDE;
+ virtual void fieldDidChangeValueByKeyboard() OVERRIDE;
+
+ WillBeHeapVector<RawPtrWillBeMember<DateTimeFieldElement>, maximumNumberOfFields> m_fields;
+ RawPtrWillBeMember<EditControlOwner> m_editControlOwner;
};
DEFINE_TYPE_CASTS(DateTimeEditElement, Element, element, element->isDateTimeEditElement(), element.isDateTimeEditElement());
diff --git a/chromium/third_party/WebKit/Source/core/html/shadow/DateTimeFieldElement.cpp b/chromium/third_party/WebKit/Source/core/html/shadow/DateTimeFieldElement.cpp
index 31cdb06f9c4..e96cc7a4fb5 100644
--- a/chromium/third_party/WebKit/Source/core/html/shadow/DateTimeFieldElement.cpp
+++ b/chromium/third_party/WebKit/Source/core/html/shadow/DateTimeFieldElement.cpp
@@ -27,7 +27,8 @@
#if ENABLE(INPUT_MULTIPLE_FIELDS_UI)
#include "core/html/shadow/DateTimeFieldElement.h"
-#include "HTMLNames.h"
+#include "core/HTMLNames.h"
+#include "core/dom/Document.h"
#include "core/dom/Text.h"
#include "core/events/KeyboardEvent.h"
#include "platform/text/PlatformLocale.h"
@@ -52,22 +53,27 @@ DateTimeFieldElement::DateTimeFieldElement(Document& document, FieldOwner& field
{
}
-void DateTimeFieldElement::defaultEventHandler(Event* event)
+void DateTimeFieldElement::trace(Visitor* visitor)
{
- if (event->type() == EventTypeNames::blur)
- didBlur();
-
- if (event->type() == EventTypeNames::focus)
- didFocus();
+ visitor->trace(m_fieldOwner);
+ HTMLSpanElement::trace(visitor);
+}
+void DateTimeFieldElement::defaultEventHandler(Event* event)
+{
if (event->isKeyboardEvent()) {
KeyboardEvent* keyboardEvent = toKeyboardEvent(event);
if (!isDisabled() && !isFieldOwnerDisabled() && !isFieldOwnerReadOnly()) {
handleKeyboardEvent(keyboardEvent);
- if (keyboardEvent->defaultHandled())
+ if (keyboardEvent->defaultHandled()) {
+ if (m_fieldOwner)
+ m_fieldOwner->fieldDidChangeValueByKeyboard();
return;
+ }
}
defaultKeyboardEventHandler(keyboardEvent);
+ if (m_fieldOwner)
+ m_fieldOwner->fieldDidChangeValueByKeyboard();
if (keyboardEvent->defaultHandled())
return;
}
@@ -129,16 +135,11 @@ void DateTimeFieldElement::defaultKeyboardEventHandler(KeyboardEvent* keyboardEv
}
}
-void DateTimeFieldElement::didBlur()
-{
- if (m_fieldOwner)
- m_fieldOwner->didBlurFromField();
-}
-
-void DateTimeFieldElement::didFocus()
+void DateTimeFieldElement::setFocus(bool value)
{
if (m_fieldOwner)
- m_fieldOwner->didFocusOnField();
+ value ? m_fieldOwner->didFocusOnField() : m_fieldOwner->didBlurFromField();
+ ContainerNode::setFocus(value);
}
void DateTimeFieldElement::focusOnNextField()
@@ -152,12 +153,12 @@ void DateTimeFieldElement::initialize(const AtomicString& pseudo, const String&
{
// On accessibility, DateTimeFieldElement acts like spin button.
setAttribute(roleAttr, AtomicString("spinbutton", AtomicString::ConstructFromLiteral));
- setAttribute(aria_valuetextAttr, emptyValueAXText());
- setAttribute(aria_valueminAttr, String::number(axMinimum));
- setAttribute(aria_valuemaxAttr, String::number(axMaximum));
+ setAttribute(aria_valuetextAttr, AtomicString(emptyValueAXText()));
+ setAttribute(aria_valueminAttr, AtomicString::number(axMinimum));
+ setAttribute(aria_valuemaxAttr, AtomicString::number(axMaximum));
- setAttribute(aria_helpAttr, axHelpText);
- setPseudo(pseudo);
+ setAttribute(aria_helpAttr, AtomicString(axHelpText));
+ setShadowPseudoId(pseudo);
appendChild(Text::create(document(), visibleValue()));
}
@@ -201,7 +202,7 @@ void DateTimeFieldElement::setDisabled()
{
// Set HTML attribute disabled to change apperance.
setBooleanAttribute(disabledAttr, true);
- setNeedsStyleRecalc();
+ setNeedsStyleRecalc(SubtreeStyleChange);
}
bool DateTimeFieldElement::supportsFocus() const
@@ -220,10 +221,10 @@ void DateTimeFieldElement::updateVisibleValue(EventBehavior eventBehavior)
textNode->replaceWholeText(newVisibleValue);
if (hasValue()) {
- setAttribute(aria_valuetextAttr, newVisibleValue);
- setAttribute(aria_valuenowAttr, String::number(valueForARIAValueNow()));
+ setAttribute(aria_valuetextAttr, AtomicString(newVisibleValue));
+ setAttribute(aria_valuenowAttr, AtomicString::number(valueForARIAValueNow()));
} else {
- setAttribute(aria_valuetextAttr, emptyValueAXText());
+ setAttribute(aria_valuetextAttr, AtomicString(emptyValueAXText()));
removeAttribute(aria_valuenowAttr);
}
diff --git a/chromium/third_party/WebKit/Source/core/html/shadow/DateTimeFieldElement.h b/chromium/third_party/WebKit/Source/core/html/shadow/DateTimeFieldElement.h
index a2e42a9599b..1fe32594769 100644
--- a/chromium/third_party/WebKit/Source/core/html/shadow/DateTimeFieldElement.h
+++ b/chromium/third_party/WebKit/Source/core/html/shadow/DateTimeFieldElement.h
@@ -48,7 +48,7 @@ public:
// FieldOwner implementer must call removeEventHandler when
// it doesn't handle event, e.g. at destruction.
- class FieldOwner {
+ class FieldOwner : public WillBeGarbageCollectedMixin {
public:
virtual ~FieldOwner();
virtual void didBlurFromField() = 0;
@@ -59,6 +59,7 @@ public:
virtual bool isFieldOwnerDisabled() const = 0;
virtual bool isFieldOwnerReadOnly() const = 0;
virtual AtomicString localeIdentifier() const = 0;
+ virtual void fieldDidChangeValueByKeyboard() = 0;
};
virtual void defaultEventHandler(Event*) OVERRIDE;
@@ -66,7 +67,7 @@ public:
bool isDisabled() const;
virtual float maximumWidth(const Font&);
virtual void populateDateTimeFieldsState(DateTimeFieldsState&) = 0;
- void removeEventHandler() { m_fieldOwner = 0; }
+ void removeEventHandler() { m_fieldOwner = nullptr; }
void setDisabled();
virtual void setEmptyValue(EventBehavior = DispatchNoEvent) = 0;
virtual void setValueAsDate(const DateComponents&) = 0;
@@ -76,11 +77,10 @@ public:
virtual void stepUp() = 0;
virtual String value() const = 0;
virtual String visibleValue() const = 0;
+ virtual void trace(Visitor*) OVERRIDE;
protected:
DateTimeFieldElement(Document&, FieldOwner&);
- virtual void didBlur();
- virtual void didFocus();
void focusOnNextField();
virtual void handleKeyboardEvent(KeyboardEvent*) = 0;
void initialize(const AtomicString& pseudo, const String& axHelpText, int axMinimum, int axMaximum);
@@ -90,14 +90,17 @@ protected:
virtual int valueAsInteger() const = 0;
virtual int valueForARIAValueNow() const;
+ // Node functions.
+ virtual void setFocus(bool) OVERRIDE;
+
private:
void defaultKeyboardEventHandler(KeyboardEvent*);
- virtual bool isDateTimeFieldElement() const OVERRIDE;
+ virtual bool isDateTimeFieldElement() const OVERRIDE FINAL;
bool isFieldOwnerDisabled() const;
bool isFieldOwnerReadOnly() const;
virtual bool supportsFocus() const OVERRIDE FINAL;
- FieldOwner* m_fieldOwner;
+ RawPtrWillBeMember<FieldOwner> m_fieldOwner;
};
} // namespace WebCore
diff --git a/chromium/third_party/WebKit/Source/core/html/shadow/DateTimeFieldElements.cpp b/chromium/third_party/WebKit/Source/core/html/shadow/DateTimeFieldElements.cpp
index 5353c04ff2e..9479d9682ba 100644
--- a/chromium/third_party/WebKit/Source/core/html/shadow/DateTimeFieldElements.cpp
+++ b/chromium/third_party/WebKit/Source/core/html/shadow/DateTimeFieldElements.cpp
@@ -47,10 +47,10 @@ DateTimeAMPMFieldElement::DateTimeAMPMFieldElement(Document& document, FieldOwne
{
}
-PassRefPtr<DateTimeAMPMFieldElement> DateTimeAMPMFieldElement::create(Document& document, FieldOwner& fieldOwner, const Vector<String>& ampmLabels)
+PassRefPtrWillBeRawPtr<DateTimeAMPMFieldElement> DateTimeAMPMFieldElement::create(Document& document, FieldOwner& fieldOwner, const Vector<String>& ampmLabels)
{
DEFINE_STATIC_LOCAL(AtomicString, ampmPsuedoId, ("-webkit-datetime-edit-ampm-field", AtomicString::ConstructFromLiteral));
- RefPtr<DateTimeAMPMFieldElement> field = adoptRef(new DateTimeAMPMFieldElement(document, fieldOwner, ampmLabels));
+ RefPtrWillBeRawPtr<DateTimeAMPMFieldElement> field = adoptRefWillBeNoop(new DateTimeAMPMFieldElement(document, fieldOwner, ampmLabels));
field->initialize(ampmPsuedoId, queryString(WebLocalizedString::AXAMPMFieldText));
return field.release();
}
@@ -83,10 +83,10 @@ DateTimeDayFieldElement::DateTimeDayFieldElement(Document& document, FieldOwner&
{
}
-PassRefPtr<DateTimeDayFieldElement> DateTimeDayFieldElement::create(Document& document, FieldOwner& fieldOwner, const String& placeholder, const Range& range)
+PassRefPtrWillBeRawPtr<DateTimeDayFieldElement> DateTimeDayFieldElement::create(Document& document, FieldOwner& fieldOwner, const String& placeholder, const Range& range)
{
DEFINE_STATIC_LOCAL(AtomicString, dayPsuedoId, ("-webkit-datetime-edit-day-field", AtomicString::ConstructFromLiteral));
- RefPtr<DateTimeDayFieldElement> field = adoptRef(new DateTimeDayFieldElement(document, fieldOwner, placeholder.isEmpty() ? "--" : placeholder, range));
+ RefPtrWillBeRawPtr<DateTimeDayFieldElement> field = adoptRefWillBeNoop(new DateTimeDayFieldElement(document, fieldOwner, placeholder.isEmpty() ? "--" : placeholder, range));
field->initialize(dayPsuedoId, queryString(WebLocalizedString::AXDayOfMonthFieldText));
return field.release();
}
@@ -159,7 +159,7 @@ DateTimeHour11FieldElement::DateTimeHour11FieldElement(Document& document, Field
{
}
-PassRefPtr<DateTimeHour11FieldElement> DateTimeHour11FieldElement::create(Document& document, FieldOwner& fieldOwner, const Range& hour23Range, const Step& step)
+PassRefPtrWillBeRawPtr<DateTimeHour11FieldElement> DateTimeHour11FieldElement::create(Document& document, FieldOwner& fieldOwner, const Range& hour23Range, const Step& step)
{
ASSERT(hour23Range.minimum >= 0);
ASSERT(hour23Range.maximum <= 23);
@@ -172,7 +172,7 @@ PassRefPtr<DateTimeHour11FieldElement> DateTimeHour11FieldElement::create(Docume
range.maximum = hour23Range.maximum - 12;
}
- RefPtr<DateTimeHour11FieldElement> field = adoptRef(new DateTimeHour11FieldElement(document, fieldOwner, range, step));
+ RefPtrWillBeRawPtr<DateTimeHour11FieldElement> field = adoptRefWillBeNoop(new DateTimeHour11FieldElement(document, fieldOwner, range, step));
field->initialize();
return field.release();
}
@@ -200,7 +200,7 @@ DateTimeHour12FieldElement::DateTimeHour12FieldElement(Document& document, Field
{
}
-PassRefPtr<DateTimeHour12FieldElement> DateTimeHour12FieldElement::create(Document& document, FieldOwner& fieldOwner, const Range& hour23Range, const Step& step)
+PassRefPtrWillBeRawPtr<DateTimeHour12FieldElement> DateTimeHour12FieldElement::create(Document& document, FieldOwner& fieldOwner, const Range& hour23Range, const Step& step)
{
ASSERT(hour23Range.minimum >= 0);
ASSERT(hour23Range.maximum <= 23);
@@ -220,7 +220,7 @@ PassRefPtr<DateTimeHour12FieldElement> DateTimeHour12FieldElement::create(Docume
range.minimum = 1;
range.maximum = 12;
}
- RefPtr<DateTimeHour12FieldElement> field = adoptRef(new DateTimeHour12FieldElement(document, fieldOwner, range, step));
+ RefPtrWillBeRawPtr<DateTimeHour12FieldElement> field = adoptRefWillBeNoop(new DateTimeHour12FieldElement(document, fieldOwner, range, step));
field->initialize();
return field.release();
}
@@ -243,12 +243,12 @@ DateTimeHour23FieldElement::DateTimeHour23FieldElement(Document& document, Field
{
}
-PassRefPtr<DateTimeHour23FieldElement> DateTimeHour23FieldElement::create(Document& document, FieldOwner& fieldOwner, const Range& hour23Range, const Step& step)
+PassRefPtrWillBeRawPtr<DateTimeHour23FieldElement> DateTimeHour23FieldElement::create(Document& document, FieldOwner& fieldOwner, const Range& hour23Range, const Step& step)
{
ASSERT(hour23Range.minimum >= 0);
ASSERT(hour23Range.maximum <= 23);
ASSERT(hour23Range.minimum <= hour23Range.maximum);
- RefPtr<DateTimeHour23FieldElement> field = adoptRef(new DateTimeHour23FieldElement(document, fieldOwner, hour23Range, step));
+ RefPtrWillBeRawPtr<DateTimeHour23FieldElement> field = adoptRefWillBeNoop(new DateTimeHour23FieldElement(document, fieldOwner, hour23Range, step));
field->initialize();
return field.release();
}
@@ -279,7 +279,7 @@ DateTimeHour24FieldElement::DateTimeHour24FieldElement(Document& document, Field
{
}
-PassRefPtr<DateTimeHour24FieldElement> DateTimeHour24FieldElement::create(Document& document, FieldOwner& fieldOwner, const Range& hour23Range, const Step& step)
+PassRefPtrWillBeRawPtr<DateTimeHour24FieldElement> DateTimeHour24FieldElement::create(Document& document, FieldOwner& fieldOwner, const Range& hour23Range, const Step& step)
{
ASSERT(hour23Range.minimum >= 0);
ASSERT(hour23Range.maximum <= 23);
@@ -290,7 +290,7 @@ PassRefPtr<DateTimeHour24FieldElement> DateTimeHour24FieldElement::create(Docume
range.maximum = 24;
}
- RefPtr<DateTimeHour24FieldElement> field = adoptRef(new DateTimeHour24FieldElement(document, fieldOwner, range, step));
+ RefPtrWillBeRawPtr<DateTimeHour24FieldElement> field = adoptRefWillBeNoop(new DateTimeHour24FieldElement(document, fieldOwner, range, step));
field->initialize();
return field.release();
}
@@ -326,10 +326,10 @@ DateTimeMillisecondFieldElement::DateTimeMillisecondFieldElement(Document& docum
{
}
-PassRefPtr<DateTimeMillisecondFieldElement> DateTimeMillisecondFieldElement::create(Document& document, FieldOwner& fieldOwner, const Range& range, const Step& step)
+PassRefPtrWillBeRawPtr<DateTimeMillisecondFieldElement> DateTimeMillisecondFieldElement::create(Document& document, FieldOwner& fieldOwner, const Range& range, const Step& step)
{
DEFINE_STATIC_LOCAL(AtomicString, millisecondPsuedoId, ("-webkit-datetime-edit-millisecond-field", AtomicString::ConstructFromLiteral));
- RefPtr<DateTimeMillisecondFieldElement> field = adoptRef(new DateTimeMillisecondFieldElement(document, fieldOwner, range, step));
+ RefPtrWillBeRawPtr<DateTimeMillisecondFieldElement> field = adoptRefWillBeNoop(new DateTimeMillisecondFieldElement(document, fieldOwner, range, step));
field->initialize(millisecondPsuedoId, queryString(WebLocalizedString::AXMillisecondFieldText));
return field.release();
}
@@ -367,10 +367,10 @@ DateTimeMinuteFieldElement::DateTimeMinuteFieldElement(Document& document, Field
{
}
-PassRefPtr<DateTimeMinuteFieldElement> DateTimeMinuteFieldElement::create(Document& document, FieldOwner& fieldOwner, const Range& range, const Step& step)
+PassRefPtrWillBeRawPtr<DateTimeMinuteFieldElement> DateTimeMinuteFieldElement::create(Document& document, FieldOwner& fieldOwner, const Range& range, const Step& step)
{
DEFINE_STATIC_LOCAL(AtomicString, minutePsuedoId, ("-webkit-datetime-edit-minute-field", AtomicString::ConstructFromLiteral));
- RefPtr<DateTimeMinuteFieldElement> field = adoptRef(new DateTimeMinuteFieldElement(document, fieldOwner, range, step));
+ RefPtrWillBeRawPtr<DateTimeMinuteFieldElement> field = adoptRefWillBeNoop(new DateTimeMinuteFieldElement(document, fieldOwner, range, step));
field->initialize(minutePsuedoId, queryString(WebLocalizedString::AXMinuteFieldText));
return field.release();
}
@@ -408,10 +408,10 @@ DateTimeMonthFieldElement::DateTimeMonthFieldElement(Document& document, FieldOw
{
}
-PassRefPtr<DateTimeMonthFieldElement> DateTimeMonthFieldElement::create(Document& document, FieldOwner& fieldOwner, const String& placeholder, const Range& range)
+PassRefPtrWillBeRawPtr<DateTimeMonthFieldElement> DateTimeMonthFieldElement::create(Document& document, FieldOwner& fieldOwner, const String& placeholder, const Range& range)
{
DEFINE_STATIC_LOCAL(AtomicString, monthPsuedoId, ("-webkit-datetime-edit-month-field", AtomicString::ConstructFromLiteral));
- RefPtr<DateTimeMonthFieldElement> field = adoptRef(new DateTimeMonthFieldElement(document, fieldOwner, placeholder.isEmpty() ? "--" : placeholder, range));
+ RefPtrWillBeRawPtr<DateTimeMonthFieldElement> field = adoptRefWillBeNoop(new DateTimeMonthFieldElement(document, fieldOwner, placeholder.isEmpty() ? "--" : placeholder, range));
field->initialize(monthPsuedoId, queryString(WebLocalizedString::AXMonthFieldText));
return field.release();
}
@@ -449,10 +449,10 @@ DateTimeSecondFieldElement::DateTimeSecondFieldElement(Document& document, Field
{
}
-PassRefPtr<DateTimeSecondFieldElement> DateTimeSecondFieldElement::create(Document& document, FieldOwner& fieldOwner, const Range& range, const Step& step)
+PassRefPtrWillBeRawPtr<DateTimeSecondFieldElement> DateTimeSecondFieldElement::create(Document& document, FieldOwner& fieldOwner, const Range& range, const Step& step)
{
DEFINE_STATIC_LOCAL(AtomicString, secondPsuedoId, ("-webkit-datetime-edit-second-field", AtomicString::ConstructFromLiteral));
- RefPtr<DateTimeSecondFieldElement> field = adoptRef(new DateTimeSecondFieldElement(document, fieldOwner, range, step));
+ RefPtrWillBeRawPtr<DateTimeSecondFieldElement> field = adoptRefWillBeNoop(new DateTimeSecondFieldElement(document, fieldOwner, range, step));
field->initialize(secondPsuedoId, queryString(WebLocalizedString::AXSecondFieldText));
return field.release();
}
@@ -490,10 +490,10 @@ DateTimeSymbolicMonthFieldElement::DateTimeSymbolicMonthFieldElement(Document& d
{
}
-PassRefPtr<DateTimeSymbolicMonthFieldElement> DateTimeSymbolicMonthFieldElement::create(Document& document, FieldOwner& fieldOwner, const Vector<String>& labels, int minimum, int maximum)
+PassRefPtrWillBeRawPtr<DateTimeSymbolicMonthFieldElement> DateTimeSymbolicMonthFieldElement::create(Document& document, FieldOwner& fieldOwner, const Vector<String>& labels, int minimum, int maximum)
{
DEFINE_STATIC_LOCAL(AtomicString, monthPsuedoId, ("-webkit-datetime-edit-month-field", AtomicString::ConstructFromLiteral));
- RefPtr<DateTimeSymbolicMonthFieldElement> field = adoptRef(new DateTimeSymbolicMonthFieldElement(document, fieldOwner, labels, minimum, maximum));
+ RefPtrWillBeRawPtr<DateTimeSymbolicMonthFieldElement> field = adoptRefWillBeNoop(new DateTimeSymbolicMonthFieldElement(document, fieldOwner, labels, minimum, maximum));
field->initialize(monthPsuedoId, queryString(WebLocalizedString::AXMonthFieldText));
return field.release();
}
@@ -534,10 +534,10 @@ DateTimeWeekFieldElement::DateTimeWeekFieldElement(Document& document, FieldOwne
{
}
-PassRefPtr<DateTimeWeekFieldElement> DateTimeWeekFieldElement::create(Document& document, FieldOwner& fieldOwner, const Range& range)
+PassRefPtrWillBeRawPtr<DateTimeWeekFieldElement> DateTimeWeekFieldElement::create(Document& document, FieldOwner& fieldOwner, const Range& range)
{
DEFINE_STATIC_LOCAL(AtomicString, weekPsuedoId, ("-webkit-datetime-edit-week-field", AtomicString::ConstructFromLiteral));
- RefPtr<DateTimeWeekFieldElement> field = adoptRef(new DateTimeWeekFieldElement(document, fieldOwner, range));
+ RefPtrWillBeRawPtr<DateTimeWeekFieldElement> field = adoptRefWillBeNoop(new DateTimeWeekFieldElement(document, fieldOwner, range));
field->initialize(weekPsuedoId, queryString(WebLocalizedString::AXWeekOfYearFieldText));
return field.release();
}
@@ -579,10 +579,10 @@ DateTimeYearFieldElement::DateTimeYearFieldElement(Document& document, FieldOwne
ASSERT(parameters.maximumYear <= DateComponents::maximumYear());
}
-PassRefPtr<DateTimeYearFieldElement> DateTimeYearFieldElement::create(Document& document, FieldOwner& fieldOwner, const DateTimeYearFieldElement::Parameters& parameters)
+PassRefPtrWillBeRawPtr<DateTimeYearFieldElement> DateTimeYearFieldElement::create(Document& document, FieldOwner& fieldOwner, const DateTimeYearFieldElement::Parameters& parameters)
{
DEFINE_STATIC_LOCAL(AtomicString, yearPsuedoId, ("-webkit-datetime-edit-year-field", AtomicString::ConstructFromLiteral));
- RefPtr<DateTimeYearFieldElement> field = adoptRef(new DateTimeYearFieldElement(document, fieldOwner, parameters));
+ RefPtrWillBeRawPtr<DateTimeYearFieldElement> field = adoptRefWillBeNoop(new DateTimeYearFieldElement(document, fieldOwner, parameters));
field->initialize(yearPsuedoId, queryString(WebLocalizedString::AXYearFieldText));
return field.release();
}
diff --git a/chromium/third_party/WebKit/Source/core/html/shadow/DateTimeFieldElements.h b/chromium/third_party/WebKit/Source/core/html/shadow/DateTimeFieldElements.h
index fb8ef52b22e..19050dbf6dc 100644
--- a/chromium/third_party/WebKit/Source/core/html/shadow/DateTimeFieldElements.h
+++ b/chromium/third_party/WebKit/Source/core/html/shadow/DateTimeFieldElements.h
@@ -36,30 +36,30 @@ class DateTimeAMPMFieldElement FINAL : public DateTimeSymbolicFieldElement {
WTF_MAKE_NONCOPYABLE(DateTimeAMPMFieldElement);
public:
- static PassRefPtr<DateTimeAMPMFieldElement> create(Document&, FieldOwner&, const Vector<String>&);
+ static PassRefPtrWillBeRawPtr<DateTimeAMPMFieldElement> create(Document&, FieldOwner&, const Vector<String>&);
private:
DateTimeAMPMFieldElement(Document&, FieldOwner&, const Vector<String>&);
// DateTimeFieldElement functions.
- virtual void populateDateTimeFieldsState(DateTimeFieldsState&) OVERRIDE FINAL;
- virtual void setValueAsDate(const DateComponents&) OVERRIDE FINAL;
- virtual void setValueAsDateTimeFieldsState(const DateTimeFieldsState&) OVERRIDE FINAL;
+ virtual void populateDateTimeFieldsState(DateTimeFieldsState&) OVERRIDE;
+ virtual void setValueAsDate(const DateComponents&) OVERRIDE;
+ virtual void setValueAsDateTimeFieldsState(const DateTimeFieldsState&) OVERRIDE;
};
class DateTimeDayFieldElement FINAL : public DateTimeNumericFieldElement {
WTF_MAKE_NONCOPYABLE(DateTimeDayFieldElement);
public:
- static PassRefPtr<DateTimeDayFieldElement> create(Document&, FieldOwner&, const String& placeholder, const Range&);
+ static PassRefPtrWillBeRawPtr<DateTimeDayFieldElement> create(Document&, FieldOwner&, const String& placeholder, const Range&);
private:
DateTimeDayFieldElement(Document&, FieldOwner&, const String& placeholder, const Range&);
// DateTimeFieldElement functions.
- virtual void populateDateTimeFieldsState(DateTimeFieldsState&) OVERRIDE FINAL;
- virtual void setValueAsDate(const DateComponents&) OVERRIDE FINAL;
- virtual void setValueAsDateTimeFieldsState(const DateTimeFieldsState&) OVERRIDE FINAL;
+ virtual void populateDateTimeFieldsState(DateTimeFieldsState&) OVERRIDE;
+ virtual void setValueAsDate(const DateComponents&) OVERRIDE;
+ virtual void setValueAsDateTimeFieldsState(const DateTimeFieldsState&) OVERRIDE;
};
class DateTimeHourFieldElementBase : public DateTimeNumericFieldElement {
@@ -71,154 +71,154 @@ protected:
private:
// DateTimeFieldElement functions.
- virtual void setValueAsDate(const DateComponents&) OVERRIDE FINAL;
- virtual void setValueAsDateTimeFieldsState(const DateTimeFieldsState&) OVERRIDE FINAL;
+ virtual void setValueAsDate(const DateComponents&) OVERRIDE;
+ virtual void setValueAsDateTimeFieldsState(const DateTimeFieldsState&) OVERRIDE;
};
class DateTimeHour11FieldElement FINAL : public DateTimeHourFieldElementBase {
WTF_MAKE_NONCOPYABLE(DateTimeHour11FieldElement);
public:
- static PassRefPtr<DateTimeHour11FieldElement> create(Document&, FieldOwner&, const Range&, const Step&);
+ static PassRefPtrWillBeRawPtr<DateTimeHour11FieldElement> create(Document&, FieldOwner&, const Range&, const Step&);
private:
DateTimeHour11FieldElement(Document&, FieldOwner&, const Range& hour23Range, const Step&);
// DateTimeFieldElement functions.
- virtual void populateDateTimeFieldsState(DateTimeFieldsState&) OVERRIDE FINAL;
- virtual void setValueAsInteger(int, EventBehavior = DispatchNoEvent) OVERRIDE FINAL;
+ virtual void populateDateTimeFieldsState(DateTimeFieldsState&) OVERRIDE;
+ virtual void setValueAsInteger(int, EventBehavior = DispatchNoEvent) OVERRIDE;
};
class DateTimeHour12FieldElement FINAL : public DateTimeHourFieldElementBase {
WTF_MAKE_NONCOPYABLE(DateTimeHour12FieldElement);
public:
- static PassRefPtr<DateTimeHour12FieldElement> create(Document&, FieldOwner&, const Range&, const Step&);
+ static PassRefPtrWillBeRawPtr<DateTimeHour12FieldElement> create(Document&, FieldOwner&, const Range&, const Step&);
private:
DateTimeHour12FieldElement(Document&, FieldOwner&, const Range& hour23Range, const Step&);
// DateTimeFieldElement functions.
- virtual void populateDateTimeFieldsState(DateTimeFieldsState&) OVERRIDE FINAL;
- virtual void setValueAsInteger(int, EventBehavior = DispatchNoEvent) OVERRIDE FINAL;
+ virtual void populateDateTimeFieldsState(DateTimeFieldsState&) OVERRIDE;
+ virtual void setValueAsInteger(int, EventBehavior = DispatchNoEvent) OVERRIDE;
};
class DateTimeHour23FieldElement FINAL : public DateTimeHourFieldElementBase {
WTF_MAKE_NONCOPYABLE(DateTimeHour23FieldElement);
public:
- static PassRefPtr<DateTimeHour23FieldElement> create(Document&, FieldOwner&, const Range&, const Step&);
+ static PassRefPtrWillBeRawPtr<DateTimeHour23FieldElement> create(Document&, FieldOwner&, const Range&, const Step&);
private:
DateTimeHour23FieldElement(Document&, FieldOwner&, const Range& hour23Range, const Step&);
// DateTimeFieldElement functions.
- virtual void populateDateTimeFieldsState(DateTimeFieldsState&) OVERRIDE FINAL;
- virtual void setValueAsInteger(int, EventBehavior = DispatchNoEvent) OVERRIDE FINAL;
+ virtual void populateDateTimeFieldsState(DateTimeFieldsState&) OVERRIDE;
+ virtual void setValueAsInteger(int, EventBehavior = DispatchNoEvent) OVERRIDE;
};
class DateTimeHour24FieldElement FINAL : public DateTimeHourFieldElementBase {
WTF_MAKE_NONCOPYABLE(DateTimeHour24FieldElement);
public:
- static PassRefPtr<DateTimeHour24FieldElement> create(Document&, FieldOwner&, const Range&, const Step&);
+ static PassRefPtrWillBeRawPtr<DateTimeHour24FieldElement> create(Document&, FieldOwner&, const Range&, const Step&);
private:
DateTimeHour24FieldElement(Document&, FieldOwner&, const Range& hour23Range, const Step&);
// DateTimeFieldElement functions.
- virtual void populateDateTimeFieldsState(DateTimeFieldsState&) OVERRIDE FINAL;
- virtual void setValueAsInteger(int, EventBehavior = DispatchNoEvent) OVERRIDE FINAL;
+ virtual void populateDateTimeFieldsState(DateTimeFieldsState&) OVERRIDE;
+ virtual void setValueAsInteger(int, EventBehavior = DispatchNoEvent) OVERRIDE;
};
class DateTimeMillisecondFieldElement FINAL : public DateTimeNumericFieldElement {
WTF_MAKE_NONCOPYABLE(DateTimeMillisecondFieldElement);
public:
- static PassRefPtr<DateTimeMillisecondFieldElement> create(Document&, FieldOwner&, const Range&, const Step&);
+ static PassRefPtrWillBeRawPtr<DateTimeMillisecondFieldElement> create(Document&, FieldOwner&, const Range&, const Step&);
private:
DateTimeMillisecondFieldElement(Document&, FieldOwner&, const Range&, const Step&);
// DateTimeFieldElement functions.
- virtual void populateDateTimeFieldsState(DateTimeFieldsState&) OVERRIDE FINAL;
- virtual void setValueAsDate(const DateComponents&) OVERRIDE FINAL;
- virtual void setValueAsDateTimeFieldsState(const DateTimeFieldsState&) OVERRIDE FINAL;
+ virtual void populateDateTimeFieldsState(DateTimeFieldsState&) OVERRIDE;
+ virtual void setValueAsDate(const DateComponents&) OVERRIDE;
+ virtual void setValueAsDateTimeFieldsState(const DateTimeFieldsState&) OVERRIDE;
};
class DateTimeMinuteFieldElement FINAL : public DateTimeNumericFieldElement {
WTF_MAKE_NONCOPYABLE(DateTimeMinuteFieldElement);
public:
- static PassRefPtr<DateTimeMinuteFieldElement> create(Document&, FieldOwner&, const Range&, const Step&);
+ static PassRefPtrWillBeRawPtr<DateTimeMinuteFieldElement> create(Document&, FieldOwner&, const Range&, const Step&);
private:
DateTimeMinuteFieldElement(Document&, FieldOwner&, const Range&, const Step&);
// DateTimeFieldElement functions.
- virtual void populateDateTimeFieldsState(DateTimeFieldsState&) OVERRIDE FINAL;
- virtual void setValueAsDate(const DateComponents&) OVERRIDE FINAL;
- virtual void setValueAsDateTimeFieldsState(const DateTimeFieldsState&) OVERRIDE FINAL;
+ virtual void populateDateTimeFieldsState(DateTimeFieldsState&) OVERRIDE;
+ virtual void setValueAsDate(const DateComponents&) OVERRIDE;
+ virtual void setValueAsDateTimeFieldsState(const DateTimeFieldsState&) OVERRIDE;
};
class DateTimeMonthFieldElement FINAL : public DateTimeNumericFieldElement {
WTF_MAKE_NONCOPYABLE(DateTimeMonthFieldElement);
public:
- static PassRefPtr<DateTimeMonthFieldElement> create(Document&, FieldOwner&, const String& placeholder, const Range&);
+ static PassRefPtrWillBeRawPtr<DateTimeMonthFieldElement> create(Document&, FieldOwner&, const String& placeholder, const Range&);
private:
DateTimeMonthFieldElement(Document&, FieldOwner&, const String& placeholder, const Range&);
// DateTimeFieldElement functions.
- virtual void populateDateTimeFieldsState(DateTimeFieldsState&) OVERRIDE FINAL;
- virtual void setValueAsDate(const DateComponents&) OVERRIDE FINAL;
- virtual void setValueAsDateTimeFieldsState(const DateTimeFieldsState&) OVERRIDE FINAL;
+ virtual void populateDateTimeFieldsState(DateTimeFieldsState&) OVERRIDE;
+ virtual void setValueAsDate(const DateComponents&) OVERRIDE;
+ virtual void setValueAsDateTimeFieldsState(const DateTimeFieldsState&) OVERRIDE;
};
class DateTimeSecondFieldElement FINAL : public DateTimeNumericFieldElement {
WTF_MAKE_NONCOPYABLE(DateTimeSecondFieldElement);
public:
- static PassRefPtr<DateTimeSecondFieldElement> create(Document&, FieldOwner&, const Range&, const Step&);
+ static PassRefPtrWillBeRawPtr<DateTimeSecondFieldElement> create(Document&, FieldOwner&, const Range&, const Step&);
private:
DateTimeSecondFieldElement(Document&, FieldOwner&, const Range&, const Step&);
// DateTimeFieldElement functions.
- virtual void populateDateTimeFieldsState(DateTimeFieldsState&) OVERRIDE FINAL;
- virtual void setValueAsDate(const DateComponents&) OVERRIDE FINAL;
- virtual void setValueAsDateTimeFieldsState(const DateTimeFieldsState&) OVERRIDE FINAL;
+ virtual void populateDateTimeFieldsState(DateTimeFieldsState&) OVERRIDE;
+ virtual void setValueAsDate(const DateComponents&) OVERRIDE;
+ virtual void setValueAsDateTimeFieldsState(const DateTimeFieldsState&) OVERRIDE;
};
class DateTimeSymbolicMonthFieldElement FINAL : public DateTimeSymbolicFieldElement {
WTF_MAKE_NONCOPYABLE(DateTimeSymbolicMonthFieldElement);
public:
- static PassRefPtr<DateTimeSymbolicMonthFieldElement> create(Document&, FieldOwner&, const Vector<String>&, int minimum, int maximum);
+ static PassRefPtrWillBeRawPtr<DateTimeSymbolicMonthFieldElement> create(Document&, FieldOwner&, const Vector<String>&, int minimum, int maximum);
private:
DateTimeSymbolicMonthFieldElement(Document&, FieldOwner&, const Vector<String>&, int minimum, int maximum);
// DateTimeFieldElement functions.
- virtual void populateDateTimeFieldsState(DateTimeFieldsState&) OVERRIDE FINAL;
- virtual void setValueAsDate(const DateComponents&) OVERRIDE FINAL;
- virtual void setValueAsDateTimeFieldsState(const DateTimeFieldsState&) OVERRIDE FINAL;
+ virtual void populateDateTimeFieldsState(DateTimeFieldsState&) OVERRIDE;
+ virtual void setValueAsDate(const DateComponents&) OVERRIDE;
+ virtual void setValueAsDateTimeFieldsState(const DateTimeFieldsState&) OVERRIDE;
};
class DateTimeWeekFieldElement FINAL : public DateTimeNumericFieldElement {
WTF_MAKE_NONCOPYABLE(DateTimeWeekFieldElement);
public:
- static PassRefPtr<DateTimeWeekFieldElement> create(Document&, FieldOwner&, const Range&);
+ static PassRefPtrWillBeRawPtr<DateTimeWeekFieldElement> create(Document&, FieldOwner&, const Range&);
private:
DateTimeWeekFieldElement(Document&, FieldOwner&, const Range&);
// DateTimeFieldElement functions.
- virtual void populateDateTimeFieldsState(DateTimeFieldsState&) OVERRIDE FINAL;
- virtual void setValueAsDate(const DateComponents&) OVERRIDE FINAL;
- virtual void setValueAsDateTimeFieldsState(const DateTimeFieldsState&) OVERRIDE FINAL;
+ virtual void populateDateTimeFieldsState(DateTimeFieldsState&) OVERRIDE;
+ virtual void setValueAsDate(const DateComponents&) OVERRIDE;
+ virtual void setValueAsDateTimeFieldsState(const DateTimeFieldsState&) OVERRIDE;
};
class DateTimeYearFieldElement FINAL : public DateTimeNumericFieldElement {
@@ -241,19 +241,19 @@ public:
}
};
- static PassRefPtr<DateTimeYearFieldElement> create(Document&, FieldOwner&, const Parameters&);
+ static PassRefPtrWillBeRawPtr<DateTimeYearFieldElement> create(Document&, FieldOwner&, const Parameters&);
private:
DateTimeYearFieldElement(Document&, FieldOwner&, const Parameters&);
// DateTimeFieldElement functions.
- virtual void populateDateTimeFieldsState(DateTimeFieldsState&) OVERRIDE FINAL;
- virtual void setValueAsDate(const DateComponents&) OVERRIDE FINAL;
- virtual void setValueAsDateTimeFieldsState(const DateTimeFieldsState&) OVERRIDE FINAL;
+ virtual void populateDateTimeFieldsState(DateTimeFieldsState&) OVERRIDE;
+ virtual void setValueAsDate(const DateComponents&) OVERRIDE;
+ virtual void setValueAsDateTimeFieldsState(const DateTimeFieldsState&) OVERRIDE;
// DateTimeNumericFieldElement functions.
- virtual int defaultValueForStepDown() const OVERRIDE FINAL;
- virtual int defaultValueForStepUp() const OVERRIDE FINAL;
+ virtual int defaultValueForStepDown() const OVERRIDE;
+ virtual int defaultValueForStepUp() const OVERRIDE;
bool m_minIsSpecified;
bool m_maxIsSpecified;
diff --git a/chromium/third_party/WebKit/Source/core/html/shadow/DateTimeNumericFieldElement.cpp b/chromium/third_party/WebKit/Source/core/html/shadow/DateTimeNumericFieldElement.cpp
index 537416f7402..64b3e46b90c 100644
--- a/chromium/third_party/WebKit/Source/core/html/shadow/DateTimeNumericFieldElement.cpp
+++ b/chromium/third_party/WebKit/Source/core/html/shadow/DateTimeNumericFieldElement.cpp
@@ -27,8 +27,8 @@
#if ENABLE(INPUT_MULTIPLE_FIELDS_UI)
#include "core/html/shadow/DateTimeNumericFieldElement.h"
-#include "CSSPropertyNames.h"
-#include "CSSValueKeywords.h"
+#include "core/CSSPropertyNames.h"
+#include "core/CSSValueKeywords.h"
#include "core/events/KeyboardEvent.h"
#include "platform/fonts/Font.h"
#include "platform/text/PlatformLocale.h"
@@ -91,13 +91,15 @@ int DateTimeNumericFieldElement::defaultValueForStepUp() const
return m_range.minimum;
}
-void DateTimeNumericFieldElement::didBlur()
+void DateTimeNumericFieldElement::setFocus(bool value)
{
- int value = typeAheadValue();
- m_typeAheadBuffer.clear();
- if (value >= 0)
- setValueAsInteger(value, DispatchEvent);
- DateTimeFieldElement::didBlur();
+ if (!value) {
+ int value = typeAheadValue();
+ m_typeAheadBuffer.clear();
+ if (value >= 0)
+ setValueAsInteger(value, DispatchEvent);
+ }
+ DateTimeFieldElement::setFocus(value);
}
String DateTimeNumericFieldElement::formatValue(int value) const
@@ -122,6 +124,13 @@ void DateTimeNumericFieldElement::handleKeyboardEvent(KeyboardEvent* keyboardEve
if (digit < 0 || digit > 9)
return;
+ unsigned maximumLength = DateTimeNumericFieldElement::formatValue(m_range.maximum).length();
+ if (m_typeAheadBuffer.length() >= maximumLength) {
+ String current = m_typeAheadBuffer.toString();
+ m_typeAheadBuffer.clear();
+ unsigned desiredLength = maximumLength - 1;
+ m_typeAheadBuffer.append(current, current.length() - desiredLength, desiredLength);
+ }
m_typeAheadBuffer.append(number);
int newValue = typeAheadValue();
if (newValue >= m_hardLimits.minimum)
@@ -131,7 +140,7 @@ void DateTimeNumericFieldElement::handleKeyboardEvent(KeyboardEvent* keyboardEve
updateVisibleValue(DispatchEvent);
}
- if (m_typeAheadBuffer.length() >= DateTimeNumericFieldElement::formatValue(m_range.maximum).length() || newValue * 10 > m_range.maximum)
+ if (m_typeAheadBuffer.length() >= maximumLength || newValue * 10 > m_range.maximum)
focusOnNextField();
keyboardEvent->setDefaultHandled();
diff --git a/chromium/third_party/WebKit/Source/core/html/shadow/DateTimeNumericFieldElement.h b/chromium/third_party/WebKit/Source/core/html/shadow/DateTimeNumericFieldElement.h
index 9b96fb54e3b..9a6272f8f01 100644
--- a/chromium/third_party/WebKit/Source/core/html/shadow/DateTimeNumericFieldElement.h
+++ b/chromium/third_party/WebKit/Source/core/html/shadow/DateTimeNumericFieldElement.h
@@ -80,13 +80,15 @@ protected:
private:
// DateTimeFieldElement functions.
- virtual void didBlur() OVERRIDE FINAL;
virtual void handleKeyboardEvent(KeyboardEvent*) OVERRIDE FINAL;
virtual float maximumWidth(const Font&) OVERRIDE;
virtual void stepDown() OVERRIDE FINAL;
virtual void stepUp() OVERRIDE FINAL;
virtual String value() const OVERRIDE FINAL;
+ // Node functions.
+ virtual void setFocus(bool) OVERRIDE FINAL;
+
String formatValue(int) const;
int roundUp(int) const;
int roundDown(int) const;
diff --git a/chromium/third_party/WebKit/Source/core/html/shadow/DetailsMarkerControl.cpp b/chromium/third_party/WebKit/Source/core/html/shadow/DetailsMarkerControl.cpp
index f3f2adb3b8e..3da57cd08ea 100644
--- a/chromium/third_party/WebKit/Source/core/html/shadow/DetailsMarkerControl.cpp
+++ b/chromium/third_party/WebKit/Source/core/html/shadow/DetailsMarkerControl.cpp
@@ -31,7 +31,7 @@
#include "config.h"
#include "core/html/shadow/DetailsMarkerControl.h"
-#include "HTMLNames.h"
+#include "core/HTMLNames.h"
#include "core/html/HTMLSummaryElement.h"
#include "core/rendering/RenderDetailsMarker.h"
diff --git a/chromium/third_party/WebKit/Source/core/html/shadow/DetailsMarkerControl.h b/chromium/third_party/WebKit/Source/core/html/shadow/DetailsMarkerControl.h
index 118063ef090..62fe336a698 100644
--- a/chromium/third_party/WebKit/Source/core/html/shadow/DetailsMarkerControl.h
+++ b/chromium/third_party/WebKit/Source/core/html/shadow/DetailsMarkerControl.h
@@ -40,20 +40,20 @@ class HTMLSummaryElement;
class DetailsMarkerControl FINAL : public HTMLDivElement {
public:
- DetailsMarkerControl(Document&);
- static PassRefPtr<DetailsMarkerControl> create(Document&);
+ explicit DetailsMarkerControl(Document&);
+ static PassRefPtrWillBeRawPtr<DetailsMarkerControl> create(Document&);
private:
- virtual RenderObject* createRenderer(RenderStyle*);
- virtual bool rendererIsNeeded(const RenderStyle&);
+ virtual RenderObject* createRenderer(RenderStyle*) OVERRIDE;
+ virtual bool rendererIsNeeded(const RenderStyle&) OVERRIDE;
HTMLSummaryElement* summaryElement();
};
-inline PassRefPtr<DetailsMarkerControl> DetailsMarkerControl::create(Document& document)
+inline PassRefPtrWillBeRawPtr<DetailsMarkerControl> DetailsMarkerControl::create(Document& document)
{
- RefPtr<DetailsMarkerControl> element = adoptRef(new DetailsMarkerControl(document));
- element->setPseudo(AtomicString("-webkit-details-marker", AtomicString::ConstructFromLiteral));
+ RefPtrWillBeRawPtr<DetailsMarkerControl> element = adoptRefWillBeNoop(new DetailsMarkerControl(document));
+ element->setShadowPseudoId(AtomicString("-webkit-details-marker", AtomicString::ConstructFromLiteral));
return element.release();
}
diff --git a/chromium/third_party/WebKit/Source/core/html/shadow/HTMLContentElement.cpp b/chromium/third_party/WebKit/Source/core/html/shadow/HTMLContentElement.cpp
deleted file mode 100644
index 81691295e85..00000000000
--- a/chromium/third_party/WebKit/Source/core/html/shadow/HTMLContentElement.cpp
+++ /dev/null
@@ -1,120 +0,0 @@
-/*
- * Copyright (C) 2011 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Neither the name of Google Inc. nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "config.h"
-#include "core/html/shadow/HTMLContentElement.h"
-
-#include "HTMLNames.h"
-#include "core/css/CSSParser.h"
-#include "core/css/SelectorChecker.h"
-#include "core/css/SiblingTraversalStrategies.h"
-#include "core/dom/QualifiedName.h"
-#include "core/dom/shadow/ElementShadow.h"
-#include "core/dom/shadow/ShadowRoot.h"
-
-namespace WebCore {
-
-using namespace HTMLNames;
-
-PassRefPtr<HTMLContentElement> HTMLContentElement::create(Document& document)
-{
- return adoptRef(new HTMLContentElement(document));
-}
-
-HTMLContentElement::HTMLContentElement(Document& document)
- : InsertionPoint(contentTag, document)
- , m_shouldParseSelect(false)
- , m_isValidSelector(true)
-{
- ScriptWrappable::init(this);
-}
-
-HTMLContentElement::~HTMLContentElement()
-{
-}
-
-void HTMLContentElement::parseSelect()
-{
- ASSERT(m_shouldParseSelect);
-
- CSSParser parser(document());
- parser.parseSelector(m_select, m_selectorList);
- m_shouldParseSelect = false;
- m_isValidSelector = validateSelect();
- if (!m_isValidSelector) {
- CSSSelectorList emptyList;
- m_selectorList.adopt(emptyList);
- }
-}
-
-void HTMLContentElement::parseAttribute(const QualifiedName& name, const AtomicString& value)
-{
- if (name == selectAttr) {
- if (ShadowRoot* root = containingShadowRoot())
- root->owner()->willAffectSelector();
- m_shouldParseSelect = true;
- m_select = value;
- } else
- InsertionPoint::parseAttribute(name, value);
-}
-
-bool HTMLContentElement::validateSelect() const
-{
- ASSERT(!m_shouldParseSelect);
-
- if (m_select.isNull() || m_select.isEmpty())
- return true;
-
- if (!m_selectorList.isValid())
- return false;
-
- for (const CSSSelector* selector = m_selectorList.first(); selector; selector = m_selectorList.next(selector)) {
- if (!selector->isCompound())
- return false;
- }
-
- return true;
-}
-
-static inline bool checkOneSelector(const CSSSelector* selector, const Vector<Node*, 32>& siblings, int nth)
-{
- Element* element = toElement(siblings[nth]);
- SelectorChecker selectorChecker(element->document(), SelectorChecker::CollectingCSSRules);
- SelectorChecker::SelectorCheckingContext context(selector, element, SelectorChecker::VisitedMatchEnabled);
- ShadowDOMSiblingTraversalStrategy strategy(siblings, nth);
- return selectorChecker.match(context, strategy) == SelectorChecker::SelectorMatches;
-}
-
-bool HTMLContentElement::matchSelector(const Vector<Node*, 32>& siblings, int nth) const
-{
- for (const CSSSelector* selector = selectorList().first(); selector; selector = CSSSelectorList::next(selector)) {
- if (checkOneSelector(selector, siblings, nth))
- return true;
- }
- return false;
-}
-
-}
diff --git a/chromium/third_party/WebKit/Source/core/html/shadow/HTMLContentElement.h b/chromium/third_party/WebKit/Source/core/html/shadow/HTMLContentElement.h
deleted file mode 100644
index b8f0f4fdd58..00000000000
--- a/chromium/third_party/WebKit/Source/core/html/shadow/HTMLContentElement.h
+++ /dev/null
@@ -1,107 +0,0 @@
-/*
- * Copyright (C) 2011 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following disclaimer
- * in the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Google Inc. nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef HTMLContentElement_h
-#define HTMLContentElement_h
-
-#include "core/css/CSSSelectorList.h"
-#include "core/dom/shadow/InsertionPoint.h"
-
-namespace WebCore {
-
-class HTMLContentElement FINAL : public InsertionPoint {
-public:
- static PassRefPtr<HTMLContentElement> create(Document&);
-
- virtual ~HTMLContentElement();
-
- virtual bool canAffectSelector() const OVERRIDE { return true; }
-
- bool canSelectNode(const Vector<Node*, 32>& siblings, int nth) const;
-
- const CSSSelectorList& selectorList() const;
- bool isSelectValid() const;
-
-private:
- explicit HTMLContentElement(Document&);
-
- virtual void parseAttribute(const QualifiedName&, const AtomicString&) OVERRIDE;
-
- bool validateSelect() const;
- void parseSelect();
-
- bool matchSelector(const Vector<Node*, 32>& siblings, int nth) const;
-
- bool m_shouldParseSelect;
- bool m_isValidSelector;
- AtomicString m_select;
- CSSSelectorList m_selectorList;
-};
-
-inline const CSSSelectorList& HTMLContentElement::selectorList() const
-{
- if (m_shouldParseSelect)
- const_cast<HTMLContentElement*>(this)->parseSelect();
- return m_selectorList;
-}
-
-inline bool HTMLContentElement::isSelectValid() const
-{
- if (m_shouldParseSelect)
- const_cast<HTMLContentElement*>(this)->parseSelect();
- return m_isValidSelector;
-}
-
-inline bool HTMLContentElement::canSelectNode(const Vector<Node*, 32>& siblings, int nth) const
-{
- if (m_select.isNull() || m_select.isEmpty())
- return true;
- if (!isSelectValid())
- return false;
- if (!siblings[nth]->isElementNode())
- return false;
- return matchSelector(siblings, nth);
-}
-
-inline bool isHTMLContentElement(const Node* node)
-{
- return node->hasTagName(HTMLNames::contentTag);
-}
-
-inline bool isHTMLContentElement(const Element* element)
-{
- return element->hasTagName(HTMLNames::contentTag);
-}
-
-DEFINE_NODE_TYPE_CASTS(HTMLContentElement, hasTagName(HTMLNames::contentTag));
-
-}
-
-#endif
diff --git a/chromium/third_party/WebKit/Source/core/html/shadow/HTMLContentElement.idl b/chromium/third_party/WebKit/Source/core/html/shadow/HTMLContentElement.idl
deleted file mode 100644
index ab593425152..00000000000
--- a/chromium/third_party/WebKit/Source/core/html/shadow/HTMLContentElement.idl
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Copyright (C) 2012 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Neither the name of Google Inc. nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-[
-] interface HTMLContentElement : HTMLElement {
- [Reflect, TreatNullAs=NullString] attribute DOMString select;
- attribute boolean resetStyleInheritance;
- NodeList getDistributedNodes();
-};
diff --git a/chromium/third_party/WebKit/Source/core/html/shadow/HTMLShadowElement.cpp b/chromium/third_party/WebKit/Source/core/html/shadow/HTMLShadowElement.cpp
deleted file mode 100644
index edfba07e3e1..00000000000
--- a/chromium/third_party/WebKit/Source/core/html/shadow/HTMLShadowElement.cpp
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- * Copyright (C) 2012 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following disclaimer
- * in the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Google Inc. nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "config.h"
-#include "core/html/shadow/HTMLShadowElement.h"
-
-#include "HTMLNames.h"
-#include "core/dom/shadow/ShadowRoot.h"
-
-namespace WebCore {
-
-class Document;
-
-inline HTMLShadowElement::HTMLShadowElement(Document& document)
- : InsertionPoint(HTMLNames::shadowTag, document)
-{
- ScriptWrappable::init(this);
-}
-
-PassRefPtr<HTMLShadowElement> HTMLShadowElement::create(Document& document)
-{
- return adoptRef(new HTMLShadowElement(document));
-}
-
-HTMLShadowElement::~HTMLShadowElement()
-{
-}
-
-ShadowRoot* HTMLShadowElement::olderShadowRoot()
-{
- ShadowRoot* containingRoot = containingShadowRoot();
- if (!containingRoot)
- return 0;
-
- document().updateDistributionForNodeIfNeeded(this);
-
- ShadowRoot* older = containingRoot->olderShadowRoot();
- if (!older || !older->shouldExposeToBindings() || older->shadowInsertionPointOfYoungerShadowRoot() != this)
- return 0;
-
- ASSERT(older->shouldExposeToBindings());
- return older;
-}
-
-Node::InsertionNotificationRequest HTMLShadowElement::insertedInto(ContainerNode* insertionPoint)
-{
- if (insertionPoint->inDocument()) {
- // Warn if trying to reproject between user agent and author shadows.
- ShadowRoot* root = containingShadowRoot();
- if (root && root->olderShadowRoot() && root->type() != root->olderShadowRoot()->type()) {
- String message = String::format("<shadow> doesn't work for %s element host.", root->host()->tagName().utf8().data());
- document().addConsoleMessage(RenderingMessageSource, WarningMessageLevel, message);
- }
- }
- return InsertionPoint::insertedInto(insertionPoint);
-}
-
-} // namespace WebCore
-
diff --git a/chromium/third_party/WebKit/Source/core/html/shadow/HTMLShadowElement.h b/chromium/third_party/WebKit/Source/core/html/shadow/HTMLShadowElement.h
deleted file mode 100644
index 77741ecc588..00000000000
--- a/chromium/third_party/WebKit/Source/core/html/shadow/HTMLShadowElement.h
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Copyright (C) 2012 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following disclaimer
- * in the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Google Inc. nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef HTMLShadowElement_h
-#define HTMLShadowElement_h
-
-#include "core/dom/shadow/InsertionPoint.h"
-#include "wtf/Forward.h"
-
-namespace WebCore {
-
-class HTMLShadowElement FINAL : public InsertionPoint {
-public:
- static PassRefPtr<HTMLShadowElement> create(Document&);
-
- virtual ~HTMLShadowElement();
-
- ShadowRoot* olderShadowRoot();
-
-private:
- explicit HTMLShadowElement(Document&);
- virtual InsertionNotificationRequest insertedInto(ContainerNode* insertionPoint) OVERRIDE;
-};
-
-inline bool isHTMLShadowElement(const Node* node)
-{
- ASSERT(node);
- return node->hasTagName(HTMLNames::shadowTag);
-}
-
-DEFINE_NODE_TYPE_CASTS(HTMLShadowElement, hasTagName(HTMLNames::shadowTag));
-
-} // namespace WebCore
-
-#endif // HTMLShadowElement_h
diff --git a/chromium/third_party/WebKit/Source/core/html/shadow/HTMLShadowElement.idl b/chromium/third_party/WebKit/Source/core/html/shadow/HTMLShadowElement.idl
deleted file mode 100644
index faceace1458..00000000000
--- a/chromium/third_party/WebKit/Source/core/html/shadow/HTMLShadowElement.idl
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright (C) 2012 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following disclaimer
- * in the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Google Inc. nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-interface HTMLShadowElement : HTMLElement {
- attribute boolean resetStyleInheritance;
- [DeprecateAs=HTMLShadowElementOlderShadowRoot] readonly attribute ShadowRoot olderShadowRoot;
- [RuntimeEnabled=ShadowDOM] NodeList getDistributedNodes();
-};
diff --git a/chromium/third_party/WebKit/Source/core/html/shadow/MediaControlElementTypes.cpp b/chromium/third_party/WebKit/Source/core/html/shadow/MediaControlElementTypes.cpp
index dc7f986e04e..989244d1bf8 100644
--- a/chromium/third_party/WebKit/Source/core/html/shadow/MediaControlElementTypes.cpp
+++ b/chromium/third_party/WebKit/Source/core/html/shadow/MediaControlElementTypes.cpp
@@ -31,11 +31,13 @@
#include "core/html/shadow/MediaControlElementTypes.h"
-#include "CSSValueKeywords.h"
-#include "HTMLNames.h"
#include "bindings/v8/ExceptionStatePlaceholder.h"
+#include "core/CSSValueKeywords.h"
+#include "core/HTMLNames.h"
#include "core/css/StylePropertySet.h"
#include "core/events/MouseEvent.h"
+#include "core/html/HTMLMediaElement.h"
+#include "core/html/shadow/MediaControls.h"
namespace WebCore {
@@ -50,7 +52,7 @@ HTMLMediaElement* toParentMediaElement(Node* node)
Node* mediaNode = node->shadowHost();
if (!mediaNode)
mediaNode = node;
- if (!mediaNode || !mediaNode->isElementNode() || !toElement(mediaNode)->isMediaElement())
+ if (!isHTMLMediaElement(mediaNode))
return 0;
return toHTMLMediaElement(mediaNode);
@@ -60,18 +62,23 @@ MediaControlElementType mediaControlElementType(Node* node)
{
ASSERT_WITH_SECURITY_IMPLICATION(node->isMediaControlElement());
HTMLElement* element = toHTMLElement(node);
- if (element->hasTagName(inputTag))
+ if (isHTMLInputElement(*element))
return static_cast<MediaControlInputElement*>(element)->displayType();
return static_cast<MediaControlDivElement*>(element)->displayType();
}
-MediaControlElement::MediaControlElement(MediaControlElementType displayType, HTMLElement* element)
- : m_mediaController(0)
+MediaControlElement::MediaControlElement(MediaControls& mediaControls, MediaControlElementType displayType, HTMLElement* element)
+ : m_mediaControls(mediaControls)
, m_displayType(displayType)
, m_element(element)
{
}
+HTMLMediaElement& MediaControlElement::mediaElement() const
+{
+ return mediaControls().mediaElement();
+}
+
void MediaControlElement::hide()
{
m_element->setInlineStyleProperty(CSSPropertyDisplay, CSSValueNone);
@@ -82,14 +89,6 @@ void MediaControlElement::show()
m_element->removeInlineStyleProperty(CSSPropertyDisplay);
}
-bool MediaControlElement::isShowing() const
-{
- const StylePropertySet* propertySet = m_element->inlineStyle();
- // Following the code from show() and hide() above, we only have
- // to check for the presense of inline display.
- return (!propertySet || !propertySet->getPropertyCSSValue(CSSPropertyDisplay));
-}
-
void MediaControlElement::setDisplayType(MediaControlElementType displayType)
{
if (displayType == m_displayType)
@@ -97,22 +96,22 @@ void MediaControlElement::setDisplayType(MediaControlElementType displayType)
m_displayType = displayType;
if (RenderObject* object = m_element->renderer())
- object->repaint();
+ object->paintInvalidationForWholeRenderer();
}
// ----------------------------
-MediaControlDivElement::MediaControlDivElement(Document& document, MediaControlElementType displayType)
- : HTMLDivElement(document)
- , MediaControlElement(displayType, this)
+MediaControlDivElement::MediaControlDivElement(MediaControls& mediaControls, MediaControlElementType displayType)
+ : HTMLDivElement(mediaControls.document())
+ , MediaControlElement(mediaControls, displayType, this)
{
}
// ----------------------------
-MediaControlInputElement::MediaControlInputElement(Document& document, MediaControlElementType displayType)
- : HTMLInputElement(document, 0, false)
- , MediaControlElement(displayType, this)
+MediaControlInputElement::MediaControlInputElement(MediaControls& mediaControls, MediaControlElementType displayType)
+ : HTMLInputElement(mediaControls.document(), 0, false)
+ , MediaControlElement(mediaControls, displayType, this)
{
}
@@ -123,8 +122,8 @@ bool MediaControlInputElement::isMouseFocusable() const
// ----------------------------
-MediaControlTimeDisplayElement::MediaControlTimeDisplayElement(Document& document, MediaControlElementType displayType)
- : MediaControlDivElement(document, displayType)
+MediaControlTimeDisplayElement::MediaControlTimeDisplayElement(MediaControls& mediaControls, MediaControlElementType displayType)
+ : MediaControlDivElement(mediaControls, displayType)
, m_currentValue(0)
{
}
@@ -134,87 +133,4 @@ void MediaControlTimeDisplayElement::setCurrentValue(double time)
m_currentValue = time;
}
-// ----------------------------
-
-MediaControlMuteButtonElement::MediaControlMuteButtonElement(Document& document, MediaControlElementType displayType)
- : MediaControlInputElement(document, displayType)
-{
-}
-
-void MediaControlMuteButtonElement::defaultEventHandler(Event* event)
-{
- if (event->type() == EventTypeNames::click) {
- mediaController()->setMuted(!mediaController()->muted());
- event->setDefaultHandled();
- }
-
- HTMLInputElement::defaultEventHandler(event);
-}
-
-void MediaControlMuteButtonElement::changedMute()
-{
- updateDisplayType();
-}
-
-void MediaControlMuteButtonElement::updateDisplayType()
-{
- setDisplayType(mediaController()->muted() ? MediaUnMuteButton : MediaMuteButton);
-}
-
-// ----------------------------
-
-MediaControlVolumeSliderElement::MediaControlVolumeSliderElement(Document& document)
- : MediaControlInputElement(document, MediaVolumeSlider)
- , m_clearMutedOnUserInteraction(false)
-{
-}
-
-void MediaControlVolumeSliderElement::defaultEventHandler(Event* event)
-{
- // Left button is 0. Rejects mouse events not from left button.
- if (event->isMouseEvent() && toMouseEvent(event)->button())
- return;
-
- if (!inDocument() || !document().isActive())
- return;
-
- MediaControlInputElement::defaultEventHandler(event);
-
- if (event->type() == EventTypeNames::mouseover || event->type() == EventTypeNames::mouseout || event->type() == EventTypeNames::mousemove)
- return;
-
- double volume = value().toDouble();
- if (volume != mediaController()->volume())
- mediaController()->setVolume(volume, ASSERT_NO_EXCEPTION);
- if (m_clearMutedOnUserInteraction)
- mediaController()->setMuted(false);
-}
-
-bool MediaControlVolumeSliderElement::willRespondToMouseMoveEvents()
-{
- if (!inDocument() || !document().isActive())
- return false;
-
- return MediaControlInputElement::willRespondToMouseMoveEvents();
-}
-
-bool MediaControlVolumeSliderElement::willRespondToMouseClickEvents()
-{
- if (!inDocument() || !document().isActive())
- return false;
-
- return MediaControlInputElement::willRespondToMouseClickEvents();
-}
-
-void MediaControlVolumeSliderElement::setVolume(double volume)
-{
- if (value().toDouble() != volume)
- setValue(String::number(volume));
-}
-
-void MediaControlVolumeSliderElement::setClearMutedOnUserInteraction(bool clearMute)
-{
- m_clearMutedOnUserInteraction = clearMute;
-}
-
} // namespace WebCore
diff --git a/chromium/third_party/WebKit/Source/core/html/shadow/MediaControlElementTypes.h b/chromium/third_party/WebKit/Source/core/html/shadow/MediaControlElementTypes.h
index 6293e6dac09..6213debb7b3 100644
--- a/chromium/third_party/WebKit/Source/core/html/shadow/MediaControlElementTypes.h
+++ b/chromium/third_party/WebKit/Source/core/html/shadow/MediaControlElementTypes.h
@@ -32,23 +32,19 @@
#include "core/html/HTMLDivElement.h"
#include "core/html/HTMLInputElement.h"
-#include "core/html/HTMLMediaElement.h"
-#include "core/html/MediaControllerInterface.h"
#include "core/rendering/RenderBlock.h"
namespace WebCore {
-// Must match WebKitSystemInterface.h
+class HTMLMediaElement;
+class MediaControls;
+
enum MediaControlElementType {
MediaEnterFullscreenButton = 0,
MediaMuteButton,
MediaPlayButton,
- MediaSeekBackButton,
- MediaSeekForwardButton,
MediaSlider,
MediaSliderThumb,
- MediaRewindButton,
- MediaReturnToRealtimeButton,
MediaShowClosedCaptionsButton,
MediaHideClosedCaptionsButton,
MediaUnMuteButton,
@@ -63,7 +59,6 @@ enum MediaControlElementType {
MediaVolumeSliderThumb,
MediaFullScreenVolumeSlider,
MediaFullScreenVolumeSliderThumb,
- MediaVolumeSliderMuteButton,
MediaTextTrackDisplayContainer,
MediaTextTrackDisplay,
MediaExitFullscreenButton,
@@ -77,27 +72,23 @@ MediaControlElementType mediaControlElementType(Node*);
// ----------------------------
-class MediaControlElement {
+class MediaControlElement : public WillBeGarbageCollectedMixin {
public:
- virtual void hide();
- virtual void show();
- virtual bool isShowing() const;
-
- virtual MediaControlElementType displayType() { return m_displayType; }
- virtual const AtomicString& pseudo() const = 0;
+ void hide();
+ void show();
- virtual void setMediaController(MediaControllerInterface* controller) { m_mediaController = controller; }
- virtual MediaControllerInterface* mediaController() const { return m_mediaController; }
+ MediaControlElementType displayType() { return m_displayType; }
protected:
- explicit MediaControlElement(MediaControlElementType, HTMLElement*);
- ~MediaControlElement() { }
+ MediaControlElement(MediaControls&, MediaControlElementType, HTMLElement*);
- virtual void setDisplayType(MediaControlElementType);
- virtual bool isMediaControlElement() const { return true; }
+ MediaControls& mediaControls() const { return m_mediaControls; }
+ HTMLMediaElement& mediaElement() const;
+
+ void setDisplayType(MediaControlElementType);
private:
- MediaControllerInterface* m_mediaController;
+ MediaControls& m_mediaControls;
MediaControlElementType m_displayType;
HTMLElement* m_element;
};
@@ -105,17 +96,21 @@ private:
// ----------------------------
class MediaControlDivElement : public HTMLDivElement, public MediaControlElement {
+ WILL_BE_USING_GARBAGE_COLLECTED_MIXIN(MediaControlDivElement);
+
protected:
- virtual bool isMediaControlElement() const OVERRIDE { return MediaControlElement::isMediaControlElement(); }
- explicit MediaControlDivElement(Document&, MediaControlElementType);
+ virtual bool isMediaControlElement() const OVERRIDE FINAL { return true; }
+ MediaControlDivElement(MediaControls&, MediaControlElementType);
};
// ----------------------------
class MediaControlInputElement : public HTMLInputElement, public MediaControlElement {
+ WILL_BE_USING_GARBAGE_COLLECTED_MIXIN(MediaControlInputElement);
+
protected:
- virtual bool isMediaControlElement() const OVERRIDE { return MediaControlElement::isMediaControlElement(); }
- explicit MediaControlInputElement(Document&, MediaControlElementType);
+ virtual bool isMediaControlElement() const OVERRIDE FINAL { return true; }
+ MediaControlInputElement(MediaControls&, MediaControlElementType);
private:
virtual void updateDisplayType() { }
@@ -130,47 +125,12 @@ public:
double currentValue() const { return m_currentValue; }
protected:
- explicit MediaControlTimeDisplayElement(Document&, MediaControlElementType);
+ MediaControlTimeDisplayElement(MediaControls&, MediaControlElementType);
private:
double m_currentValue;
};
-// ----------------------------
-
-class MediaControlMuteButtonElement : public MediaControlInputElement {
-public:
- void changedMute();
-
- virtual bool willRespondToMouseClickEvents() OVERRIDE { return true; }
-
-protected:
- explicit MediaControlMuteButtonElement(Document&, MediaControlElementType);
-
- virtual void defaultEventHandler(Event*) OVERRIDE;
-
-private:
- virtual void updateDisplayType() OVERRIDE;
-};
-
-// ----------------------------
-
-class MediaControlVolumeSliderElement : public MediaControlInputElement {
-public:
- virtual bool willRespondToMouseMoveEvents() OVERRIDE;
- virtual bool willRespondToMouseClickEvents() OVERRIDE;
- void setVolume(double);
- void setClearMutedOnUserInteraction(bool);
-
-protected:
- explicit MediaControlVolumeSliderElement(Document&);
-
- virtual void defaultEventHandler(Event*) OVERRIDE;
-
-private:
- bool m_clearMutedOnUserInteraction;
-};
-
} // namespace WebCore
#endif // MediaControlElementTypes_h
diff --git a/chromium/third_party/WebKit/Source/core/html/shadow/MediaControlElements.cpp b/chromium/third_party/WebKit/Source/core/html/shadow/MediaControlElements.cpp
index 9c3aee249b1..674675fbff9 100644
--- a/chromium/third_party/WebKit/Source/core/html/shadow/MediaControlElements.cpp
+++ b/chromium/third_party/WebKit/Source/core/html/shadow/MediaControlElements.cpp
@@ -30,24 +30,23 @@
#include "config.h"
#include "core/html/shadow/MediaControlElements.h"
-#include "RuntimeEnabledFeatures.h"
#include "bindings/v8/ExceptionStatePlaceholder.h"
#include "core/dom/DOMTokenList.h"
#include "core/dom/FullscreenElementStack.h"
#include "core/dom/shadow/ShadowRoot.h"
#include "core/events/MouseEvent.h"
-#include "core/events/ThreadLocalEventNames.h"
+#include "core/frame/LocalFrame.h"
#include "core/html/HTMLVideoElement.h"
+#include "core/html/MediaController.h"
#include "core/html/shadow/MediaControls.h"
#include "core/html/track/TextTrack.h"
#include "core/html/track/vtt/VTTRegionList.h"
#include "core/page/EventHandler.h"
-#include "core/frame/Frame.h"
-#include "core/frame/Settings.h"
#include "core/rendering/RenderMediaControlElements.h"
#include "core/rendering/RenderSlider.h"
#include "core/rendering/RenderTheme.h"
#include "core/rendering/RenderVideo.h"
+#include "platform/RuntimeEnabledFeatures.h"
namespace WebCore {
@@ -56,76 +55,39 @@ using namespace HTMLNames;
static const AtomicString& getMediaControlCurrentTimeDisplayElementShadowPseudoId();
static const AtomicString& getMediaControlTimeRemainingDisplayElementShadowPseudoId();
+// If you change any of the following fade durations, then also update the
+// corresponding values in LayoutTests/media/media-controls.js.
static const double fadeInDuration = 0.1;
static const double fadeOutDuration = 0.3;
-MediaControlPanelElement::MediaControlPanelElement(Document& document)
- : MediaControlDivElement(document, MediaControlsPanel)
- , m_canBeDragged(false)
- , m_isBeingDragged(false)
+MediaControlPanelElement::MediaControlPanelElement(MediaControls& mediaControls)
+ : MediaControlDivElement(mediaControls, MediaControlsPanel)
, m_isDisplayed(false)
, m_opaque(true)
, m_transitionTimer(this, &MediaControlPanelElement::transitionTimerFired)
{
}
-PassRefPtr<MediaControlPanelElement> MediaControlPanelElement::create(Document& document)
+PassRefPtrWillBeRawPtr<MediaControlPanelElement> MediaControlPanelElement::create(MediaControls& mediaControls)
{
- return adoptRef(new MediaControlPanelElement(document));
+ return adoptRefWillBeNoop(new MediaControlPanelElement(mediaControls));
}
-const AtomicString& MediaControlPanelElement::pseudo() const
+const AtomicString& MediaControlPanelElement::shadowPseudoId() const
{
DEFINE_STATIC_LOCAL(AtomicString, id, ("-webkit-media-controls-panel", AtomicString::ConstructFromLiteral));
return id;
}
-void MediaControlPanelElement::startDrag(const LayoutPoint& eventLocation)
-{
- if (!m_canBeDragged)
- return;
-
- if (m_isBeingDragged)
- return;
-
- RenderObject* renderer = this->renderer();
- if (!renderer || !renderer->isBox())
- return;
-
- Frame* frame = document().frame();
- if (!frame)
- return;
-
- m_lastDragEventLocation = eventLocation;
-
- frame->eventHandler().setCapturingMouseEventsNode(this);
-
- m_isBeingDragged = true;
-}
-
-void MediaControlPanelElement::continueDrag(const LayoutPoint& eventLocation)
-{
- if (!m_isBeingDragged)
- return;
-
- LayoutSize distanceDragged = eventLocation - m_lastDragEventLocation;
- m_cumulativeDragOffset.move(distanceDragged);
- m_lastDragEventLocation = eventLocation;
- setPosition(m_cumulativeDragOffset);
-}
-
-void MediaControlPanelElement::endDrag()
+void MediaControlPanelElement::defaultEventHandler(Event* event)
{
- if (!m_isBeingDragged)
- return;
-
- m_isBeingDragged = false;
-
- Frame* frame = document().frame();
- if (!frame)
+ // Suppress the media element activation behavior (toggle play/pause) when
+ // any part of the control panel is clicked.
+ if (event->type() == EventTypeNames::click) {
+ event->setDefaultHandled();
return;
-
- frame->eventHandler().setCapturingMouseEventsNode(0);
+ }
+ HTMLDivElement::defaultEventHandler(event);
}
void MediaControlPanelElement::startTimer()
@@ -136,7 +98,7 @@ void MediaControlPanelElement::startTimer()
// such that captions are correctly displayed at the bottom of the video
// at the end of the fadeout transition.
// FIXME: Racing a transition with a setTimeout like this is wrong.
- m_transitionTimer.startOneShot(fadeOutDuration);
+ m_transitionTimer.startOneShot(fadeOutDuration, FROM_HERE);
}
void MediaControlPanelElement::stopTimer()
@@ -153,34 +115,6 @@ void MediaControlPanelElement::transitionTimerFired(Timer<MediaControlPanelEleme
stopTimer();
}
-void MediaControlPanelElement::setPosition(const LayoutPoint& position)
-{
- double left = position.x();
- double top = position.y();
-
- // Set the left and top to control the panel's position; this depends on it being absolute positioned.
- // Set the margin to zero since the position passed in will already include the effect of the margin.
- setInlineStyleProperty(CSSPropertyLeft, left, CSSPrimitiveValue::CSS_PX);
- setInlineStyleProperty(CSSPropertyTop, top, CSSPrimitiveValue::CSS_PX);
- setInlineStyleProperty(CSSPropertyMarginLeft, 0.0, CSSPrimitiveValue::CSS_PX);
- setInlineStyleProperty(CSSPropertyMarginTop, 0.0, CSSPrimitiveValue::CSS_PX);
-
- classList()->add("dragged", IGNORE_EXCEPTION);
-}
-
-void MediaControlPanelElement::resetPosition()
-{
- removeInlineStyleProperty(CSSPropertyLeft);
- removeInlineStyleProperty(CSSPropertyTop);
- removeInlineStyleProperty(CSSPropertyMarginLeft);
- removeInlineStyleProperty(CSSPropertyMarginTop);
-
- classList()->remove("dragged", IGNORE_EXCEPTION);
-
- m_cumulativeDragOffset.setX(0);
- m_cumulativeDragOffset.setY(0);
-}
-
void MediaControlPanelElement::makeOpaque()
{
if (m_opaque)
@@ -209,36 +143,6 @@ void MediaControlPanelElement::makeTransparent()
startTimer();
}
-void MediaControlPanelElement::defaultEventHandler(Event* event)
-{
- MediaControlDivElement::defaultEventHandler(event);
-
- if (event->isMouseEvent()) {
- LayoutPoint location = toMouseEvent(event)->absoluteLocation();
- if (event->type() == EventTypeNames::mousedown && event->target() == this) {
- startDrag(location);
- event->setDefaultHandled();
- } else if (event->type() == EventTypeNames::mousemove && m_isBeingDragged)
- continueDrag(location);
- else if (event->type() == EventTypeNames::mouseup && m_isBeingDragged) {
- continueDrag(location);
- endDrag();
- event->setDefaultHandled();
- }
- }
-}
-
-void MediaControlPanelElement::setCanBeDragged(bool canBeDragged)
-{
- if (m_canBeDragged == canBeDragged)
- return;
-
- m_canBeDragged = canBeDragged;
-
- if (!canBeDragged)
- endDrag();
-}
-
void MediaControlPanelElement::setIsDisplayed(bool isDisplayed)
{
m_isDisplayed = isDisplayed;
@@ -246,18 +150,18 @@ void MediaControlPanelElement::setIsDisplayed(bool isDisplayed)
// ----------------------------
-MediaControlPanelEnclosureElement::MediaControlPanelEnclosureElement(Document& document)
+MediaControlPanelEnclosureElement::MediaControlPanelEnclosureElement(MediaControls& mediaControls)
// Mapping onto same MediaControlElementType as panel element, since it has similar properties.
- : MediaControlDivElement(document, MediaControlsPanel)
+ : MediaControlDivElement(mediaControls, MediaControlsPanel)
{
}
-PassRefPtr<MediaControlPanelEnclosureElement> MediaControlPanelEnclosureElement::create(Document& document)
+PassRefPtrWillBeRawPtr<MediaControlPanelEnclosureElement> MediaControlPanelEnclosureElement::create(MediaControls& mediaControls)
{
- return adoptRef(new MediaControlPanelEnclosureElement(document));
+ return adoptRefWillBeNoop(new MediaControlPanelEnclosureElement(mediaControls));
}
-const AtomicString& MediaControlPanelEnclosureElement::pseudo() const
+const AtomicString& MediaControlPanelEnclosureElement::shadowPseudoId() const
{
DEFINE_STATIC_LOCAL(AtomicString, id, ("-webkit-media-controls-enclosure", AtomicString::ConstructFromLiteral));
return id;
@@ -265,18 +169,18 @@ const AtomicString& MediaControlPanelEnclosureElement::pseudo() const
// ----------------------------
-MediaControlOverlayEnclosureElement::MediaControlOverlayEnclosureElement(Document& document)
+MediaControlOverlayEnclosureElement::MediaControlOverlayEnclosureElement(MediaControls& mediaControls)
// Mapping onto same MediaControlElementType as panel element, since it has similar properties.
- : MediaControlDivElement(document, MediaControlsPanel)
+ : MediaControlDivElement(mediaControls, MediaControlsPanel)
{
}
-PassRefPtr<MediaControlOverlayEnclosureElement> MediaControlOverlayEnclosureElement::create(Document& document)
+PassRefPtrWillBeRawPtr<MediaControlOverlayEnclosureElement> MediaControlOverlayEnclosureElement::create(MediaControls& mediaControls)
{
- return adoptRef(new MediaControlOverlayEnclosureElement(document));
+ return adoptRefWillBeNoop(new MediaControlOverlayEnclosureElement(mediaControls));
}
-const AtomicString& MediaControlOverlayEnclosureElement::pseudo() const
+const AtomicString& MediaControlOverlayEnclosureElement::shadowPseudoId() const
{
DEFINE_STATIC_LOCAL(AtomicString, id, ("-webkit-media-controls-overlay-enclosure", AtomicString::ConstructFromLiteral));
return id;
@@ -284,67 +188,50 @@ const AtomicString& MediaControlOverlayEnclosureElement::pseudo() const
// ----------------------------
-MediaControlPanelMuteButtonElement::MediaControlPanelMuteButtonElement(Document& document, MediaControls* controls)
- : MediaControlMuteButtonElement(document, MediaMuteButton)
- , m_controls(controls)
+MediaControlMuteButtonElement::MediaControlMuteButtonElement(MediaControls& mediaControls)
+ : MediaControlInputElement(mediaControls, MediaMuteButton)
{
}
-PassRefPtr<MediaControlPanelMuteButtonElement> MediaControlPanelMuteButtonElement::create(Document& document, MediaControls* controls)
+PassRefPtrWillBeRawPtr<MediaControlMuteButtonElement> MediaControlMuteButtonElement::create(MediaControls& mediaControls)
{
- ASSERT(controls);
-
- RefPtr<MediaControlPanelMuteButtonElement> button = adoptRef(new MediaControlPanelMuteButtonElement(document, controls));
+ RefPtrWillBeRawPtr<MediaControlMuteButtonElement> button = adoptRefWillBeNoop(new MediaControlMuteButtonElement(mediaControls));
button->ensureUserAgentShadowRoot();
button->setType("button");
return button.release();
}
-void MediaControlPanelMuteButtonElement::defaultEventHandler(Event* event)
+void MediaControlMuteButtonElement::defaultEventHandler(Event* event)
{
- if (event->type() == EventTypeNames::mouseover)
- m_controls->showVolumeSlider();
-
- MediaControlMuteButtonElement::defaultEventHandler(event);
-}
-
-const AtomicString& MediaControlPanelMuteButtonElement::pseudo() const
-{
- DEFINE_STATIC_LOCAL(AtomicString, id, ("-webkit-media-controls-mute-button", AtomicString::ConstructFromLiteral));
- return id;
-}
-
-// ----------------------------
+ if (event->type() == EventTypeNames::click) {
+ mediaElement().setMuted(!mediaElement().muted());
+ event->setDefaultHandled();
+ }
-MediaControlVolumeSliderMuteButtonElement::MediaControlVolumeSliderMuteButtonElement(Document& document)
- : MediaControlMuteButtonElement(document, MediaMuteButton)
-{
+ HTMLInputElement::defaultEventHandler(event);
}
-PassRefPtr<MediaControlVolumeSliderMuteButtonElement> MediaControlVolumeSliderMuteButtonElement::create(Document& document)
+void MediaControlMuteButtonElement::updateDisplayType()
{
- RefPtr<MediaControlVolumeSliderMuteButtonElement> button = adoptRef(new MediaControlVolumeSliderMuteButtonElement(document));
- button->ensureUserAgentShadowRoot();
- button->setType("button");
- return button.release();
+ setDisplayType(mediaElement().muted() ? MediaUnMuteButton : MediaMuteButton);
}
-const AtomicString& MediaControlVolumeSliderMuteButtonElement::pseudo() const
+const AtomicString& MediaControlMuteButtonElement::shadowPseudoId() const
{
- DEFINE_STATIC_LOCAL(AtomicString, id, ("-webkit-media-controls-volume-slider-mute-button", AtomicString::ConstructFromLiteral));
+ DEFINE_STATIC_LOCAL(AtomicString, id, ("-webkit-media-controls-mute-button", AtomicString::ConstructFromLiteral));
return id;
}
// ----------------------------
-MediaControlPlayButtonElement::MediaControlPlayButtonElement(Document& document)
- : MediaControlInputElement(document, MediaPlayButton)
+MediaControlPlayButtonElement::MediaControlPlayButtonElement(MediaControls& mediaControls)
+ : MediaControlInputElement(mediaControls, MediaPlayButton)
{
}
-PassRefPtr<MediaControlPlayButtonElement> MediaControlPlayButtonElement::create(Document& document)
+PassRefPtrWillBeRawPtr<MediaControlPlayButtonElement> MediaControlPlayButtonElement::create(MediaControls& mediaControls)
{
- RefPtr<MediaControlPlayButtonElement> button = adoptRef(new MediaControlPlayButtonElement(document));
+ RefPtrWillBeRawPtr<MediaControlPlayButtonElement> button = adoptRefWillBeNoop(new MediaControlPlayButtonElement(mediaControls));
button->ensureUserAgentShadowRoot();
button->setType("button");
return button.release();
@@ -353,10 +240,7 @@ PassRefPtr<MediaControlPlayButtonElement> MediaControlPlayButtonElement::create(
void MediaControlPlayButtonElement::defaultEventHandler(Event* event)
{
if (event->type() == EventTypeNames::click) {
- if (mediaController()->canPlay())
- mediaController()->play();
- else
- mediaController()->pause();
+ mediaElement().togglePlayState();
updateDisplayType();
event->setDefaultHandled();
}
@@ -365,10 +249,10 @@ void MediaControlPlayButtonElement::defaultEventHandler(Event* event)
void MediaControlPlayButtonElement::updateDisplayType()
{
- setDisplayType(mediaController()->canPlay() ? MediaPlayButton : MediaPauseButton);
+ setDisplayType(mediaElement().togglePlayStateWillPlay() ? MediaPlayButton : MediaPauseButton);
}
-const AtomicString& MediaControlPlayButtonElement::pseudo() const
+const AtomicString& MediaControlPlayButtonElement::shadowPseudoId() const
{
DEFINE_STATIC_LOCAL(AtomicString, id, ("-webkit-media-controls-play-button", AtomicString::ConstructFromLiteral));
return id;
@@ -376,14 +260,14 @@ const AtomicString& MediaControlPlayButtonElement::pseudo() const
// ----------------------------
-MediaControlOverlayPlayButtonElement::MediaControlOverlayPlayButtonElement(Document& document)
- : MediaControlInputElement(document, MediaOverlayPlayButton)
+MediaControlOverlayPlayButtonElement::MediaControlOverlayPlayButtonElement(MediaControls& mediaControls)
+ : MediaControlInputElement(mediaControls, MediaOverlayPlayButton)
{
}
-PassRefPtr<MediaControlOverlayPlayButtonElement> MediaControlOverlayPlayButtonElement::create(Document& document)
+PassRefPtrWillBeRawPtr<MediaControlOverlayPlayButtonElement> MediaControlOverlayPlayButtonElement::create(MediaControls& mediaControls)
{
- RefPtr<MediaControlOverlayPlayButtonElement> button = adoptRef(new MediaControlOverlayPlayButtonElement(document));
+ RefPtrWillBeRawPtr<MediaControlOverlayPlayButtonElement> button = adoptRefWillBeNoop(new MediaControlOverlayPlayButtonElement(mediaControls));
button->ensureUserAgentShadowRoot();
button->setType("button");
return button.release();
@@ -391,23 +275,22 @@ PassRefPtr<MediaControlOverlayPlayButtonElement> MediaControlOverlayPlayButtonEl
void MediaControlOverlayPlayButtonElement::defaultEventHandler(Event* event)
{
- if (event->type() == EventTypeNames::click && mediaController()->canPlay()) {
- mediaController()->play();
+ if (event->type() == EventTypeNames::click && mediaElement().togglePlayStateWillPlay()) {
+ mediaElement().togglePlayState();
updateDisplayType();
event->setDefaultHandled();
}
- HTMLInputElement::defaultEventHandler(event);
}
void MediaControlOverlayPlayButtonElement::updateDisplayType()
{
- if (mediaController()->canPlay()) {
+ if (mediaElement().togglePlayStateWillPlay()) {
show();
} else
hide();
}
-const AtomicString& MediaControlOverlayPlayButtonElement::pseudo() const
+const AtomicString& MediaControlOverlayPlayButtonElement::shadowPseudoId() const
{
DEFINE_STATIC_LOCAL(AtomicString, id, ("-webkit-media-controls-overlay-play-button", AtomicString::ConstructFromLiteral));
return id;
@@ -416,16 +299,14 @@ const AtomicString& MediaControlOverlayPlayButtonElement::pseudo() const
// ----------------------------
-MediaControlToggleClosedCaptionsButtonElement::MediaControlToggleClosedCaptionsButtonElement(Document& document, MediaControls*)
- : MediaControlInputElement(document, MediaShowClosedCaptionsButton)
+MediaControlToggleClosedCaptionsButtonElement::MediaControlToggleClosedCaptionsButtonElement(MediaControls& mediaControls)
+ : MediaControlInputElement(mediaControls, MediaShowClosedCaptionsButton)
{
}
-PassRefPtr<MediaControlToggleClosedCaptionsButtonElement> MediaControlToggleClosedCaptionsButtonElement::create(Document& document, MediaControls* controls)
+PassRefPtrWillBeRawPtr<MediaControlToggleClosedCaptionsButtonElement> MediaControlToggleClosedCaptionsButtonElement::create(MediaControls& mediaControls)
{
- ASSERT(controls);
-
- RefPtr<MediaControlToggleClosedCaptionsButtonElement> button = adoptRef(new MediaControlToggleClosedCaptionsButtonElement(document, controls));
+ RefPtrWillBeRawPtr<MediaControlToggleClosedCaptionsButtonElement> button = adoptRefWillBeNoop(new MediaControlToggleClosedCaptionsButtonElement(mediaControls));
button->ensureUserAgentShadowRoot();
button->setType("button");
button->hide();
@@ -434,7 +315,7 @@ PassRefPtr<MediaControlToggleClosedCaptionsButtonElement> MediaControlToggleClos
void MediaControlToggleClosedCaptionsButtonElement::updateDisplayType()
{
- bool captionsVisible = mediaController()->closedCaptionsVisible();
+ bool captionsVisible = mediaElement().closedCaptionsVisible();
setDisplayType(captionsVisible ? MediaHideClosedCaptionsButton : MediaShowClosedCaptionsButton);
setChecked(captionsVisible);
}
@@ -442,8 +323,8 @@ void MediaControlToggleClosedCaptionsButtonElement::updateDisplayType()
void MediaControlToggleClosedCaptionsButtonElement::defaultEventHandler(Event* event)
{
if (event->type() == EventTypeNames::click) {
- mediaController()->setClosedCaptionsVisible(!mediaController()->closedCaptionsVisible());
- setChecked(mediaController()->closedCaptionsVisible());
+ mediaElement().setClosedCaptionsVisible(!mediaElement().closedCaptionsVisible());
+ setChecked(mediaElement().closedCaptionsVisible());
updateDisplayType();
event->setDefaultHandled();
}
@@ -451,7 +332,7 @@ void MediaControlToggleClosedCaptionsButtonElement::defaultEventHandler(Event* e
HTMLInputElement::defaultEventHandler(event);
}
-const AtomicString& MediaControlToggleClosedCaptionsButtonElement::pseudo() const
+const AtomicString& MediaControlToggleClosedCaptionsButtonElement::shadowPseudoId() const
{
DEFINE_STATIC_LOCAL(AtomicString, id, ("-webkit-media-controls-toggle-closed-captions-button", AtomicString::ConstructFromLiteral));
return id;
@@ -459,17 +340,14 @@ const AtomicString& MediaControlToggleClosedCaptionsButtonElement::pseudo() cons
// ----------------------------
-MediaControlTimelineElement::MediaControlTimelineElement(Document& document, MediaControls* controls)
- : MediaControlInputElement(document, MediaSlider)
- , m_controls(controls)
+MediaControlTimelineElement::MediaControlTimelineElement(MediaControls& mediaControls)
+ : MediaControlInputElement(mediaControls, MediaSlider)
{
}
-PassRefPtr<MediaControlTimelineElement> MediaControlTimelineElement::create(Document& document, MediaControls* controls)
+PassRefPtrWillBeRawPtr<MediaControlTimelineElement> MediaControlTimelineElement::create(MediaControls& mediaControls)
{
- ASSERT(controls);
-
- RefPtr<MediaControlTimelineElement> timeline = adoptRef(new MediaControlTimelineElement(document, controls));
+ RefPtrWillBeRawPtr<MediaControlTimelineElement> timeline = adoptRefWillBeNoop(new MediaControlTimelineElement(mediaControls));
timeline->ensureUserAgentShadowRoot();
timeline->setType("range");
timeline->setAttribute(stepAttr, "any");
@@ -478,18 +356,17 @@ PassRefPtr<MediaControlTimelineElement> MediaControlTimelineElement::create(Docu
void MediaControlTimelineElement::defaultEventHandler(Event* event)
{
- // Left button is 0. Rejects mouse events not from left button.
- if (event->isMouseEvent() && toMouseEvent(event)->button())
+ if (event->isMouseEvent() && toMouseEvent(event)->button() != LeftButton)
return;
if (!inDocument() || !document().isActive())
return;
if (event->type() == EventTypeNames::mousedown)
- mediaController()->beginScrubbing();
+ mediaControls().beginScrubbing();
if (event->type() == EventTypeNames::mouseup)
- mediaController()->endScrubbing();
+ mediaControls().endScrubbing();
MediaControlInputElement::defaultEventHandler(event);
@@ -497,12 +374,18 @@ void MediaControlTimelineElement::defaultEventHandler(Event* event)
return;
double time = value().toDouble();
- if (event->type() == EventTypeNames::input && time != mediaController()->currentTime())
- mediaController()->setCurrentTime(time, IGNORE_EXCEPTION);
+ if (event->type() == EventTypeNames::input) {
+ // FIXME: This will need to take the timeline offset into consideration
+ // once that concept is supported, see https://crbug.com/312699
+ if (mediaElement().controller())
+ mediaElement().controller()->setCurrentTime(time, IGNORE_EXCEPTION);
+ else
+ mediaElement().setCurrentTime(time, IGNORE_EXCEPTION);
+ }
RenderSlider* slider = toRenderSlider(renderer());
if (slider && slider->inDragMode())
- m_controls->updateCurrentTimeDisplay();
+ mediaControls().updateCurrentTimeDisplay();
}
bool MediaControlTimelineElement::willRespondToMouseClickEvents()
@@ -521,7 +404,7 @@ void MediaControlTimelineElement::setDuration(double duration)
}
-const AtomicString& MediaControlTimelineElement::pseudo() const
+const AtomicString& MediaControlTimelineElement::shadowPseudoId() const
{
DEFINE_STATIC_LOCAL(AtomicString, id, ("-webkit-media-controls-timeline", AtomicString::ConstructFromLiteral));
return id;
@@ -529,14 +412,14 @@ const AtomicString& MediaControlTimelineElement::pseudo() const
// ----------------------------
-MediaControlPanelVolumeSliderElement::MediaControlPanelVolumeSliderElement(Document& document)
- : MediaControlVolumeSliderElement(document)
+MediaControlVolumeSliderElement::MediaControlVolumeSliderElement(MediaControls& mediaControls)
+ : MediaControlInputElement(mediaControls, MediaVolumeSlider)
{
}
-PassRefPtr<MediaControlPanelVolumeSliderElement> MediaControlPanelVolumeSliderElement::create(Document& document)
+PassRefPtrWillBeRawPtr<MediaControlVolumeSliderElement> MediaControlVolumeSliderElement::create(MediaControls& mediaControls)
{
- RefPtr<MediaControlPanelVolumeSliderElement> slider = adoptRef(new MediaControlPanelVolumeSliderElement(document));
+ RefPtrWillBeRawPtr<MediaControlVolumeSliderElement> slider = adoptRefWillBeNoop(new MediaControlVolumeSliderElement(mediaControls));
slider->ensureUserAgentShadowRoot();
slider->setType("range");
slider->setAttribute(stepAttr, "any");
@@ -544,7 +427,47 @@ PassRefPtr<MediaControlPanelVolumeSliderElement> MediaControlPanelVolumeSliderEl
return slider.release();
}
-const AtomicString& MediaControlPanelVolumeSliderElement::pseudo() const
+void MediaControlVolumeSliderElement::defaultEventHandler(Event* event)
+{
+ if (event->isMouseEvent() && toMouseEvent(event)->button() != LeftButton)
+ return;
+
+ if (!inDocument() || !document().isActive())
+ return;
+
+ MediaControlInputElement::defaultEventHandler(event);
+
+ if (event->type() == EventTypeNames::mouseover || event->type() == EventTypeNames::mouseout || event->type() == EventTypeNames::mousemove)
+ return;
+
+ double volume = value().toDouble();
+ mediaElement().setVolume(volume, ASSERT_NO_EXCEPTION);
+ mediaElement().setMuted(false);
+}
+
+bool MediaControlVolumeSliderElement::willRespondToMouseMoveEvents()
+{
+ if (!inDocument() || !document().isActive())
+ return false;
+
+ return MediaControlInputElement::willRespondToMouseMoveEvents();
+}
+
+bool MediaControlVolumeSliderElement::willRespondToMouseClickEvents()
+{
+ if (!inDocument() || !document().isActive())
+ return false;
+
+ return MediaControlInputElement::willRespondToMouseClickEvents();
+}
+
+void MediaControlVolumeSliderElement::setVolume(double volume)
+{
+ if (value().toDouble() != volume)
+ setValue(String::number(volume));
+}
+
+const AtomicString& MediaControlVolumeSliderElement::shadowPseudoId() const
{
DEFINE_STATIC_LOCAL(AtomicString, id, ("-webkit-media-controls-volume-slider", AtomicString::ConstructFromLiteral));
return id;
@@ -552,14 +475,14 @@ const AtomicString& MediaControlPanelVolumeSliderElement::pseudo() const
// ----------------------------
-MediaControlFullscreenButtonElement::MediaControlFullscreenButtonElement(Document& document)
- : MediaControlInputElement(document, MediaEnterFullscreenButton)
+MediaControlFullscreenButtonElement::MediaControlFullscreenButtonElement(MediaControls& mediaControls)
+ : MediaControlInputElement(mediaControls, MediaEnterFullscreenButton)
{
}
-PassRefPtr<MediaControlFullscreenButtonElement> MediaControlFullscreenButtonElement::create(Document& document)
+PassRefPtrWillBeRawPtr<MediaControlFullscreenButtonElement> MediaControlFullscreenButtonElement::create(MediaControls& mediaControls)
{
- RefPtr<MediaControlFullscreenButtonElement> button = adoptRef(new MediaControlFullscreenButtonElement(document));
+ RefPtrWillBeRawPtr<MediaControlFullscreenButtonElement> button = adoptRefWillBeNoop(new MediaControlFullscreenButtonElement(mediaControls));
button->ensureUserAgentShadowRoot();
button->setType("button");
button->hide();
@@ -569,24 +492,16 @@ PassRefPtr<MediaControlFullscreenButtonElement> MediaControlFullscreenButtonElem
void MediaControlFullscreenButtonElement::defaultEventHandler(Event* event)
{
if (event->type() == EventTypeNames::click) {
- // Only use the new full screen API if the fullScreenEnabled setting has
- // been explicitly enabled. Otherwise, use the old fullscreen API. This
- // allows apps which embed a WebView to retain the existing full screen
- // video implementation without requiring them to implement their own full
- // screen behavior.
- if (document().settings() && document().settings()->fullScreenEnabled()) {
- if (FullscreenElementStack::isActiveFullScreenElement(toParentMediaElement(this)))
- FullscreenElementStack::from(&document())->webkitCancelFullScreen();
- else
- FullscreenElementStack::from(&document())->requestFullScreenForElement(toParentMediaElement(this), 0, FullscreenElementStack::ExemptIFrameAllowFullScreenRequirement);
- } else
- mediaController()->enterFullscreen();
+ if (FullscreenElementStack::isActiveFullScreenElement(&mediaElement()))
+ FullscreenElementStack::from(document()).webkitCancelFullScreen();
+ else
+ FullscreenElementStack::from(document()).requestFullScreenForElement(&mediaElement(), 0, FullscreenElementStack::ExemptIFrameAllowFullScreenRequirement);
event->setDefaultHandled();
}
HTMLInputElement::defaultEventHandler(event);
}
-const AtomicString& MediaControlFullscreenButtonElement::pseudo() const
+const AtomicString& MediaControlFullscreenButtonElement::shadowPseudoId() const
{
DEFINE_STATIC_LOCAL(AtomicString, id, ("-webkit-media-controls-fullscreen-button", AtomicString::ConstructFromLiteral));
return id;
@@ -599,14 +514,14 @@ void MediaControlFullscreenButtonElement::setIsFullscreen(bool isFullscreen)
// ----------------------------
-MediaControlTimeRemainingDisplayElement::MediaControlTimeRemainingDisplayElement(Document& document)
- : MediaControlTimeDisplayElement(document, MediaTimeRemainingDisplay)
+MediaControlTimeRemainingDisplayElement::MediaControlTimeRemainingDisplayElement(MediaControls& mediaControls)
+ : MediaControlTimeDisplayElement(mediaControls, MediaTimeRemainingDisplay)
{
}
-PassRefPtr<MediaControlTimeRemainingDisplayElement> MediaControlTimeRemainingDisplayElement::create(Document& document)
+PassRefPtrWillBeRawPtr<MediaControlTimeRemainingDisplayElement> MediaControlTimeRemainingDisplayElement::create(MediaControls& mediaControls)
{
- return adoptRef(new MediaControlTimeRemainingDisplayElement(document));
+ return adoptRefWillBeNoop(new MediaControlTimeRemainingDisplayElement(mediaControls));
}
static const AtomicString& getMediaControlTimeRemainingDisplayElementShadowPseudoId()
@@ -615,21 +530,21 @@ static const AtomicString& getMediaControlTimeRemainingDisplayElementShadowPseud
return id;
}
-const AtomicString& MediaControlTimeRemainingDisplayElement::pseudo() const
+const AtomicString& MediaControlTimeRemainingDisplayElement::shadowPseudoId() const
{
return getMediaControlTimeRemainingDisplayElementShadowPseudoId();
}
// ----------------------------
-MediaControlCurrentTimeDisplayElement::MediaControlCurrentTimeDisplayElement(Document& document)
- : MediaControlTimeDisplayElement(document, MediaCurrentTimeDisplay)
+MediaControlCurrentTimeDisplayElement::MediaControlCurrentTimeDisplayElement(MediaControls& mediaControls)
+ : MediaControlTimeDisplayElement(mediaControls, MediaCurrentTimeDisplay)
{
}
-PassRefPtr<MediaControlCurrentTimeDisplayElement> MediaControlCurrentTimeDisplayElement::create(Document& document)
+PassRefPtrWillBeRawPtr<MediaControlCurrentTimeDisplayElement> MediaControlCurrentTimeDisplayElement::create(MediaControls& mediaControls)
{
- return adoptRef(new MediaControlCurrentTimeDisplayElement(document));
+ return adoptRefWillBeNoop(new MediaControlCurrentTimeDisplayElement(mediaControls));
}
static const AtomicString& getMediaControlCurrentTimeDisplayElementShadowPseudoId()
@@ -638,22 +553,22 @@ static const AtomicString& getMediaControlCurrentTimeDisplayElementShadowPseudoI
return id;
}
-const AtomicString& MediaControlCurrentTimeDisplayElement::pseudo() const
+const AtomicString& MediaControlCurrentTimeDisplayElement::shadowPseudoId() const
{
return getMediaControlCurrentTimeDisplayElementShadowPseudoId();
}
// ----------------------------
-MediaControlTextTrackContainerElement::MediaControlTextTrackContainerElement(Document& document)
- : MediaControlDivElement(document, MediaTextTrackDisplayContainer)
+MediaControlTextTrackContainerElement::MediaControlTextTrackContainerElement(MediaControls& mediaControls)
+ : MediaControlDivElement(mediaControls, MediaTextTrackDisplayContainer)
, m_fontSize(0)
{
}
-PassRefPtr<MediaControlTextTrackContainerElement> MediaControlTextTrackContainerElement::create(Document& document)
+PassRefPtrWillBeRawPtr<MediaControlTextTrackContainerElement> MediaControlTextTrackContainerElement::create(MediaControls& mediaControls)
{
- RefPtr<MediaControlTextTrackContainerElement> element = adoptRef(new MediaControlTextTrackContainerElement(document));
+ RefPtrWillBeRawPtr<MediaControlTextTrackContainerElement> element = adoptRefWillBeNoop(new MediaControlTextTrackContainerElement(mediaControls));
element->hide();
return element.release();
}
@@ -669,30 +584,28 @@ const AtomicString& MediaControlTextTrackContainerElement::textTrackContainerEle
return id;
}
-const AtomicString& MediaControlTextTrackContainerElement::pseudo() const
+const AtomicString& MediaControlTextTrackContainerElement::shadowPseudoId() const
{
return textTrackContainerElementShadowPseudoId();
}
void MediaControlTextTrackContainerElement::updateDisplay()
{
- if (!mediaController()->closedCaptionsVisible()) {
+ if (!mediaElement().closedCaptionsVisible()) {
removeChildren();
return;
}
- HTMLMediaElement* mediaElement = toParentMediaElement(this);
// 1. If the media element is an audio element, or is another playback
// mechanism with no rendering area, abort these steps. There is nothing to
// render.
- if (!mediaElement || !mediaElement->isVideo())
+ if (isHTMLAudioElement(mediaElement()))
return;
// 2. Let video be the media element or other playback mechanism.
- HTMLVideoElement* video = toHTMLVideoElement(mediaElement);
+ HTMLVideoElement& video = toHTMLVideoElement(mediaElement());
// 3. Let output be an empty list of absolutely positioned CSS block boxes.
- Vector<RefPtr<HTMLDivElement> > output;
// 4. If the user agent is exposing a user interface for video, add to
// output one or more completely transparent positioned CSS block boxes that
@@ -713,7 +626,7 @@ void MediaControlTextTrackContainerElement::updateDisplay()
// 7. Let cues be an empty list of text track cues.
// 8. For each track track in tracks, append to cues all the cues from
// track's list of cues that have their text track cue active flag set.
- CueList activeCues = video->currentlyActiveCues();
+ CueList activeCues = video.currentlyActiveCues();
// 9. If reset is false, then, for each text track cue cue in cues: if cue's
// text track cue display state has a set of CSS boxes, then add those boxes
@@ -737,28 +650,24 @@ void MediaControlTextTrackContainerElement::updateDisplay()
}
// 11. Return output.
- if (hasChildNodes())
+ if (hasChildren())
show();
else
hide();
}
-void MediaControlTextTrackContainerElement::updateSizes(bool forceUpdate)
+void MediaControlTextTrackContainerElement::updateSizes()
{
- HTMLMediaElement* mediaElement = toParentMediaElement(this);
- if (!mediaElement)
- return;
-
if (!document().isActive())
return;
IntRect videoBox;
- if (!mediaElement->renderer() || !mediaElement->renderer()->isVideo())
+ if (!mediaElement().renderer() || !mediaElement().renderer()->isVideo())
return;
- videoBox = toRenderVideo(mediaElement->renderer())->videoBox();
+ videoBox = toRenderVideo(mediaElement().renderer())->videoBox();
- if (!forceUpdate && m_videoDisplaySize == videoBox)
+ if (m_videoDisplaySize == videoBox)
return;
m_videoDisplaySize = videoBox;
diff --git a/chromium/third_party/WebKit/Source/core/html/shadow/MediaControlElements.h b/chromium/third_party/WebKit/Source/core/html/shadow/MediaControlElements.h
index 3d631dbb9b9..06c03206b75 100644
--- a/chromium/third_party/WebKit/Source/core/html/shadow/MediaControlElements.h
+++ b/chromium/third_party/WebKit/Source/core/html/shadow/MediaControlElements.h
@@ -38,40 +38,25 @@ namespace WebCore {
class MediaControlPanelElement FINAL : public MediaControlDivElement {
public:
- static PassRefPtr<MediaControlPanelElement> create(Document&);
+ static PassRefPtrWillBeRawPtr<MediaControlPanelElement> create(MediaControls&);
- void setCanBeDragged(bool);
void setIsDisplayed(bool);
- void resetPosition();
void makeOpaque();
void makeTransparent();
- virtual bool willRespondToMouseMoveEvents() OVERRIDE { return true; }
- virtual bool willRespondToMouseClickEvents() OVERRIDE { return true; }
-
private:
- explicit MediaControlPanelElement(Document&);
+ explicit MediaControlPanelElement(MediaControls&);
- virtual const AtomicString& pseudo() const OVERRIDE;
+ virtual const AtomicString& shadowPseudoId() const OVERRIDE;
virtual void defaultEventHandler(Event*) OVERRIDE;
- void startDrag(const LayoutPoint& eventLocation);
- void continueDrag(const LayoutPoint& eventLocation);
- void endDrag();
-
void startTimer();
void stopTimer();
void transitionTimerFired(Timer<MediaControlPanelElement>*);
- void setPosition(const LayoutPoint&);
-
- bool m_canBeDragged;
- bool m_isBeingDragged;
bool m_isDisplayed;
bool m_opaque;
- LayoutPoint m_lastDragEventLocation;
- LayoutPoint m_cumulativeDragOffset;
Timer<MediaControlPanelElement> m_transitionTimer;
};
@@ -80,66 +65,53 @@ private:
class MediaControlPanelEnclosureElement FINAL : public MediaControlDivElement {
public:
- static PassRefPtr<MediaControlPanelEnclosureElement> create(Document&);
+ static PassRefPtrWillBeRawPtr<MediaControlPanelEnclosureElement> create(MediaControls&);
private:
- explicit MediaControlPanelEnclosureElement(Document&);
- virtual const AtomicString& pseudo() const OVERRIDE;
+ explicit MediaControlPanelEnclosureElement(MediaControls&);
+ virtual const AtomicString& shadowPseudoId() const OVERRIDE;
};
// ----------------------------
class MediaControlOverlayEnclosureElement FINAL : public MediaControlDivElement {
public:
- static PassRefPtr<MediaControlOverlayEnclosureElement> create(Document&);
+ static PassRefPtrWillBeRawPtr<MediaControlOverlayEnclosureElement> create(MediaControls&);
private:
- explicit MediaControlOverlayEnclosureElement(Document&);
- virtual const AtomicString& pseudo() const OVERRIDE;
+ explicit MediaControlOverlayEnclosureElement(MediaControls&);
+ virtual const AtomicString& shadowPseudoId() const OVERRIDE;
};
// ----------------------------
-class MediaControlPanelMuteButtonElement FINAL : public MediaControlMuteButtonElement {
+class MediaControlMuteButtonElement FINAL : public MediaControlInputElement {
public:
- static PassRefPtr<MediaControlPanelMuteButtonElement> create(Document&, MediaControls*);
+ static PassRefPtrWillBeRawPtr<MediaControlMuteButtonElement> create(MediaControls&);
- virtual bool willRespondToMouseMoveEvents() OVERRIDE { return true; }
+ virtual bool willRespondToMouseClickEvents() OVERRIDE { return true; }
+ virtual void updateDisplayType() OVERRIDE;
private:
- explicit MediaControlPanelMuteButtonElement(Document&, MediaControls*);
+ explicit MediaControlMuteButtonElement(MediaControls&);
- virtual const AtomicString& pseudo() const OVERRIDE;
+ virtual const AtomicString& shadowPseudoId() const OVERRIDE;
virtual void defaultEventHandler(Event*) OVERRIDE;
-
- MediaControls* m_controls;
-};
-
-// ----------------------------
-
-class MediaControlVolumeSliderMuteButtonElement FINAL : public MediaControlMuteButtonElement {
-public:
- static PassRefPtr<MediaControlVolumeSliderMuteButtonElement> create(Document&);
-
-private:
- explicit MediaControlVolumeSliderMuteButtonElement(Document&);
- virtual const AtomicString& pseudo() const OVERRIDE;
};
-
// ----------------------------
class MediaControlPlayButtonElement FINAL : public MediaControlInputElement {
public:
- static PassRefPtr<MediaControlPlayButtonElement> create(Document&);
+ static PassRefPtrWillBeRawPtr<MediaControlPlayButtonElement> create(MediaControls&);
virtual bool willRespondToMouseClickEvents() OVERRIDE { return true; }
virtual void updateDisplayType() OVERRIDE;
private:
- explicit MediaControlPlayButtonElement(Document&);
+ explicit MediaControlPlayButtonElement(MediaControls&);
- virtual const AtomicString& pseudo() const OVERRIDE;
+ virtual const AtomicString& shadowPseudoId() const OVERRIDE;
virtual void defaultEventHandler(Event*) OVERRIDE;
};
@@ -147,14 +119,14 @@ private:
class MediaControlOverlayPlayButtonElement FINAL : public MediaControlInputElement {
public:
- static PassRefPtr<MediaControlOverlayPlayButtonElement> create(Document&);
+ static PassRefPtrWillBeRawPtr<MediaControlOverlayPlayButtonElement> create(MediaControls&);
virtual void updateDisplayType() OVERRIDE;
private:
- explicit MediaControlOverlayPlayButtonElement(Document&);
+ explicit MediaControlOverlayPlayButtonElement(MediaControls&);
- virtual const AtomicString& pseudo() const OVERRIDE;
+ virtual const AtomicString& shadowPseudoId() const OVERRIDE;
virtual void defaultEventHandler(Event*) OVERRIDE;
};
@@ -162,16 +134,16 @@ private:
class MediaControlToggleClosedCaptionsButtonElement FINAL : public MediaControlInputElement {
public:
- static PassRefPtr<MediaControlToggleClosedCaptionsButtonElement> create(Document&, MediaControls*);
+ static PassRefPtrWillBeRawPtr<MediaControlToggleClosedCaptionsButtonElement> create(MediaControls&);
virtual bool willRespondToMouseClickEvents() OVERRIDE { return true; }
virtual void updateDisplayType() OVERRIDE;
private:
- explicit MediaControlToggleClosedCaptionsButtonElement(Document&, MediaControls*);
+ explicit MediaControlToggleClosedCaptionsButtonElement(MediaControls&);
- virtual const AtomicString& pseudo() const OVERRIDE;
+ virtual const AtomicString& shadowPseudoId() const OVERRIDE;
virtual void defaultEventHandler(Event*) OVERRIDE;
};
@@ -179,87 +151,93 @@ private:
class MediaControlTimelineElement FINAL : public MediaControlInputElement {
public:
- static PassRefPtr<MediaControlTimelineElement> create(Document&, MediaControls*);
+ static PassRefPtrWillBeRawPtr<MediaControlTimelineElement> create(MediaControls&);
virtual bool willRespondToMouseClickEvents() OVERRIDE;
+ // FIXME: An "earliest possible position" will be needed once that concept
+ // is supported by HTMLMediaElement, see https://crbug.com/137275
void setPosition(double);
void setDuration(double);
private:
- explicit MediaControlTimelineElement(Document&, MediaControls*);
+ explicit MediaControlTimelineElement(MediaControls&);
- virtual const AtomicString& pseudo() const OVERRIDE;
+ virtual const AtomicString& shadowPseudoId() const OVERRIDE;
virtual void defaultEventHandler(Event*) OVERRIDE;
-
- MediaControls* m_controls;
};
// ----------------------------
class MediaControlFullscreenButtonElement FINAL : public MediaControlInputElement {
public:
- static PassRefPtr<MediaControlFullscreenButtonElement> create(Document&);
+ static PassRefPtrWillBeRawPtr<MediaControlFullscreenButtonElement> create(MediaControls&);
virtual bool willRespondToMouseClickEvents() OVERRIDE { return true; }
- virtual void setIsFullscreen(bool);
+ void setIsFullscreen(bool);
private:
- explicit MediaControlFullscreenButtonElement(Document&);
+ explicit MediaControlFullscreenButtonElement(MediaControls&);
- virtual const AtomicString& pseudo() const OVERRIDE;
+ virtual const AtomicString& shadowPseudoId() const OVERRIDE;
virtual void defaultEventHandler(Event*) OVERRIDE;
};
// ----------------------------
-class MediaControlPanelVolumeSliderElement FINAL : public MediaControlVolumeSliderElement {
+class MediaControlVolumeSliderElement FINAL : public MediaControlInputElement {
public:
- static PassRefPtr<MediaControlPanelVolumeSliderElement> create(Document&);
+ static PassRefPtrWillBeRawPtr<MediaControlVolumeSliderElement> create(MediaControls&);
+
+ virtual bool willRespondToMouseMoveEvents() OVERRIDE;
+ virtual bool willRespondToMouseClickEvents() OVERRIDE;
+ void setVolume(double);
private:
- explicit MediaControlPanelVolumeSliderElement(Document&);
- virtual const AtomicString& pseudo() const OVERRIDE;
+ explicit MediaControlVolumeSliderElement(MediaControls&);
+
+ virtual const AtomicString& shadowPseudoId() const OVERRIDE;
+ virtual void defaultEventHandler(Event*) OVERRIDE;
};
// ----------------------------
class MediaControlTimeRemainingDisplayElement FINAL : public MediaControlTimeDisplayElement {
public:
- static PassRefPtr<MediaControlTimeRemainingDisplayElement> create(Document&);
+ static PassRefPtrWillBeRawPtr<MediaControlTimeRemainingDisplayElement> create(MediaControls&);
private:
- explicit MediaControlTimeRemainingDisplayElement(Document&);
- virtual const AtomicString& pseudo() const OVERRIDE;
+ explicit MediaControlTimeRemainingDisplayElement(MediaControls&);
+ virtual const AtomicString& shadowPseudoId() const OVERRIDE;
};
// ----------------------------
class MediaControlCurrentTimeDisplayElement FINAL : public MediaControlTimeDisplayElement {
public:
- static PassRefPtr<MediaControlCurrentTimeDisplayElement> create(Document&);
+ static PassRefPtrWillBeRawPtr<MediaControlCurrentTimeDisplayElement> create(MediaControls&);
private:
- explicit MediaControlCurrentTimeDisplayElement(Document&);
- virtual const AtomicString& pseudo() const OVERRIDE;
+ explicit MediaControlCurrentTimeDisplayElement(MediaControls&);
+ virtual const AtomicString& shadowPseudoId() const OVERRIDE;
};
// ----------------------------
class MediaControlTextTrackContainerElement FINAL : public MediaControlDivElement {
public:
- static PassRefPtr<MediaControlTextTrackContainerElement> create(Document&);
+ static PassRefPtrWillBeRawPtr<MediaControlTextTrackContainerElement> create(MediaControls&);
void updateDisplay();
- void updateSizes(bool forceUpdate = false);
+ void updateSizes();
static const AtomicString& textTrackContainerElementShadowPseudoId();
private:
- explicit MediaControlTextTrackContainerElement(Document&);
- virtual const AtomicString& pseudo() const OVERRIDE;
+ explicit MediaControlTextTrackContainerElement(MediaControls&);
+ virtual const AtomicString& shadowPseudoId() const OVERRIDE;
- virtual RenderObject* createRenderer(RenderStyle*);
+ virtual RenderObject* createRenderer(RenderStyle*) OVERRIDE;
IntRect m_videoDisplaySize;
float m_fontSize;
diff --git a/chromium/third_party/WebKit/Source/core/html/shadow/MediaControls.cpp b/chromium/third_party/WebKit/Source/core/html/shadow/MediaControls.cpp
index 0e2fa811fba..a82cf61a972 100644
--- a/chromium/third_party/WebKit/Source/core/html/shadow/MediaControls.cpp
+++ b/chromium/third_party/WebKit/Source/core/html/shadow/MediaControls.cpp
@@ -28,118 +28,162 @@
#include "core/html/shadow/MediaControls.h"
#include "bindings/v8/ExceptionStatePlaceholder.h"
+#include "core/events/MouseEvent.h"
+#include "core/frame/Settings.h"
+#include "core/html/HTMLMediaElement.h"
+#include "core/html/MediaController.h"
+#include "core/rendering/RenderTheme.h"
namespace WebCore {
-static const double timeWithoutMouseMovementBeforeHidingFullscreenControls = 3;
-
-MediaControls::MediaControls(Document& document)
- : HTMLDivElement(document)
- , m_mediaController(0)
- , m_panel(0)
- , m_textDisplayContainer(0)
- , m_playButton(0)
- , m_currentTimeDisplay(0)
- , m_timeline(0)
- , m_panelMuteButton(0)
- , m_volumeSlider(0)
- , m_toggleClosedCaptionsButton(0)
- , m_fullScreenButton(0)
- , m_hideFullscreenControlsTimer(this, &MediaControls::hideFullscreenControlsTimerFired)
- , m_isFullscreen(false)
+// If you change this value, then also update the corresponding value in
+// LayoutTests/media/media-controls.js.
+static const double timeWithoutMouseMovementBeforeHidingMediaControls = 3;
+
+MediaControls::MediaControls(HTMLMediaElement& mediaElement)
+ : HTMLDivElement(mediaElement.document())
+ , m_mediaElement(&mediaElement)
+ , m_panel(nullptr)
+ , m_textDisplayContainer(nullptr)
+ , m_overlayPlayButton(nullptr)
+ , m_overlayEnclosure(nullptr)
+ , m_playButton(nullptr)
+ , m_currentTimeDisplay(nullptr)
+ , m_timeline(nullptr)
+ , m_muteButton(nullptr)
+ , m_volumeSlider(nullptr)
+ , m_toggleClosedCaptionsButton(nullptr)
+ , m_fullScreenButton(nullptr)
+ , m_durationDisplay(nullptr)
+ , m_enclosure(nullptr)
+ , m_hideMediaControlsTimer(this, &MediaControls::hideMediaControlsTimerFired)
, m_isMouseOverControls(false)
+ , m_isPausedForScrubbing(false)
{
}
-void MediaControls::setMediaController(MediaControllerInterface* controller)
+PassRefPtrWillBeRawPtr<MediaControls> MediaControls::create(HTMLMediaElement& mediaElement)
{
- if (m_mediaController == controller)
- return;
- m_mediaController = controller;
+ RefPtrWillBeRawPtr<MediaControls> controls = adoptRefWillBeNoop(new MediaControls(mediaElement));
- if (m_panel)
- m_panel->setMediaController(controller);
- if (m_textDisplayContainer)
- m_textDisplayContainer->setMediaController(controller);
- if (m_playButton)
- m_playButton->setMediaController(controller);
- if (m_currentTimeDisplay)
- m_currentTimeDisplay->setMediaController(controller);
- if (m_timeline)
- m_timeline->setMediaController(controller);
- if (m_panelMuteButton)
- m_panelMuteButton->setMediaController(controller);
- if (m_volumeSlider)
- m_volumeSlider->setMediaController(controller);
- if (m_toggleClosedCaptionsButton)
- m_toggleClosedCaptionsButton->setMediaController(controller);
- if (m_fullScreenButton)
- m_fullScreenButton->setMediaController(controller);
+ if (controls->initializeControls())
+ return controls.release();
+
+ return nullptr;
}
-void MediaControls::reset()
+bool MediaControls::initializeControls()
{
- Page* page = document().page();
- if (!page)
- return;
+ TrackExceptionState exceptionState;
- m_playButton->updateDisplayType();
+ if (document().settings() && document().settings()->mediaControlsOverlayPlayButtonEnabled()) {
+ RefPtrWillBeRawPtr<MediaControlOverlayEnclosureElement> overlayEnclosure = MediaControlOverlayEnclosureElement::create(*this);
+ RefPtrWillBeRawPtr<MediaControlOverlayPlayButtonElement> overlayPlayButton = MediaControlOverlayPlayButtonElement::create(*this);
+ m_overlayPlayButton = overlayPlayButton.get();
+ overlayEnclosure->appendChild(overlayPlayButton.release(), exceptionState);
+ if (exceptionState.hadException())
+ return false;
- updateCurrentTimeDisplay();
-
- double duration = m_mediaController->duration();
- if (std::isfinite(duration) || RenderTheme::theme().hasOwnDisabledStateHandlingFor(MediaSliderPart)) {
- m_timeline->setDuration(duration);
- m_timeline->setPosition(m_mediaController->currentTime());
+ m_overlayEnclosure = overlayEnclosure.get();
+ appendChild(overlayEnclosure.release(), exceptionState);
+ if (exceptionState.hadException())
+ return false;
}
- if (m_mediaController->hasAudio() || RenderTheme::theme().hasOwnDisabledStateHandlingFor(MediaMuteButtonPart))
- m_panelMuteButton->show();
- else
- m_panelMuteButton->hide();
-
- if (m_volumeSlider) {
- if (!m_mediaController->hasAudio())
- m_volumeSlider->hide();
- else {
- m_volumeSlider->show();
- m_volumeSlider->setVolume(m_mediaController->volume());
- }
- }
+ // Create an enclosing element for the panel so we can visually offset the controls correctly.
+ RefPtrWillBeRawPtr<MediaControlPanelEnclosureElement> enclosure = MediaControlPanelEnclosureElement::create(*this);
- refreshClosedCaptionsButtonVisibility();
+ RefPtrWillBeRawPtr<MediaControlPanelElement> panel = MediaControlPanelElement::create(*this);
- if (m_fullScreenButton) {
- if (m_mediaController->supportsFullscreen() && m_mediaController->hasVideo())
- m_fullScreenButton->show();
- else
- m_fullScreenButton->hide();
- }
+ RefPtrWillBeRawPtr<MediaControlPlayButtonElement> playButton = MediaControlPlayButtonElement::create(*this);
+ m_playButton = playButton.get();
+ panel->appendChild(playButton.release(), exceptionState);
+ if (exceptionState.hadException())
+ return false;
- makeOpaque();
+ RefPtrWillBeRawPtr<MediaControlTimelineElement> timeline = MediaControlTimelineElement::create(*this);
+ m_timeline = timeline.get();
+ panel->appendChild(timeline.release(), exceptionState);
+ if (exceptionState.hadException())
+ return false;
+
+ RefPtrWillBeRawPtr<MediaControlCurrentTimeDisplayElement> currentTimeDisplay = MediaControlCurrentTimeDisplayElement::create(*this);
+ m_currentTimeDisplay = currentTimeDisplay.get();
+ m_currentTimeDisplay->hide();
+ panel->appendChild(currentTimeDisplay.release(), exceptionState);
+ if (exceptionState.hadException())
+ return false;
+
+ RefPtrWillBeRawPtr<MediaControlTimeRemainingDisplayElement> durationDisplay = MediaControlTimeRemainingDisplayElement::create(*this);
+ m_durationDisplay = durationDisplay.get();
+ panel->appendChild(durationDisplay.release(), exceptionState);
+ if (exceptionState.hadException())
+ return false;
+
+ RefPtrWillBeRawPtr<MediaControlMuteButtonElement> muteButton = MediaControlMuteButtonElement::create(*this);
+ m_muteButton = muteButton.get();
+ panel->appendChild(muteButton.release(), exceptionState);
+ if (exceptionState.hadException())
+ return false;
+
+ RefPtrWillBeRawPtr<MediaControlVolumeSliderElement> slider = MediaControlVolumeSliderElement::create(*this);
+ m_volumeSlider = slider.get();
+ panel->appendChild(slider.release(), exceptionState);
+ if (exceptionState.hadException())
+ return false;
+
+ RefPtrWillBeRawPtr<MediaControlToggleClosedCaptionsButtonElement> toggleClosedCaptionsButton = MediaControlToggleClosedCaptionsButtonElement::create(*this);
+ m_toggleClosedCaptionsButton = toggleClosedCaptionsButton.get();
+ panel->appendChild(toggleClosedCaptionsButton.release(), exceptionState);
+ if (exceptionState.hadException())
+ return false;
+
+ RefPtrWillBeRawPtr<MediaControlFullscreenButtonElement> fullscreenButton = MediaControlFullscreenButtonElement::create(*this);
+ m_fullScreenButton = fullscreenButton.get();
+ panel->appendChild(fullscreenButton.release(), exceptionState);
+ if (exceptionState.hadException())
+ return false;
+
+ m_panel = panel.get();
+ enclosure->appendChild(panel.release(), exceptionState);
+ if (exceptionState.hadException())
+ return false;
+
+ m_enclosure = enclosure.get();
+ appendChild(enclosure.release(), exceptionState);
+ if (exceptionState.hadException())
+ return false;
+
+ return true;
}
-void MediaControls::reportedError()
+void MediaControls::reset()
{
- Page* page = document().page();
- if (!page)
- return;
+ double duration = mediaElement().duration();
+ m_durationDisplay->setInnerText(RenderTheme::theme().formatMediaControlsTime(duration), ASSERT_NO_EXCEPTION);
+ m_durationDisplay->setCurrentValue(duration);
+
+ updatePlayState();
+
+ updateCurrentTimeDisplay();
- if (!RenderTheme::theme().hasOwnDisabledStateHandlingFor(MediaMuteButtonPart)) {
- m_panelMuteButton->hide();
+ m_timeline->setDuration(duration);
+ m_timeline->setPosition(mediaElement().currentTime());
+
+ if (!mediaElement().hasAudio())
m_volumeSlider->hide();
- }
+ else
+ m_volumeSlider->show();
+ updateVolume();
- if (m_toggleClosedCaptionsButton && !RenderTheme::theme().hasOwnDisabledStateHandlingFor(MediaToggleClosedCaptionsButtonPart))
- m_toggleClosedCaptionsButton->hide();
+ refreshClosedCaptionsButtonVisibility();
- if (m_fullScreenButton && !RenderTheme::theme().hasOwnDisabledStateHandlingFor(MediaEnterFullscreenButtonPart))
+ if (mediaElement().hasVideo())
+ m_fullScreenButton->show();
+ else
m_fullScreenButton->hide();
-}
-void MediaControls::loadedMetadata()
-{
- reset();
+ makeOpaque();
}
void MediaControls::show()
@@ -149,6 +193,12 @@ void MediaControls::show()
m_panel->show();
}
+void MediaControls::mediaElementFocused()
+{
+ show();
+ stopHideMediaControlsTimer();
+}
+
void MediaControls::hide()
{
m_panel->setIsDisplayed(false);
@@ -165,81 +215,118 @@ void MediaControls::makeTransparent()
m_panel->makeTransparent();
}
-bool MediaControls::shouldHideControls()
+bool MediaControls::shouldHideMediaControls(unsigned behaviorFlags) const
{
- return !m_panel->hovered();
-}
-
-void MediaControls::bufferingProgressed()
-{
- // We only need to update buffering progress when paused, during normal
- // playback playbackProgressed() will take care of it.
- if (m_mediaController->paused())
- m_timeline->setPosition(m_mediaController->currentTime());
+ // Never hide for a media element without visual representation.
+ if (!mediaElement().hasVideo())
+ return false;
+ // Don't hide if the controls are hovered or the mouse is over the video area.
+ const bool ignoreVideoHover = behaviorFlags & IgnoreVideoHover;
+ if (m_panel->hovered() || (!ignoreVideoHover && m_isMouseOverControls))
+ return false;
+ // Don't hide if focus is on the HTMLMediaElement or within the
+ // controls/shadow tree. (Perform the checks separately to avoid going
+ // through all the potential ancestor hosts for the focused element.)
+ const bool ignoreFocus = behaviorFlags & IgnoreFocus;
+ if (!ignoreFocus && (mediaElement().focused() || contains(document().focusedElement())))
+ return false;
+ return true;
}
void MediaControls::playbackStarted()
{
- m_playButton->updateDisplayType();
- m_timeline->setPosition(m_mediaController->currentTime());
+ m_currentTimeDisplay->show();
+ m_durationDisplay->hide();
+
+ updatePlayState();
+ m_timeline->setPosition(mediaElement().currentTime());
updateCurrentTimeDisplay();
- if (m_isFullscreen)
- startHideFullscreenControlsTimer();
+ startHideMediaControlsTimer();
}
void MediaControls::playbackProgressed()
{
- m_timeline->setPosition(m_mediaController->currentTime());
+ m_timeline->setPosition(mediaElement().currentTime());
updateCurrentTimeDisplay();
- if (!m_isMouseOverControls && m_mediaController->hasVideo())
+ if (shouldHideMediaControls())
makeTransparent();
}
void MediaControls::playbackStopped()
{
- m_playButton->updateDisplayType();
- m_timeline->setPosition(m_mediaController->currentTime());
+ updatePlayState();
+ m_timeline->setPosition(mediaElement().currentTime());
updateCurrentTimeDisplay();
makeOpaque();
- stopHideFullscreenControlsTimer();
+ stopHideMediaControlsTimer();
}
-void MediaControls::showVolumeSlider()
+void MediaControls::updatePlayState()
{
- if (!m_mediaController->hasAudio())
+ if (m_isPausedForScrubbing)
return;
- m_volumeSlider->show();
+ if (m_overlayPlayButton)
+ m_overlayPlayButton->updateDisplayType();
+ m_playButton->updateDisplayType();
}
-void MediaControls::changedMute()
+void MediaControls::beginScrubbing()
{
- m_panelMuteButton->changedMute();
+ if (!mediaElement().togglePlayStateWillPlay()) {
+ m_isPausedForScrubbing = true;
+ mediaElement().togglePlayState();
+ }
}
-void MediaControls::changedVolume()
+void MediaControls::endScrubbing()
{
- if (m_volumeSlider)
- m_volumeSlider->setVolume(m_mediaController->volume());
- if (m_panelMuteButton && m_panelMuteButton->renderer())
- m_panelMuteButton->renderer()->repaint();
+ if (m_isPausedForScrubbing) {
+ m_isPausedForScrubbing = false;
+ if (mediaElement().togglePlayStateWillPlay())
+ mediaElement().togglePlayState();
+ }
+}
+
+void MediaControls::updateCurrentTimeDisplay()
+{
+ double now = mediaElement().currentTime();
+ double duration = mediaElement().duration();
+
+ // After seek, hide duration display and show current time.
+ if (now > 0) {
+ m_currentTimeDisplay->show();
+ m_durationDisplay->hide();
+ }
+
+ // Allow the theme to format the time.
+ m_currentTimeDisplay->setInnerText(RenderTheme::theme().formatMediaControlsCurrentTime(now, duration), IGNORE_EXCEPTION);
+ m_currentTimeDisplay->setCurrentValue(now);
+}
+
+void MediaControls::updateVolume()
+{
+ m_muteButton->updateDisplayType();
+ if (m_muteButton->renderer())
+ m_muteButton->renderer()->paintInvalidationForWholeRenderer();
+
+ if (mediaElement().muted())
+ m_volumeSlider->setVolume(0);
+ else
+ m_volumeSlider->setVolume(mediaElement().volume());
}
void MediaControls::changedClosedCaptionsVisibility()
{
- if (m_toggleClosedCaptionsButton)
- m_toggleClosedCaptionsButton->updateDisplayType();
+ m_toggleClosedCaptionsButton->updateDisplayType();
}
void MediaControls::refreshClosedCaptionsButtonVisibility()
{
- if (!m_toggleClosedCaptionsButton)
- return;
-
- if (m_mediaController->hasClosedCaptions())
+ if (mediaElement().hasClosedCaptions())
m_toggleClosedCaptionsButton->show();
else
m_toggleClosedCaptionsButton->hide();
@@ -252,16 +339,16 @@ void MediaControls::closedCaptionTracksChanged()
void MediaControls::enteredFullscreen()
{
- m_isFullscreen = true;
m_fullScreenButton->setIsFullscreen(true);
- startHideFullscreenControlsTimer();
+ stopHideMediaControlsTimer();
+ startHideMediaControlsTimer();
}
void MediaControls::exitedFullscreen()
{
- m_isFullscreen = false;
m_fullScreenButton->setIsFullscreen(false);
- stopHideFullscreenControlsTimer();
+ stopHideMediaControlsTimer();
+ startHideMediaControlsTimer();
}
void MediaControls::defaultEventHandler(Event* event)
@@ -271,10 +358,10 @@ void MediaControls::defaultEventHandler(Event* event)
if (event->type() == EventTypeNames::mouseover) {
if (!containsRelatedTarget(event)) {
m_isMouseOverControls = true;
- if (!m_mediaController->canPlay()) {
+ if (!mediaElement().togglePlayStateWillPlay()) {
makeOpaque();
- if (shouldHideControls())
- startHideFullscreenControlsTimer();
+ if (shouldHideMediaControls())
+ startHideMediaControlsTimer();
}
}
return;
@@ -283,55 +370,43 @@ void MediaControls::defaultEventHandler(Event* event)
if (event->type() == EventTypeNames::mouseout) {
if (!containsRelatedTarget(event)) {
m_isMouseOverControls = false;
- stopHideFullscreenControlsTimer();
+ stopHideMediaControlsTimer();
}
return;
}
if (event->type() == EventTypeNames::mousemove) {
- if (m_isFullscreen) {
- // When we get a mouse move in fullscreen mode, show the media controls, and start a timer
- // that will hide the media controls after a 3 seconds without a mouse move.
- makeOpaque();
- if (shouldHideControls())
- startHideFullscreenControlsTimer();
- }
+ // When we get a mouse move, show the media controls, and start a timer
+ // that will hide the media controls after a 3 seconds without a mouse move.
+ makeOpaque();
+ if (shouldHideMediaControls(IgnoreVideoHover))
+ startHideMediaControlsTimer();
return;
}
}
-void MediaControls::hideFullscreenControlsTimerFired(Timer<MediaControls>*)
+void MediaControls::hideMediaControlsTimerFired(Timer<MediaControls>*)
{
- if (m_mediaController->paused())
+ if (mediaElement().togglePlayStateWillPlay())
return;
- if (!m_isFullscreen)
- return;
-
- if (!shouldHideControls())
+ if (!shouldHideMediaControls(IgnoreFocus | IgnoreVideoHover))
return;
makeTransparent();
}
-void MediaControls::startHideFullscreenControlsTimer()
+void MediaControls::startHideMediaControlsTimer()
{
- if (!m_isFullscreen)
- return;
-
- Page* page = document().page();
- if (!page)
- return;
-
- m_hideFullscreenControlsTimer.startOneShot(timeWithoutMouseMovementBeforeHidingFullscreenControls);
+ m_hideMediaControlsTimer.startOneShot(timeWithoutMouseMovementBeforeHidingMediaControls, FROM_HERE);
}
-void MediaControls::stopHideFullscreenControlsTimer()
+void MediaControls::stopHideMediaControlsTimer()
{
- m_hideFullscreenControlsTimer.stop();
+ m_hideMediaControlsTimer.stop();
}
-const AtomicString& MediaControls::pseudo() const
+const AtomicString& MediaControls::shadowPseudoId() const
{
DEFINE_STATIC_LOCAL(AtomicString, id, ("-webkit-media-controls"));
return id;
@@ -352,14 +427,14 @@ void MediaControls::createTextTrackDisplay()
if (m_textDisplayContainer)
return;
- RefPtr<MediaControlTextTrackContainerElement> textDisplayContainer = MediaControlTextTrackContainerElement::create(document());
+ RefPtrWillBeRawPtr<MediaControlTextTrackContainerElement> textDisplayContainer = MediaControlTextTrackContainerElement::create(*this);
m_textDisplayContainer = textDisplayContainer.get();
- if (m_mediaController)
- m_textDisplayContainer->setMediaController(m_mediaController);
-
- // Insert it before the first controller element so it always displays behind the controls.
- insertBefore(textDisplayContainer.release(), m_panel, IGNORE_EXCEPTION);
+ // Insert it before (behind) all other control elements.
+ if (m_overlayEnclosure && m_overlayPlayButton)
+ m_overlayEnclosure->insertBefore(textDisplayContainer.release(), m_overlayPlayButton);
+ else
+ insertBefore(textDisplayContainer.release(), m_enclosure);
}
void MediaControls::showTextTrackDisplay()
@@ -384,4 +459,23 @@ void MediaControls::updateTextTrackDisplay()
m_textDisplayContainer->updateDisplay();
}
+void MediaControls::trace(Visitor* visitor)
+{
+ visitor->trace(m_mediaElement);
+ visitor->trace(m_panel);
+ visitor->trace(m_textDisplayContainer);
+ visitor->trace(m_overlayPlayButton);
+ visitor->trace(m_overlayEnclosure);
+ visitor->trace(m_playButton);
+ visitor->trace(m_currentTimeDisplay);
+ visitor->trace(m_timeline);
+ visitor->trace(m_muteButton);
+ visitor->trace(m_volumeSlider);
+ visitor->trace(m_toggleClosedCaptionsButton);
+ visitor->trace(m_fullScreenButton);
+ visitor->trace(m_durationDisplay);
+ visitor->trace(m_enclosure);
+ HTMLDivElement::trace(visitor);
+}
+
}
diff --git a/chromium/third_party/WebKit/Source/core/html/shadow/MediaControls.h b/chromium/third_party/WebKit/Source/core/html/shadow/MediaControls.h
index ea87254a8e2..7879662b3cb 100644
--- a/chromium/third_party/WebKit/Source/core/html/shadow/MediaControls.h
+++ b/chromium/third_party/WebKit/Source/core/html/shadow/MediaControls.h
@@ -27,106 +27,109 @@
#ifndef MediaControls_h
#define MediaControls_h
-#include "core/events/MouseEvent.h"
#include "core/html/HTMLDivElement.h"
#include "core/html/shadow/MediaControlElements.h"
-#include "core/rendering/RenderTheme.h"
namespace WebCore {
class Document;
class Event;
-class MediaPlayer;
-class RenderBox;
-class RenderMedia;
+class MediaControls FINAL : public HTMLDivElement {
+public:
+ static PassRefPtrWillBeRawPtr<MediaControls> create(HTMLMediaElement&);
-// An abstract class with the media control elements that all ports support.
-class MediaControls : public HTMLDivElement {
- public:
- virtual ~MediaControls() {}
+ HTMLMediaElement& mediaElement() const { return *m_mediaElement; }
- // This function is to be implemented in your port-specific media
- // controls implementation since it will return a child instance.
- static PassRefPtr<MediaControls> create(Document&);
+ void reset();
- virtual void setMediaController(MediaControllerInterface*);
+ void show();
+ void hide();
- virtual void reset();
- virtual void reportedError();
- virtual void loadedMetadata();
+ void playbackStarted();
+ void playbackProgressed();
+ void playbackStopped();
- virtual void show();
- virtual void hide();
- virtual void makeOpaque();
- virtual void makeTransparent();
- virtual bool shouldHideControls();
+ void beginScrubbing();
+ void endScrubbing();
- virtual void bufferingProgressed();
- virtual void playbackStarted();
- virtual void playbackProgressed();
- virtual void playbackStopped();
+ void updateCurrentTimeDisplay();
- virtual void updateStatusDisplay() { };
- virtual void updateCurrentTimeDisplay() = 0;
- virtual void showVolumeSlider();
+ void updateVolume();
- virtual void changedMute();
- virtual void changedVolume();
+ void changedClosedCaptionsVisibility();
+ void refreshClosedCaptionsButtonVisibility();
+ void closedCaptionTracksChanged();
- virtual void changedClosedCaptionsVisibility();
- virtual void refreshClosedCaptionsButtonVisibility();
- virtual void closedCaptionTracksChanged();
+ void enteredFullscreen();
+ void exitedFullscreen();
- virtual void enteredFullscreen();
- virtual void exitedFullscreen();
+ void updateTextTrackDisplay();
- virtual bool willRespondToMouseMoveEvents() OVERRIDE { return true; }
+ void mediaElementFocused();
+
+ virtual void trace(Visitor*) OVERRIDE;
+
+private:
+ explicit MediaControls(HTMLMediaElement&);
+
+ bool initializeControls();
- virtual void hideFullscreenControlsTimerFired(Timer<MediaControls>*);
- virtual void startHideFullscreenControlsTimer();
- virtual void stopHideFullscreenControlsTimer();
+ void makeOpaque();
+ void makeTransparent();
- virtual void createTextTrackDisplay();
- virtual void showTextTrackDisplay();
- virtual void hideTextTrackDisplay();
- virtual void updateTextTrackDisplay();
+ void updatePlayState();
-protected:
- explicit MediaControls(Document&);
+ enum HideBehaviorFlags {
+ IgnoreVideoHover = 1 << 0,
+ IgnoreFocus = 1 << 1
+ };
- virtual void defaultEventHandler(Event*);
+ bool shouldHideMediaControls(unsigned behaviorFlags = 0) const;
+ void hideMediaControlsTimerFired(Timer<MediaControls>*);
+ void startHideMediaControlsTimer();
+ void stopHideMediaControlsTimer();
- virtual bool containsRelatedTarget(Event*);
+ void createTextTrackDisplay();
+ void showTextTrackDisplay();
+ void hideTextTrackDisplay();
- MediaControllerInterface* m_mediaController;
+ // Node
+ virtual bool isMediaControls() const OVERRIDE { return true; }
+ virtual bool willRespondToMouseMoveEvents() OVERRIDE { return true; }
+ virtual void defaultEventHandler(Event*) OVERRIDE;
+ bool containsRelatedTarget(Event*);
+
+ // Element
+ virtual const AtomicString& shadowPseudoId() const OVERRIDE;
+
+ RawPtrWillBeMember<HTMLMediaElement> m_mediaElement;
// Container for the media control elements.
- MediaControlPanelElement* m_panel;
+ RawPtrWillBeMember<MediaControlPanelElement> m_panel;
// Container for the text track cues.
- MediaControlTextTrackContainerElement* m_textDisplayContainer;
+ RawPtrWillBeMember<MediaControlTextTrackContainerElement> m_textDisplayContainer;
// Media control elements.
- MediaControlPlayButtonElement* m_playButton;
- MediaControlCurrentTimeDisplayElement* m_currentTimeDisplay;
- MediaControlTimelineElement* m_timeline;
- MediaControlPanelMuteButtonElement* m_panelMuteButton;
- MediaControlPanelVolumeSliderElement* m_volumeSlider;
- MediaControlToggleClosedCaptionsButtonElement* m_toggleClosedCaptionsButton;
- MediaControlFullscreenButtonElement* m_fullScreenButton;
-
- Timer<MediaControls> m_hideFullscreenControlsTimer;
- bool m_isFullscreen;
- bool m_isMouseOverControls;
-
-private:
- virtual bool isMediaControls() const { return true; }
-
- virtual const AtomicString& pseudo() const;
+ RawPtrWillBeMember<MediaControlOverlayPlayButtonElement> m_overlayPlayButton;
+ RawPtrWillBeMember<MediaControlOverlayEnclosureElement> m_overlayEnclosure;
+ RawPtrWillBeMember<MediaControlPlayButtonElement> m_playButton;
+ RawPtrWillBeMember<MediaControlCurrentTimeDisplayElement> m_currentTimeDisplay;
+ RawPtrWillBeMember<MediaControlTimelineElement> m_timeline;
+ RawPtrWillBeMember<MediaControlMuteButtonElement> m_muteButton;
+ RawPtrWillBeMember<MediaControlVolumeSliderElement> m_volumeSlider;
+ RawPtrWillBeMember<MediaControlToggleClosedCaptionsButtonElement> m_toggleClosedCaptionsButton;
+ RawPtrWillBeMember<MediaControlFullscreenButtonElement> m_fullScreenButton;
+ RawPtrWillBeMember<MediaControlTimeRemainingDisplayElement> m_durationDisplay;
+ RawPtrWillBeMember<MediaControlPanelEnclosureElement> m_enclosure;
+
+ Timer<MediaControls> m_hideMediaControlsTimer;
+ bool m_isMouseOverControls : 1;
+ bool m_isPausedForScrubbing : 1;
};
-DEFINE_NODE_TYPE_CASTS(MediaControls, isMediaControls());
+DEFINE_ELEMENT_TYPE_CASTS(MediaControls, isMediaControls());
}
diff --git a/chromium/third_party/WebKit/Source/core/html/shadow/MediaControlsChromium.cpp b/chromium/third_party/WebKit/Source/core/html/shadow/MediaControlsChromium.cpp
deleted file mode 100644
index d1d4ccbfd40..00000000000
--- a/chromium/third_party/WebKit/Source/core/html/shadow/MediaControlsChromium.cpp
+++ /dev/null
@@ -1,225 +0,0 @@
-/*
- * Copyright (C) 2007, 2008, 2009, 2010 Apple Inc. All rights reserved.
- * Copyright (C) 2011, 2012 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "config.h"
-#include "core/html/shadow/MediaControlsChromium.h"
-
-#include "bindings/v8/ExceptionState.h"
-#include "bindings/v8/ExceptionStatePlaceholder.h"
-
-using namespace std;
-
-namespace WebCore {
-
-MediaControlsChromium::MediaControlsChromium(Document& document)
- : MediaControls(document)
- , m_durationDisplay(0)
- , m_enclosure(0)
-{
-}
-
-// MediaControls::create() for Android is defined in MediaControlsChromiumAndroid.cpp.
-#if !OS(ANDROID)
-PassRefPtr<MediaControls> MediaControls::create(Document& document)
-{
- return MediaControlsChromium::createControls(document);
-}
-#endif
-
-PassRefPtr<MediaControlsChromium> MediaControlsChromium::createControls(Document& document)
-{
- if (!document.page())
- return 0;
-
- RefPtr<MediaControlsChromium> controls = adoptRef(new MediaControlsChromium(document));
-
- if (controls->initializeControls(document))
- return controls.release();
-
- return 0;
-}
-
-bool MediaControlsChromium::initializeControls(Document& document)
-{
- // Create an enclosing element for the panel so we can visually offset the controls correctly.
- RefPtr<MediaControlPanelEnclosureElement> enclosure = MediaControlPanelEnclosureElement::create(document);
-
- RefPtr<MediaControlPanelElement> panel = MediaControlPanelElement::create(document);
-
- TrackExceptionState exceptionState;
-
- RefPtr<MediaControlPlayButtonElement> playButton = MediaControlPlayButtonElement::create(document);
- m_playButton = playButton.get();
- panel->appendChild(playButton.release(), exceptionState);
- if (exceptionState.hadException())
- return false;
-
- RefPtr<MediaControlTimelineElement> timeline = MediaControlTimelineElement::create(document, this);
- m_timeline = timeline.get();
- panel->appendChild(timeline.release(), exceptionState);
- if (exceptionState.hadException())
- return false;
-
- RefPtr<MediaControlCurrentTimeDisplayElement> currentTimeDisplay = MediaControlCurrentTimeDisplayElement::create(document);
- m_currentTimeDisplay = currentTimeDisplay.get();
- m_currentTimeDisplay->hide();
- panel->appendChild(currentTimeDisplay.release(), exceptionState);
- if (exceptionState.hadException())
- return false;
-
- RefPtr<MediaControlTimeRemainingDisplayElement> durationDisplay = MediaControlTimeRemainingDisplayElement::create(document);
- m_durationDisplay = durationDisplay.get();
- panel->appendChild(durationDisplay.release(), exceptionState);
- if (exceptionState.hadException())
- return false;
-
- RefPtr<MediaControlPanelMuteButtonElement> panelMuteButton = MediaControlPanelMuteButtonElement::create(document, this);
- m_panelMuteButton = panelMuteButton.get();
- panel->appendChild(panelMuteButton.release(), exceptionState);
- if (exceptionState.hadException())
- return false;
-
- RefPtr<MediaControlPanelVolumeSliderElement> slider = MediaControlPanelVolumeSliderElement::create(document);
- m_volumeSlider = slider.get();
- m_volumeSlider->setClearMutedOnUserInteraction(true);
- panel->appendChild(slider.release(), exceptionState);
- if (exceptionState.hadException())
- return false;
-
- if (RenderTheme::theme().supportsClosedCaptioning()) {
- RefPtr<MediaControlToggleClosedCaptionsButtonElement> toggleClosedCaptionsButton = MediaControlToggleClosedCaptionsButtonElement::create(document, this);
- m_toggleClosedCaptionsButton = toggleClosedCaptionsButton.get();
- panel->appendChild(toggleClosedCaptionsButton.release(), exceptionState);
- if (exceptionState.hadException())
- return false;
- }
-
- RefPtr<MediaControlFullscreenButtonElement> fullscreenButton = MediaControlFullscreenButtonElement::create(document);
- m_fullScreenButton = fullscreenButton.get();
- panel->appendChild(fullscreenButton.release(), exceptionState);
- if (exceptionState.hadException())
- return false;
-
- m_panel = panel.get();
- enclosure->appendChild(panel.release(), exceptionState);
- if (exceptionState.hadException())
- return false;
-
- m_enclosure = enclosure.get();
- appendChild(enclosure.release(), exceptionState);
- if (exceptionState.hadException())
- return false;
-
- return true;
-}
-
-void MediaControlsChromium::setMediaController(MediaControllerInterface* controller)
-{
- if (m_mediaController == controller)
- return;
-
- MediaControls::setMediaController(controller);
-
- if (m_durationDisplay)
- m_durationDisplay->setMediaController(controller);
- if (m_enclosure)
- m_enclosure->setMediaController(controller);
-}
-
-void MediaControlsChromium::reset()
-{
- Page* page = document().page();
- if (!page)
- return;
-
- double duration = m_mediaController->duration();
- m_durationDisplay->setInnerText(RenderTheme::theme().formatMediaControlsTime(duration), ASSERT_NO_EXCEPTION);
- m_durationDisplay->setCurrentValue(duration);
-
- MediaControls::reset();
-}
-
-void MediaControlsChromium::playbackStarted()
-{
- m_currentTimeDisplay->show();
- m_durationDisplay->hide();
-
- MediaControls::playbackStarted();
-}
-
-void MediaControlsChromium::updateCurrentTimeDisplay()
-{
- double now = m_mediaController->currentTime();
- double duration = m_mediaController->duration();
-
- Page* page = document().page();
- if (!page)
- return;
-
- // After seek, hide duration display and show current time.
- if (now > 0) {
- m_currentTimeDisplay->show();
- m_durationDisplay->hide();
- }
-
- // Allow the theme to format the time.
- m_currentTimeDisplay->setInnerText(RenderTheme::theme().formatMediaControlsCurrentTime(now, duration), IGNORE_EXCEPTION);
- m_currentTimeDisplay->setCurrentValue(now);
-}
-
-void MediaControlsChromium::changedMute()
-{
- MediaControls::changedMute();
-
- if (m_mediaController->muted())
- m_volumeSlider->setVolume(0);
- else
- m_volumeSlider->setVolume(m_mediaController->volume());
-}
-
-void MediaControlsChromium::createTextTrackDisplay()
-{
- if (m_textDisplayContainer)
- return;
-
- RefPtr<MediaControlTextTrackContainerElement> textDisplayContainer = MediaControlTextTrackContainerElement::create(document());
- m_textDisplayContainer = textDisplayContainer.get();
-
- if (m_mediaController)
- m_textDisplayContainer->setMediaController(m_mediaController);
-
- insertTextTrackContainer(textDisplayContainer.release());
-}
-
-void MediaControlsChromium::insertTextTrackContainer(PassRefPtr<MediaControlTextTrackContainerElement> textTrackContainer)
-{
- // Insert it before the first controller element so it always displays behind the controls.
- // In the Chromium case, that's the enclosure element.
- insertBefore(textTrackContainer, m_enclosure);
-}
-
-
-}
diff --git a/chromium/third_party/WebKit/Source/core/html/shadow/MediaControlsChromium.h b/chromium/third_party/WebKit/Source/core/html/shadow/MediaControlsChromium.h
deleted file mode 100644
index 5e3c55e8512..00000000000
--- a/chromium/third_party/WebKit/Source/core/html/shadow/MediaControlsChromium.h
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * Copyright (C) 2007, 2008, 2009, 2010 Apple Inc. All rights reserved.
- * Copyright (C) 2011, 2012 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef MediaControlsChromium_h
-#define MediaControlsChromium_h
-
-#include "core/html/shadow/MediaControls.h"
-
-namespace WebCore {
-
-class MediaControlsChromium : public MediaControls {
-public:
- // Called from port-specific parent create function to create custom controls.
- static PassRefPtr<MediaControlsChromium> createControls(Document&);
-
- virtual void setMediaController(MediaControllerInterface*) OVERRIDE;
-
- virtual void reset() OVERRIDE;
-
- virtual void playbackStarted() OVERRIDE;
-
- void changedMute() OVERRIDE;
-
- virtual void updateCurrentTimeDisplay() OVERRIDE;
-
- void createTextTrackDisplay() OVERRIDE;
-
- virtual void insertTextTrackContainer(PassRefPtr<MediaControlTextTrackContainerElement>);
-
-protected:
- explicit MediaControlsChromium(Document&);
-
- bool initializeControls(Document&);
-
-private:
- MediaControlTimeRemainingDisplayElement* m_durationDisplay;
- MediaControlPanelEnclosureElement* m_enclosure;
-};
-
-}
-
-#endif
diff --git a/chromium/third_party/WebKit/Source/core/html/shadow/MediaControlsChromiumAndroid.cpp b/chromium/third_party/WebKit/Source/core/html/shadow/MediaControlsChromiumAndroid.cpp
deleted file mode 100644
index f81c9309b37..00000000000
--- a/chromium/third_party/WebKit/Source/core/html/shadow/MediaControlsChromiumAndroid.cpp
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * Copyright (C) 2012 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "config.h"
-#include "core/html/shadow/MediaControlsChromiumAndroid.h"
-
-#include "bindings/v8/ExceptionState.h"
-#include "bindings/v8/ExceptionStatePlaceholder.h"
-
-namespace WebCore {
-
-MediaControlsChromiumAndroid::MediaControlsChromiumAndroid(Document& document)
- : MediaControlsChromium(document)
- , m_overlayPlayButton(0)
- , m_overlayEnclosure(0)
-{
-}
-
-PassRefPtr<MediaControls> MediaControls::create(Document& document)
-{
- return MediaControlsChromiumAndroid::createControls(document);
-}
-
-PassRefPtr<MediaControlsChromiumAndroid> MediaControlsChromiumAndroid::createControls(Document& document)
-{
- if (!document.page())
- return 0;
-
- RefPtr<MediaControlsChromiumAndroid> controls = adoptRef(new MediaControlsChromiumAndroid(document));
-
- TrackExceptionState exceptionState;
-
- RefPtr<MediaControlOverlayEnclosureElement> overlayEnclosure = MediaControlOverlayEnclosureElement::create(document);
- RefPtr<MediaControlOverlayPlayButtonElement> overlayPlayButton = MediaControlOverlayPlayButtonElement::create(document);
- controls->m_overlayPlayButton = overlayPlayButton.get();
- overlayEnclosure->appendChild(overlayPlayButton.release(), exceptionState);
- if (exceptionState.hadException())
- return 0;
-
- controls->m_overlayEnclosure = overlayEnclosure.get();
- controls->appendChild(overlayEnclosure.release(), exceptionState);
- if (exceptionState.hadException())
- return 0;
-
- if (controls->initializeControls(document))
- return controls.release();
-
- return 0;
-}
-
-void MediaControlsChromiumAndroid::setMediaController(MediaControllerInterface* controller)
-{
- if (m_overlayPlayButton)
- m_overlayPlayButton->setMediaController(controller);
- if (m_overlayEnclosure)
- m_overlayEnclosure->setMediaController(controller);
- MediaControlsChromium::setMediaController(controller);
-}
-
-void MediaControlsChromiumAndroid::playbackStarted()
-{
- m_overlayPlayButton->updateDisplayType();
- MediaControlsChromium::playbackStarted();
-}
-
-void MediaControlsChromiumAndroid::playbackStopped()
-{
- m_overlayPlayButton->updateDisplayType();
- MediaControlsChromium::playbackStopped();
-}
-
-void MediaControlsChromiumAndroid::insertTextTrackContainer(PassRefPtr<MediaControlTextTrackContainerElement> textTrackContainer)
-{
- // Insert it before the overlay play button so it always displays behind it.
- m_overlayEnclosure->insertBefore(textTrackContainer, m_overlayPlayButton);
-}
-}
diff --git a/chromium/third_party/WebKit/Source/core/html/shadow/MediaControlsChromiumAndroid.h b/chromium/third_party/WebKit/Source/core/html/shadow/MediaControlsChromiumAndroid.h
deleted file mode 100644
index 8b8a90069f4..00000000000
--- a/chromium/third_party/WebKit/Source/core/html/shadow/MediaControlsChromiumAndroid.h
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Copyright (C) 2012 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef MediaControlsChromiumAndroid_h
-#define MediaControlsChromiumAndroid_h
-
-#include "core/html/shadow/MediaControls.h"
-#include "core/html/shadow/MediaControlsChromium.h"
-
-namespace WebCore {
-
-class MediaControlsChromiumAndroid : public MediaControlsChromium {
-public:
- static PassRefPtr<MediaControlsChromiumAndroid> createControls(Document&);
-
- virtual void setMediaController(MediaControllerInterface*) OVERRIDE;
- virtual void playbackStarted() OVERRIDE;
- virtual void playbackStopped() OVERRIDE;
- virtual bool shouldHideControls() OVERRIDE { return true; }
-
- void insertTextTrackContainer(PassRefPtr<MediaControlTextTrackContainerElement>) OVERRIDE;
-
-private:
- explicit MediaControlsChromiumAndroid(Document&);
-
- MediaControlOverlayPlayButtonElement* m_overlayPlayButton;
- MediaControlOverlayEnclosureElement* m_overlayEnclosure;
-};
-
-}
-
-#endif
diff --git a/chromium/third_party/WebKit/Source/core/html/shadow/MeterShadowElement.cpp b/chromium/third_party/WebKit/Source/core/html/shadow/MeterShadowElement.cpp
index a39c29cdb71..8f8f0cc4671 100644
--- a/chromium/third_party/WebKit/Source/core/html/shadow/MeterShadowElement.cpp
+++ b/chromium/third_party/WebKit/Source/core/html/shadow/MeterShadowElement.cpp
@@ -32,8 +32,8 @@
#include "core/html/shadow/MeterShadowElement.h"
-#include "CSSPropertyNames.h"
-#include "HTMLNames.h"
+#include "core/CSSPropertyNames.h"
+#include "core/HTMLNames.h"
#include "core/html/HTMLMeterElement.h"
#include "core/rendering/RenderMeter.h"
#include "core/rendering/RenderTheme.h"
@@ -63,10 +63,10 @@ inline MeterInnerElement::MeterInnerElement(Document& document)
{
}
-PassRefPtr<MeterInnerElement> MeterInnerElement::create(Document& document)
+PassRefPtrWillBeRawPtr<MeterInnerElement> MeterInnerElement::create(Document& document)
{
- RefPtr<MeterInnerElement> element = adoptRef(new MeterInnerElement(document));
- element->setPseudo(AtomicString("-webkit-meter-inner-element", AtomicString::ConstructFromLiteral));
+ RefPtrWillBeRawPtr<MeterInnerElement> element = adoptRefWillBeNoop(new MeterInnerElement(document));
+ element->setShadowPseudoId(AtomicString("-webkit-meter-inner-element", AtomicString::ConstructFromLiteral));
return element.release();
}
@@ -89,10 +89,10 @@ inline MeterBarElement::MeterBarElement(Document& document)
{
}
-PassRefPtr<MeterBarElement> MeterBarElement::create(Document& document)
+PassRefPtrWillBeRawPtr<MeterBarElement> MeterBarElement::create(Document& document)
{
- RefPtr<MeterBarElement> element = adoptRef(new MeterBarElement(document));
- element->setPseudo(AtomicString("-webkit-meter-bar", AtomicString::ConstructFromLiteral));
+ RefPtrWillBeRawPtr<MeterBarElement> element = adoptRefWillBeNoop(new MeterBarElement(document));
+ element->setShadowPseudoId(AtomicString("-webkit-meter-bar", AtomicString::ConstructFromLiteral));
return element.release();
}
@@ -101,9 +101,9 @@ inline MeterValueElement::MeterValueElement(Document& document)
{
}
-PassRefPtr<MeterValueElement> MeterValueElement::create(Document& document)
+PassRefPtrWillBeRawPtr<MeterValueElement> MeterValueElement::create(Document& document)
{
- RefPtr<MeterValueElement> element = adoptRef(new MeterValueElement(document));
+ RefPtrWillBeRawPtr<MeterValueElement> element = adoptRefWillBeNoop(new MeterValueElement(document));
element->updatePseudo();
return element.release();
}
diff --git a/chromium/third_party/WebKit/Source/core/html/shadow/MeterShadowElement.h b/chromium/third_party/WebKit/Source/core/html/shadow/MeterShadowElement.h
index c15bfdcbcb7..22847f7a8f7 100644
--- a/chromium/third_party/WebKit/Source/core/html/shadow/MeterShadowElement.h
+++ b/chromium/third_party/WebKit/Source/core/html/shadow/MeterShadowElement.h
@@ -41,39 +41,39 @@ class RenderMeter;
class MeterShadowElement : public HTMLDivElement {
protected:
- MeterShadowElement(Document&);
+ explicit MeterShadowElement(Document&);
HTMLMeterElement* meterElement() const;
private:
- virtual bool rendererIsNeeded(const RenderStyle&);
+ virtual bool rendererIsNeeded(const RenderStyle&) OVERRIDE;
};
class MeterInnerElement FINAL : public MeterShadowElement {
public:
- static PassRefPtr<MeterInnerElement> create(Document&);
+ static PassRefPtrWillBeRawPtr<MeterInnerElement> create(Document&);
private:
- MeterInnerElement(Document&);
+ explicit MeterInnerElement(Document&);
virtual bool rendererIsNeeded(const RenderStyle&) OVERRIDE;
virtual RenderObject* createRenderer(RenderStyle*) OVERRIDE;
};
class MeterBarElement FINAL : public MeterShadowElement {
private:
- MeterBarElement(Document&);
+ explicit MeterBarElement(Document&);
public:
- static PassRefPtr<MeterBarElement> create(Document&);
+ static PassRefPtrWillBeRawPtr<MeterBarElement> create(Document&);
};
class MeterValueElement FINAL : public MeterShadowElement {
public:
- static PassRefPtr<MeterValueElement> create(Document&);
+ static PassRefPtrWillBeRawPtr<MeterValueElement> create(Document&);
void setWidthPercentage(double);
- void updatePseudo() { setPseudo(valuePseudoId()); }
+ void updatePseudo() { setShadowPseudoId(valuePseudoId()); }
private:
- MeterValueElement(Document&);
+ explicit MeterValueElement(Document&);
const AtomicString& valuePseudoId() const;
};
diff --git a/chromium/third_party/WebKit/Source/core/html/shadow/PasswordGeneratorButtonElement.cpp b/chromium/third_party/WebKit/Source/core/html/shadow/PasswordGeneratorButtonElement.cpp
deleted file mode 100644
index 238c3f41aee..00000000000
--- a/chromium/third_party/WebKit/Source/core/html/shadow/PasswordGeneratorButtonElement.cpp
+++ /dev/null
@@ -1,172 +0,0 @@
-/*
- * Copyright (C) 2012 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following disclaimer
- * in the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Google Inc. nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "config.h"
-#include "core/html/shadow/PasswordGeneratorButtonElement.h"
-
-#include "core/events/Event.h"
-#include "core/dom/NodeRenderStyle.h"
-#include "core/fetch/ImageResource.h"
-#include "core/html/HTMLInputElement.h"
-#include "core/html/shadow/ShadowElementNames.h"
-#include "core/page/Chrome.h"
-#include "core/page/ChromeClient.h"
-#include "core/page/Page.h"
-#include "core/rendering/RenderImage.h"
-#include "platform/graphics/Image.h"
-
-namespace WebCore {
-
-using namespace HTMLNames;
-
-PasswordGeneratorButtonElement::PasswordGeneratorButtonElement(Document& document)
- : HTMLDivElement(document)
- , m_isInHoverState(false)
-{
- setHasCustomStyleCallbacks();
-}
-
-PassRefPtr<PasswordGeneratorButtonElement> PasswordGeneratorButtonElement::create(Document& document)
-{
- RefPtr<PasswordGeneratorButtonElement> element = adoptRef(new PasswordGeneratorButtonElement(document));
- element->setAttribute(idAttr, ShadowElementNames::passwordGenerator());
- return element.release();
-}
-
-inline HTMLInputElement* PasswordGeneratorButtonElement::hostInput()
-{
- // PasswordGeneratorButtonElement is created only by C++ code, and it is always
- // in <input> shadow.
- return toHTMLInputElement(shadowHost());
-}
-
-void PasswordGeneratorButtonElement::updateImage()
-{
- if (!renderer() || !renderer()->isImage())
- return;
- RenderImageResource* resource = toRenderImage(renderer())->imageResource();
- ImageResource* image = m_isInHoverState ? imageForHoverState() : imageForNormalState();
- ASSERT(image);
- resource->setImageResource(image);
-}
-
-PassRefPtr<RenderStyle> PasswordGeneratorButtonElement::customStyleForRenderer()
-{
- RefPtr<RenderStyle> originalStyle = originalStyleForRenderer();
- RefPtr<RenderStyle> style = RenderStyle::clone(originalStyle.get());
- RenderStyle* inputStyle = hostInput()->renderStyle();
- ASSERT(inputStyle);
- style->setWidth(Length(inputStyle->fontSize(), Fixed));
- style->setHeight(Length(inputStyle->fontSize(), Fixed));
- style->setUnique();
- updateImage();
- return style.release();
-}
-
-RenderObject* PasswordGeneratorButtonElement::createRenderer(RenderStyle*)
-{
- RenderImage* image = new RenderImage(this);
- image->setImageResource(RenderImageResource::create());
- return image;
-}
-
-void PasswordGeneratorButtonElement::attach(const AttachContext& context)
-{
- HTMLDivElement::attach(context);
- updateImage();
-}
-
-ImageResource* PasswordGeneratorButtonElement::imageForNormalState()
-{
- if (!m_cachedImageForNormalState) {
- RefPtr<Image> image = Image::loadPlatformResource("generatePassword");
- m_cachedImageForNormalState = new ImageResource(image.get());
- }
- return m_cachedImageForNormalState.get();
-}
-
-ImageResource* PasswordGeneratorButtonElement::imageForHoverState()
-{
- if (!m_cachedImageForHoverState) {
- RefPtr<Image> image = Image::loadPlatformResource("generatePasswordHover");
- m_cachedImageForHoverState = new ImageResource(image.get());
- }
- return m_cachedImageForHoverState.get();
-}
-
-void PasswordGeneratorButtonElement::defaultEventHandler(Event* event)
-{
- RefPtr<HTMLInputElement> input = hostInput();
- if (!input || input->isDisabledOrReadOnly() || !event->isMouseEvent()) {
- if (!event->defaultHandled())
- HTMLDivElement::defaultEventHandler(event);
- return;
- }
-
- RefPtr<PasswordGeneratorButtonElement> protector(this);
- if (event->type() == EventTypeNames::click) {
- if (Page* page = document().page())
- page->chrome().client().openPasswordGenerator(input.get());
- event->setDefaultHandled();
- }
-
- if (event->type() == EventTypeNames::mouseover) {
- m_isInHoverState = true;
- updateImage();
- }
-
- if (event->type() == EventTypeNames::mouseout) {
- m_isInHoverState = false;
- updateImage();
- }
-
- if (!event->defaultHandled())
- HTMLDivElement::defaultEventHandler(event);
-}
-
-bool PasswordGeneratorButtonElement::willRespondToMouseMoveEvents()
-{
- const HTMLInputElement* input = hostInput();
- if (!input->isDisabledOrReadOnly())
- return true;
-
- return HTMLDivElement::willRespondToMouseMoveEvents();
-}
-
-bool PasswordGeneratorButtonElement::willRespondToMouseClickEvents()
-{
- const HTMLInputElement* input = hostInput();
- if (!input->isDisabledOrReadOnly())
- return true;
-
- return HTMLDivElement::willRespondToMouseClickEvents();
-}
-
-} // namespace WebCore
diff --git a/chromium/third_party/WebKit/Source/core/html/shadow/PasswordGeneratorButtonElement.h b/chromium/third_party/WebKit/Source/core/html/shadow/PasswordGeneratorButtonElement.h
deleted file mode 100644
index 0d220f9c6b1..00000000000
--- a/chromium/third_party/WebKit/Source/core/html/shadow/PasswordGeneratorButtonElement.h
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * Copyright (C) 2012 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following disclaimer
- * in the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Google Inc. nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef PasswordGeneratorButtonElement_h
-#define PasswordGeneratorButtonElement_h
-
-#include "core/fetch/ResourcePtr.h"
-#include "core/html/HTMLDivElement.h"
-
-namespace WebCore {
-
-class ImageResource;
-class HTMLInputElement;
-class ShadowRoot;
-
-class PasswordGeneratorButtonElement FINAL : public HTMLDivElement {
-public:
- static PassRefPtr<PasswordGeneratorButtonElement> create(Document&);
-
- void decorate(HTMLInputElement*);
-
- virtual bool willRespondToMouseMoveEvents() OVERRIDE;
- virtual bool willRespondToMouseClickEvents() OVERRIDE;
-
-private:
- PasswordGeneratorButtonElement(Document&);
- virtual bool isPasswordGeneratorButtonElement() const OVERRIDE { return true; }
- virtual PassRefPtr<RenderStyle> customStyleForRenderer() OVERRIDE;
- virtual RenderObject* createRenderer(RenderStyle*) OVERRIDE;
- virtual void attach(const AttachContext& = AttachContext()) OVERRIDE;
- virtual bool isMouseFocusable() const OVERRIDE { return false; }
- virtual void defaultEventHandler(Event*) OVERRIDE;
-
- ImageResource* imageForNormalState();
- ImageResource* imageForHoverState();
-
- HTMLInputElement* hostInput();
- void updateImage();
-
- ResourcePtr<ImageResource> m_cachedImageForNormalState;
- ResourcePtr<ImageResource> m_cachedImageForHoverState;
- bool m_isInHoverState;
-};
-
-}
-#endif
diff --git a/chromium/third_party/WebKit/Source/core/html/shadow/PickerIndicatorElement.cpp b/chromium/third_party/WebKit/Source/core/html/shadow/PickerIndicatorElement.cpp
index 40aec28a852..1c838a2683a 100644
--- a/chromium/third_party/WebKit/Source/core/html/shadow/PickerIndicatorElement.cpp
+++ b/chromium/third_party/WebKit/Source/core/html/shadow/PickerIndicatorElement.cpp
@@ -37,6 +37,7 @@
#include "core/page/Chrome.h"
#include "core/page/Page.h"
#include "core/rendering/RenderDetailsMarker.h"
+#include "wtf/TemporaryChange.h"
using namespace WTF::Unicode;
@@ -47,21 +48,20 @@ using namespace HTMLNames;
inline PickerIndicatorElement::PickerIndicatorElement(Document& document, PickerIndicatorOwner& pickerIndicatorOwner)
: HTMLDivElement(document)
, m_pickerIndicatorOwner(&pickerIndicatorOwner)
+ , m_isInOpenPopup(false)
{
}
-PassRefPtr<PickerIndicatorElement> PickerIndicatorElement::create(Document& document, PickerIndicatorOwner& pickerIndicatorOwner)
+PassRefPtrWillBeRawPtr<PickerIndicatorElement> PickerIndicatorElement::create(Document& document, PickerIndicatorOwner& pickerIndicatorOwner)
{
- RefPtr<PickerIndicatorElement> element = adoptRef(new PickerIndicatorElement(document, pickerIndicatorOwner));
- element->setPseudo(AtomicString("-webkit-calendar-picker-indicator", AtomicString::ConstructFromLiteral));
+ RefPtrWillBeRawPtr<PickerIndicatorElement> element = adoptRefWillBeNoop(new PickerIndicatorElement(document, pickerIndicatorOwner));
+ element->setShadowPseudoId(AtomicString("-webkit-calendar-picker-indicator", AtomicString::ConstructFromLiteral));
element->setAttribute(idAttr, ShadowElementNames::pickerIndicator());
return element.release();
}
PickerIndicatorElement::~PickerIndicatorElement()
{
- closePopup();
- ASSERT(!m_chooser);
}
RenderObject* PickerIndicatorElement::createRenderer(RenderStyle*)
@@ -113,6 +113,12 @@ void PickerIndicatorElement::didEndChooser()
void PickerIndicatorElement::openPopup()
{
+ // The m_isInOpenPopup flag is unnecessary in production.
+ // MockPagePopupDriver allows to execute JavaScript code in
+ // DateTimeChooserImpl constructor. It might create another DateTimeChooser.
+ if (m_isInOpenPopup)
+ return;
+ TemporaryChange<bool> reentrancyProtector(m_isInOpenPopup, true);
if (m_chooser)
return;
if (!document().page())
@@ -143,6 +149,14 @@ bool PickerIndicatorElement::isPickerIndicatorElement() const
return true;
}
+void PickerIndicatorElement::trace(Visitor* visitor)
+{
+ visitor->trace(m_pickerIndicatorOwner);
+ visitor->trace(m_chooser);
+ HTMLDivElement::trace(visitor);
+ DateTimeChooserClient::trace(visitor);
+}
+
}
#endif
diff --git a/chromium/third_party/WebKit/Source/core/html/shadow/PickerIndicatorElement.h b/chromium/third_party/WebKit/Source/core/html/shadow/PickerIndicatorElement.h
index 8b7a5e3d740..914fd9887d3 100644
--- a/chromium/third_party/WebKit/Source/core/html/shadow/PickerIndicatorElement.h
+++ b/chromium/third_party/WebKit/Source/core/html/shadow/PickerIndicatorElement.h
@@ -42,10 +42,11 @@ class HTMLInputElement;
class PagePopup;
class PickerIndicatorElement FINAL : public HTMLDivElement, public DateTimeChooserClient {
+ WILL_BE_USING_GARBAGE_COLLECTED_MIXIN(PickerIndicatorElement);
public:
// PickerIndicatorOwner implementer must call removePickerIndicatorOwner when
// it doesn't handle event, e.g. at destruction.
- class PickerIndicatorOwner {
+ class PickerIndicatorOwner : public WillBeGarbageCollectedMixin {
public:
virtual ~PickerIndicatorOwner() { }
virtual bool isPickerIndicatorOwnerDisabledOrReadOnly() const = 0;
@@ -55,12 +56,14 @@ public:
virtual bool setupDateTimeChooserParameters(DateTimeChooserParameters&) = 0;
};
- static PassRefPtr<PickerIndicatorElement> create(Document&, PickerIndicatorOwner&);
+ static PassRefPtrWillBeRawPtr<PickerIndicatorElement> create(Document&, PickerIndicatorOwner&);
virtual ~PickerIndicatorElement();
+ virtual void trace(Visitor*) OVERRIDE;
+
void openPopup();
void closePopup();
virtual bool willRespondToMouseClickEvents() OVERRIDE;
- void removePickerIndicatorOwner() { m_pickerIndicatorOwner = 0; }
+ void removePickerIndicatorOwner() { m_pickerIndicatorOwner = nullptr; }
// DateTimeChooserClient implementation.
virtual void didChooseValue(const String&) OVERRIDE;
@@ -76,8 +79,9 @@ private:
HTMLInputElement* hostInput();
- PickerIndicatorOwner* m_pickerIndicatorOwner;
- RefPtr<DateTimeChooser> m_chooser;
+ RawPtrWillBeMember<PickerIndicatorOwner> m_pickerIndicatorOwner;
+ RefPtrWillBeMember<DateTimeChooser> m_chooser;
+ bool m_isInOpenPopup;
};
DEFINE_TYPE_CASTS(PickerIndicatorElement, Element, element, element->isPickerIndicatorElement(), element.isPickerIndicatorElement());
diff --git a/chromium/third_party/WebKit/Source/core/html/shadow/ProgressShadowElement.cpp b/chromium/third_party/WebKit/Source/core/html/shadow/ProgressShadowElement.cpp
index 50c8d1dc9a4..0f8b72f069c 100644
--- a/chromium/third_party/WebKit/Source/core/html/shadow/ProgressShadowElement.cpp
+++ b/chromium/third_party/WebKit/Source/core/html/shadow/ProgressShadowElement.cpp
@@ -32,7 +32,7 @@
#include "core/html/shadow/ProgressShadowElement.h"
-#include "HTMLNames.h"
+#include "core/HTMLNames.h"
#include "core/html/HTMLProgressElement.h"
#include "core/rendering/RenderProgress.h"
@@ -56,11 +56,13 @@ bool ProgressShadowElement::rendererIsNeeded(const RenderStyle& style)
return progressRenderer && !progressRenderer->style()->hasAppearance() && HTMLDivElement::rendererIsNeeded(style);
}
-ProgressInnerElement::ProgressInnerElement(Document& document)
+inline ProgressInnerElement::ProgressInnerElement(Document& document)
: ProgressShadowElement(document)
{
}
+DEFINE_NODE_FACTORY(ProgressInnerElement)
+
RenderObject* ProgressInnerElement::createRenderer(RenderStyle*)
{
return new RenderProgress(this);
@@ -75,11 +77,13 @@ bool ProgressInnerElement::rendererIsNeeded(const RenderStyle& style)
return progressRenderer && !progressRenderer->style()->hasAppearance() && HTMLDivElement::rendererIsNeeded(style);
}
-ProgressBarElement::ProgressBarElement(Document& document)
+inline ProgressBarElement::ProgressBarElement(Document& document)
: ProgressShadowElement(document)
{
}
+DEFINE_NODE_FACTORY(ProgressBarElement)
+
ProgressValueElement::ProgressValueElement(Document& document)
: ProgressShadowElement(document)
{
@@ -90,4 +94,6 @@ void ProgressValueElement::setWidthPercentage(double width)
setInlineStyleProperty(CSSPropertyWidth, width, CSSPrimitiveValue::CSS_PERCENTAGE);
}
+DEFINE_NODE_FACTORY(ProgressValueElement)
+
}
diff --git a/chromium/third_party/WebKit/Source/core/html/shadow/ProgressShadowElement.h b/chromium/third_party/WebKit/Source/core/html/shadow/ProgressShadowElement.h
index b375fcc88d7..825b0b68437 100644
--- a/chromium/third_party/WebKit/Source/core/html/shadow/ProgressShadowElement.h
+++ b/chromium/third_party/WebKit/Source/core/html/shadow/ProgressShadowElement.h
@@ -41,56 +41,41 @@ class HTMLProgressElement;
class ProgressShadowElement : public HTMLDivElement {
public:
- ProgressShadowElement(Document&);
+ explicit ProgressShadowElement(Document&);
HTMLProgressElement* progressElement() const;
protected:
- virtual bool rendererIsNeeded(const RenderStyle&);
+ virtual bool rendererIsNeeded(const RenderStyle&) OVERRIDE;
};
class ProgressInnerElement FINAL : public ProgressShadowElement {
public:
- static PassRefPtr<ProgressInnerElement> create(Document&);
+ DECLARE_NODE_FACTORY(ProgressInnerElement);
private:
- ProgressInnerElement(Document&);
+ explicit ProgressInnerElement(Document&);
virtual RenderObject* createRenderer(RenderStyle*) OVERRIDE;
- virtual bool rendererIsNeeded(const RenderStyle&);
+ virtual bool rendererIsNeeded(const RenderStyle&) OVERRIDE;
};
-inline PassRefPtr<ProgressInnerElement> ProgressInnerElement::create(Document& document)
-{
- return adoptRef(new ProgressInnerElement(document));
-}
-
class ProgressBarElement FINAL : public ProgressShadowElement {
public:
- static PassRefPtr<ProgressBarElement> create(Document&);
+ DECLARE_NODE_FACTORY(ProgressBarElement);
private:
- ProgressBarElement(Document&);
+ explicit ProgressBarElement(Document&);
};
-inline PassRefPtr<ProgressBarElement> ProgressBarElement::create(Document& document)
-{
- return adoptRef(new ProgressBarElement(document));
-}
-
class ProgressValueElement FINAL : public ProgressShadowElement {
public:
- static PassRefPtr<ProgressValueElement> create(Document&);
+ DECLARE_NODE_FACTORY(ProgressValueElement);
void setWidthPercentage(double);
private:
- ProgressValueElement(Document&);
+ explicit ProgressValueElement(Document&);
};
-inline PassRefPtr<ProgressValueElement> ProgressValueElement::create(Document& document)
-{
- return adoptRef(new ProgressValueElement(document));
-}
-
}
#endif // ProgressShadowElement_h
diff --git a/chromium/third_party/WebKit/Source/core/html/shadow/ShadowElementNames.cpp b/chromium/third_party/WebKit/Source/core/html/shadow/ShadowElementNames.cpp
index abe60e1d644..ad2f183effb 100644
--- a/chromium/third_party/WebKit/Source/core/html/shadow/ShadowElementNames.cpp
+++ b/chromium/third_party/WebKit/Source/core/html/shadow/ShadowElementNames.cpp
@@ -35,6 +35,18 @@ namespace WebCore {
namespace ShadowElementNames {
+const AtomicString& detailsContent()
+{
+ DEFINE_STATIC_LOCAL(AtomicString, name, ("details-content", AtomicString::ConstructFromLiteral));
+ return name;
+}
+
+const AtomicString& detailsSummary()
+{
+ DEFINE_STATIC_LOCAL(AtomicString, name, ("details-summary", AtomicString::ConstructFromLiteral));
+ return name;
+}
+
const AtomicString& dateTimeEdit()
{
DEFINE_STATIC_LOCAL(AtomicString, name, ("date-time-edit", AtomicString::ConstructFromLiteral));
@@ -65,12 +77,6 @@ const AtomicString& innerEditor()
return name;
}
-const AtomicString& passwordGenerator()
-{
- DEFINE_STATIC_LOCAL(AtomicString, name, ("password-generator", AtomicString::ConstructFromLiteral));
- return name;
-}
-
const AtomicString& pickerIndicator()
{
DEFINE_STATIC_LOCAL(AtomicString, name, ("picker", AtomicString::ConstructFromLiteral));
diff --git a/chromium/third_party/WebKit/Source/core/html/shadow/ShadowElementNames.h b/chromium/third_party/WebKit/Source/core/html/shadow/ShadowElementNames.h
index 46788a1cdfb..61ee1ca1680 100644
--- a/chromium/third_party/WebKit/Source/core/html/shadow/ShadowElementNames.h
+++ b/chromium/third_party/WebKit/Source/core/html/shadow/ShadowElementNames.h
@@ -37,12 +37,13 @@ namespace WebCore {
namespace ShadowElementNames {
+const AtomicString& detailsContent();
+const AtomicString& detailsSummary();
const AtomicString& dateTimeEdit();
const AtomicString& spinButton();
const AtomicString& clearButton();
const AtomicString& editingViewPort();
const AtomicString& innerEditor();
-const AtomicString& passwordGenerator();
const AtomicString& pickerIndicator();
const AtomicString& placeholder();
const AtomicString& searchDecoration();
diff --git a/chromium/third_party/WebKit/Source/core/html/shadow/SliderThumbElement.cpp b/chromium/third_party/WebKit/Source/core/html/shadow/SliderThumbElement.cpp
index dc7d5080591..3e9ab2fd281 100644
--- a/chromium/third_party/WebKit/Source/core/html/shadow/SliderThumbElement.cpp
+++ b/chromium/third_party/WebKit/Source/core/html/shadow/SliderThumbElement.cpp
@@ -36,18 +36,16 @@
#include "core/events/Event.h"
#include "core/events/MouseEvent.h"
#include "core/dom/shadow/ShadowRoot.h"
+#include "core/frame/LocalFrame.h"
#include "core/html/HTMLInputElement.h"
#include "core/html/forms/StepRange.h"
#include "core/html/parser/HTMLParserIdioms.h"
#include "core/html/shadow/ShadowElementNames.h"
#include "core/page/EventHandler.h"
-#include "core/frame/Frame.h"
#include "core/rendering/RenderFlexibleBox.h"
#include "core/rendering/RenderSlider.h"
#include "core/rendering/RenderTheme.h"
-using namespace std;
-
namespace WebCore {
using namespace HTMLNames;
@@ -64,9 +62,6 @@ inline static bool hasVerticalAppearance(HTMLInputElement* input)
ASSERT(input->renderer());
RenderStyle* sliderStyle = input->renderer()->style();
- if (sliderStyle->appearance() == MediaVolumeSliderPart && RenderTheme::theme().usesVerticalVolumeSlider())
- return true;
-
return sliderStyle->appearance() == SliderVerticalPart;
}
@@ -131,11 +126,18 @@ void RenderSliderContainer::computeLogicalHeight(LayoutUnit logicalHeight, Layou
if (zoomFactor != 1.0)
trackHeight *= zoomFactor;
+ // FIXME: The trackHeight should have been added before updateLogicalHeight was called to avoid this hack.
+ updateIntrinsicContentLogicalHeight(trackHeight);
+
RenderBox::computeLogicalHeight(trackHeight, logicalTop, computedValues);
return;
}
if (isVertical)
logicalHeight = RenderSlider::defaultTrackLength;
+
+ // FIXME: The trackHeight should have been added before updateLogicalHeight was called to avoid this hack.
+ updateIntrinsicContentLogicalHeight(logicalHeight);
+
RenderBox::computeLogicalHeight(logicalHeight, logicalTop, computedValues);
}
@@ -157,7 +159,7 @@ void RenderSliderContainer::layout()
RenderBox* thumb = thumbElement ? thumbElement->renderBox() : 0;
RenderBox* track = trackElement ? trackElement->renderBox() : 0;
- SubtreeLayoutScope layoutScope(this);
+ SubtreeLayoutScope layoutScope(*this);
// Force a layout to reset the position of the thumb so the code below doesn't move the thumb to the wrong place.
// FIXME: Make a custom Render class for the track and move the thumb positioning code there.
if (track)
@@ -182,14 +184,14 @@ void RenderSliderContainer::layout()
else
thumbLocation.setX(thumbLocation.x() - offset);
thumb->setLocation(thumbLocation);
- if (checkForRepaintDuringLayout() && parent()
+ if (checkForPaintInvalidationDuringLayout() && parent()
&& (parent()->style()->appearance() == MediaVolumeSliderPart || parent()->style()->appearance() == MediaSliderPart)) {
// This will sometimes repaint too much. However, it is necessary to
// correctly repaint media controls (volume and timeline sliders) -
// they have special painting code in RenderMediaControls.cpp:paintMediaVolumeSlider
// and paintMediaSlider that gets called via -webkit-appearance and RenderTheme,
// so nothing else would otherwise invalidate the slider.
- repaint();
+ paintInvalidationForWholeRenderer();
}
}
@@ -201,9 +203,9 @@ inline SliderThumbElement::SliderThumbElement(Document& document)
{
}
-PassRefPtr<SliderThumbElement> SliderThumbElement::create(Document& document)
+PassRefPtrWillBeRawPtr<SliderThumbElement> SliderThumbElement::create(Document& document)
{
- RefPtr<SliderThumbElement> element = adoptRef(new SliderThumbElement(document));
+ RefPtrWillBeRawPtr<SliderThumbElement> element = adoptRefWillBeNoop(new SliderThumbElement(document));
element->setAttribute(idAttr, ShadowElementNames::sliderThumb());
return element.release();
}
@@ -214,7 +216,7 @@ void SliderThumbElement::setPositionFromValue()
// path, we don't actually update the value here. Instead, we poke at the
// renderer directly to trigger layout.
if (renderer())
- renderer()->setNeedsLayout();
+ renderer()->setNeedsLayoutAndFullPaintInvalidation();
}
RenderObject* SliderThumbElement::createRenderer(RenderStyle*)
@@ -229,12 +231,12 @@ bool SliderThumbElement::isDisabledFormControl() const
bool SliderThumbElement::matchesReadOnlyPseudoClass() const
{
- return hostInput()->matchesReadOnlyPseudoClass();
+ return hostInput() && hostInput()->matchesReadOnlyPseudoClass();
}
bool SliderThumbElement::matchesReadWritePseudoClass() const
{
- return hostInput()->matchesReadWritePseudoClass();
+ return hostInput() && hostInput()->matchesReadWritePseudoClass();
}
Node* SliderThumbElement::focusDelegate()
@@ -244,14 +246,14 @@ Node* SliderThumbElement::focusDelegate()
void SliderThumbElement::dragFrom(const LayoutPoint& point)
{
- RefPtr<SliderThumbElement> protector(this);
+ RefPtrWillBeRawPtr<SliderThumbElement> protector(this);
startDragging();
setPositionFromPoint(point);
}
void SliderThumbElement::setPositionFromPoint(const LayoutPoint& point)
{
- RefPtr<HTMLInputElement> input(hostInput());
+ RefPtrWillBeRawPtr<HTMLInputElement> input(hostInput());
Element* trackElement = input->userAgentShadowRoot()->getElementById(ShadowElementNames::sliderTrack());
if (!input->renderer() || !renderBox() || !trackElement->renderBox())
@@ -281,7 +283,7 @@ void SliderThumbElement::setPositionFromPoint(const LayoutPoint& point)
position -= isLeftToRightDirection ? renderBox()->marginLeft() : renderBox()->marginRight();
currentPosition = absoluteThumbOrigin.x() - absoluteSliderContentOrigin.x();
}
- position = max<LayoutUnit>(0, min(position, trackSize));
+ position = std::max<LayoutUnit>(0, std::min(position, trackSize));
const Decimal ratio = Decimal::fromDouble(static_cast<double>(position) / trackSize);
const Decimal fraction = isVertical || !isLeftToRightDirection ? Decimal(1) - ratio : ratio;
StepRange stepRange(input->createStepRange(RejectAny));
@@ -304,13 +306,12 @@ void SliderThumbElement::setPositionFromPoint(const LayoutPoint& point)
// FIXME: This is no longer being set from renderer. Consider updating the method name.
input->setValueFromRenderer(valueString);
if (renderer())
- renderer()->setNeedsLayout();
- input->dispatchFormControlChangeEvent();
+ renderer()->setNeedsLayoutAndFullPaintInvalidation();
}
void SliderThumbElement::startDragging()
{
- if (Frame* frame = document().frame()) {
+ if (LocalFrame* frame = document().frame()) {
frame->eventHandler().setCapturingMouseEventsNode(this);
m_inDragMode = true;
}
@@ -321,11 +322,13 @@ void SliderThumbElement::stopDragging()
if (!m_inDragMode)
return;
- if (Frame* frame = document().frame())
- frame->eventHandler().setCapturingMouseEventsNode(0);
+ if (LocalFrame* frame = document().frame())
+ frame->eventHandler().setCapturingMouseEventsNode(nullptr);
m_inDragMode = false;
if (renderer())
- renderer()->setNeedsLayout();
+ renderer()->setNeedsLayoutAndFullPaintInvalidation();
+ if (hostInput())
+ hostInput()->dispatchFormControlChangeEvent();
}
void SliderThumbElement::defaultEventHandler(Event* event)
@@ -387,8 +390,8 @@ bool SliderThumbElement::willRespondToMouseClickEvents()
void SliderThumbElement::detach(const AttachContext& context)
{
if (m_inDragMode) {
- if (Frame* frame = document().frame())
- frame->eventHandler().setCapturingMouseEventsNode(0);
+ if (LocalFrame* frame = document().frame())
+ frame->eventHandler().setCapturingMouseEventsNode(nullptr);
}
HTMLDivElement::detach(context);
}
@@ -412,10 +415,10 @@ static const AtomicString& mediaSliderThumbShadowPartId()
return mediaSliderThumb;
}
-const AtomicString& SliderThumbElement::pseudo() const
+const AtomicString& SliderThumbElement::shadowPseudoId() const
{
HTMLInputElement* input = hostInput();
- if (!input)
+ if (!input || !input->renderer())
return sliderThumbShadowPartId();
RenderStyle* sliderStyle = input->renderer()->style();
@@ -439,25 +442,22 @@ inline SliderContainerElement::SliderContainerElement(Document& document)
{
}
-PassRefPtr<SliderContainerElement> SliderContainerElement::create(Document& document)
-{
- return adoptRef(new SliderContainerElement(document));
-}
+DEFINE_NODE_FACTORY(SliderContainerElement)
RenderObject* SliderContainerElement::createRenderer(RenderStyle*)
{
return new RenderSliderContainer(this);
}
-const AtomicString& SliderContainerElement::pseudo() const
+const AtomicString& SliderContainerElement::shadowPseudoId() const
{
DEFINE_STATIC_LOCAL(const AtomicString, mediaSliderContainer, ("-webkit-media-slider-container", AtomicString::ConstructFromLiteral));
DEFINE_STATIC_LOCAL(const AtomicString, sliderContainer, ("-webkit-slider-container", AtomicString::ConstructFromLiteral));
- if (!shadowHost()->hasTagName(inputTag))
+ if (!shadowHost() || !shadowHost()->renderer())
return sliderContainer;
- RenderStyle* sliderStyle = toHTMLInputElement(shadowHost())->renderer()->style();
+ RenderStyle* sliderStyle = shadowHost()->renderer()->style();
switch (sliderStyle->appearance()) {
case MediaSliderPart:
case MediaSliderThumbPart:
diff --git a/chromium/third_party/WebKit/Source/core/html/shadow/SliderThumbElement.h b/chromium/third_party/WebKit/Source/core/html/shadow/SliderThumbElement.h
index a7af7771fbd..efb41d65fa0 100644
--- a/chromium/third_party/WebKit/Source/core/html/shadow/SliderThumbElement.h
+++ b/chromium/third_party/WebKit/Source/core/html/shadow/SliderThumbElement.h
@@ -32,7 +32,7 @@
#ifndef SliderThumbElement_h
#define SliderThumbElement_h
-#include "HTMLNames.h"
+#include "core/HTMLNames.h"
#include "core/html/HTMLDivElement.h"
#include "core/rendering/RenderBlockFlow.h"
#include "wtf/Forward.h"
@@ -46,43 +46,40 @@ class FloatPoint;
class SliderThumbElement FINAL : public HTMLDivElement {
public:
- static PassRefPtr<SliderThumbElement> create(Document&);
+ static PassRefPtrWillBeRawPtr<SliderThumbElement> create(Document&);
void setPositionFromValue();
void dragFrom(const LayoutPoint&);
- virtual void defaultEventHandler(Event*);
+ virtual void defaultEventHandler(Event*) OVERRIDE;
virtual bool willRespondToMouseMoveEvents() OVERRIDE;
virtual bool willRespondToMouseClickEvents() OVERRIDE;
virtual void detach(const AttachContext& = AttachContext()) OVERRIDE;
- virtual const AtomicString& pseudo() const OVERRIDE;
+ virtual const AtomicString& shadowPseudoId() const OVERRIDE;
HTMLInputElement* hostInput() const;
void setPositionFromPoint(const LayoutPoint&);
void stopDragging();
private:
SliderThumbElement(Document&);
- virtual RenderObject* createRenderer(RenderStyle*);
- virtual PassRefPtr<Element> cloneElementWithoutAttributesAndChildren();
+ virtual RenderObject* createRenderer(RenderStyle*) OVERRIDE;
+ virtual PassRefPtrWillBeRawPtr<Element> cloneElementWithoutAttributesAndChildren() OVERRIDE;
virtual bool isDisabledFormControl() const OVERRIDE;
virtual bool matchesReadOnlyPseudoClass() const OVERRIDE;
virtual bool matchesReadWritePseudoClass() const OVERRIDE;
- virtual Node* focusDelegate();
+ virtual Node* focusDelegate() OVERRIDE;
void startDragging();
bool m_inDragMode;
};
-inline PassRefPtr<Element> SliderThumbElement::cloneElementWithoutAttributesAndChildren()
+inline PassRefPtrWillBeRawPtr<Element> SliderThumbElement::cloneElementWithoutAttributesAndChildren()
{
return create(document());
}
-inline SliderThumbElement* toSliderThumbElement(Node* node)
-{
- ASSERT_WITH_SECURITY_IMPLICATION(!node || node->isHTMLElement());
- return static_cast<SliderThumbElement*>(node);
-}
+// FIXME: There are no ways to check if a node is a SliderThumbElement.
+DEFINE_ELEMENT_TYPE_CASTS(SliderThumbElement, isHTMLElement());
// --------------------------------
@@ -92,20 +89,19 @@ public:
void updateAppearance(RenderStyle* parentStyle);
private:
- virtual bool isSliderThumb() const;
- virtual bool supportsPartialLayout() const OVERRIDE { return false; }
+ virtual bool isSliderThumb() const OVERRIDE;
};
// --------------------------------
class SliderContainerElement FINAL : public HTMLDivElement {
public:
- static PassRefPtr<SliderContainerElement> create(Document&);
+ DECLARE_NODE_FACTORY(SliderContainerElement);
private:
- SliderContainerElement(Document&);
- virtual RenderObject* createRenderer(RenderStyle*);
- virtual const AtomicString& pseudo() const;
+ explicit SliderContainerElement(Document&);
+ virtual RenderObject* createRenderer(RenderStyle*) OVERRIDE;
+ virtual const AtomicString& shadowPseudoId() const OVERRIDE;
};
}
diff --git a/chromium/third_party/WebKit/Source/core/html/shadow/SpinButtonElement.cpp b/chromium/third_party/WebKit/Source/core/html/shadow/SpinButtonElement.cpp
index 38303b5aca5..0671ee1beef 100644
--- a/chromium/third_party/WebKit/Source/core/html/shadow/SpinButtonElement.cpp
+++ b/chromium/third_party/WebKit/Source/core/html/shadow/SpinButtonElement.cpp
@@ -27,14 +27,13 @@
#include "config.h"
#include "core/html/shadow/SpinButtonElement.h"
-#include "HTMLNames.h"
+#include "core/HTMLNames.h"
#include "core/events/MouseEvent.h"
-#include "core/events/ThreadLocalEventNames.h"
#include "core/events/WheelEvent.h"
+#include "core/frame/LocalFrame.h"
#include "core/html/shadow/ShadowElementNames.h"
#include "core/page/Chrome.h"
#include "core/page/EventHandler.h"
-#include "core/frame/Frame.h"
#include "core/page/Page.h"
#include "core/rendering/RenderBox.h"
#include "platform/scroll/ScrollbarTheme.h"
@@ -53,17 +52,17 @@ inline SpinButtonElement::SpinButtonElement(Document& document, SpinButtonOwner&
{
}
-PassRefPtr<SpinButtonElement> SpinButtonElement::create(Document& document, SpinButtonOwner& spinButtonOwner)
+PassRefPtrWillBeRawPtr<SpinButtonElement> SpinButtonElement::create(Document& document, SpinButtonOwner& spinButtonOwner)
{
- RefPtr<SpinButtonElement> element = adoptRef(new SpinButtonElement(document, spinButtonOwner));
- element->setPseudo(AtomicString("-webkit-inner-spin-button", AtomicString::ConstructFromLiteral));
+ RefPtrWillBeRawPtr<SpinButtonElement> element = adoptRefWillBeNoop(new SpinButtonElement(document, spinButtonOwner));
+ element->setShadowPseudoId(AtomicString("-webkit-inner-spin-button", AtomicString::ConstructFromLiteral));
element->setAttribute(idAttr, ShadowElementNames::spinButton());
return element.release();
}
void SpinButtonElement::detach(const AttachContext& context)
{
- releaseCapture();
+ releaseCapture(EventDispatchDisallowed);
HTMLDivElement::detach(context);
}
@@ -95,7 +94,7 @@ void SpinButtonElement::defaultEventHandler(Event* event)
// The following functions of HTMLInputElement may run JavaScript
// code which detaches this shadow node. We need to take a reference
// and check renderer() after such function calls.
- RefPtr<Node> protector(this);
+ RefPtrWillBeRawPtr<Node> protector(this);
if (m_spinButtonOwner)
m_spinButtonOwner->focusAndSelectSpinButtonOwner();
if (renderer()) {
@@ -111,12 +110,12 @@ void SpinButtonElement::defaultEventHandler(Event* event)
}
event->setDefaultHandled();
}
- } else if (mouseEvent->type() == EventTypeNames::mouseup && mouseEvent->button() == LeftButton)
- stopRepeatingTimer();
- else if (event->type() == EventTypeNames::mousemove) {
+ } else if (mouseEvent->type() == EventTypeNames::mouseup && mouseEvent->button() == LeftButton) {
+ releaseCapture();
+ } else if (event->type() == EventTypeNames::mousemove) {
if (box->pixelSnappedBorderBoxRect().contains(local)) {
if (!m_capturing) {
- if (Frame* frame = document().frame()) {
+ if (LocalFrame* frame = document().frame()) {
frame->eventHandler().setCapturingMouseEventsNode(this);
m_capturing = true;
if (Page* page = document().page())
@@ -126,7 +125,7 @@ void SpinButtonElement::defaultEventHandler(Event* event)
UpDownState oldUpDownState = m_upDownState;
m_upDownState = (local.y() < box->height() / 2) ? Up : Down;
if (m_upDownState != oldUpDownState)
- renderer()->repaint();
+ renderer()->paintInvalidationForWholeRenderer();
} else {
releaseCapture();
m_upDownState = Indeterminate;
@@ -188,17 +187,20 @@ void SpinButtonElement::doStepAction(int amount)
m_spinButtonOwner->spinButtonStepDown();
}
-void SpinButtonElement::releaseCapture()
+void SpinButtonElement::releaseCapture(EventDispatch eventDispatch)
{
stopRepeatingTimer();
if (m_capturing) {
- if (Frame* frame = document().frame()) {
- frame->eventHandler().setCapturingMouseEventsNode(0);
+ if (LocalFrame* frame = document().frame()) {
+ frame->eventHandler().setCapturingMouseEventsNode(nullptr);
m_capturing = false;
if (Page* page = document().page())
page->chrome().unregisterPopupOpeningObserver(this);
}
}
+ if (m_spinButtonOwner)
+ m_spinButtonOwner->spinButtonDidReleaseMouseCapture(eventDispatch);
+
}
bool SpinButtonElement::matchesReadOnlyPseudoClass() const
@@ -215,7 +217,7 @@ void SpinButtonElement::startRepeatingTimer()
{
m_pressStartingState = m_upDownState;
ScrollbarTheme* theme = ScrollbarTheme::theme();
- m_repeatingTimer.start(theme->initialAutoscrollTimerDelay(), theme->autoscrollTimerDelay());
+ m_repeatingTimer.start(theme->initialAutoscrollTimerDelay(), theme->autoscrollTimerDelay(), FROM_HERE);
}
void SpinButtonElement::stopRepeatingTimer()
@@ -255,4 +257,10 @@ bool SpinButtonElement::shouldRespondToMouseEvents()
return !m_spinButtonOwner || m_spinButtonOwner->shouldSpinButtonRespondToMouseEvents();
}
+void SpinButtonElement::trace(Visitor* visitor)
+{
+ visitor->trace(m_spinButtonOwner);
+ HTMLDivElement::trace(visitor);
+}
+
}
diff --git a/chromium/third_party/WebKit/Source/core/html/shadow/SpinButtonElement.h b/chromium/third_party/WebKit/Source/core/html/shadow/SpinButtonElement.h
index 41de8fcdaee..25c0b30d8b3 100644
--- a/chromium/third_party/WebKit/Source/core/html/shadow/SpinButtonElement.h
+++ b/chromium/third_party/WebKit/Source/core/html/shadow/SpinButtonElement.h
@@ -40,13 +40,17 @@ public:
Down,
Up,
};
-
- class SpinButtonOwner {
+ enum EventDispatch {
+ EventDispatchAllowed,
+ EventDispatchDisallowed,
+ };
+ class SpinButtonOwner : public WillBeGarbageCollectedMixin {
public:
virtual ~SpinButtonOwner() { }
virtual void focusAndSelectSpinButtonOwner() = 0;
virtual bool shouldSpinButtonRespondToMouseEvents() = 0;
virtual bool shouldSpinButtonRespondToWheelEvents() = 0;
+ virtual void spinButtonDidReleaseMouseCapture(EventDispatch) = 0;
virtual void spinButtonStepDown() = 0;
virtual void spinButtonStepUp() = 0;
};
@@ -54,10 +58,10 @@ public:
// The owner of SpinButtonElement must call removeSpinButtonOwner
// because SpinButtonElement can be outlive SpinButtonOwner
// implementation, e.g. during event handling.
- static PassRefPtr<SpinButtonElement> create(Document&, SpinButtonOwner&);
+ static PassRefPtrWillBeRawPtr<SpinButtonElement> create(Document&, SpinButtonOwner&);
UpDownState upDownState() const { return m_upDownState; }
- virtual void releaseCapture();
- void removeSpinButtonOwner() { m_spinButtonOwner = 0; }
+ void releaseCapture(EventDispatch = EventDispatchAllowed);
+ void removeSpinButtonOwner() { m_spinButtonOwner = nullptr; }
void step(int amount);
@@ -66,25 +70,27 @@ public:
void forwardEvent(Event*);
+ virtual void trace(Visitor*) OVERRIDE;
+
private:
SpinButtonElement(Document&, SpinButtonOwner&);
- virtual void detach(const AttachContext& = AttachContext()) OVERRIDE;
- virtual bool isSpinButtonElement() const { return true; }
+ virtual void detach(const AttachContext&) OVERRIDE;
+ virtual bool isSpinButtonElement() const OVERRIDE { return true; }
virtual bool isDisabledFormControl() const OVERRIDE { return shadowHost() && shadowHost()->isDisabledFormControl(); }
virtual bool matchesReadOnlyPseudoClass() const OVERRIDE;
virtual bool matchesReadWritePseudoClass() const OVERRIDE;
- virtual void defaultEventHandler(Event*);
+ virtual void defaultEventHandler(Event*) OVERRIDE;
virtual void willOpenPopup() OVERRIDE;
void doStepAction(int);
void startRepeatingTimer();
void stopRepeatingTimer();
void repeatingTimerFired(Timer<SpinButtonElement>*);
- virtual void setHovered(bool = true);
+ virtual void setHovered(bool = true) OVERRIDE;
bool shouldRespondToMouseEvents();
- virtual bool isMouseFocusable() const { return false; }
+ virtual bool isMouseFocusable() const OVERRIDE { return false; }
- SpinButtonOwner* m_spinButtonOwner;
+ RawPtrWillBeMember<SpinButtonOwner> m_spinButtonOwner;
bool m_capturing;
UpDownState m_upDownState;
UpDownState m_pressStartingState;
diff --git a/chromium/third_party/WebKit/Source/core/html/shadow/TextControlInnerElements.cpp b/chromium/third_party/WebKit/Source/core/html/shadow/TextControlInnerElements.cpp
index a19fef2c9e9..57c9fc665a6 100644
--- a/chromium/third_party/WebKit/Source/core/html/shadow/TextControlInnerElements.cpp
+++ b/chromium/third_party/WebKit/Source/core/html/shadow/TextControlInnerElements.cpp
@@ -27,21 +27,18 @@
#include "config.h"
#include "core/html/shadow/TextControlInnerElements.h"
-#include "HTMLNames.h"
+#include "core/HTMLNames.h"
#include "core/dom/Document.h"
#include "core/dom/NodeRenderStyle.h"
#include "core/events/MouseEvent.h"
#include "core/events/TextEvent.h"
#include "core/events/TextEventInputType.h"
-#include "core/events/ThreadLocalEventNames.h"
+#include "core/frame/LocalFrame.h"
#include "core/html/HTMLInputElement.h"
#include "core/html/shadow/ShadowElementNames.h"
#include "core/page/EventHandler.h"
-#include "core/frame/Frame.h"
#include "core/rendering/RenderTextControlSingleLine.h"
#include "core/rendering/RenderView.h"
-#include "core/speech/SpeechInput.h"
-#include "core/speech/SpeechInputEvent.h"
#include "platform/UserGestureIndicator.h"
namespace WebCore {
@@ -53,9 +50,9 @@ TextControlInnerContainer::TextControlInnerContainer(Document& document)
{
}
-PassRefPtr<TextControlInnerContainer> TextControlInnerContainer::create(Document& document)
+PassRefPtrWillBeRawPtr<TextControlInnerContainer> TextControlInnerContainer::create(Document& document)
{
- RefPtr<TextControlInnerContainer> element = adoptRef(new TextControlInnerContainer(document));
+ RefPtrWillBeRawPtr<TextControlInnerContainer> element = adoptRefWillBeNoop(new TextControlInnerContainer(document));
element->setAttribute(idAttr, ShadowElementNames::textFieldContainer());
return element.release();
}
@@ -73,9 +70,9 @@ EditingViewPortElement::EditingViewPortElement(Document& document)
setHasCustomStyleCallbacks();
}
-PassRefPtr<EditingViewPortElement> EditingViewPortElement::create(Document& document)
+PassRefPtrWillBeRawPtr<EditingViewPortElement> EditingViewPortElement::create(Document& document)
{
- RefPtr<EditingViewPortElement> element = adoptRef(new EditingViewPortElement(document));
+ RefPtrWillBeRawPtr<EditingViewPortElement> element = adoptRefWillBeNoop(new EditingViewPortElement(document));
element->setAttribute(idAttr, ShadowElementNames::editingViewPort());
return element.release();
}
@@ -88,9 +85,6 @@ PassRefPtr<RenderStyle> EditingViewPortElement::customStyleForRenderer()
style->inheritFrom(shadowHost()->renderStyle());
style->setFlexGrow(1);
- // min-width: 0; is needed for correct shrinking.
- // FIXME: Remove this line when https://bugs.webkit.org/show_bug.cgi?id=111790 is fixed.
- style->setMinWidth(Length(0, Fixed));
style->setDisplay(BLOCK);
style->setDirection(LTR);
@@ -104,20 +98,20 @@ PassRefPtr<RenderStyle> EditingViewPortElement::customStyleForRenderer()
// ---------------------------
-inline TextControlInnerTextElement::TextControlInnerTextElement(Document& document)
+inline TextControlInnerEditorElement::TextControlInnerEditorElement(Document& document)
: HTMLDivElement(document)
{
setHasCustomStyleCallbacks();
}
-PassRefPtr<TextControlInnerTextElement> TextControlInnerTextElement::create(Document& document)
+PassRefPtrWillBeRawPtr<TextControlInnerEditorElement> TextControlInnerEditorElement::create(Document& document)
{
- RefPtr<TextControlInnerTextElement> element = adoptRef(new TextControlInnerTextElement(document));
+ RefPtrWillBeRawPtr<TextControlInnerEditorElement> element = adoptRefWillBeNoop(new TextControlInnerEditorElement(document));
element->setAttribute(idAttr, ShadowElementNames::innerEditor());
return element.release();
}
-void TextControlInnerTextElement::defaultEventHandler(Event* event)
+void TextControlInnerEditorElement::defaultEventHandler(Event* event)
{
// FIXME: In the future, we should add a way to have default event listeners.
// Then we would add one to the text field's inner div, and we wouldn't need this subclass.
@@ -136,18 +130,18 @@ void TextControlInnerTextElement::defaultEventHandler(Event* event)
HTMLDivElement::defaultEventHandler(event);
}
-RenderObject* TextControlInnerTextElement::createRenderer(RenderStyle*)
+RenderObject* TextControlInnerEditorElement::createRenderer(RenderStyle*)
{
return new RenderTextControlInnerBlock(this);
}
-PassRefPtr<RenderStyle> TextControlInnerTextElement::customStyleForRenderer()
+PassRefPtr<RenderStyle> TextControlInnerEditorElement::customStyleForRenderer()
{
RenderObject* parentRenderer = shadowHost()->renderer();
if (!parentRenderer || !parentRenderer->isTextControl())
return originalStyleForRenderer();
RenderTextControl* textControlRenderer = toRenderTextControl(parentRenderer);
- return textControlRenderer->createInnerTextStyle(textControlRenderer->style());
+ return textControlRenderer->createInnerEditorStyle(textControlRenderer->style());
}
// ----------------------------
@@ -157,21 +151,21 @@ inline SearchFieldDecorationElement::SearchFieldDecorationElement(Document& docu
{
}
-PassRefPtr<SearchFieldDecorationElement> SearchFieldDecorationElement::create(Document& document)
+PassRefPtrWillBeRawPtr<SearchFieldDecorationElement> SearchFieldDecorationElement::create(Document& document)
{
- RefPtr<SearchFieldDecorationElement> element = adoptRef(new SearchFieldDecorationElement(document));
+ RefPtrWillBeRawPtr<SearchFieldDecorationElement> element = adoptRefWillBeNoop(new SearchFieldDecorationElement(document));
element->setAttribute(idAttr, ShadowElementNames::searchDecoration());
return element.release();
}
-const AtomicString& SearchFieldDecorationElement::pseudo() const
+const AtomicString& SearchFieldDecorationElement::shadowPseudoId() const
{
DEFINE_STATIC_LOCAL(AtomicString, resultsDecorationId, ("-webkit-search-results-decoration", AtomicString::ConstructFromLiteral));
DEFINE_STATIC_LOCAL(AtomicString, decorationId, ("-webkit-search-decoration", AtomicString::ConstructFromLiteral));
Element* host = shadowHost();
if (!host)
return resultsDecorationId;
- if (host->hasTagName(inputTag)) {
+ if (isHTMLInputElement(*host)) {
if (toHTMLInputElement(host)->maxResults() < 0)
return decorationId;
return resultsDecorationId;
@@ -206,10 +200,10 @@ inline SearchFieldCancelButtonElement::SearchFieldCancelButtonElement(Document&
{
}
-PassRefPtr<SearchFieldCancelButtonElement> SearchFieldCancelButtonElement::create(Document& document)
+PassRefPtrWillBeRawPtr<SearchFieldCancelButtonElement> SearchFieldCancelButtonElement::create(Document& document)
{
- RefPtr<SearchFieldCancelButtonElement> element = adoptRef(new SearchFieldCancelButtonElement(document));
- element->setPseudo(AtomicString("-webkit-search-cancel-button", AtomicString::ConstructFromLiteral));
+ RefPtrWillBeRawPtr<SearchFieldCancelButtonElement> element = adoptRefWillBeNoop(new SearchFieldCancelButtonElement(document));
+ element->setShadowPseudoId(AtomicString("-webkit-search-cancel-button", AtomicString::ConstructFromLiteral));
element->setAttribute(idAttr, ShadowElementNames::clearButton());
return element.release();
}
@@ -217,8 +211,8 @@ PassRefPtr<SearchFieldCancelButtonElement> SearchFieldCancelButtonElement::creat
void SearchFieldCancelButtonElement::detach(const AttachContext& context)
{
if (m_capturing) {
- if (Frame* frame = document().frame())
- frame->eventHandler().setCapturingMouseEventsNode(0);
+ if (LocalFrame* frame = document().frame())
+ frame->eventHandler().setCapturingMouseEventsNode(nullptr);
}
HTMLDivElement::detach(context);
}
@@ -227,136 +221,17 @@ void SearchFieldCancelButtonElement::detach(const AttachContext& context)
void SearchFieldCancelButtonElement::defaultEventHandler(Event* event)
{
// If the element is visible, on mouseup, clear the value, and set selection
- RefPtr<HTMLInputElement> input(toHTMLInputElement(shadowHost()));
+ RefPtrWillBeRawPtr<HTMLInputElement> input(toHTMLInputElement(shadowHost()));
if (!input || input->isDisabledOrReadOnly()) {
if (!event->defaultHandled())
HTMLDivElement::defaultEventHandler(event);
return;
}
- if (event->type() == EventTypeNames::mousedown && event->isMouseEvent() && toMouseEvent(event)->button() == LeftButton) {
- if (renderer() && renderer()->visibleToHitTesting()) {
- if (Frame* frame = document().frame()) {
- frame->eventHandler().setCapturingMouseEventsNode(this);
- m_capturing = true;
- }
- }
- input->focus();
- input->select();
- event->setDefaultHandled();
- }
- if (event->type() == EventTypeNames::mouseup && event->isMouseEvent() && toMouseEvent(event)->button() == LeftButton) {
- if (m_capturing) {
- if (Frame* frame = document().frame()) {
- frame->eventHandler().setCapturingMouseEventsNode(0);
- m_capturing = false;
- }
- if (hovered()) {
- String oldValue = input->value();
- input->setValueForUser("");
- input->onSearch();
- event->setDefaultHandled();
- }
- }
- }
-
- if (!event->defaultHandled())
- HTMLDivElement::defaultEventHandler(event);
-}
-
-bool SearchFieldCancelButtonElement::willRespondToMouseClickEvents()
-{
- const HTMLInputElement* input = toHTMLInputElement(shadowHost());
- if (input && !input->isDisabledOrReadOnly())
- return true;
-
- return HTMLDivElement::willRespondToMouseClickEvents();
-}
-
-// ----------------------------
-
-#if ENABLE(INPUT_SPEECH)
-
-inline InputFieldSpeechButtonElement::InputFieldSpeechButtonElement(Document& document)
- : HTMLDivElement(document)
- , m_capturing(false)
- , m_state(Idle)
- , m_listenerId(0)
-{
-}
-
-InputFieldSpeechButtonElement::~InputFieldSpeechButtonElement()
-{
- SpeechInput* speech = speechInput();
- if (speech && m_listenerId) { // Could be null when page is unloading.
- if (m_state != Idle)
- speech->cancelRecognition(m_listenerId);
- speech->unregisterListener(m_listenerId);
- }
-}
-
-PassRefPtr<InputFieldSpeechButtonElement> InputFieldSpeechButtonElement::create(Document& document)
-{
- RefPtr<InputFieldSpeechButtonElement> element = adoptRef(new InputFieldSpeechButtonElement(document));
- element->setPseudo(AtomicString("-webkit-input-speech-button", AtomicString::ConstructFromLiteral));
- element->setAttribute(idAttr, ShadowElementNames::speechButton());
- return element.release();
-}
-
-void InputFieldSpeechButtonElement::defaultEventHandler(Event* event)
-{
- // For privacy reasons, only allow clicks directly coming from the user.
- if (!UserGestureIndicator::processingUserGesture()) {
- HTMLDivElement::defaultEventHandler(event);
- return;
- }
-
- // The call to focus() below dispatches a focus event, and an event handler in the page might
- // remove the input element from DOM. To make sure it remains valid until we finish our work
- // here, we take a temporary reference.
- RefPtr<HTMLInputElement> input(toHTMLInputElement(shadowHost()));
-
- if (!input || input->isDisabledOrReadOnly()) {
- if (!event->defaultHandled())
- HTMLDivElement::defaultEventHandler(event);
- return;
- }
- // On mouse down, select the text and set focus.
- if (event->type() == EventTypeNames::mousedown && event->isMouseEvent() && toMouseEvent(event)->button() == LeftButton) {
- if (renderer() && renderer()->visibleToHitTesting()) {
- if (Frame* frame = document().frame()) {
- frame->eventHandler().setCapturingMouseEventsNode(this);
- m_capturing = true;
- }
- }
- RefPtr<InputFieldSpeechButtonElement> holdRefButton(this);
- input->focus();
- input->select();
- event->setDefaultHandled();
- }
- // On mouse up, release capture cleanly.
- if (event->type() == EventTypeNames::mouseup && event->isMouseEvent() && toMouseEvent(event)->button() == LeftButton) {
- if (m_capturing && renderer() && renderer()->visibleToHitTesting()) {
- if (Frame* frame = document().frame()) {
- frame->eventHandler().setCapturingMouseEventsNode(0);
- m_capturing = false;
- }
- }
- }
-
- if (event->type() == EventTypeNames::click && m_listenerId) {
- switch (m_state) {
- case Idle:
- startSpeechInput();
- break;
- case Recording:
- stopSpeechInput();
- break;
- case Recognizing:
- // Nothing to do here, we will continue to wait for results.
- break;
- }
+ if (event->type() == EventTypeNames::click && event->isMouseEvent() && toMouseEvent(event)->button() == LeftButton) {
+ input->setValueForUser("");
+ input->onSearch();
event->setDefaultHandled();
}
@@ -364,7 +239,7 @@ void InputFieldSpeechButtonElement::defaultEventHandler(Event* event)
HTMLDivElement::defaultEventHandler(event);
}
-bool InputFieldSpeechButtonElement::willRespondToMouseClickEvents()
+bool SearchFieldCancelButtonElement::willRespondToMouseClickEvents()
{
const HTMLInputElement* input = toHTMLInputElement(shadowHost());
if (input && !input->isDisabledOrReadOnly())
@@ -373,102 +248,4 @@ bool InputFieldSpeechButtonElement::willRespondToMouseClickEvents()
return HTMLDivElement::willRespondToMouseClickEvents();
}
-void InputFieldSpeechButtonElement::setState(SpeechInputState state)
-{
- if (m_state != state) {
- m_state = state;
- shadowHost()->renderer()->repaint();
- }
-}
-
-SpeechInput* InputFieldSpeechButtonElement::speechInput()
-{
- return SpeechInput::from(document().page());
-}
-
-void InputFieldSpeechButtonElement::didCompleteRecording(int)
-{
- setState(Recognizing);
-}
-
-void InputFieldSpeechButtonElement::didCompleteRecognition(int)
-{
- setState(Idle);
-}
-
-void InputFieldSpeechButtonElement::setRecognitionResult(int, const SpeechInputResultArray& results)
-{
- m_results = results;
-
- // The call to setValue() below dispatches an event, and an event handler in the page might
- // remove the input element from DOM. To make sure it remains valid until we finish our work
- // here, we take a temporary reference.
- RefPtr<HTMLInputElement> input(toHTMLInputElement(shadowHost()));
- if (!input || input->isDisabledOrReadOnly())
- return;
-
- RefPtr<InputFieldSpeechButtonElement> holdRefButton(this);
- if (document().domWindow()) {
- // Call selectionChanged, causing the element to cache the selection,
- // so that the text event inserts the text in this element even if
- // focus has moved away from it.
- input->selectionChanged(false);
- input->dispatchEvent(TextEvent::create(document().domWindow(), results.isEmpty() ? "" : results[0]->utterance(), TextEventInputOther));
- }
-
- // This event is sent after the text event so the website can perform actions using the input field content immediately.
- // It provides alternative recognition hypotheses and notifies that the results come from speech input.
- input->dispatchEvent(SpeechInputEvent::create(EventTypeNames::webkitspeechchange, results));
-
- // Check before accessing the renderer as the above event could have potentially turned off
- // speech in the input element, hence removing this button and renderer from the hierarchy.
- if (renderer())
- renderer()->repaint();
-}
-
-void InputFieldSpeechButtonElement::attach(const AttachContext& context)
-{
- ASSERT(!m_listenerId);
- if (SpeechInput* input = SpeechInput::from(document().page()))
- m_listenerId = input->registerListener(this);
- HTMLDivElement::attach(context);
-}
-
-void InputFieldSpeechButtonElement::detach(const AttachContext& context)
-{
- if (m_capturing) {
- if (Frame* frame = document().frame())
- frame->eventHandler().setCapturingMouseEventsNode(0);
- }
-
- if (m_listenerId) {
- if (m_state != Idle)
- speechInput()->cancelRecognition(m_listenerId);
- speechInput()->unregisterListener(m_listenerId);
- m_listenerId = 0;
- }
-
- HTMLDivElement::detach(context);
-}
-
-void InputFieldSpeechButtonElement::startSpeechInput()
-{
- if (m_state != Idle)
- return;
-
- RefPtr<HTMLInputElement> input = toHTMLInputElement(shadowHost());
- AtomicString language = input->computeInheritedLanguage();
- String grammar = input->getAttribute(webkitgrammarAttr);
- IntRect rect = document().view()->contentsToRootView(pixelSnappedBoundingBox());
- if (speechInput()->startRecognition(m_listenerId, rect, language, grammar, document().securityOrigin()))
- setState(Recording);
-}
-
-void InputFieldSpeechButtonElement::stopSpeechInput()
-{
- if (m_state == Recording)
- speechInput()->stopRecording(m_listenerId);
-}
-#endif // ENABLE(INPUT_SPEECH)
-
}
diff --git a/chromium/third_party/WebKit/Source/core/html/shadow/TextControlInnerElements.h b/chromium/third_party/WebKit/Source/core/html/shadow/TextControlInnerElements.h
index 6b6fb0ff6f4..65c994d7d2e 100644
--- a/chromium/third_party/WebKit/Source/core/html/shadow/TextControlInnerElements.h
+++ b/chromium/third_party/WebKit/Source/core/html/shadow/TextControlInnerElements.h
@@ -28,119 +28,72 @@
#define TextControlInnerElements_h
#include "core/html/HTMLDivElement.h"
-#include "core/speech/SpeechInputListener.h"
#include "wtf/Forward.h"
namespace WebCore {
-class SpeechInput;
-
class TextControlInnerContainer FINAL : public HTMLDivElement {
public:
- static PassRefPtr<TextControlInnerContainer> create(Document&);
+ static PassRefPtrWillBeRawPtr<TextControlInnerContainer> create(Document&);
+
protected:
- TextControlInnerContainer(Document&);
- virtual RenderObject* createRenderer(RenderStyle*);
+ explicit TextControlInnerContainer(Document&);
+ virtual RenderObject* createRenderer(RenderStyle*) OVERRIDE;
};
class EditingViewPortElement FINAL : public HTMLDivElement {
public:
- static PassRefPtr<EditingViewPortElement> create(Document&);
+ static PassRefPtrWillBeRawPtr<EditingViewPortElement> create(Document&);
protected:
- EditingViewPortElement(Document&);
+ explicit EditingViewPortElement(Document&);
virtual PassRefPtr<RenderStyle> customStyleForRenderer() OVERRIDE;
private:
virtual bool supportsFocus() const OVERRIDE { return false; }
};
-class TextControlInnerTextElement FINAL : public HTMLDivElement {
+class TextControlInnerEditorElement FINAL : public HTMLDivElement {
public:
- static PassRefPtr<TextControlInnerTextElement> create(Document&);
+ static PassRefPtrWillBeRawPtr<TextControlInnerEditorElement> create(Document&);
- virtual void defaultEventHandler(Event*);
+ virtual void defaultEventHandler(Event*) OVERRIDE;
private:
- TextControlInnerTextElement(Document&);
- virtual RenderObject* createRenderer(RenderStyle*);
+ explicit TextControlInnerEditorElement(Document&);
+ virtual RenderObject* createRenderer(RenderStyle*) OVERRIDE;
virtual PassRefPtr<RenderStyle> customStyleForRenderer() OVERRIDE;
virtual bool supportsFocus() const OVERRIDE { return false; }
};
class SearchFieldDecorationElement FINAL : public HTMLDivElement {
public:
- static PassRefPtr<SearchFieldDecorationElement> create(Document&);
+ static PassRefPtrWillBeRawPtr<SearchFieldDecorationElement> create(Document&);
- virtual void defaultEventHandler(Event*);
+ virtual void defaultEventHandler(Event*) OVERRIDE;
virtual bool willRespondToMouseClickEvents() OVERRIDE;
private:
- SearchFieldDecorationElement(Document&);
- virtual const AtomicString& pseudo() const OVERRIDE;
+ explicit SearchFieldDecorationElement(Document&);
+ virtual const AtomicString& shadowPseudoId() const OVERRIDE;
virtual bool supportsFocus() const OVERRIDE { return false; }
};
class SearchFieldCancelButtonElement FINAL : public HTMLDivElement {
public:
- static PassRefPtr<SearchFieldCancelButtonElement> create(Document&);
+ static PassRefPtrWillBeRawPtr<SearchFieldCancelButtonElement> create(Document&);
- virtual void defaultEventHandler(Event*);
+ virtual void defaultEventHandler(Event*) OVERRIDE;
virtual bool willRespondToMouseClickEvents() OVERRIDE;
private:
- SearchFieldCancelButtonElement(Document&);
+ explicit SearchFieldCancelButtonElement(Document&);
virtual void detach(const AttachContext& = AttachContext()) OVERRIDE;
virtual bool supportsFocus() const OVERRIDE { return false; }
bool m_capturing;
};
-#if ENABLE(INPUT_SPEECH)
-
-class InputFieldSpeechButtonElement FINAL
- : public HTMLDivElement,
- public SpeechInputListener {
-public:
- enum SpeechInputState {
- Idle,
- Recording,
- Recognizing,
- };
-
- static PassRefPtr<InputFieldSpeechButtonElement> create(Document&);
- virtual ~InputFieldSpeechButtonElement();
-
- virtual void detach(const AttachContext& = AttachContext()) OVERRIDE;
- virtual void defaultEventHandler(Event*);
- virtual bool willRespondToMouseClickEvents();
- virtual bool isInputFieldSpeechButtonElement() const { return true; }
- SpeechInputState state() const { return m_state; }
- void startSpeechInput();
- void stopSpeechInput();
-
- // SpeechInputListener methods.
- void didCompleteRecording(int);
- void didCompleteRecognition(int);
- void setRecognitionResult(int, const SpeechInputResultArray&);
-
-private:
- InputFieldSpeechButtonElement(Document&);
- SpeechInput* speechInput();
- void setState(SpeechInputState state);
- virtual bool isMouseFocusable() const { return false; }
- virtual void attach(const AttachContext& = AttachContext()) OVERRIDE;
-
- bool m_capturing;
- SpeechInputState m_state;
- int m_listenerId;
- SpeechInputResultArray m_results;
-};
-
-DEFINE_TYPE_CASTS(InputFieldSpeechButtonElement, Element, element, element->isInputFieldSpeechButtonElement(), element.isInputFieldSpeechButtonElement());
-
-#endif // ENABLE(INPUT_SPEECH)
-
} // namespace
#endif