Title: [125120] trunk
Revision
125120
Author
[email protected]
Date
2012-08-08 17:16:38 -0700 (Wed, 08 Aug 2012)

Log Message

Avoid ASSERT(m_workerContext->isSharedWorkerContext()) in WorkerScriptController::initScript()
https://bugs.webkit.org/show_bug.cgi?id=93521

Reviewed by Adam Barth.

Source/WebCore:

Changes WorkerContext and its subclasses so that we do not call functions that rely upon subclass
virtual methods from the superclass constructor.

Test: http/tests/security/contentSecurityPolicy/worker-set-timeout-blocked.html

* workers/DedicatedWorkerContext.cpp:
(WebCore):
(WebCore::DedicatedWorkerContext::create):
(WebCore::DedicatedWorkerContext::DedicatedWorkerContext):
* workers/DedicatedWorkerContext.h:
(DedicatedWorkerContext):
* workers/SharedWorkerContext.cpp:
(WebCore):
(WebCore::SharedWorkerContext::create):
(WebCore::SharedWorkerContext::SharedWorkerContext):
* workers/SharedWorkerContext.h:
(SharedWorkerContext):
* workers/WorkerContext.cpp:
(WebCore::WorkerContext::WorkerContext):
(WebCore::WorkerContext::applyContentSecurityPolicyFromString):
(WebCore):
* workers/WorkerContext.h:
(WorkerContext):

LayoutTests:

* http/tests/security/contentSecurityPolicy/resources/worker-set-timeout.js: Added.
* http/tests/security/contentSecurityPolicy/worker-set-timeout-blocked-expected.txt: Added.
* http/tests/security/contentSecurityPolicy/worker-set-timeout-blocked.html: Added.

Modified Paths

Added Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (125119 => 125120)


--- trunk/LayoutTests/ChangeLog	2012-08-09 00:01:30 UTC (rev 125119)
+++ trunk/LayoutTests/ChangeLog	2012-08-09 00:16:38 UTC (rev 125120)
@@ -1,3 +1,14 @@
+2012-08-08  Tom Sepez  <[email protected]>
+
+        Avoid ASSERT(m_workerContext->isSharedWorkerContext()) in WorkerScriptController::initScript()
+        https://bugs.webkit.org/show_bug.cgi?id=93521
+
+        Reviewed by Adam Barth.
+
+        * http/tests/security/contentSecurityPolicy/resources/worker-set-timeout.js: Added.
+        * http/tests/security/contentSecurityPolicy/worker-set-timeout-blocked-expected.txt: Added.
+        * http/tests/security/contentSecurityPolicy/worker-set-timeout-blocked.html: Added.
+
 2012-08-08  Dean Jackson  <[email protected]>
 
         (r124484) inspector/device-orientation-success.html failing on Mac ports

Added: trunk/LayoutTests/http/tests/security/contentSecurityPolicy/resources/worker-set-timeout.js (0 => 125120)


--- trunk/LayoutTests/http/tests/security/contentSecurityPolicy/resources/worker-set-timeout.js	                        (rev 0)
+++ trunk/LayoutTests/http/tests/security/contentSecurityPolicy/resources/worker-set-timeout.js	2012-08-09 00:16:38 UTC (rev 125120)
@@ -0,0 +1,6 @@
+var id = 0;
+try {
+    id = 17;  // Test not yet fully enabled.  Simply pretend that a call to setTimeout() here worked.
+} catch(e) {
+}
+postMessage(id === 0 ? "setTimeout blocked" : "setTimout allowed");

Added: trunk/LayoutTests/http/tests/security/contentSecurityPolicy/worker-set-timeout-blocked-expected.txt (0 => 125120)


--- trunk/LayoutTests/http/tests/security/contentSecurityPolicy/worker-set-timeout-blocked-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/http/tests/security/contentSecurityPolicy/worker-set-timeout-blocked-expected.txt	2012-08-09 00:16:38 UTC (rev 125120)
@@ -0,0 +1,2 @@
+ALERT: setTimout allowed
+

Added: trunk/LayoutTests/http/tests/security/contentSecurityPolicy/worker-set-timeout-blocked.html (0 => 125120)


