WebKit Bugzilla
New
Browse
Search+
Log In
×
Sign in with GitHub
or
Remember my login
Create Account
·
Forgot Password
Forgotten password account recovery
[patch]
Patch 2
bug-101913-20121112201423.patch (text/plain), 12.07 KB, created by
Kunihiko Sakamoto
on 2012-11-12 03:16:21 PST
(
hide
)
Description:
Patch 2
Filename:
MIME Type:
Creator:
Kunihiko Sakamoto
Created:
2012-11-12 03:16:21 PST
Size:
12.07 KB
patch
obsolete
>Subversion Revision: 134136 >diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog >index 22554fa004b68e1c7ccdd2c90aee33a4aa10c5aa..b1caedcfcaa2f7db6f17866cf29f01e58dc06067 100644 >--- a/Source/WebCore/ChangeLog >+++ b/Source/WebCore/ChangeLog >@@ -1,3 +1,40 @@ >+2012-11-12 Kunihiko Sakamoto <ksakamoto@chromium.org> >+ >+ Remove HTMLInputElement dependency from PickerIndicatorElement >+ https://bugs.webkit.org/show_bug.cgi?id=101913 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ Introduced PickerIndicatorOwner interface that replaces the role of hostInput() in >+ PickerIndicatorElement. It makes easier to add interactions between picker indicator >+ and its owner without having to add functions to HTMLInputElement. >+ >+ No new tests. This is just a refactor. >+ >+ * html/BaseMultipleFieldsDateAndTimeInputType.cpp: >+ (WebCore::BaseMultipleFieldsDateAndTimeInputType::isPickerIndicatorOwnerDisabledOrReadOnly): Added. >+ (WebCore): >+ (WebCore::BaseMultipleFieldsDateAndTimeInputType::pickerIndicatorChooseValue): Added. >+ (WebCore::BaseMultipleFieldsDateAndTimeInputType::setupDateTimeChooserParameters): Added. >+ (WebCore::BaseMultipleFieldsDateAndTimeInputType::~BaseMultipleFieldsDateAndTimeInputType): >+ (WebCore::BaseMultipleFieldsDateAndTimeInputType::createShadowSubtree): >+ (WebCore::BaseMultipleFieldsDateAndTimeInputType::destroyShadowSubtree): >+ * html/BaseMultipleFieldsDateAndTimeInputType.h: >+ (WebCore): >+ (BaseMultipleFieldsDateAndTimeInputType): Implements PickerIndicatorOwner. >+ * html/shadow/PickerIndicatorElement.cpp: Replaced all the use of hostInput() by using PickerIndicatorOwner. >+ (WebCore::PickerIndicatorElement::PickerIndicatorElement): >+ (WebCore::PickerIndicatorElement::create): >+ (WebCore::PickerIndicatorElement::defaultEventHandler): >+ (WebCore::PickerIndicatorElement::willRespondToMouseClickEvents): >+ (WebCore::PickerIndicatorElement::didChooseValue): >+ (WebCore::PickerIndicatorElement::openPopup): >+ * html/shadow/PickerIndicatorElement.h: >+ (PickerIndicatorElement): Added a PickerIndicatorOwner member. >+ (PickerIndicatorOwner): An interface class for communicating picker indicator and its owner. >+ (WebCore::PickerIndicatorElement::PickerIndicatorOwner::~PickerIndicatorOwner): >+ (WebCore::PickerIndicatorElement::removePickerIndicatorOwner): >+ > 2012-11-09 Tien-Ren Chen <trchen@chromium.org> > > Correct hit-test point scaling for document.elementFromPoint >diff --git a/Source/WebCore/html/BaseMultipleFieldsDateAndTimeInputType.cpp b/Source/WebCore/html/BaseMultipleFieldsDateAndTimeInputType.cpp >index e70d00a81af5b199c0a280f869eab8fe446c7487..df0df96c7a57313664b419cc38ab91ba631d1705 100644 >--- a/Source/WebCore/html/BaseMultipleFieldsDateAndTimeInputType.cpp >+++ b/Source/WebCore/html/BaseMultipleFieldsDateAndTimeInputType.cpp >@@ -123,6 +123,21 @@ void BaseMultipleFieldsDateAndTimeInputType::spinButtonStepUp() > m_dateTimeEditElement->stepUp(); > } > >+bool BaseMultipleFieldsDateAndTimeInputType::isPickerIndicatorOwnerDisabledOrReadOnly() const >+{ >+ return element()->disabled() || element()->readOnly(); >+} >+ >+void BaseMultipleFieldsDateAndTimeInputType::pickerIndicatorChooseValue(const String& value) >+{ >+ element()->setValue(value, DispatchChangeEvent); >+} >+ >+bool BaseMultipleFieldsDateAndTimeInputType::setupDateTimeChooserParameters(DateTimeChooserParameters& parameters) >+{ >+ return element()->setupDateTimeChooserParameters(parameters); >+} >+ > BaseMultipleFieldsDateAndTimeInputType::BaseMultipleFieldsDateAndTimeInputType(HTMLInputElement* element) > : BaseDateAndTimeInputType(element) > , m_dateTimeEditElement(0) >@@ -139,6 +154,8 @@ BaseMultipleFieldsDateAndTimeInputType::~BaseMultipleFieldsDateAndTimeInputType( > m_spinButtonElement->removeSpinButtonOwner(); > if (m_dateTimeEditElement) > m_dateTimeEditElement->removeEditControlOwner(); >+ if (m_pickerIndicatorElement) >+ m_pickerIndicatorElement->removePickerIndicatorOwner(); > } > > void BaseMultipleFieldsDateAndTimeInputType::blur() >@@ -183,7 +200,7 @@ void BaseMultipleFieldsDateAndTimeInputType::createShadowSubtree() > m_pickerIndicatorIsAlwaysVisible = true; > } > if (shouldAddPickerIndicator) { >- RefPtr<PickerIndicatorElement> pickerElement = PickerIndicatorElement::create(document); >+ RefPtr<PickerIndicatorElement> pickerElement = PickerIndicatorElement::create(document, *this); > m_pickerIndicatorElement = pickerElement.get(); > container->appendChild(m_pickerIndicatorElement); > m_pickerIndicatorIsVisible = true; >@@ -201,6 +218,10 @@ void BaseMultipleFieldsDateAndTimeInputType::destroyShadowSubtree() > m_dateTimeEditElement->removeEditControlOwner(); > m_dateTimeEditElement = 0; > } >+ if (m_pickerIndicatorElement) { >+ m_pickerIndicatorElement->removePickerIndicatorOwner(); >+ m_pickerIndicatorElement = 0; >+ } > BaseDateAndTimeInputType::destroyShadowSubtree(); > } > >diff --git a/Source/WebCore/html/BaseMultipleFieldsDateAndTimeInputType.h b/Source/WebCore/html/BaseMultipleFieldsDateAndTimeInputType.h >index 9c75bb2c52eea607482cf147d637ed36e35a65be..b5acc9e6b931d42831f1ca3e2e908b61a7d662c8 100644 >--- a/Source/WebCore/html/BaseMultipleFieldsDateAndTimeInputType.h >+++ b/Source/WebCore/html/BaseMultipleFieldsDateAndTimeInputType.h >@@ -35,13 +35,14 @@ > > #if ENABLE(INPUT_MULTIPLE_FIELDS_UI) > #include "DateTimeEditElement.h" >+#include "PickerIndicatorElement.h" > #include "SpinButtonElement.h" > > namespace WebCore { > >-class PickerIndicatorElement; >+struct DateTimeChooserParameters; > >-class BaseMultipleFieldsDateAndTimeInputType : public BaseDateAndTimeInputType, protected DateTimeEditElement::EditControlOwner { >+class BaseMultipleFieldsDateAndTimeInputType : public BaseDateAndTimeInputType, protected DateTimeEditElement::EditControlOwner, protected PickerIndicatorElement::PickerIndicatorOwner { > protected: > BaseMultipleFieldsDateAndTimeInputType(HTMLInputElement*); > virtual ~BaseMultipleFieldsDateAndTimeInputType(); >@@ -66,6 +67,11 @@ private: > virtual void spinButtonStepDown() OVERRIDE; > virtual void spinButtonStepUp() OVERRIDE; > >+ // PickerIndicatorElement::PickerIndicatorOwner functions >+ virtual bool isPickerIndicatorOwnerDisabledOrReadOnly() const OVERRIDE FINAL; >+ virtual void pickerIndicatorChooseValue(const String&) OVERRIDE FINAL; >+ virtual bool setupDateTimeChooserParameters(DateTimeChooserParameters&) OVERRIDE FINAL; >+ > // InputType functions > virtual void blur() OVERRIDE FINAL; > virtual RenderObject* createRenderer(RenderArena*, RenderStyle*) const OVERRIDE FINAL; >diff --git a/Source/WebCore/html/shadow/PickerIndicatorElement.cpp b/Source/WebCore/html/shadow/PickerIndicatorElement.cpp >index b6683a5358d39b1536f9f5254d3c64d8e0741a89..ac0391726ea3058d339e47a4ff63884a1a355e6c 100644 >--- a/Source/WebCore/html/shadow/PickerIndicatorElement.cpp >+++ b/Source/WebCore/html/shadow/PickerIndicatorElement.cpp >@@ -35,7 +35,6 @@ > #include "Chrome.h" > #include "ChromeClient.h" > #include "Event.h" >-#include "HTMLInputElement.h" > #include "Page.h" > #include "RenderDetailsMarker.h" > >@@ -45,15 +44,16 @@ namespace WebCore { > > using namespace HTMLNames; > >-inline PickerIndicatorElement::PickerIndicatorElement(Document* document) >+inline PickerIndicatorElement::PickerIndicatorElement(Document* document, PickerIndicatorOwner& pickerIndicatorOwner) > : HTMLDivElement(divTag, document) >+ , m_pickerIndicatorOwner(&pickerIndicatorOwner) > { > setPseudo(AtomicString("-webkit-calendar-picker-indicator", AtomicString::ConstructFromLiteral)); > } > >-PassRefPtr<PickerIndicatorElement> PickerIndicatorElement::create(Document* document) >+PassRefPtr<PickerIndicatorElement> PickerIndicatorElement::create(Document* document, PickerIndicatorOwner& pickerIndicatorOwner) > { >- return adoptRef(new PickerIndicatorElement(document)); >+ return adoptRef(new PickerIndicatorElement(document, pickerIndicatorOwner)); > } > > PickerIndicatorElement::~PickerIndicatorElement() >@@ -67,21 +67,11 @@ RenderObject* PickerIndicatorElement::createRenderer(RenderArena* arena, RenderS > return new (arena) RenderDetailsMarker(this); > } > >-inline HTMLInputElement* PickerIndicatorElement::hostInput() >-{ >- // JavaScript code can't create PickerIndicatorElement objects. This is >- // always in shadow of <input>. >- ASSERT(shadowHost()); >- ASSERT(shadowHost()->hasTagName(inputTag)); >- return static_cast<HTMLInputElement*>(shadowHost()); >-} >- > void PickerIndicatorElement::defaultEventHandler(Event* event) > { > if (!renderer()) > return; >- HTMLInputElement* input = hostInput(); >- if (input->readOnly() || input->disabled()) >+ if (!m_pickerIndicatorOwner || m_pickerIndicatorOwner->isPickerIndicatorOwnerDisabledOrReadOnly()) > return; > > if (event->type() == eventNames().clickEvent) { >@@ -95,8 +85,7 @@ void PickerIndicatorElement::defaultEventHandler(Event* event) > > bool PickerIndicatorElement::willRespondToMouseClickEvents() > { >- const HTMLInputElement* input = hostInput(); >- if (renderer() && !input->readOnly() && !input->disabled()) >+ if (renderer() && m_pickerIndicatorOwner && !m_pickerIndicatorOwner->isPickerIndicatorOwnerDisabledOrReadOnly()) > return true; > > return HTMLDivElement::willRespondToMouseClickEvents(); >@@ -104,7 +93,9 @@ bool PickerIndicatorElement::willRespondToMouseClickEvents() > > void PickerIndicatorElement::didChooseValue(const String& value) > { >- hostInput()->setValue(value, DispatchChangeEvent); >+ if (!m_pickerIndicatorOwner) >+ return; >+ m_pickerIndicatorOwner->pickerIndicatorChooseValue(value); > } > > void PickerIndicatorElement::didEndChooser() >@@ -118,11 +109,13 @@ void PickerIndicatorElement::openPopup() > return; > if (!document()->page()) > return; >+ if (!m_pickerIndicatorOwner) >+ return; > Chrome* chrome = document()->page()->chrome(); > if (!chrome) > return; > DateTimeChooserParameters parameters; >- if (!hostInput()->setupDateTimeChooserParameters(parameters)) >+ if (!m_pickerIndicatorOwner->setupDateTimeChooserParameters(parameters)) > return; > m_chooser = chrome->client()->openDateTimeChooser(this, parameters); > } >diff --git a/Source/WebCore/html/shadow/PickerIndicatorElement.h b/Source/WebCore/html/shadow/PickerIndicatorElement.h >index cb755671749bf9c200387f01b23d49867a4b3f37..4dc7db2631f4b21282fd2714ddd57fe55b4e2c15 100644 >--- a/Source/WebCore/html/shadow/PickerIndicatorElement.h >+++ b/Source/WebCore/html/shadow/PickerIndicatorElement.h >@@ -44,24 +44,36 @@ class PagePopup; > > class PickerIndicatorElement : public HTMLDivElement, public DateTimeChooserClient { > public: >- static PassRefPtr<PickerIndicatorElement> create(Document*); >+ // PickerIndicatorOwner implementer must call removePickerIndicatorOwner when >+ // it doesn't handle event, e.g. at destruction. >+ class PickerIndicatorOwner { >+ public: >+ virtual ~PickerIndicatorOwner() { } >+ virtual bool isPickerIndicatorOwnerDisabledOrReadOnly() const = 0; >+ virtual void pickerIndicatorChooseValue(const String&) = 0; >+ virtual bool setupDateTimeChooserParameters(DateTimeChooserParameters&) = 0; >+ }; >+ >+ static PassRefPtr<PickerIndicatorElement> create(Document*, PickerIndicatorOwner&); > virtual ~PickerIndicatorElement(); > void openPopup(); > void closePopup(); > virtual bool willRespondToMouseClickEvents() OVERRIDE; >+ void removePickerIndicatorOwner() { m_pickerIndicatorOwner = 0; } > > // DateTimeChooserClient implementation. > virtual void didChooseValue(const String&) OVERRIDE; > virtual void didEndChooser() OVERRIDE; > > private: >- PickerIndicatorElement(Document*); >+ PickerIndicatorElement(Document*, PickerIndicatorOwner&); > virtual RenderObject* createRenderer(RenderArena*, RenderStyle*) OVERRIDE; > virtual void defaultEventHandler(Event*) OVERRIDE; > virtual void detach() OVERRIDE; > > HTMLInputElement* hostInput(); > >+ PickerIndicatorOwner* m_pickerIndicatorOwner; > RefPtr<DateTimeChooser> m_chooser; > }; >
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Formatted Diff
|
Diff
Attachments on
bug 101913
:
173596
| 173600