Reviewed by Sam Weinig.
authorantti@apple.com <antti@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 21 Feb 2008 20:10:00 +0000 (20:10 +0000)
committerantti@apple.com <antti@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 21 Feb 2008 20:10:00 +0000 (20:10 +0000)
        <rdar://problem/5753789>
        REGRESSION: 1.5% -2% Sunspider regression from r30009 (ebay photo upload hang)

        Ensure all versions of allowsAccessFrom are inlined to single functions.
        This is a 2% win in browser hosted Sunspider.

        * bindings/js/kjs_window.cpp:
        (KJS::Window::allowsAccessFrom):
        (KJS::Window::allowsAccessFromPrivate):
        * bindings/js/kjs_window.h:

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

WebCore/ChangeLog
WebCore/bindings/js/kjs_window.cpp
WebCore/bindings/js/kjs_window.h

index 06e5a455b2ac25a81a302fc61877f5375b65f63f..bde0348c5dcb6a6ae80e067247199c282d9ff7b7 100644 (file)
@@ -1,3 +1,18 @@
+2008-02-21  Antti Koivisto  <antti@apple.com>
+
+        Reviewed by Sam Weinig.
+
+        <rdar://problem/5753789>
+        REGRESSION: 1.5% -2% Sunspider regression from r30009 (ebay photo upload hang)
+        
+        Ensure all versions of allowsAccessFrom are inlined to single functions. 
+        This is a 2% win in browser hosted Sunspider. 
+
+        * bindings/js/kjs_window.cpp:
+        (KJS::Window::allowsAccessFrom):
+        (KJS::Window::allowsAccessFromPrivate):
+        * bindings/js/kjs_window.h:
+
 2008-02-21  Dan Bernstein  <mitz@apple.com>
 
         Reviewed by Sam Weinig.
index 53e4dd5e5379276a15ce1be4612c0cdd2d12393a..206368f9586929eee9a8e0d95b45b89e04b8b898 100644 (file)
@@ -825,7 +825,7 @@ bool Window::allowsAccessFrom(const JSGlobalObject* other) const
 {
     SecurityOrigin::Reason reason;
     String message;
-    if (allowsAccessFrom(other, reason, message))
+    if (allowsAccessFromPrivate(other, reason, message))
         return true;
     printErrorMessage(message);
     return false;
@@ -834,27 +834,32 @@ bool Window::allowsAccessFrom(const JSGlobalObject* other) const
 bool Window::allowsAccessFrom(ExecState* exec) const
 {
     String message;
-    if (allowsAccessFrom(exec, message))
+    if (allowsAccessFromPrivate(exec, message))
         return true;
     printErrorMessage(message);
     return false;
 }
 
 bool Window::allowsAccessFrom(ExecState* exec, String& message) const
+{
+    return allowsAccessFromPrivate(exec, message);
+}
+    
+inline bool Window::allowsAccessFromPrivate(ExecState* exec, String& message) const
 {
     SecurityOrigin::Reason reason;
-    if (allowsAccessFrom(exec->dynamicGlobalObject(), reason, message))
+    if (allowsAccessFromPrivate(exec->dynamicGlobalObject(), reason, message))
         return true;
     if (reason == SecurityOrigin::DomainSetInDOMMismatch) {
         // If the only reason the access failed was a domainSetInDOM bit mismatch, try again against 
         // lexical global object <rdar://problem/5698200>
-        if (allowsAccessFrom(exec->lexicalGlobalObject(), reason, message))
+        if (allowsAccessFromPrivate(exec->lexicalGlobalObject(), reason, message))
             return true;
     }
     return false;
 }
 
-bool Window::allowsAccessFrom(const JSGlobalObject* other, SecurityOrigin::Reason& reason, String& message) const
+inline bool Window::allowsAccessFromPrivate(const JSGlobalObject* other, SecurityOrigin::Reason& reason, String& message) const
 {
     const Frame* originFrame = static_cast<const Window*>(other)->impl()->frame();
     if (!originFrame) {
@@ -863,14 +868,15 @@ bool Window::allowsAccessFrom(const JSGlobalObject* other, SecurityOrigin::Reaso
     }
 
     const Frame* targetFrame = impl()->frame();
+
+    if (originFrame == targetFrame)
+        return true;
+    
     if (!targetFrame) {
         reason = SecurityOrigin::GenericMismatch;
         return false;
     }
 
-    if (originFrame == targetFrame)
-        return true;
-
     WebCore::Document* targetDocument = targetFrame->document();
 
     // JS may be attempting to access the "window" object, which should be valid,
index dd251070137998ccccd992c63542a3ddf7bc565e..565a047368c8127abb4220b6d30e7c9976d64019 100644 (file)
@@ -161,7 +161,8 @@ namespace KJS {
     void clearAllTimeouts();
     int installTimeout(WebCore::ScheduledAction*, int interval, bool singleShot);
 
-    bool allowsAccessFrom(const JSGlobalObject*, WebCore::SecurityOrigin::Reason&, WebCore::String& message) const;
+    bool allowsAccessFromPrivate(const JSGlobalObject*, WebCore::SecurityOrigin::Reason&, WebCore::String& message) const;
+    bool allowsAccessFromPrivate(ExecState*, WebCore::String& message) const;
 
     RefPtr<WebCore::DOMWindow> m_impl;
     OwnPtr<WindowPrivate> d;