<rdar://problem/5726608> REGRESSION (r29428): Assigning to window.status does not...
authoroliver@apple.com <oliver@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 15 Feb 2008 02:00:13 +0000 (02:00 +0000)
committeroliver@apple.com <oliver@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 15 Feb 2008 02:00:13 +0000 (02:00 +0000)
Reviewed by Geoff G and Weinig.

Revert the portions of r29428 responsible for breaking the ability to
set window.status

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@30238 268f45cc-cd09-0410-ab3c-d52691b4dbfc

16 files changed:
LayoutTests/ChangeLog
LayoutTests/fast/dom/HTMLScriptElement/script-load-events.html
LayoutTests/fast/dom/Window/get-set-properties-expected.txt
LayoutTests/fast/dom/Window/get-set-properties.html
LayoutTests/fast/dom/assign-to-window-status-expected.txt [new file with mode: 0644]
LayoutTests/fast/dom/assign-to-window-status.html [new file with mode: 0644]
WebCore/ChangeLog
WebCore/page/DOMWindow.cpp
WebCore/page/DOMWindow.h
WebCore/page/DOMWindow.idl
WebKitTools/ChangeLog
WebKitTools/DumpRenderTree/LayoutTestController.cpp
WebKitTools/DumpRenderTree/LayoutTestController.h
WebKitTools/DumpRenderTree/mac/UIDelegate.mm
WebKitTools/DumpRenderTree/win/UIDelegate.cpp
WebKitTools/DumpRenderTree/win/UIDelegate.h

index 088a498..332a7d5 100644 (file)
@@ -1,3 +1,15 @@
+2008-02-14  Oliver Hunt  <oliver@apple.com>
+
+        Reviewed by Geoff G and Weinig.
+
+        Add test cases for assigning to window.status, modify existing tests that relied on old
+        replaceable status property behaviour.
+
+        * fast/dom/HTMLScriptElement/script-load-events.html:
+        * fast/dom/Window/get-set-properties.html:
+        * fast/dom/assign-to-window-status-expected.txt: Added.
+        * fast/dom/assign-to-window-status.html: Added.
+
 2008-02-14  Geoffrey Garen  <ggaren@apple.com>
 
         Reviewed by Sam Weinig.
index 3c14aef..c61555f 100644 (file)
@@ -2,33 +2,33 @@
 <head>
 <title>&lt;SCRIPT&gt; load and error events</title>
 <script type="text/javascript">
-var status = new Array();
+var status_ = new Array();
 
 function loaded(i)
 {
-    status[i] = "L";
+    status_[i] = "L";
 }
 
 function erred(i)
 {
-    status[i] = "E";
+    status_[i] = "E";
 }
 
 function endTest()
 {
     var failures = "";
-    if (status[0] != "E")
+    if (status_[0] != "E")
         failures += "0 ";
-    if (status[1] != "E")
+    if (status_[1] != "E")
         failures += "1 ";
 
-    if (status[2] != "L")
+    if (status_[2] != "L")
         failures += "2 ";
-    if (status[3] != "L")
+    if (status_[3] != "L")
         failures += "3 ";
-    if (status[4] != "L")
+    if (status_[4] != "L")
         failures += "4 ";
-    if (status[5] != "L")
+    if (status_[5] != "L")
         failures += "5 ";
 
     var results = document.getElementById("results");
index ada287d..78a21a6 100644 (file)
@@ -211,10 +211,6 @@ PASS: canGet('clientInformation') should be 'true' and is.
 PASS: canSet('clientInformation') should be 'true' and is.
 PASS: canGet('console') should be 'true' and is.
 PASS: canSet('console') should be 'true' and is.
-PASS: canGet('defaultStatus') should be 'true' and is.
-PASS: canSet('defaultStatus') should be 'true' and is.
-PASS: canGet('defaultstatus') should be 'true' and is.
-PASS: canSet('defaultstatus') should be 'true' and is.
 PASS: canGet('devicePixelRatio') should be 'true' and is.
 PASS: canSet('devicePixelRatio') should be 'true' and is.
 PASS: canGet('event') should be 'true' and is.
@@ -261,8 +257,6 @@ PASS: canGet('scrollbars') should be 'true' and is.
 PASS: canSet('scrollbars') should be 'true' and is.
 PASS: canGet('self') should be 'true' and is.
 PASS: canSet('self') should be 'true' and is.
-PASS: canGet('status') should be 'true' and is.
-PASS: canSet('status') should be 'true' and is.
 PASS: canGet('statusbar') should be 'true' and is.
 PASS: canSet('statusbar') should be 'true' and is.
 PASS: canGet('toolbar') should be 'true' and is.
@@ -278,17 +272,24 @@ PASS: canGet('document') should be 'true' and is.
 PASS: canSet('document') should be 'false' and is.
 PASS: canGet('history') should be 'true' and is.
 PASS: canSet('history') should be 'false' and is.
-PASS: canGet('name') should be 'true' and is.
-PASS: canSet('name') should be 'false' and is.
 PASS: canGet('pageXOffset') should be 'true' and is.
 PASS: canSet('pageXOffset') should be 'false' and is.
 PASS: canGet('pageYOffset') should be 'true' and is.
 PASS: canSet('pageYOffset') should be 'false' and is.
-PASS: canGet('screen') should be 'true' and is.
-PASS: canSet('screen') should be 'false' and is.
 PASS: canGet('window') should be 'true' and is.
 PASS: canSet('window') should be 'false' and is.
 
+----- tests for getting/setting string properties -----
+
+PASS: canGet('defaultStatus') should be 'true' and is.
+PASS: canSetWithTypeConversion('defaultStatus') should be 'true' and is.
+PASS: canGet('defaultstatus') should be 'true' and is.
+PASS: canSetWithTypeConversion('defaultstatus') should be 'true' and is.
+PASS: canGet('name') should be 'true' and is.
+PASS: canSetWithTypeConversion('name') should be 'true' and is.
+PASS: canGet('status') should be 'true' and is.
+PASS: canSetWithTypeConversion('status') should be 'true' and is.
+
 ----- tests for getting/setting functions -----
 
 PASS: canGet('blur') should be 'true' and is.
index 1f4c644..abb511c 100644 (file)
@@ -42,7 +42,7 @@ function canGet(keyPath)
     }
 }
 
