Diff
Copied: branches/chromium/1312/LayoutTests/platform/chromium/fast/forms/calendar-picker/calendar-picker-type-change-onchange-expected.txt (from rev 132895, trunk/LayoutTests/platform/chromium/fast/forms/calendar-picker/calendar-picker-type-change-onchange-expected.txt) (0 => 135213)
--- branches/chromium/1312/LayoutTests/platform/chromium/fast/forms/calendar-picker/calendar-picker-type-change-onchange-expected.txt (rev 0)
+++ branches/chromium/1312/LayoutTests/platform/chromium/fast/forms/calendar-picker/calendar-picker-type-change-onchange-expected.txt 2012-11-20 00:39:07 UTC (rev 135213)
@@ -0,0 +1,10 @@
+Check if we have no crash in a case that the input type is changed by selecting a day in the calendar picker.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS unless crash
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
Copied: branches/chromium/1312/LayoutTests/platform/chromium/fast/forms/calendar-picker/calendar-picker-type-change-onchange.html (from rev 132895, trunk/LayoutTests/platform/chromium/fast/forms/calendar-picker/calendar-picker-type-change-onchange.html) (0 => 135213)
--- branches/chromium/1312/LayoutTests/platform/chromium/fast/forms/calendar-picker/calendar-picker-type-change-onchange.html (rev 0)
+++ branches/chromium/1312/LayoutTests/platform/chromium/fast/forms/calendar-picker/calendar-picker-type-change-onchange.html 2012-11-20 00:39:07 UTC (rev 135213)
@@ -0,0 +1,23 @@
+<!DOCTYPE html>
+<body>
+<script src=""
+<script src=""
+<input type="date" id="date1" _onchange_="changeType(this)" value="2000-01-01">
+<script>
+description('Check if we have no crash in a case that the input type is changed by selecting a day in the calendar picker.');
+
+openPicker(document.getElementById('date1'), selectToday);
+
+function selectToday() {
+ eventSender.keyDown('t');
+ eventSender.keyDown('\n');
+}
+
+function changeType(input) {
+ input.type = 'text';
+ testPassed('unless crash');
+ finishJSTest();
+}
+</script>
+<script src=""
+</body>
Modified: branches/chromium/1312/Source/WebCore/html/shadow/PickerIndicatorElement.cpp (135212 => 135213)
--- branches/chromium/1312/Source/WebCore/html/shadow/PickerIndicatorElement.cpp 2012-11-20 00:38:01 UTC (rev 135212)
+++ branches/chromium/1312/Source/WebCore/html/shadow/PickerIndicatorElement.cpp 2012-11-20 00:39:07 UTC (rev 135213)
@@ -51,7 +51,6 @@
inline PickerIndicatorElement::PickerIndicatorElement(Document* document)
: HTMLDivElement(divTag, document)
- , m_chooser(nullptr)
{
setShadowPseudoId("-webkit-calendar-picker-indicator");
}
Modified: branches/chromium/1312/Source/WebCore/html/shadow/PickerIndicatorElement.h (135212 => 135213)
--- branches/chromium/1312/Source/WebCore/html/shadow/PickerIndicatorElement.h 2012-11-20 00:38:01 UTC (rev 135212)
+++ branches/chromium/1312/Source/WebCore/html/shadow/PickerIndicatorElement.h 2012-11-20 00:39:07 UTC (rev 135213)
@@ -63,7 +63,7 @@
HTMLInputElement* hostInput();
- OwnPtr<DateTimeChooser> m_chooser;
+ RefPtr<DateTimeChooser> m_chooser;
};
}
Modified: branches/chromium/1312/Source/WebCore/loader/EmptyClients.cpp (135212 => 135213)
--- branches/chromium/1312/Source/WebCore/loader/EmptyClients.cpp 2012-11-20 00:38:01 UTC (rev 135212)
+++ branches/chromium/1312/Source/WebCore/loader/EmptyClients.cpp 2012-11-20 00:39:07 UTC (rev 135213)
@@ -105,9 +105,9 @@
#endif
#if ENABLE(CALENDAR_PICKER)
-PassOwnPtr<DateTimeChooser> EmptyChromeClient::openDateTimeChooser(DateTimeChooserClient*, const DateTimeChooserParameters&)
+PassRefPtr<DateTimeChooser> EmptyChromeClient::openDateTimeChooser(DateTimeChooserClient*, const DateTimeChooserParameters&)
{
- return nullptr;
+ return PassRefPtr<DateTimeChooser>();
}
#endif
Modified: branches/chromium/1312/Source/WebCore/loader/EmptyClients.h (135212 => 135213)
--- branches/chromium/1312/Source/WebCore/loader/EmptyClients.h 2012-11-20 00:38:01 UTC (rev 135212)
+++ branches/chromium/1312/Source/WebCore/loader/EmptyClients.h 2012-11-20 00:39:07 UTC (rev 135213)
@@ -174,7 +174,7 @@
#endif
#if ENABLE(CALENDAR_PICKER)
- virtual PassOwnPtr<DateTimeChooser> openDateTimeChooser(DateTimeChooserClient*, const DateTimeChooserParameters&) OVERRIDE;
+ virtual PassRefPtr<DateTimeChooser> openDateTimeChooser(DateTimeChooserClient*, const DateTimeChooserParameters&) OVERRIDE;
#endif
virtual void runOpenPanel(Frame*, PassRefPtr<FileChooser>) OVERRIDE;
Modified: branches/chromium/1312/Source/WebCore/page/ChromeClient.h (135212 => 135213)
--- branches/chromium/1312/Source/WebCore/page/ChromeClient.h 2012-11-20 00:38:01 UTC (rev 135212)
+++ branches/chromium/1312/Source/WebCore/page/ChromeClient.h 2012-11-20 00:39:07 UTC (rev 135213)
@@ -227,7 +227,7 @@
#endif
#if ENABLE(CALENDAR_PICKER)
- virtual PassOwnPtr<DateTimeChooser> openDateTimeChooser(DateTimeChooserClient*, const DateTimeChooserParameters&) = 0;
+ virtual PassRefPtr<DateTimeChooser> openDateTimeChooser(DateTimeChooserClient*, const DateTimeChooserParameters&) = 0;
#endif
virtual void runOpenPanel(Frame*, PassRefPtr<FileChooser>) = 0;
Modified: branches/chromium/1312/Source/WebCore/platform/DateTimeChooser.h (135212 => 135213)
--- branches/chromium/1312/Source/WebCore/platform/DateTimeChooser.h 2012-11-20 00:38:01 UTC (rev 135212)
+++ branches/chromium/1312/Source/WebCore/platform/DateTimeChooser.h 2012-11-20 00:39:07 UTC (rev 135213)
@@ -32,6 +32,7 @@
#define DateTimeChooser_h
#include "IntRect.h"
+#include <wtf/RefCounted.h>
#include <wtf/text/WTFString.h>
namespace WebCore {
@@ -52,7 +53,7 @@
};
// For pickers like color pickers and date pickers.
-class DateTimeChooser {
+class DateTimeChooser : public RefCounted<DateTimeChooser> {
public:
virtual ~DateTimeChooser() { }
Modified: branches/chromium/1312/Source/WebKit/chromium/src/ChromeClientImpl.cpp (135212 => 135213)
--- branches/chromium/1312/Source/WebKit/chromium/src/ChromeClientImpl.cpp 2012-11-20 00:38:01 UTC (rev 135212)
+++ branches/chromium/1312/Source/WebKit/chromium/src/ChromeClientImpl.cpp 2012-11-20 00:39:07 UTC (rev 135213)
@@ -706,9 +706,9 @@
#endif
#if ENABLE(CALENDAR_PICKER)
-PassOwnPtr<WebCore::DateTimeChooser> ChromeClientImpl::openDateTimeChooser(WebCore::DateTimeChooserClient* pickerClient, const WebCore::DateTimeChooserParameters& parameters)
+PassRefPtr<DateTimeChooser> ChromeClientImpl::openDateTimeChooser(DateTimeChooserClient* pickerClient, const DateTimeChooserParameters& parameters)
{
- return adoptPtr(new DateTimeChooserImpl(this, pickerClient, parameters));
+ return DateTimeChooserImpl::create(this, pickerClient, parameters);
}
#endif
Modified: branches/chromium/1312/Source/WebKit/chromium/src/ChromeClientImpl.h (135212 => 135213)
--- branches/chromium/1312/Source/WebKit/chromium/src/ChromeClientImpl.h 2012-11-20 00:38:01 UTC (rev 135212)
+++ branches/chromium/1312/Source/WebKit/chromium/src/ChromeClientImpl.h 2012-11-20 00:39:07 UTC (rev 135213)
@@ -148,7 +148,7 @@
PassOwnPtr<WebColorChooser> createWebColorChooser(WebColorChooserClient*, const WebColor&);
#endif
#if ENABLE(CALENDAR_PICKER)
- virtual PassOwnPtr<WebCore::DateTimeChooser> openDateTimeChooser(WebCore::DateTimeChooserClient*, const WebCore::DateTimeChooserParameters&) OVERRIDE;
+ virtual PassRefPtr<WebCore::DateTimeChooser> openDateTimeChooser(WebCore::DateTimeChooserClient*, const WebCore::DateTimeChooserParameters&) OVERRIDE;
#endif
virtual void runOpenPanel(WebCore::Frame*, PassRefPtr<WebCore::FileChooser>);
virtual void loadIconForFiles(const Vector<WTF::String>&, WebCore::FileIconLoader*);
Modified: branches/chromium/1312/Source/WebKit/chromium/src/DateTimeChooserImpl.cpp (135212 => 135213)
--- branches/chromium/1312/Source/WebKit/chromium/src/DateTimeChooserImpl.cpp 2012-11-20 00:38:01 UTC (rev 135212)
+++ branches/chromium/1312/Source/WebKit/chromium/src/DateTimeChooserImpl.cpp 2012-11-20 00:39:07 UTC (rev 135213)
@@ -64,6 +64,11 @@
m_popup = m_chromeClient->openPagePopup(this, m_parameters.anchorRectInRootView);
}
+PassRefPtr<DateTimeChooserImpl> DateTimeChooserImpl::create(ChromeClientImpl* chromeClient, WebCore::DateTimeChooserClient* client, const WebCore::DateTimeChooserParameters& parameters)
+{
+ return adoptRef(new DateTimeChooserImpl(chromeClient, client, parameters));
+}
+
DateTimeChooserImpl::~DateTimeChooserImpl()
{
}
@@ -150,6 +155,7 @@
void DateTimeChooserImpl::setValueAndClosePopup(int numValue, const String& stringValue)
{
+ RefPtr<DateTimeChooserImpl> protector(this);
if (numValue >= 0)
m_client->didChooseValue(stringValue);
endChooser();
Modified: branches/chromium/1312/Source/WebKit/chromium/src/DateTimeChooserImpl.h (135212 => 135213)
--- branches/chromium/1312/Source/WebKit/chromium/src/DateTimeChooserImpl.h 2012-11-20 00:38:01 UTC (rev 135212)
+++ branches/chromium/1312/Source/WebKit/chromium/src/DateTimeChooserImpl.h 2012-11-20 00:39:07 UTC (rev 135213)
@@ -47,13 +47,14 @@
class DateTimeChooserImpl : public WebCore::DateTimeChooser, public WebCore::PagePopupClient {
public:
- DateTimeChooserImpl(ChromeClientImpl*, WebCore::DateTimeChooserClient*, const WebCore::DateTimeChooserParameters&);
+ static PassRefPtr<DateTimeChooserImpl> create(ChromeClientImpl*, WebCore::DateTimeChooserClient*, const WebCore::DateTimeChooserParameters&);
virtual ~DateTimeChooserImpl();
// DateTimeChooser functions:
virtual void endChooser() OVERRIDE;
private:
+ DateTimeChooserImpl(ChromeClientImpl*, WebCore::DateTimeChooserClient*, const WebCore::DateTimeChooserParameters&);
// PagePopupClient functions:
virtual WebCore::IntSize contentSize() OVERRIDE;
virtual void writeDocument(WebCore::DocumentWriter&) OVERRIDE;