--- trunk/LayoutTests/http/tests/security/contentSecurityPolicy/worker-set-timeout-blocked.html	                        (rev 0)
+++ trunk/LayoutTests/http/tests/security/contentSecurityPolicy/worker-set-timeout-blocked.html	2012-08-09 00:16:38 UTC (rev 125120)
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta http-equiv="X-WebKit-CSP" content="script-src 'self' 'unsafe-inline'"/>
+<script>
+if (window.testRunner) {
+    testRunner.waitUntilDone();
+    testRunner.dumpAsText();
+}
+</script>
+</head>
+<body>
+<script>
+try {
+    var worker = new Worker('http://127.0.0.1:8000/security/contentSecurityPolicy/resources/worker-set-timeout.js');
+    worker._onmessage_ = function (event) {
+        alert(event.data);
+        if (window.testRunner)
+            testRunner.notifyDone();
+    };
+} catch (e) {
+    alert(e);
+    if (window.testRunner)
+        testRunner.notifyDone();
+}
+</script>
+</body>
+</html>

Modified: trunk/Source/WebCore/ChangeLog (125119 => 125120)


--- trunk/Source/WebCore/ChangeLog	2012-08-09 00:01:30 UTC (rev 125119)
+++ trunk/Source/WebCore/ChangeLog	2012-08-09 00:16:38 UTC (rev 125120)
@@ -1,3 +1,34 @@
+2012-08-08  Tom Sepez  <[email protected]>
+
+        Avoid ASSERT(m_workerContext->isSharedWorkerContext()) in WorkerScriptController::initScript()
+        https://bugs.webkit.org/show_bug.cgi?id=93521
+
+        Reviewed by Adam Barth.
+
+        Changes WorkerContext and its subclasses so that we do not call functions that rely upon subclass
+        virtual methods from the superclass constructor.
+
+        Test: http/tests/security/contentSecurityPolicy/worker-set-timeout-blocked.html
+
+        * workers/DedicatedWorkerContext.cpp:
+        (WebCore):
+        (WebCore::DedicatedWorkerContext::create):
+        (WebCore::DedicatedWorkerContext::DedicatedWorkerContext):
+        * workers/DedicatedWorkerContext.h:
+        (DedicatedWorkerContext):
+        * workers/SharedWorkerContext.cpp:
+        (WebCore):
+        (WebCore::SharedWorkerContext::create):
+        (WebCore::SharedWorkerContext::SharedWorkerContext):
+        * workers/SharedWorkerContext.h:
+        (SharedWorkerContext):
+        * workers/WorkerContext.cpp:
+        (WebCore::WorkerContext::WorkerContext):
+        (WebCore::WorkerContext::applyContentSecurityPolicyFromString):
+        (WebCore):
+        * workers/WorkerContext.h:
+        (WorkerContext):
+
 2012-08-08  Thiago Marcos P. Santos  <[email protected]>
 
         CanvasRenderContext2D::setFont() should ignore inherited properties and default keyword value

Modified: trunk/Source/WebCore/workers/DedicatedWorkerContext.cpp (125119 => 125120)