-window.marker = { "foo": "bar" };
+window.marker = { "foo": "bar", toString: function(){ return "window.marker.toString()"; } };
 
 function canSet(keyPath)
 {
@@ -56,6 +56,18 @@ function canSet(keyPath)
     }
 }
 
+function canSetWithTypeConversion(keyPath)
+{
+    var valuePath = "window.marker";
+
+    try {
+        eval("window." + keyPath + " = " + valuePath);
+        return eval("window." + keyPath) == eval("window." + valuePath);
+    } catch(e) {
+        return false;
+    }
+}
+
 var windowReadWriteProperties = [
     "Attr", 
     "CDATASection", 
@@ -161,8 +173,6 @@ var windowReadWriteProperties = [
     "clearTimeout",
     "clientInformation", 
     "console", 
-    "defaultStatus", 
-    "defaultstatus", 
     "devicePixelRatio", 
     "event", 
     "frames",
@@ -186,7 +196,6 @@ var windowReadWriteProperties = [
     "scrollY", 
     "scrollbars",
     "self",
-    "status", 
     "statusbar",
     "toolbar",
     "top"
@@ -196,13 +205,17 @@ var windowReadOnlyProperties = [
     "closed",
     "document",
     "history",
-    "name",
-    "pageXOffset", 
-    "pageYOffset", 
-    "screen", 
+    "pageXOffset",
+    "pageYOffset",
     "window"
 ];
 
+var windowReadWriteStringProperties = [
+    "defaultStatus",
+    "defaultstatus",
+    "name",
+    "status"
+];
 
 var windowFunctions = [
     "blur",
@@ -276,6 +289,14 @@ window.onload = function()
         shouldBeFalse("canSet('" + property + "')");
     }
 
+    log("\n----- tests for getting/setting string properties -----\n");
+    for (var i = 0; i < windowReadWriteStringProperties.length; i++) { //>
+        var property = windowReadWriteStringProperties[i];
+        shouldBeTrue("canGet('" + property + "')");
+        shouldBeTrue("canSetWithTypeConversion('" + property + "')");
+        
+    }
+
     log("\n----- tests for getting/setting functions -----\n");
 
     for (var i = 0; i < windowFunctions.length; i++) { //>
diff --git a/LayoutTests/fast/dom/assign-to-window-status-expected.txt b/LayoutTests/fast/dom/assign-to-window-status-expected.txt
new file mode 100644 (file)
index 0000000..2b11d58
--- /dev/null
@@ -0,0 +1,9 @@
+UI DELEGATE STATUS CALLBACK: setStatusText:set window.status
+UI DELEGATE STATUS CALLBACK: setStatusText:set status
+UI DELEGATE STATUS CALLBACK: setStatusText:1
+UI DELEGATE STATUS CALLBACK: setStatusText:2
+This tests that we can assign strings to the status property.
+PASS: window.status = 'set window.status'; window.status should be 'set window.status' and is.
+PASS: status = 'set status' should be 'set status' and is.
+PASS: window.status = 1 should be '1' and is.
+PASS: status = 2 should be '2' and is.
diff --git a/LayoutTests/fast/dom/assign-to-window-status.html b/LayoutTests/fast/dom/assign-to-window-status.html
new file mode 100644 (file)
index 0000000..754210d
--- /dev/null
@@ -0,0 +1,43 @@
+<script>
+if (window.layoutTestController) {
+    layoutTestController.dumpAsText();
+    layoutTestController.dumpStatusCallbacks();
+}
+
+function log(s)
+{
+    document.getElementById("console").innerHTML += "<li>" + s + "</li>";
+}
+
+function shouldBe(a, b)
+{
+    var evalA, evalB;
+    try {
+        evalA = eval(a);
+        evalB = eval(b);
+    } catch(e) {
+        evalA = e;
+    }
+
+    var message = (evalA === evalB)
+                    ? "PASS: " + a + " should be '" + evalB + "' and is."
+                    : "*** FAIL: " + a + " should be '" + evalB + "' but instead is " + evalA + ". ***";
+    log(message);
+}
+
+function test()
+{
+    shouldBe("window.status = 'set window.status'; window.status", "'set window.status'");
+    shouldBe("status = 'set status'", "'set status'");
+    shouldBe("window.status = 1; window.status", "1");
+    shouldBe("status = 2; status", "2");
+    var o = {l:7};
+    window.status=o;
+    
+}
+</script>
+This tests that we can assign strings to the status property.
+<ul id="console"></ul>
+<script>
+test();
+</script>
index 9b22a25..5cb7645 100644 (file)
@@ -1,3 +1,19 @@
+2008-02-14  Oliver Hunt  <oliver@apple.com>
+
+        Reviewed by Geoff G and Weinig.
+
+        <rdar://problem/5726608> REGRESSION (r29428): Assigning to window.status does not update status bar
+
+        Revert the portions of r29428 responsible for breaking the ability to
+        set window.status
+
+        * page/DOMWindow.cpp:
+        (WebCore::DOMWindow::setStatus):
+        (WebCore::DOMWindow::defaultStatus):
+        (WebCore::DOMWindow::setDefaultStatus):
+        * page/DOMWindow.h:
+        * page/DOMWindow.idl:
+
 2008-02-14  Anders Carlsson  <andersca@apple.com>
 
         Reviewed by Darin.
index d51a09b..3997d87 100644 (file)
@@ -506,12 +506,28 @@ String DOMWindow::status() const
     return m_frame->jsStatusBarText();
 }
 
+void DOMWindow::setStatus(const String& string) 
+{ 
+    if (!m_frame) 
+        return; 
+
+    m_frame->setJSStatusBarText(string); 
+} 
+    
 String DOMWindow::defaultStatus() const
 {
     if (!m_frame)
         return String();
 
     return m_frame->jsDefaultStatusBarText();
+} 
+
+void DOMWindow::setDefaultStatus(const String& string) 
+{ 
+    if (!m_frame) 
+        return; 
+
+    m_frame->setJSDefaultStatusBarText(string);
 }
 
 DOMWindow* DOMWindow::self() const
index 82c7cbc..3f5b544 100644 (file)
@@ -109,9 +109,12 @@ namespace WebCore {
         void setName(const String&);
 
         String status() const;
+        void setStatus(const String&);
         String defaultStatus() const;
+        void setDefaultStatus(const String&);
         // This attribute is an alias of defaultStatus and is necessary for legacy uses.
         String defaultstatus() const { return defaultStatus(); }
+        void setDefaultstatus(const String& status) { setDefaultStatus(status); }
 
         // Self referential attributes
         DOMWindow* self() const;
index a5552c3..142eee0 100644 (file)
@@ -98,11 +98,11 @@ module window {
 
         attribute DOMString name;
 
-        attribute [Replaceable] DOMString status;
-        attribute [Replaceable] DOMString defaultStatus;
+        attribute DOMString status;
+        attribute DOMString defaultStatus;
 #if defined(LANGUAGE_JAVASCRIPT)
         // This attribute is an alias of defaultStatus and is necessary for legacy uses.
-        attribute [Replaceable] DOMString defaultstatus;
+        attribute DOMString defaultstatus;
 #endif
 
         // Self referential attributes
index 4155a11..f86529a 100644 (file)
@@ -1,3 +1,19 @@
+2008-02-14  Oliver Hunt  <oliver@apple.com>
+
+        Reviewed by Geoff G and Weinig.
+
+        Add ability for DRT to report tests setting the status text.
+
+        * DumpRenderTree/LayoutTestController.cpp:
+        (LayoutTestController::LayoutTestController):
+        (dumpStatusCallbacksCallback):
+        (LayoutTestController::staticFunctions):
+        * DumpRenderTree/LayoutTestController.h:
+        * DumpRenderTree/mac/UIDelegate.mm:
+        (-[UIDelegate webView:setStatusText:]):
+        * DumpRenderTree/win/UIDelegate.cpp:
+        * DumpRenderTree/win/UIDelegate.h:
+
 2008-02-13  Adam Roben  <aroben@apple.com>
 
         Windows build fix
index 2e4ed5a..4920066 100644 (file)
@@ -43,6 +43,7 @@ LayoutTestController::LayoutTestController(bool testRepaintDefault, bool testRep
     , m_dumpDOMAsWebArchive(false)
     , m_dumpSelectionRect(false)
     , m_dumpSourceAsWebArchive(false)
+    , m_dumpStatusCallbacks(false)
     , m_dumpTitleChanges(false)
     , m_dumpEditingCallbacks(false)
     , m_dumpResourceLoadCallbacks(false)
@@ -138,6 +139,13 @@ static JSValueRef dumpSourceAsWebArchiveCallback(JSContextRef context, JSObjectR
     return JSValueMakeUndefined(context);
 }
 
+static JSValueRef dumpStatusCallbacksCallback(JSContextRef context, JSObjectRef function, JSObjectRef thisObject, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
+{
+    LayoutTestController* controller = reinterpret_cast<LayoutTestController*>(JSObjectGetPrivate(thisObject));
+    controller->setDumpStatusCallbacks(true);
+    return JSValueMakeUndefined(context);
+}
+
 static JSValueRef dumpTitleChangesCallback(JSContextRef context, JSObjectRef function, JSObjectRef thisObject, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
 {
     LayoutTestController* controller = reinterpret_cast<LayoutTestController*>(JSObjectGetPrivate(thisObject));
@@ -671,6 +679,7 @@ JSStaticFunction* LayoutTestController::staticFunctions()
         { "dumpResourceLoadCallbacks", dumpResourceLoadCallbacksCallback, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
         { "dumpSelectionRect", dumpSelectionRectCallback, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
         { "dumpSourceAsWebArchive", dumpSourceAsWebArchiveCallback, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
+        { "dumpStatusCallbacks", dumpStatusCallbacksCallback, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
         { "dumpTitleChanges", dumpTitleChangesCallback, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
         { "encodeHostName", encodeHostNameCallback, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
         { "execCommand", execCommandCallback, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
index 87e24f6..754d8ce 100644 (file)
@@ -84,6 +84,9 @@ public:
     bool dumpDatabaseCallbacks() const { return m_dumpDatabaseCallbacks; }
     void setDumpDatabaseCallbacks(bool dumpDatabaseCallbacks) { m_dumpDatabaseCallbacks = dumpDatabaseCallbacks; }
 
+    bool dumpStatusCallbacks() const { return m_dumpStatusCallbacks; }
+    void setDumpStatusCallbacks(bool dumpStatusCallbacks) { m_dumpStatusCallbacks = dumpStatusCallbacks; }
+
     bool dumpDOMAsWebArchive() const { return m_dumpDOMAsWebArchive; }
     void setDumpDOMAsWebArchive(bool dumpDOMAsWebArchive) { m_dumpDOMAsWebArchive = dumpDOMAsWebArchive; }
 
@@ -141,6 +144,7 @@ private:
     bool m_dumpDOMAsWebArchive;
     bool m_dumpSelectionRect;
     bool m_dumpSourceAsWebArchive;
+    bool m_dumpStatusCallbacks;
     bool m_dumpTitleChanges;
     bool m_dumpEditingCallbacks;
     bool m_dumpResourceLoadCallbacks;
index dd804a6..9c440a7 100644 (file)
@@ -136,6 +136,11 @@ DumpRenderTreeDraggingInfo *draggingInfo = nil;
     [origin setQuota:defaultQuota];
 }
 
+- (void)webView:(WebView *)sender setStatusText:(NSString *)text
+{
+    if (layoutTestController->dumpStatusCallbacks())
+        printf("UI DELEGATE STATUS CALLBACK: setStatusText:%s\n", [text UTF8String]);
+}
 
 - (void)dealloc
 {
index 9f9dece..30b64f8 100755 (executable)
@@ -405,3 +405,11 @@ HRESULT STDMETHODCALLTYPE UIDelegate::exceededDatabaseQuota(
 
     return S_OK;
 }
+
+
+HRESULT STDMETHODCALLTYPE UIDelegate::setStatusText(BSTR text)
+{ 
+    if (layoutTestController->dumpStatusCallbacks())
+        printf("UI DELEGATE STATUS CALLBACK: setStatusText:%S\n", text ? text : L"");
+    return S_OK;
+}
index c398ec7..0acab81 100755 (executable)
@@ -74,7 +74,7 @@ public:
 
     virtual HRESULT STDMETHODCALLTYPE setStatusText( 
         /* [in] */ IWebView *sender,
-        /* [in] */ BSTR text) { return E_NOTIMPL; }
+        /* [in] */ BSTR text);
 
     virtual HRESULT STDMETHODCALLTYPE webViewStatusText( 
         /* [in] */ IWebView *sender,