Title: [98708] trunk
Revision
98708
Author
[email protected]
Date
2011-10-28 01:16:59 -0700 (Fri, 28 Oct 2011)

Log Message

Add allowScriptFromSource callback to FrameLoaderClient
https://bugs.webkit.org/show_bug.cgi?id=71013

Reviewed by Darin Fisher.

Source/WebCore:

Test: platform/chromium/permissionclient/script-permissions.html

* loader/FrameLoaderClient.h:
(WebCore::FrameLoaderClient::allowScriptFromSource):
* loader/cache/CachedResourceLoader.cpp:
(WebCore::CachedResourceLoader::canRequest):

Source/WebKit/chromium:

* public/WebPermissionClient.h:
(WebKit::WebPermissionClient::allowScriptFromSource):
* src/FrameLoaderClientImpl.cpp:
(WebKit::FrameLoaderClientImpl::allowScriptFromSource):
* src/FrameLoaderClientImpl.h:

Tools:

* DumpRenderTree/chromium/LayoutTestController.cpp:
(LayoutTestController::LayoutTestController):
(LayoutTestController::setScriptsAllowed):
* DumpRenderTree/chromium/LayoutTestController.h:
* DumpRenderTree/chromium/WebPermissions.cpp:
(WebPermissions::allowScriptFromSource):
(WebPermissions::setScriptsAllowed):
(WebPermissions::reset):
* DumpRenderTree/chromium/WebPermissions.h:

LayoutTests:

* platform/chromium/permissionclient/resources/script.js: Added.
* platform/chromium/permissionclient/script-permissions-expected.txt: Added.
* platform/chromium/permissionclient/script-permissions.html: Added.

Modified Paths

Added Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (98707 => 98708)


--- trunk/LayoutTests/ChangeLog	2011-10-28 08:12:53 UTC (rev 98707)
+++ trunk/LayoutTests/ChangeLog	2011-10-28 08:16:59 UTC (rev 98708)
@@ -1,3 +1,14 @@
+2011-10-28  Jochen Eisinger  <[email protected]>
+
+        Add allowScriptFromSource callback to FrameLoaderClient
+        https://bugs.webkit.org/show_bug.cgi?id=71013
+
+        Reviewed by Darin Fisher.
+
+        * platform/chromium/permissionclient/resources/script.js: Added.
+        * platform/chromium/permissionclient/script-permissions-expected.txt: Added.
+        * platform/chromium/permissionclient/script-permissions.html: Added.
+
 2011-10-28  Yuta Kitamura  <[email protected]>
 
         Unreviewed, update Chromium test expectation.

Added: trunk/LayoutTests/platform/chromium/permissionclient/resources/script.js (0 => 98708)


--- trunk/LayoutTests/platform/chromium/permissionclient/resources/script.js	                        (rev 0)
+++ trunk/LayoutTests/platform/chromium/permissionclient/resources/script.js	2011-10-28 08:16:59 UTC (rev 98708)
@@ -0,0 +1 @@
+log('FAIL: script loaded');

Added: trunk/LayoutTests/platform/chromium/permissionclient/script-permissions-expected.txt (0 => 98708)


--- trunk/LayoutTests/platform/chromium/permissionclient/script-permissions-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/platform/chromium/permissionclient/script-permissions-expected.txt	2011-10-28 08:16:59 UTC (rev 98708)
@@ -0,0 +1,2 @@
+PERMISSION CLIENT: allowScriptFromSource((file test):platform/chromium/permissionclient/resources/script.js): false
+

Added: trunk/LayoutTests/platform/chromium/permissionclient/script-permissions.html (0 => 98708)