--- trunk/Source/WebCore/workers/DedicatedWorkerContext.cpp	2012-08-09 00:01:30 UTC (rev 125119)
+++ trunk/Source/WebCore/workers/DedicatedWorkerContext.cpp	2012-08-09 00:16:38 UTC (rev 125120)
@@ -41,11 +41,19 @@
 
 namespace WebCore {
 
-DedicatedWorkerContext::DedicatedWorkerContext(const KURL& url, const String& userAgent, PassOwnPtr<GroupSettings> settings, DedicatedWorkerThread* thread, const String& contentSecurityPolicy, ContentSecurityPolicy::HeaderType contentSecurityPolicyType)
-    : WorkerContext(url, userAgent, settings, thread, contentSecurityPolicy, contentSecurityPolicyType)
+// static
+PassRefPtr<DedicatedWorkerContext> DedicatedWorkerContext::create(const KURL& url, const String& userAgent, PassOwnPtr<GroupSettings> settings, DedicatedWorkerThread* thread, const String& contentSecurityPolicy, ContentSecurityPolicy::HeaderType contentSecurityPolicyType)
 {
+    RefPtr<DedicatedWorkerContext> context = adoptRef(new DedicatedWorkerContext(url, userAgent, settings, thread));
+    context->applyContentSecurityPolicyFromString(contentSecurityPolicy, contentSecurityPolicyType);
+    return context.release();
 }
 
+DedicatedWorkerContext::DedicatedWorkerContext(const KURL& url, const String& userAgent, PassOwnPtr<GroupSettings> settings, DedicatedWorkerThread* thread)
+    : WorkerContext(url, userAgent, settings, thread)
+{
+}
+
 const AtomicString& DedicatedWorkerContext::interfaceName() const
 {
     return eventNames().interfaceForDedicatedWorkerContext;

Modified: trunk/Source/WebCore/workers/DedicatedWorkerContext.h (125119 => 125120)


--- trunk/Source/WebCore/workers/DedicatedWorkerContext.h	2012-08-09 00:01:30 UTC (rev 125119)
+++ trunk/Source/WebCore/workers/DedicatedWorkerContext.h	2012-08-09 00:16:38 UTC (rev 125120)
@@ -44,10 +44,7 @@
     class DedicatedWorkerContext : public WorkerContext {
     public:
         typedef WorkerContext Base;
-        static PassRefPtr<DedicatedWorkerContext> create(const KURL& url, const String& userAgent, PassOwnPtr<GroupSettings> settings, DedicatedWorkerThread* thread, const String& contentSecurityPolicy, ContentSecurityPolicy::HeaderType contentSecurityPolicyType)
-        {
-            return adoptRef(new DedicatedWorkerContext(url, userAgent, settings, thread, contentSecurityPolicy, contentSecurityPolicyType));
-        }
+        static PassRefPtr<DedicatedWorkerContext> create(const KURL&, const String& userAgent, PassOwnPtr<GroupSettings>, DedicatedWorkerThread*, const String& contentSecurityPolicy, ContentSecurityPolicy::HeaderType contentSecurityPolicyType);
 
         virtual bool isDedicatedWorkerContext() const { return true; }
 
@@ -66,7 +63,7 @@
 
         DedicatedWorkerThread* thread();
     private:
-        DedicatedWorkerContext(const KURL&, const String& userAgent, PassOwnPtr<GroupSettings>, DedicatedWorkerThread*, const String& contentSecurityPolicy, ContentSecurityPolicy::HeaderType);
+        DedicatedWorkerContext(const KURL&, const String& userAgent, PassOwnPtr<GroupSettings>, DedicatedWorkerThread*);
     };
 
 } // namespace WebCore

Modified: trunk/Source/WebCore/workers/SharedWorkerContext.cpp (125119 => 125120)


--- trunk/Source/WebCore/workers/SharedWorkerContext.cpp	2012-08-09 00:01:30 UTC (rev 125119)
+++ trunk/Source/WebCore/workers/SharedWorkerContext.cpp	2012-08-09 00:16:38 UTC (rev 125120)
@@ -50,8 +50,16 @@
     return event.release();
 }
 
-SharedWorkerContext::SharedWorkerContext(const String& name, const KURL& url, const String& userAgent, PassOwnPtr<GroupSettings> settings, SharedWorkerThread* thread, const String& contentSecurityPolicy, ContentSecurityPolicy::HeaderType contentSecurityPolicyType)
-    : WorkerContext(url, userAgent, settings, thread, contentSecurityPolicy, contentSecurityPolicyType)
+// static
+PassRefPtr<SharedWorkerContext> SharedWorkerContext::create(const String& name, const KURL& url, const String& userAgent, PassOwnPtr<GroupSettings> settings, SharedWorkerThread* thread, const String& contentSecurityPolicy, ContentSecurityPolicy::HeaderType contentSecurityPolicyType)
+{
+    RefPtr<SharedWorkerContext> context = adoptRef(new SharedWorkerContext(name, url, userAgent, settings, thread));
+    context->applyContentSecurityPolicyFromString(contentSecurityPolicy, contentSecurityPolicyType);
+    return context.release();
+}
+
+SharedWorkerContext::SharedWorkerContext(const String& name, const KURL& url, const String& userAgent, PassOwnPtr<GroupSettings> settings, SharedWorkerThread* thread)
+    : WorkerContext(url, userAgent, settings, thread)
     , m_name(name)
 {
 }

Modified: trunk/Source/WebCore/workers/SharedWorkerContext.h (125119 => 125120)


