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>);