--- trunk/LayoutTests/platform/chromium/permissionclient/script-permissions.html	                        (rev 0)
+++ trunk/LayoutTests/platform/chromium/permissionclient/script-permissions.html	2011-10-28 08:16:59 UTC (rev 98708)
@@ -0,0 +1,32 @@
+<html>
+<head>
+<script>
+if (window.layoutTestController) {
+    layoutTestController.dumpAsText();
+    layoutTestController.dumpPermissionClientCallbacks();
+}
+
+function log(a)
+{
+    document.getElementById("log").innerHTML += a + "<br>";
+}
+
+function test()
+{
+    if (window.layoutTestController && layoutTestController.setScriptsAllowed)
+        layoutTestController.setScriptsAllowed(false);
+    else
+        log("This test requires layoutTestController.setScriptsAllowed, so it be can't run in a browser.");
+
+    // Try to load an external script.
+    var script = document.createElement('script');
+    script.src = ""
+    document.getElementById("script").appendChild(script);
+}
+</script>
+</head>
+<body _onload_="test()">
+<div id="script"></div>
+<div id="log"></div>
+</body>
+</html>

Modified: trunk/Source/WebCore/ChangeLog (98707 => 98708)


--- trunk/Source/WebCore/ChangeLog	2011-10-28 08:12:53 UTC (rev 98707)
+++ trunk/Source/WebCore/ChangeLog	2011-10-28 08:16:59 UTC (rev 98708)
@@ -1,3 +1,17 @@
+2011-10-28  Jochen Eisinger  <[email protected]>
+
+        Add allowScriptFromSource callback to FrameLoaderClient
+        https://bugs.webkit.org/show_bug.cgi?id=71013
+
+        Reviewed by Darin Fisher.
+
+        Test: platform/chromium/permissionclient/script-permissions.html
+
+        * loader/FrameLoaderClient.h:
+        (WebCore::FrameLoaderClient::allowScriptFromSource):
+        * loader/cache/CachedResourceLoader.cpp:
+        (WebCore::CachedResourceLoader::canRequest):
+
 2011-10-27  Adam Barth  <[email protected]>
 
         Refactor make_event_factory.pl to use InFilesCompiler.pm

Modified: trunk/Source/WebCore/loader/FrameLoaderClient.h (98707 => 98708)


--- trunk/Source/WebCore/loader/FrameLoaderClient.h	2011-10-28 08:12:53 UTC (rev 98707)
+++ trunk/Source/WebCore/loader/FrameLoaderClient.h	2011-10-28 08:16:59 UTC (rev 98708)
@@ -300,6 +300,7 @@
         virtual void didChangeScrollOffset() { }
 
         virtual bool allowJavaScript(bool enabledPerSettings) { return enabledPerSettings; }
+        virtual bool allowScriptFromSource(bool enabledPerSettings, const KURL&) { return enabledPerSettings; }
         virtual bool allowPlugins(bool enabledPerSettings) { return enabledPerSettings; }
         virtual bool allowImage(bool enabledPerSettings, const KURL&) { return enabledPerSettings; }
         virtual bool allowDisplayingInsecureContent(bool enabledPerSettings, SecurityOrigin*, const KURL&) { return enabledPerSettings; }

Modified: trunk/Source/WebCore/loader/cache/CachedResourceLoader.cpp (98707 => 98708)


--- trunk/Source/WebCore/loader/cache/CachedResourceLoader.cpp	2011-10-28 08:12:53 UTC (rev 98707)
+++ trunk/Source/WebCore/loader/cache/CachedResourceLoader.cpp	2011-10-28 08:16:59 UTC (rev 98708)
@@ -317,6 +317,14 @@
     case CachedResource::Script:
         if (!m_document->contentSecurityPolicy()->allowScriptFromSource(url))
             return false;
+
+        if (frame()) {
+            Settings* settings = frame()->settings();
+            if (!frame()->loader()->client()->allowScriptFromSource(!settings || settings->isJavaScriptEnabled(), url)) {
+                frame()->loader()->client()->didNotAllowScript();
+                return false;
+            }
+        }
         break;
     case CachedResource::CSSStyleSheet:
         if (!m_document->contentSecurityPolicy()->allowStyleFromSource(url))