--- trunk/Source/WebCore/workers/SharedWorkerContext.h	2012-08-09 00:01:30 UTC (rev 125119)
+++ trunk/Source/WebCore/workers/SharedWorkerContext.h	2012-08-09 00:16:38 UTC (rev 125120)
@@ -44,10 +44,7 @@
     class SharedWorkerContext : public WorkerContext {
     public:
         typedef WorkerContext Base;
-        static PassRefPtr<SharedWorkerContext> create(const String& name, const KURL& url, const String& userAgent, PassOwnPtr<GroupSettings> settings, SharedWorkerThread* thread, const String& contentSecurityPolicy, ContentSecurityPolicy::HeaderType contentSecurityPolicyType)
-        {
-            return adoptRef(new SharedWorkerContext(name, url, userAgent, settings, thread, contentSecurityPolicy, contentSecurityPolicyType));
-        }
+        static PassRefPtr<SharedWorkerContext> create(const String& name, const KURL&, const String& userAgent, PassOwnPtr<GroupSettings>, SharedWorkerThread*, const String& contentSecurityPolicy, ContentSecurityPolicy::HeaderType contentSecurityPolicyType);
         virtual ~SharedWorkerContext();
 
         virtual bool isSharedWorkerContext() const { return true; }
@@ -61,8 +58,7 @@
 
         SharedWorkerThread* thread();
     private:
-        SharedWorkerContext(const String& name, const KURL&, const String& userAgent, PassOwnPtr<GroupSettings>, SharedWorkerThread*, const String& contentSecurityPolicy, ContentSecurityPolicy::HeaderType);
-
+        SharedWorkerContext(const String& name, const KURL&, const String& userAgent, PassOwnPtr<GroupSettings>, SharedWorkerThread*);
         virtual void logExceptionToConsole(const String& errorMessage, const String& sourceURL, int lineNumber, PassRefPtr<ScriptCallStack>);
 
         String m_name;

Modified: trunk/Source/WebCore/workers/WorkerContext.cpp (125119 => 125120)


--- trunk/Source/WebCore/workers/WorkerContext.cpp	2012-08-09 00:01:30 UTC (rev 125119)
+++ trunk/Source/WebCore/workers/WorkerContext.cpp	2012-08-09 00:16:38 UTC (rev 125120)
@@ -85,7 +85,7 @@
     virtual bool isCleanupTask() const { return true; }
 };
 
-WorkerContext::WorkerContext(const KURL& url, const String& userAgent, PassOwnPtr<GroupSettings> settings, WorkerThread* thread, const String& policy, ContentSecurityPolicy::HeaderType contentSecurityPolicyType)
+WorkerContext::WorkerContext(const KURL& url, const String& userAgent, PassOwnPtr<GroupSettings> settings, WorkerThread* thread)
     : m_url(url)
     , m_userAgent(userAgent)
     , m_groupSettings(settings)
@@ -98,8 +98,6 @@
     , m_eventQueue(WorkerEventQueue::create(this))
 {
     setSecurityOrigin(SecurityOrigin::create(url));
-    setContentSecurityPolicy(ContentSecurityPolicy::create(this));
-    contentSecurityPolicy()->didReceiveHeader(policy, contentSecurityPolicyType);
 }
 
 WorkerContext::~WorkerContext()
@@ -113,6 +111,12 @@
     thread()->workerReportingProxy().workerContextDestroyed();
 }
 
+void WorkerContext::applyContentSecurityPolicyFromString(const String& policy, ContentSecurityPolicy::HeaderType contentSecurityPolicyType)
+{
+    setContentSecurityPolicy(ContentSecurityPolicy::create(this));
+    contentSecurityPolicy()->didReceiveHeader(policy, contentSecurityPolicyType);
+}
+
 ScriptExecutionContext* WorkerContext::scriptExecutionContext() const
 {
     return const_cast<WorkerContext*>(this);
@@ -226,6 +230,7 @@
 
 void WorkerContext::importScripts(const Vector<String>& urls, ExceptionCode& ec)
 {
+    ASSERT(contentSecurityPolicy());
     ec = 0;
     Vector<String>::const_iterator urlsEnd = urls.end();
     Vector<KURL> completedURLs;

Modified: trunk/Source/WebCore/workers/WorkerContext.h (125119 => 125120)


--- trunk/Source/WebCore/workers/WorkerContext.h	2012-08-09 00:01:30 UTC (rev 125119)
+++ trunk/Source/WebCore/workers/WorkerContext.h	2012-08-09 00:16:38 UTC (rev 125120)
@@ -139,7 +139,8 @@
         void notifyObserversOfStop();
 
     protected:
-        WorkerContext(const KURL&, const String& userAgent, PassOwnPtr<GroupSettings>, WorkerThread*, const String& contentSecurityPolicy, ContentSecurityPolicy::HeaderType);
+        WorkerContext(const KURL&, const String& userAgent, PassOwnPtr<GroupSettings>, WorkerThread*);
+        void applyContentSecurityPolicyFromString(const String& contentSecurityPolicy, ContentSecurityPolicy::HeaderType);
 
         virtual void logExceptionToConsole(const String& errorMessage, const String& sourceURL, int lineNumber, PassRefPtr<ScriptCallStack>);
         void addMessageToWorkerConsole(MessageSource, MessageType, MessageLevel, const String& message, const String& sourceURL, unsigned lineNumber, PassRefPtr<ScriptCallStack>);
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to