Merge from Chromium at DEPS revision r207203
This commit was generated by merge_to_master.py.
Change-Id: Ia8a6c2a997232c94108d8937f8c2556f42be1c37
diff --git a/Source/core/html/shadow/ClearButtonElement.cpp b/Source/core/html/shadow/ClearButtonElement.cpp
index 97ccd40..58acf52 100644
--- a/Source/core/html/shadow/ClearButtonElement.cpp
+++ b/Source/core/html/shadow/ClearButtonElement.cpp
@@ -41,22 +41,23 @@
, m_clearButtonOwner(&clearButtonOwner)
, m_capturing(false)
{
- setPseudo(AtomicString("-webkit-clear-button", AtomicString::ConstructFromLiteral));
- setAttribute(idAttr, ShadowElementNames::clearButton());
}
PassRefPtr<ClearButtonElement> ClearButtonElement::create(Document* document, ClearButtonOwner& clearButtonOwner)
{
- return adoptRef(new ClearButtonElement(document, clearButtonOwner));
+ RefPtr<ClearButtonElement> element = adoptRef(new ClearButtonElement(document, clearButtonOwner));
+ element->setPseudo(AtomicString("-webkit-clear-button", AtomicString::ConstructFromLiteral));
+ element->setAttribute(idAttr, ShadowElementNames::clearButton());
+ return element.release();
}
-void ClearButtonElement::detach()
+void ClearButtonElement::detach(const AttachContext& context)
{
if (m_capturing) {
if (Frame* frame = document()->frame())
frame->eventHandler()->setCapturingMouseEventsNode(0);
}
- HTMLDivElement::detach();
+ HTMLDivElement::detach(context);
}
void ClearButtonElement::releaseCapture()
diff --git a/Source/core/html/shadow/ClearButtonElement.h b/Source/core/html/shadow/ClearButtonElement.h
index 9b9c0c0..a08b1d3 100644
--- a/Source/core/html/shadow/ClearButtonElement.h
+++ b/Source/core/html/shadow/ClearButtonElement.h
@@ -47,7 +47,7 @@
private:
ClearButtonElement(Document*, ClearButtonOwner&);
- virtual void detach();
+ virtual void detach(const AttachContext& = AttachContext()) OVERRIDE;
virtual bool isMouseFocusable() const { return false; }
virtual void defaultEventHandler(Event*);
virtual bool isClearButtonElement() const OVERRIDE;
diff --git a/Source/core/html/shadow/DateTimeEditElement.cpp b/Source/core/html/shadow/DateTimeEditElement.cpp
index 37beb2f..07b774d 100644
--- a/Source/core/html/shadow/DateTimeEditElement.cpp
+++ b/Source/core/html/shadow/DateTimeEditElement.cpp
@@ -447,9 +447,6 @@
: HTMLDivElement(divTag, document)
, m_editControlOwner(&editControlOwner)
{
- DEFINE_STATIC_LOCAL(AtomicString, dateTimeEditPseudoId, ("-webkit-datetime-edit", AtomicString::ConstructFromLiteral));
- setPseudo(dateTimeEditPseudoId);
- setAttribute(idAttr, ShadowElementNames::dateTimeEdit());
setHasCustomStyleCallbacks();
}
@@ -491,6 +488,8 @@
PassRefPtr<DateTimeEditElement> DateTimeEditElement::create(Document* document, EditControlOwner& editControlOwner)
{
RefPtr<DateTimeEditElement> container = adoptRef(new DateTimeEditElement(document, editControlOwner));
+ container->setPseudo(AtomicString("-webkit-datetime-edit", AtomicString::ConstructFromLiteral));
+ container->setAttribute(idAttr, ShadowElementNames::dateTimeEdit());
return container.release();
}
diff --git a/Source/core/html/shadow/DateTimeFieldElement.cpp b/Source/core/html/shadow/DateTimeFieldElement.cpp
index 545ac02..db8f421 100644
--- a/Source/core/html/shadow/DateTimeFieldElement.cpp
+++ b/Source/core/html/shadow/DateTimeFieldElement.cpp
@@ -46,9 +46,6 @@
: HTMLSpanElement(spanTag, document)
, m_fieldOwner(&fieldOwner)
{
- // On accessibility, DateTimeFieldElement acts like spin button.
- setAttribute(roleAttr, "spinbutton");
- setAttribute(aria_valuetextAttr, AXDateTimeFieldEmptyValueText());
}
void DateTimeFieldElement::defaultEventHandler(Event* event)
@@ -149,9 +146,13 @@
void DateTimeFieldElement::initialize(const AtomicString& pseudo, const String& axHelpText, int axMinimum, int axMaximum)
{
- setAttribute(aria_helpAttr, axHelpText);
+ // On accessibility, DateTimeFieldElement acts like spin button.
+ setAttribute(roleAttr, AtomicString("spinbutton", AtomicString::ConstructFromLiteral));
+ setAttribute(aria_valuetextAttr, AXDateTimeFieldEmptyValueText());
setAttribute(aria_valueminAttr, String::number(axMinimum));
setAttribute(aria_valuemaxAttr, String::number(axMaximum));
+
+ setAttribute(aria_helpAttr, axHelpText);
setPseudo(pseudo);
appendChild(Text::create(document(), visibleValue()));
}
@@ -171,15 +172,6 @@
return m_fieldOwner && m_fieldOwner->isFieldOwnerReadOnly();
}
-bool DateTimeFieldElement::isFocusable() const
-{
- if (isDisabled())
- return false;
- if (isFieldOwnerDisabled())
- return false;
- return HTMLElement::isFocusable();
-}
-
bool DateTimeFieldElement::isDisabled() const
{
return fastHasAttribute(disabledAttr);
@@ -210,7 +202,7 @@
bool DateTimeFieldElement::supportsFocus() const
{
- return true;
+ return !isDisabled() && !isFieldOwnerDisabled();
}
void DateTimeFieldElement::updateVisibleValue(EventBehavior eventBehavior)
diff --git a/Source/core/html/shadow/DateTimeFieldElement.h b/Source/core/html/shadow/DateTimeFieldElement.h
index 0b0118d..896d6bc 100644
--- a/Source/core/html/shadow/DateTimeFieldElement.h
+++ b/Source/core/html/shadow/DateTimeFieldElement.h
@@ -64,7 +64,6 @@
virtual void defaultEventHandler(Event*) OVERRIDE;
virtual bool hasValue() const = 0;
bool isDisabled() const;
- virtual bool isFocusable() const OVERRIDE FINAL;
virtual float maximumWidth(const Font&);
virtual void populateDateTimeFieldsState(DateTimeFieldsState&) = 0;
void removeEventHandler() { m_fieldOwner = 0; }
diff --git a/Source/core/html/shadow/DetailsMarkerControl.cpp b/Source/core/html/shadow/DetailsMarkerControl.cpp
index e797072..84fa604 100644
--- a/Source/core/html/shadow/DetailsMarkerControl.cpp
+++ b/Source/core/html/shadow/DetailsMarkerControl.cpp
@@ -54,12 +54,6 @@
return summaryElement()->isMainSummary() && HTMLDivElement::rendererIsNeeded(context);
}
-const AtomicString& DetailsMarkerControl::shadowPseudoId() const
-{
- DEFINE_STATIC_LOCAL(AtomicString, pseudId, ("-webkit-details-marker", AtomicString::ConstructFromLiteral));
- return pseudId;
-}
-
HTMLSummaryElement* DetailsMarkerControl::summaryElement()
{
Element* element = shadowHost();
diff --git a/Source/core/html/shadow/DetailsMarkerControl.h b/Source/core/html/shadow/DetailsMarkerControl.h
index 867f6f1..9cd6e66 100644
--- a/Source/core/html/shadow/DetailsMarkerControl.h
+++ b/Source/core/html/shadow/DetailsMarkerControl.h
@@ -46,14 +46,15 @@
private:
virtual RenderObject* createRenderer(RenderArena*, RenderStyle*);
virtual bool rendererIsNeeded(const NodeRenderingContext&);
- virtual const AtomicString& shadowPseudoId() const;
HTMLSummaryElement* summaryElement();
};
inline PassRefPtr<DetailsMarkerControl> DetailsMarkerControl::create(Document* document)
{
- return adoptRef(new DetailsMarkerControl(document));
+ RefPtr<DetailsMarkerControl> element = adoptRef(new DetailsMarkerControl(document));
+ element->setPseudo(AtomicString("-webkit-details-marker", AtomicString::ConstructFromLiteral));
+ return element.release();
}
}
diff --git a/Source/core/html/shadow/HTMLShadowElement.cpp b/Source/core/html/shadow/HTMLShadowElement.cpp
index 7c1383f..3c69757 100644
--- a/Source/core/html/shadow/HTMLShadowElement.cpp
+++ b/Source/core/html/shadow/HTMLShadowElement.cpp
@@ -61,12 +61,13 @@
if (!containingRoot)
return 0;
- ContentDistributor::ensureDistribution(containingRoot);
+ containingRoot->host()->ensureDistribution();
ShadowRoot* older = containingRoot->olderShadowRoot();
- if (!older || older->type() != ShadowRoot::AuthorShadowRoot || ScopeContentDistribution::assignedTo(older) != this)
+ if (!older || !older->shouldExposeToBindings() || ScopeContentDistribution::assignedTo(older) != this)
return 0;
+ ASSERT(older->shouldExposeToBindings());
return older;
}
diff --git a/Source/core/html/shadow/HTMLShadowElement.idl b/Source/core/html/shadow/HTMLShadowElement.idl
index a252e14..3b6351b 100644
--- a/Source/core/html/shadow/HTMLShadowElement.idl
+++ b/Source/core/html/shadow/HTMLShadowElement.idl
@@ -30,5 +30,5 @@
interface HTMLShadowElement : HTMLElement {
attribute boolean resetStyleInheritance;
- readonly attribute ShadowRoot olderShadowRoot;
+ [DeprecateAs=HTMLShadowElementOlderShadowRoot] readonly attribute ShadowRoot olderShadowRoot;
};
diff --git a/Source/core/html/shadow/MediaControlElements.cpp b/Source/core/html/shadow/MediaControlElements.cpp
index 6eae3dd..243144a 100644
--- a/Source/core/html/shadow/MediaControlElements.cpp
+++ b/Source/core/html/shadow/MediaControlElements.cpp
@@ -34,6 +34,7 @@
#include "core/dom/EventNames.h"
#include "core/dom/EventTarget.h"
#include "core/dom/ExceptionCodePlaceholder.h"
+#include "core/dom/FullscreenController.h"
#include "core/dom/MouseEvent.h"
#include "core/html/DOMTokenList.h"
#include "core/html/HTMLVideoElement.h"
@@ -588,10 +589,10 @@
// video implementation without requiring them to implement their own full
// screen behavior.
if (document()->settings() && document()->settings()->fullScreenEnabled()) {
- if (document()->webkitIsFullScreen() && document()->webkitCurrentFullScreenElement() == toParentMediaElement(this))
- document()->webkitCancelFullScreen();
+ if (FullscreenController::isActiveFullScreenElement(toParentMediaElement(this)))
+ FullscreenController::from(document())->webkitCancelFullScreen();
else
- document()->requestFullScreenForElement(toParentMediaElement(this), 0, Document::ExemptIFrameAllowFullScreenRequirement);
+ FullscreenController::from(document())->requestFullScreenForElement(toParentMediaElement(this), 0, FullscreenController::ExemptIFrameAllowFullScreenRequirement);
} else
mediaController()->enterFullscreen();
event->setDefaultHandled();
diff --git a/Source/core/html/shadow/MeterShadowElement.cpp b/Source/core/html/shadow/MeterShadowElement.cpp
index 8b79697..482c4eb 100644
--- a/Source/core/html/shadow/MeterShadowElement.cpp
+++ b/Source/core/html/shadow/MeterShadowElement.cpp
@@ -42,7 +42,7 @@
using namespace HTMLNames;
-MeterShadowElement::MeterShadowElement(Document* document)
+inline MeterShadowElement::MeterShadowElement(Document* document)
: HTMLDivElement(HTMLNames::divTag, document)
{
}
@@ -58,11 +58,16 @@
return render && !render->theme()->supportsMeter(render->style()->appearance()) && HTMLDivElement::rendererIsNeeded(context);
}
-MeterInnerElement::MeterInnerElement(Document* document)
+inline MeterInnerElement::MeterInnerElement(Document* document)
: MeterShadowElement(document)
{
- DEFINE_STATIC_LOCAL(AtomicString, pseudoId, ("-webkit-meter-inner-element", AtomicString::ConstructFromLiteral));
- setPseudo(pseudoId);
+}
+
+PassRefPtr<MeterInnerElement> MeterInnerElement::create(Document* document)
+{
+ RefPtr<MeterInnerElement> element = adoptRef(new MeterInnerElement(document));
+ element->setPseudo(AtomicString("-webkit-meter-inner-element", AtomicString::ConstructFromLiteral));
+ return element.release();
}
bool MeterInnerElement::rendererIsNeeded(const NodeRenderingContext& context)
@@ -79,6 +84,30 @@
return new (arena) RenderMeter(this);
}
+inline MeterBarElement::MeterBarElement(Document* document)
+ : MeterShadowElement(document)
+{
+}
+
+PassRefPtr<MeterBarElement> MeterBarElement::create(Document* document)
+{
+ RefPtr<MeterBarElement> element = adoptRef(new MeterBarElement(document));
+ element->setPseudo(AtomicString("-webkit-meter-bar", AtomicString::ConstructFromLiteral));
+ return element.release();
+}
+
+inline MeterValueElement::MeterValueElement(Document* document)
+ : MeterShadowElement(document)
+{
+}
+
+PassRefPtr<MeterValueElement> MeterValueElement::create(Document* document)
+{
+ RefPtr<MeterValueElement> element = adoptRef(new MeterValueElement(document));
+ element->updatePseudo();
+ return element.release();
+}
+
const AtomicString& MeterValueElement::valuePseudoId() const
{
DEFINE_STATIC_LOCAL(AtomicString, optimumPseudoId, ("-webkit-meter-optimum-value", AtomicString::ConstructFromLiteral));
diff --git a/Source/core/html/shadow/MeterShadowElement.h b/Source/core/html/shadow/MeterShadowElement.h
index 3f4bdd4..e076515 100644
--- a/Source/core/html/shadow/MeterShadowElement.h
+++ b/Source/core/html/shadow/MeterShadowElement.h
@@ -40,7 +40,7 @@
class RenderMeter;
class MeterShadowElement : public HTMLDivElement {
-public:
+protected:
MeterShadowElement(Document*);
HTMLMeterElement* meterElement() const;
@@ -50,57 +50,33 @@
class MeterInnerElement FINAL : public MeterShadowElement {
public:
- MeterInnerElement(Document*);
static PassRefPtr<MeterInnerElement> create(Document*);
private:
+ MeterInnerElement(Document*);
virtual bool rendererIsNeeded(const NodeRenderingContext&) OVERRIDE;
virtual RenderObject* createRenderer(RenderArena*, RenderStyle*) OVERRIDE;
};
-inline PassRefPtr<MeterInnerElement> MeterInnerElement::create(Document* document)
-{
- return adoptRef(new MeterInnerElement(document));
-}
-
class MeterBarElement FINAL : public MeterShadowElement {
-public:
- MeterBarElement(Document* document)
- : MeterShadowElement(document)
- {
- DEFINE_STATIC_LOCAL(AtomicString, pseudoId, ("-webkit-meter-bar", AtomicString::ConstructFromLiteral));
- setPseudo(pseudoId);
- }
+private:
+ MeterBarElement(Document*);
+public:
static PassRefPtr<MeterBarElement> create(Document*);
};
-inline PassRefPtr<MeterBarElement> MeterBarElement::create(Document* document)
-{
- return adoptRef(new MeterBarElement(document));
-}
-
class MeterValueElement FINAL : public MeterShadowElement {
public:
- MeterValueElement(Document* document)
- : MeterShadowElement(document)
- {
- updatePseudo();
- }
-
static PassRefPtr<MeterValueElement> create(Document*);
void setWidthPercentage(double);
void updatePseudo() { setPseudo(valuePseudoId()); }
private:
+ MeterValueElement(Document*);
const AtomicString& valuePseudoId() const;
};
-inline PassRefPtr<MeterValueElement> MeterValueElement::create(Document* document)
-{
- return adoptRef(new MeterValueElement(document));
-}
-
}
#endif // MeterShadowElement_h
diff --git a/Source/core/html/shadow/PickerIndicatorElement.cpp b/Source/core/html/shadow/PickerIndicatorElement.cpp
index dbe8453..37531e4 100644
--- a/Source/core/html/shadow/PickerIndicatorElement.cpp
+++ b/Source/core/html/shadow/PickerIndicatorElement.cpp
@@ -48,13 +48,14 @@
: HTMLDivElement(divTag, document)
, m_pickerIndicatorOwner(&pickerIndicatorOwner)
{
- setPseudo(AtomicString("-webkit-calendar-picker-indicator", AtomicString::ConstructFromLiteral));
- setAttribute(idAttr, ShadowElementNames::pickerIndicator());
}
PassRefPtr<PickerIndicatorElement> PickerIndicatorElement::create(Document* document, PickerIndicatorOwner& pickerIndicatorOwner)
{
- return adoptRef(new PickerIndicatorElement(document, pickerIndicatorOwner));
+ RefPtr<PickerIndicatorElement> element = adoptRef(new PickerIndicatorElement(document, pickerIndicatorOwner));
+ element->setPseudo(AtomicString("-webkit-calendar-picker-indicator", AtomicString::ConstructFromLiteral));
+ element->setAttribute(idAttr, ShadowElementNames::pickerIndicator());
+ return element.release();
}
PickerIndicatorElement::~PickerIndicatorElement()
@@ -125,10 +126,10 @@
m_chooser->endChooser();
}
-void PickerIndicatorElement::detach()
+void PickerIndicatorElement::detach(const AttachContext& context)
{
closePopup();
- HTMLDivElement::detach();
+ HTMLDivElement::detach(context);
}
bool PickerIndicatorElement::isPickerIndicatorElement() const
diff --git a/Source/core/html/shadow/PickerIndicatorElement.h b/Source/core/html/shadow/PickerIndicatorElement.h
index a380672..496d151 100644
--- a/Source/core/html/shadow/PickerIndicatorElement.h
+++ b/Source/core/html/shadow/PickerIndicatorElement.h
@@ -69,7 +69,7 @@
PickerIndicatorElement(Document*, PickerIndicatorOwner&);
virtual RenderObject* createRenderer(RenderArena*, RenderStyle*) OVERRIDE;
virtual void defaultEventHandler(Event*) OVERRIDE;
- virtual void detach() OVERRIDE;
+ virtual void detach(const AttachContext& = AttachContext()) OVERRIDE;
virtual bool isPickerIndicatorElement() const OVERRIDE;
HTMLInputElement* hostInput();
diff --git a/Source/core/html/shadow/ProgressShadowElement.cpp b/Source/core/html/shadow/ProgressShadowElement.cpp
index 030c1ce..f7fdc8a 100644
--- a/Source/core/html/shadow/ProgressShadowElement.cpp
+++ b/Source/core/html/shadow/ProgressShadowElement.cpp
@@ -65,7 +65,9 @@
PassRefPtr<ProgressInnerElement> ProgressInnerElement::create(Document* document)
{
- return adoptRef(new ProgressInnerElement(document));
+ RefPtr<ProgressInnerElement> element = adoptRef(new ProgressInnerElement(document));
+ element->setPseudo(AtomicString("-webkit-progress-inner-element", AtomicString::ConstructFromLiteral));
+ return element.release();
}
RenderObject* ProgressInnerElement::createRenderer(RenderArena* arena, RenderStyle*)
diff --git a/Source/core/html/shadow/SliderThumbElement.cpp b/Source/core/html/shadow/SliderThumbElement.cpp
index cdcddf3..3579d9a 100644
--- a/Source/core/html/shadow/SliderThumbElement.cpp
+++ b/Source/core/html/shadow/SliderThumbElement.cpp
@@ -72,8 +72,8 @@
SliderThumbElement* sliderThumbElementOf(Node* node)
{
- ASSERT(node);
- ShadowRoot* shadow = node->toInputElement()->userAgentShadowRoot();
+ RELEASE_ASSERT(node->hasTagName(inputTag));
+ ShadowRoot* shadow = toHTMLInputElement(node)->userAgentShadowRoot();
ASSERT(shadow);
Node* thumb = shadow->firstChild()->firstChild()->firstChild();
ASSERT(thumb);
@@ -82,8 +82,8 @@
HTMLElement* sliderTrackElementOf(Node* node)
{
- ASSERT(node);
- ShadowRoot* shadow = node->toInputElement()->userAgentShadowRoot();
+ RELEASE_ASSERT(node->hasTagName(inputTag));
+ ShadowRoot* shadow = toHTMLInputElement(node)->userAgentShadowRoot();
ASSERT(shadow);
Node* track = shadow->firstChild()->firstChild();
ASSERT(track);
@@ -135,7 +135,7 @@
void RenderSliderContainer::computeLogicalHeight(LayoutUnit logicalHeight, LayoutUnit logicalTop, LogicalExtentComputedValues& computedValues) const
{
- HTMLInputElement* input = node()->shadowHost()->toInputElement();
+ HTMLInputElement* input = toHTMLInputElement(node()->shadowHost());
bool isVertical = hasVerticalAppearance(input);
if (input->renderer()->isSlider() && !isVertical && input->list()) {
@@ -161,7 +161,7 @@
void RenderSliderContainer::layout()
{
- HTMLInputElement* input = node()->shadowHost()->toInputElement();
+ HTMLInputElement* input = toHTMLInputElement(node()->shadowHost());
bool isVertical = hasVerticalAppearance(input);
style()->setFlexDirection(isVertical ? FlowColumn : FlowRow);
TextDirection oldTextDirection = style()->direction();
@@ -227,7 +227,7 @@
bool SliderThumbElement::isDisabledFormControl() const
{
- return hostInput()->isDisabledFormControl();
+ return hostInput() && hostInput()->isDisabledFormControl();
}
bool SliderThumbElement::matchesReadOnlyPseudoClass() const
@@ -388,20 +388,20 @@
return HTMLDivElement::willRespondToMouseClickEvents();
}
-void SliderThumbElement::detach()
+void SliderThumbElement::detach(const AttachContext& context)
{
if (m_inDragMode) {
if (Frame* frame = document()->frame())
frame->eventHandler()->setCapturingMouseEventsNode(0);
}
- HTMLDivElement::detach();
+ HTMLDivElement::detach(context);
}
HTMLInputElement* SliderThumbElement::hostInput() const
{
// Only HTMLInputElement creates SliderThumbElement instances as its shadow nodes.
// So, shadowHost() must be an HTMLInputElement.
- return shadowHost()->toInputElement();
+ return toHTMLInputElement(shadowHost());
}
static const AtomicString& sliderThumbShadowPseudoId()
@@ -458,11 +458,10 @@
DEFINE_STATIC_LOCAL(const AtomicString, mediaSliderContainer, ("-webkit-media-slider-container", AtomicString::ConstructFromLiteral));
DEFINE_STATIC_LOCAL(const AtomicString, sliderContainer, ("-webkit-slider-container", AtomicString::ConstructFromLiteral));
- HTMLInputElement* input = shadowHost()->toInputElement();
- if (!input)
+ if (!shadowHost()->hasTagName(inputTag))
return sliderContainer;
- RenderStyle* sliderStyle = input->renderer()->style();
+ RenderStyle* sliderStyle = toHTMLInputElement(shadowHost())->renderer()->style();
switch (sliderStyle->appearance()) {
case MediaSliderPart:
case MediaSliderThumbPart:
diff --git a/Source/core/html/shadow/SliderThumbElement.h b/Source/core/html/shadow/SliderThumbElement.h
index 1b935e6..983d44b 100644
--- a/Source/core/html/shadow/SliderThumbElement.h
+++ b/Source/core/html/shadow/SliderThumbElement.h
@@ -56,7 +56,7 @@
virtual void defaultEventHandler(Event*);
virtual bool willRespondToMouseMoveEvents() OVERRIDE;
virtual bool willRespondToMouseClickEvents() OVERRIDE;
- virtual void detach();
+ virtual void detach(const AttachContext& = AttachContext()) OVERRIDE;
virtual const AtomicString& shadowPseudoId() const;
HTMLInputElement* hostInput() const;
void setPositionFromPoint(const LayoutPoint&);
diff --git a/Source/core/html/shadow/SpinButtonElement.cpp b/Source/core/html/shadow/SpinButtonElement.cpp
index f2d8709..f82212f 100644
--- a/Source/core/html/shadow/SpinButtonElement.cpp
+++ b/Source/core/html/shadow/SpinButtonElement.cpp
@@ -51,24 +51,20 @@
, m_pressStartingState(Indeterminate)
, m_repeatingTimer(this, &SpinButtonElement::repeatingTimerFired)
{
- setAttribute(idAttr, ShadowElementNames::spinButton());
}
PassRefPtr<SpinButtonElement> SpinButtonElement::create(Document* document, SpinButtonOwner& spinButtonOwner)
{
- return adoptRef(new SpinButtonElement(document, spinButtonOwner));
+ RefPtr<SpinButtonElement> element = adoptRef(new SpinButtonElement(document, spinButtonOwner));
+ element->setPseudo(AtomicString("-webkit-inner-spin-button", AtomicString::ConstructFromLiteral));
+ element->setAttribute(idAttr, ShadowElementNames::spinButton());
+ return element.release();
}
-const AtomicString& SpinButtonElement::shadowPseudoId() const
-{
- DEFINE_STATIC_LOCAL(AtomicString, innerPseudoId, ("-webkit-inner-spin-button", AtomicString::ConstructFromLiteral));
- return innerPseudoId;
-}
-
-void SpinButtonElement::detach()
+void SpinButtonElement::detach(const AttachContext& context)
{
releaseCapture();
- HTMLDivElement::detach();
+ HTMLDivElement::detach(context);
}
void SpinButtonElement::defaultEventHandler(Event* event)
diff --git a/Source/core/html/shadow/SpinButtonElement.h b/Source/core/html/shadow/SpinButtonElement.h
index 6f6611b..03f7da4 100644
--- a/Source/core/html/shadow/SpinButtonElement.h
+++ b/Source/core/html/shadow/SpinButtonElement.h
@@ -69,8 +69,7 @@
private:
SpinButtonElement(Document*, SpinButtonOwner&);
- virtual const AtomicString& shadowPseudoId() const;
- virtual void detach();
+ virtual void detach(const AttachContext& = AttachContext()) OVERRIDE;
virtual bool isSpinButtonElement() const { return true; }
virtual bool isDisabledFormControl() const OVERRIDE { return shadowHost() && shadowHost()->isDisabledFormControl(); }
virtual bool matchesReadOnlyPseudoClass() const OVERRIDE;
diff --git a/Source/core/html/shadow/TextControlInnerElements.cpp b/Source/core/html/shadow/TextControlInnerElements.cpp
index 811f994..0eb551d 100644
--- a/Source/core/html/shadow/TextControlInnerElements.cpp
+++ b/Source/core/html/shadow/TextControlInnerElements.cpp
@@ -145,8 +145,8 @@
Element* host = shadowHost();
if (!host)
return resultsDecorationId;
- if (HTMLInputElement* input = host->toInputElement()) {
- if (input->maxResults() < 0)
+ if (host->hasTagName(inputTag)) {
+ if (toHTMLInputElement(host)->maxResults() < 0)
return decorationId;
return resultsDecorationId;
}
@@ -183,22 +183,18 @@
PassRefPtr<SearchFieldCancelButtonElement> SearchFieldCancelButtonElement::create(Document* document)
{
- return adoptRef(new SearchFieldCancelButtonElement(document));
+ RefPtr<SearchFieldCancelButtonElement> element = adoptRef(new SearchFieldCancelButtonElement(document));
+ element->setPseudo(AtomicString("-webkit-search-cancel-button", AtomicString::ConstructFromLiteral));
+ return element.release();
}
-const AtomicString& SearchFieldCancelButtonElement::shadowPseudoId() const
-{
- DEFINE_STATIC_LOCAL(AtomicString, pseudoId, ("-webkit-search-cancel-button", AtomicString::ConstructFromLiteral));
- return pseudoId;
-}
-
-void SearchFieldCancelButtonElement::detach()
+void SearchFieldCancelButtonElement::detach(const AttachContext& context)
{
if (m_capturing) {
if (Frame* frame = document()->frame())
frame->eventHandler()->setCapturingMouseEventsNode(0);
}
- HTMLDivElement::detach();
+ HTMLDivElement::detach(context);
}
@@ -275,7 +271,9 @@
PassRefPtr<InputFieldSpeechButtonElement> InputFieldSpeechButtonElement::create(Document* document)
{
- return adoptRef(new InputFieldSpeechButtonElement(document));
+ RefPtr<InputFieldSpeechButtonElement> element = adoptRef(new InputFieldSpeechButtonElement(document));
+ element->setPseudo(AtomicString("-webkit-input-speech-button", AtomicString::ConstructFromLiteral));
+ return element.release();
}
void InputFieldSpeechButtonElement::defaultEventHandler(Event* event)
@@ -401,15 +399,15 @@
renderer()->repaint();
}
-void InputFieldSpeechButtonElement::attach()
+void InputFieldSpeechButtonElement::attach(const AttachContext& context)
{
ASSERT(!m_listenerId);
if (SpeechInput* input = SpeechInput::from(document()->page()))
m_listenerId = input->registerListener(this);
- HTMLDivElement::attach();
+ HTMLDivElement::attach(context);
}
-void InputFieldSpeechButtonElement::detach()
+void InputFieldSpeechButtonElement::detach(const AttachContext& context)
{
if (m_capturing) {
if (Frame* frame = document()->frame())
@@ -423,7 +421,7 @@
m_listenerId = 0;
}
- HTMLDivElement::detach();
+ HTMLDivElement::detach(context);
}
void InputFieldSpeechButtonElement::startSpeechInput()
@@ -444,13 +442,6 @@
if (m_state == Recording)
speechInput()->stopRecording(m_listenerId);
}
-
-const AtomicString& InputFieldSpeechButtonElement::shadowPseudoId() const
-{
- DEFINE_STATIC_LOCAL(AtomicString, pseudoId, ("-webkit-input-speech-button", AtomicString::ConstructFromLiteral));
- return pseudoId;
-}
-
#endif // ENABLE(INPUT_SPEECH)
}
diff --git a/Source/core/html/shadow/TextControlInnerElements.h b/Source/core/html/shadow/TextControlInnerElements.h
index 7a74919..78ad561 100644
--- a/Source/core/html/shadow/TextControlInnerElements.h
+++ b/Source/core/html/shadow/TextControlInnerElements.h
@@ -90,8 +90,7 @@
private:
SearchFieldCancelButtonElement(Document*);
- virtual const AtomicString& shadowPseudoId() const;
- virtual void detach();
+ virtual void detach(const AttachContext& = AttachContext()) OVERRIDE;
virtual bool isMouseFocusable() const { return false; }
bool m_capturing;
@@ -112,7 +111,7 @@
static PassRefPtr<InputFieldSpeechButtonElement> create(Document*);
virtual ~InputFieldSpeechButtonElement();
- virtual void detach();
+ virtual void detach(const AttachContext& = AttachContext()) OVERRIDE;
virtual void defaultEventHandler(Event*);
virtual bool willRespondToMouseClickEvents();
virtual bool isInputFieldSpeechButtonElement() const { return true; }
@@ -129,9 +128,8 @@
InputFieldSpeechButtonElement(Document*);
SpeechInput* speechInput();
void setState(SpeechInputState state);
- virtual const AtomicString& shadowPseudoId() const;
virtual bool isMouseFocusable() const { return false; }
- virtual void attach();
+ virtual void attach(const AttachContext& = AttachContext()) OVERRIDE;
bool m_capturing;
SpeechInputState m_state;
diff --git a/Source/core/html/shadow/TextFieldDecorationElement.cpp b/Source/core/html/shadow/TextFieldDecorationElement.cpp
index d20fb0d..f281d43 100644
--- a/Source/core/html/shadow/TextFieldDecorationElement.cpp
+++ b/Source/core/html/shadow/TextFieldDecorationElement.cpp
@@ -169,16 +169,16 @@
return image;
}
-void TextFieldDecorationElement::attach()
+void TextFieldDecorationElement::attach(const AttachContext& context)
{
- HTMLDivElement::attach();
+ HTMLDivElement::attach(context);
updateImage();
}
-void TextFieldDecorationElement::detach()
+void TextFieldDecorationElement::detach(const AttachContext& context)
{
m_textFieldDecorator->willDetach(hostInput());
- HTMLDivElement::detach();
+ HTMLDivElement::detach(context);
}
bool TextFieldDecorationElement::isMouseFocusable() const
diff --git a/Source/core/html/shadow/TextFieldDecorationElement.h b/Source/core/html/shadow/TextFieldDecorationElement.h
index cf34338..5222044 100644
--- a/Source/core/html/shadow/TextFieldDecorationElement.h
+++ b/Source/core/html/shadow/TextFieldDecorationElement.h
@@ -80,8 +80,8 @@
virtual bool isTextFieldDecoration() const OVERRIDE;
virtual PassRefPtr<RenderStyle> customStyleForRenderer() OVERRIDE;
virtual RenderObject* createRenderer(RenderArena*, RenderStyle*) OVERRIDE;
- virtual void attach() OVERRIDE;
- virtual void detach() OVERRIDE;
+ virtual void attach(const AttachContext& = AttachContext()) OVERRIDE;
+ virtual void detach(const AttachContext& = AttachContext()) OVERRIDE;
virtual bool isMouseFocusable() const OVERRIDE;
virtual void defaultEventHandler(Event*) OVERRIDE;