Modified: trunk/Source/WebKit/chromium/ChangeLog (98707 => 98708)


--- trunk/Source/WebKit/chromium/ChangeLog	2011-10-28 08:12:53 UTC (rev 98707)
+++ trunk/Source/WebKit/chromium/ChangeLog	2011-10-28 08:16:59 UTC (rev 98708)
@@ -1,3 +1,16 @@
+2011-10-28  Jochen Eisinger  <[email protected]>
+
+        Add allowScriptFromSource callback to FrameLoaderClient
+        https://bugs.webkit.org/show_bug.cgi?id=71013
+
+        Reviewed by Darin Fisher.
+
+        * public/WebPermissionClient.h:
+        (WebKit::WebPermissionClient::allowScriptFromSource):
+        * src/FrameLoaderClientImpl.cpp:
+        (WebKit::FrameLoaderClientImpl::allowScriptFromSource):
+        * src/FrameLoaderClientImpl.h:
+
 2011-10-26  Nat Duca  <[email protected]>
 
         [chromium] Implement frame rate control portions of CCScheduler

Modified: trunk/Source/WebKit/chromium/public/WebPermissionClient.h (98707 => 98708)


--- trunk/Source/WebKit/chromium/public/WebPermissionClient.h	2011-10-28 08:12:53 UTC (rev 98707)
+++ trunk/Source/WebKit/chromium/public/WebPermissionClient.h	2011-10-28 08:16:59 UTC (rev 98708)
@@ -58,6 +58,9 @@
     // Controls whether scripts are allowed to execute for this frame.
     virtual bool allowScript(WebFrame*, bool enabledPerSettings) { return enabledPerSettings; }
 
+    // Controls whether scripts loaded from the given URL are allowed to execute for this frame.
+    virtual bool allowScriptFromSource(WebFrame*, bool enabledPerSettings, const WebURL& scriptURL) { return enabledPerSettings; }
+
     // Controls whether insecrure content is allowed to display for this frame.
     virtual bool allowDisplayingInsecureContent(WebFrame*, bool enabledPerSettings, const WebSecurityOrigin&, const WebURL&) { return enabledPerSettings; }
 

Modified: trunk/Source/WebKit/chromium/src/FrameLoaderClientImpl.cpp (98707 => 98708)


--- trunk/Source/WebKit/chromium/src/FrameLoaderClientImpl.cpp	2011-10-28 08:12:53 UTC (rev 98707)
+++ trunk/Source/WebKit/chromium/src/FrameLoaderClientImpl.cpp	2011-10-28 08:16:59 UTC (rev 98708)
@@ -187,6 +187,15 @@
     return enabledPerSettings;
 }
 
