JavaScriptCore:
authorantti <antti@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 13 Sep 2007 14:50:22 +0000 (14:50 +0000)
committerantti <antti@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 13 Sep 2007 14:50:22 +0000 (14:50 +0000)
        Reviewed by Maciej.

        Small addition to previous path to cover
        http://bugs.webkit.org/show_bug.cgi?id=11399
        window.eval runs in the global scope of the calling window

        Switch variable scope as well.

        * kjs/function.cpp:
        (KJS::GlobalFuncImp::callAsFunction):

LayoutTests:

        Reviewed by Maciej.

        Change test case to cover
        http://bugs.webkit.org/show_bug.cgi?id=11399
        too.

        * fast/js/window-eval-context-expected.txt:
        * fast/js/window-eval-context.html:

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

JavaScriptCore/ChangeLog
JavaScriptCore/kjs/function.cpp
LayoutTests/ChangeLog
LayoutTests/fast/js/window-eval-context-expected.txt
LayoutTests/fast/js/window-eval-context.html

index 5b8e0c5e5a3505b59e3a81778d91cb849701ea6e..99c98393ca28869ba4b8bc54afd97206d0e923a0 100644 (file)
@@ -1,3 +1,16 @@
+2007-09-13  Antti Koivisto  <antti@apple.com>
+
+        Reviewed by Maciej.
+        
+        Small addition to previous path to cover
+        http://bugs.webkit.org/show_bug.cgi?id=11399
+        window.eval runs in the global scope of the calling window
+        
+        Switch variable scope as well.
+
+        * kjs/function.cpp:
+        (KJS::GlobalFuncImp::callAsFunction):
+
 2007-09-12  Antti Koivisto  <antti@apple.com>
 
         Reviewed by Geoff, Maciej.
index cf3179b3a55225a9a432e1721ca8f3b62cfb93e2..14885dfec49590df0c923aad3c9e8a2934058dff 100644 (file)
@@ -833,8 +833,10 @@ JSValue* GlobalFuncImp::callAsFunction(ExecState* exec, JSObject* thisObj, const
             newExec.setException(exec->exception());
         ctx.setExecState(&newExec);
           
-        if (switchGlobal)
+        if (switchGlobal) {
             ctx.pushScope(thisObj);
+            ctx.setVariableObject(thisObj);
+        }
         
         // execute the code
         progNode->processVarDecls(&newExec);
index 05a4e18019758bb22fcb46180089b6be58bb80e2..4cb3fabd75028b3f081967bd5b8d7df6b5194d10 100644 (file)
@@ -1,3 +1,14 @@
+2007-09-13  Antti Koivisto  <antti@apple.com>
+
+        Reviewed by Maciej.
+        
+        Change test case to cover
+        http://bugs.webkit.org/show_bug.cgi?id=11399
+        too.
+
+        * fast/js/window-eval-context-expected.txt:
+        * fast/js/window-eval-context.html:
+
 2007-09-12  Antti Koivisto  <antti@apple.com>
 
         Reviewed by Geoff, Maciej.
index f91700a2cc05fe5dc63689dc481e3dff53cbe2b2..d15824bf15c37b81f6dc07cbe03d79556d1d7cf3 100644 (file)
@@ -1,5 +1,6 @@
 
 Test that otherWindow.eval() keeps variables of calling context visible: PASS
-Test that otherWindow.eval() is executed with otherWindow in scope PASS
-Test that otherWindow.eval() has otherWindow as the window object : PASS
+Test that otherWindow.eval() is executed with otherWindow in scope: PASS
+Test that otherWindow.eval() has otherWindow as the window object: PASS
 Test that otherWindow.eval() does not change 'this': PASS
+Test that otherWindow.eval() changes variable context: PASS
index 57b70f59807bd60c19e6e9822ce3f1693746785c..795d74b9c016fe36f66f6c874fc2b332531daffb 100644 (file)
@@ -26,12 +26,16 @@ print("Test that otherWindow.eval() keeps variables of calling context visible:
 
 otherWindow.localVar = 2;
 res = otherWindow.eval('localVar == 2');
-print("Test that otherWindow.eval() is executed with otherWindow in scope " + (res ? "PASS" : "FAIL")) ;
+print("Test that otherWindow.eval() is executed with otherWindow in scope: " + (res ? "PASS" : "FAIL")) ;
 
 res = otherWindow.eval('window == otherWindow');
-print("Test that otherWindow.eval() has otherWindow as the window object : " + (res ? "PASS" : "FAIL")) ;
+print("Test that otherWindow.eval() has otherWindow as the window object: " + (res ? "PASS" : "FAIL")) ;
 
 var savedThis = this;
 res = otherWindow.eval('this == savedThis');
 print("Test that otherWindow.eval() does not change 'this': " + (res ? "PASS" : "FAIL")) ;
+
+otherWindow.eval('var myObject = new Object()');
+res = (typeof myObject == "undefined");
+print("Test that otherWindow.eval() changes variable context: " + (res ? "PASS" : "FAIL")) ;
 </script>