+bool FrameLoaderClientImpl::allowScriptFromSource(bool enabledPerSettings, const KURL& scriptURL)
+{
+    WebViewImpl* webview = m_webFrame->viewImpl();
+    if (webview && webview->permissionClient())
+        return webview->permissionClient()->allowScriptFromSource(m_webFrame, enabledPerSettings, scriptURL);
+
+    return enabledPerSettings;
+}
+
 bool FrameLoaderClientImpl::allowPlugins(bool enabledPerSettings)
 {
     WebViewImpl* webview = m_webFrame->viewImpl();

Modified: trunk/Source/WebKit/chromium/src/FrameLoaderClientImpl.h (98707 => 98708)


--- trunk/Source/WebKit/chromium/src/FrameLoaderClientImpl.h	2011-10-28 08:12:53 UTC (rev 98707)
+++ trunk/Source/WebKit/chromium/src/FrameLoaderClientImpl.h	2011-10-28 08:16:59 UTC (rev 98708)
@@ -197,6 +197,7 @@
     virtual void registerForIconNotification(bool listen = true);
     virtual void didChangeScrollOffset();
     virtual bool allowJavaScript(bool enabledPerSettings);
+    virtual bool allowScriptFromSource(bool enabledPerSettings, const WebCore::KURL& scriptURL);
     virtual bool allowPlugins(bool enabledPerSettings);
     virtual bool allowImage(bool enabledPerSettings, const WebCore::KURL& imageURL);
     virtual bool allowDisplayingInsecureContent(bool enabledPerSettings, WebCore::SecurityOrigin*, const WebCore::KURL&);

Modified: trunk/Tools/ChangeLog (98707 => 98708)


--- trunk/Tools/ChangeLog	2011-10-28 08:12:53 UTC (rev 98707)
+++ trunk/Tools/ChangeLog	2011-10-28 08:16:59 UTC (rev 98708)
@@ -1,3 +1,20 @@
+2011-10-28  Jochen Eisinger  <[email protected]>
+
+        Add allowScriptFromSource callback to FrameLoaderClient
+        https://bugs.webkit.org/show_bug.cgi?id=71013
+
+        Reviewed by Darin Fisher.
+
+        * DumpRenderTree/chromium/LayoutTestController.cpp:
+        (LayoutTestController::LayoutTestController):
+        (LayoutTestController::setScriptsAllowed):
+        * DumpRenderTree/chromium/LayoutTestController.h:
+        * DumpRenderTree/chromium/WebPermissions.cpp:
+        (WebPermissions::allowScriptFromSource):
+        (WebPermissions::setScriptsAllowed):
+        (WebPermissions::reset):
+        * DumpRenderTree/chromium/WebPermissions.h:
+
 2011-10-28  Alexandru Chiculita  <[email protected]>
 
         Added myself as a committer.

Modified: trunk/Tools/DumpRenderTree/chromium/LayoutTestController.cpp (98707 => 98708)


--- trunk/Tools/DumpRenderTree/chromium/LayoutTestController.cpp	2011-10-28 08:12:53 UTC (rev 98707)
+++ trunk/Tools/DumpRenderTree/chromium/LayoutTestController.cpp	2011-10-28 08:16:59 UTC (rev 98708)
@@ -200,6 +200,7 @@
     bindMethod("windowCount", &LayoutTestController::windowCount);
     bindMethod("setTextDirection", &LayoutTestController::setTextDirection);
     bindMethod("setImagesAllowed", &LayoutTestController::setImagesAllowed);
+    bindMethod("setScriptsAllowed", &LayoutTestController::setScriptsAllowed);
     bindMethod("setStorageAllowed", &LayoutTestController::setStorageAllowed);
     bindMethod("setPluginsAllowed", &LayoutTestController::setPluginsAllowed);
 
@@ -800,6 +801,13 @@
     result->setNull();
 }
 
+void LayoutTestController::setScriptsAllowed(const CppArgumentList& arguments, CppVariant* result)
+{
+    if (arguments.size() > 0 && arguments[0].isBool())
+        m_shell->webPermissions()->setScriptsAllowed(arguments[0].toBoolean());
+    result->setNull();
+}
+
 void LayoutTestController::setStorageAllowed(const CppArgumentList& arguments, CppVariant* result)
 {
     if (arguments.size() > 0 && arguments[0].isBool())

Modified: trunk/Tools/DumpRenderTree/chromium/LayoutTestController.h (98707 => 98708)


--- trunk/Tools/DumpRenderTree/chromium/LayoutTestController.h	2011-10-28 08:12:53 UTC (rev 98707)
+++ trunk/Tools/DumpRenderTree/chromium/LayoutTestController.h	2011-10-28 08:16:59 UTC (rev 98708)
@@ -395,6 +395,7 @@
 
     // WebPermissionClient related.
     void setImagesAllowed(const CppArgumentList&, CppVariant*);
+    void setScriptsAllowed(const CppArgumentList&, CppVariant*);
     void setStorageAllowed(const CppArgumentList&, CppVariant*);
     void setPluginsAllowed(const CppArgumentList&, CppVariant*);
     void dumpPermissionClientCallbacks(const CppArgumentList&, CppVariant*);

Modified: trunk/Tools/DumpRenderTree/chromium/WebPermissions.cpp (98707 => 98708)


--- trunk/Tools/DumpRenderTree/chromium/WebPermissions.cpp	2011-10-28 08:12:53 UTC (rev 98707)
+++ trunk/Tools/DumpRenderTree/chromium/WebPermissions.cpp	2011-10-28 08:16:59 UTC (rev 98708)
@@ -54,6 +54,14 @@
     return allowed;
 }
 
+bool WebPermissions::allowScriptFromSource(WebKit::WebFrame*, bool enabledPerSettings, const WebKit::WebURL& scriptURL)
+{
+    bool allowed = enabledPerSettings && m_scriptsAllowed;
+    if (layoutTestController()->shouldDumpPermissionClientCallbacks())
+        fprintf(stdout, "PERMISSION CLIENT: allowScriptFromSource(%s): %s\n", m_shell->normalizeLayoutTestURL(scriptURL.spec()).c_str(), allowed ? "true" : "false");
+    return allowed;
+}
+
 bool WebPermissions::allowStorage(WebKit::WebFrame*, bool)
 {
     return m_storageAllowed;
@@ -81,6 +89,11 @@
     m_imagesAllowed = imagesAllowed;
 }
 
+void WebPermissions::setScriptsAllowed(bool scriptsAllowed)
+{
+    m_scriptsAllowed = scriptsAllowed;
+}
+
 void WebPermissions::setStorageAllowed(bool storageAllowed)
 {
     m_storageAllowed = storageAllowed;
@@ -104,6 +117,7 @@
 void WebPermissions::reset()
 {
     m_imagesAllowed = true;
+    m_scriptsAllowed = true;
     m_storageAllowed = true;
     m_pluginsAllowed = true;
     m_displayingInsecureContentAllowed = false;

Modified: trunk/Tools/DumpRenderTree/chromium/WebPermissions.h (98707 => 98708)


--- trunk/Tools/DumpRenderTree/chromium/WebPermissions.h	2011-10-28 08:12:53 UTC (rev 98707)
+++ trunk/Tools/DumpRenderTree/chromium/WebPermissions.h	2011-10-28 08:16:59 UTC (rev 98708)
@@ -43,6 +43,7 @@
 
     // Override WebPermissionClient methods.
     virtual bool allowImage(WebKit::WebFrame*, bool enabledPerSettings, const WebKit::WebURL& imageURL);
+    virtual bool allowScriptFromSource(WebKit::WebFrame*, bool enabledPerSettings, const WebKit::WebURL& scriptURL);
     virtual bool allowStorage(WebKit::WebFrame*, bool local);
     virtual bool allowPlugins(WebKit::WebFrame*, bool enabledPerSettings);
     virtual bool allowDisplayingInsecureContent(WebKit::WebFrame*, bool enabledPerSettings,
@@ -52,12 +53,13 @@
 
     // Hooks to set the different policies.
     void setImagesAllowed(bool);
+    void setScriptsAllowed(bool);
     void setStorageAllowed(bool);
     void setPluginsAllowed(bool);
     void setDisplayingInsecureContentAllowed(bool);
     void setRunningInsecureContentAllowed(bool);
 
-    // Resets the policy to allow images, storage, displaying insecure, but not running insecure.
+    // Resets the policy to allow everything, except for running insecure content.
     void reset();
 
 private:
@@ -67,6 +69,7 @@
     TestShell* m_shell;
 
     bool m_imagesAllowed;
+    bool m_scriptsAllowed;
     bool m_storageAllowed;
     bool m_pluginsAllowed;
     bool m_displayingInsecureContentAllowed;
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to