Diff
Modified: trunk/LayoutTests/ChangeLog (105485 => 105486)
--- trunk/LayoutTests/ChangeLog 2012-01-20 07:45:46 UTC (rev 105485)
+++ trunk/LayoutTests/ChangeLog 2012-01-20 08:00:11 UTC (rev 105486)
@@ -1,3 +1,16 @@
+2012-01-19 Kaustubh Atrawalkar <[email protected]>
+
+ Migrate createObjectURL & revokeObjectURL to static (Class) methods
+ https://bugs.webkit.org/show_bug.cgi?id=74386
+
+ Reviewed by Adam Barth.
+
+ Added test to check if createObjectURL & revokeObjectURL are static functions.
+
+ * fast/dom/DOMURL: Added.
+ * fast/dom/DOMURL/check-instanceof-domurl-functions-expected.txt: Added.
+ * fast/dom/DOMURL/check-instanceof-domurl-functions.html: Added.
+
2012-01-20 Alexandru Chiculita <[email protected]>
CSS Shaders: Add a Settings flag to enable/disable CSS Shaders at runtime
Added: trunk/LayoutTests/fast/dom/DOMURL/check-instanceof-domurl-functions-expected.txt (0 => 105486)
--- trunk/LayoutTests/fast/dom/DOMURL/check-instanceof-domurl-functions-expected.txt (rev 0)
+++ trunk/LayoutTests/fast/dom/DOMURL/check-instanceof-domurl-functions-expected.txt 2012-01-20 08:00:11 UTC (rev 105486)
@@ -0,0 +1,15 @@
+Test instanceof functions and properties of webkitURL.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS 'createObjectURL' in webkitURL is true
+PASS 'revokeObjectURL' in webkitURL is true
+PASS url.createObjectURL is undefined.
+PASS url.revokeObjectURL is undefined.
+PASS window.webkitURL.createObjectURL is defined.
+PASS window.webkitURL.revokeObjectURL is defined.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
Added: trunk/LayoutTests/fast/dom/DOMURL/check-instanceof-domurl-functions.html (0 => 105486)
--- trunk/LayoutTests/fast/dom/DOMURL/check-instanceof-domurl-functions.html (rev 0)
+++ trunk/LayoutTests/fast/dom/DOMURL/check-instanceof-domurl-functions.html 2012-01-20 08:00:11 UTC (rev 105486)
@@ -0,0 +1,25 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+<script src=""
+</head>
+<body>
+<script>
+description("Test instanceof functions and properties of webkitURL.");
+
+var url = "" webkitURL;
+
+shouldBeTrue("'createObjectURL' in webkitURL");
+shouldBeTrue("'revokeObjectURL' in webkitURL");
+
+shouldBeUndefined("url.createObjectURL");
+shouldBeUndefined("url.revokeObjectURL");
+
+shouldBeDefined("window.webkitURL.createObjectURL");
+shouldBeDefined("window.webkitURL.revokeObjectURL");
+
+
+</script>
+<script src=""
+</body>
+</html>
Modified: trunk/Source/WebCore/ChangeLog (105485 => 105486)
--- trunk/Source/WebCore/ChangeLog 2012-01-20 07:45:46 UTC (rev 105485)
+++ trunk/Source/WebCore/ChangeLog 2012-01-20 08:00:11 UTC (rev 105486)
@@ -1,3 +1,41 @@
+2012-01-19 Kaustubh Atrawalkar <[email protected]> & Erik Arvidsson <[email protected]>
+
+ Migrate createObjectURL & revokeObjectURL to static (Class) methods.
+ https://bugs.webkit.org/show_bug.cgi?id=74386
+
+ Reviewed by Adam Barth.
+
+ Test: fast/dom/DOMURL/check-instanceof-domurl-functions.html
+ Already Existing -
+ fast/files/revoke-blob-url.html
+ fast/dom/window-domurl-crash.html
+ fast/files/apply-blob-url-to-img.html
+ fast/files/create-blob-url-crash.html
+ fast/files/workers/inline-worker-via-blob-url.html
+
+ * html/DOMURL.cpp: Added HashMap for local static objects.
+ (WebCore::PublicURLManager::PublicURLManager):
+ (WebCore::PublicURLManager::contextDestroyed):
+ (WebCore::PublicURLManager::blobURLs):
+ (WebCore::PublicURLManager::streamURLs):
+ (WebCore::publicURLManagerMap):
+ (WebCore::publicURLManager):
+ (WebCore::publicBlobURLs):
+ (WebCore::publicStreamURLs):
+ (WebCore::DOMURL::createObjectURL): Changed to static.
+ (WebCore::DOMURL::revokeObjectURL): ditto.
+ * html/DOMURL.h:
+ (WebCore::DOMURL::create):
+ (WebCore::DOMURL::~DOMURL):
+ (WebCore::DOMURL::DOMURL):
+ * html/DOMURL.idl:
+ * page/DOMWindow.cpp: Removed object initialization for DOMURL.
+ * page/DOMWindow.h: ditto.
+ * page/DOMWindow.idl: ditto.
+ * workers/WorkerContext.cpp: ditto.
+ * workers/WorkerContext.h: ditto.
+ * workers/WorkerContext.idl: ditto.
+
2012-01-20 Alexandru Chiculita <[email protected]>
CSS Shaders: Add a Settings flag to enable/disable CSS Shaders at runtime
Modified: trunk/Source/WebCore/html/DOMURL.cpp (105485 => 105486)
--- trunk/Source/WebCore/html/DOMURL.cpp 2012-01-20 07:45:46 UTC (rev 105485)
+++ trunk/Source/WebCore/html/DOMURL.cpp 2012-01-20 08:00:11 UTC (rev 105486)
@@ -1,5 +1,6 @@
/*
* Copyright (C) 2011 Google Inc. All rights reserved.
+ * Copyright (C) 2011 Motorola Mobility Inc.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -24,56 +25,98 @@
*/
#include "config.h"
+#include "DOMURL.h"
+#include "ActiveDOMObject.h"
+#include "KURL.h"
+#include "SecurityOrigin.h"
+#include <wtf/MainThread.h>
+
#if ENABLE(BLOB)
-
-#include "DOMURL.h"
-
#include "Blob.h"
#include "BlobURL.h"
-#include "KURL.h"
#include "ScriptExecutionContext.h"
#include "ThreadableBlobRegistry.h"
-#include <wtf/MainThread.h>
-
+#include <wtf/PassOwnPtr.h>
#if ENABLE(MEDIA_STREAM)
#include "MediaStream.h"
#include "MediaStreamRegistry.h"
#endif
+#endif
namespace WebCore {
-DOMURL::DOMURL(ScriptExecutionContext* scriptExecutionContext)
- : ContextDestructionObserver(scriptExecutionContext)
+#if ENABLE(BLOB)
+class PublicURLManager;
+typedef HashMap<ScriptExecutionContext*, OwnPtr<PublicURLManager> > PublicURLManagerMap;
+static PublicURLManagerMap& publicURLManagerMap();
+
+class PublicURLManager : public ContextDestructionObserver {
+public:
+ explicit PublicURLManager(ScriptExecutionContext* scriptExecutionContext)
+ : ContextDestructionObserver(scriptExecutionContext) { }
+
+ virtual void contextDestroyed()
+ {
+ HashSet<String>::iterator blobURLsEnd = m_blobURLs.end();
+ for (HashSet<String>::iterator iter = m_blobURLs.begin(); iter != blobURLsEnd; ++iter)
+ ThreadableBlobRegistry::unregisterBlobURL(KURL(ParsedURLString, *iter));
+
+#if ENABLE(MEDIA_STREAM)
+ HashSet<String>::iterator streamURLsEnd = m_streamURLs.end();
+ for (HashSet<String>::iterator iter = m_streamURLs.begin(); iter != streamURLsEnd; ++iter)
+ MediaStreamRegistry::registry().unregisterMediaStreamURL(KURL(ParsedURLString, *iter));
+#endif
+
+ ScriptExecutionContext* context = scriptExecutionContext();
+ ContextDestructionObserver::contextDestroyed();
+ publicURLManagerMap().remove(context);
+ }
+
+ HashSet<String>& blobURLs() { return m_blobURLs; }
+#if ENABLE(MEDIA_STREAM)
+ HashSet<String>& streamURLs() { return m_streamURLs; }
+#endif
+
+private:
+ HashSet<String> m_blobURLs;
+#if ENABLE(MEDIA_STREAM)
+ HashSet<String> m_streamURLs;
+#endif
+};
+
+static PublicURLManagerMap& publicURLManagerMap()
{
+ DEFINE_STATIC_LOCAL(PublicURLManagerMap, staticPublicURLManagers, ());
+ return staticPublicURLManagers;
}
-DOMURL::~DOMURL()
+static PublicURLManager& publicURLManager(ScriptExecutionContext* scriptExecutionContext)
{
+ PublicURLManagerMap& map = publicURLManagerMap();
+ OwnPtr<PublicURLManager>& manager = map.add(scriptExecutionContext, nullptr).first->second;
+ if (!manager)
+ manager = adoptPtr(new PublicURLManager(scriptExecutionContext));
+ return *manager;
}
-void DOMURL::contextDestroyed()
+static HashSet<String>& publicBlobURLs(ScriptExecutionContext* scriptExecutionContext)
{
- ContextDestructionObserver::contextDestroyed();
+ return publicURLManager(scriptExecutionContext).blobURLs();
+}
- HashSet<String>::iterator publicBlobURLsEnd = m_publicBlobURLs.end();
- for (HashSet<String>::iterator iter = m_publicBlobURLs.begin(); iter != publicBlobURLsEnd; ++iter)
- ThreadableBlobRegistry::unregisterBlobURL(KURL(ParsedURLString, *iter));
-
#if ENABLE(MEDIA_STREAM)
- HashSet<String>::iterator publicStreamURLsEnd = m_publicStreamURLs.end();
- for (HashSet<String>::iterator iter = m_publicStreamURLs.begin(); iter != publicStreamURLsEnd; ++iter)
- MediaStreamRegistry::registry().unregisterMediaStreamURL(KURL(ParsedURLString, *iter));
-#endif
+static HashSet<String>& publicStreamURLs(ScriptExecutionContext* scriptExecutionContext)
+{
+ return publicURLManager(scriptExecutionContext).streamURLs();
}
-#if ENABLE(MEDIA_STREAM)
-String DOMURL::createObjectURL(MediaStream* stream)
+String DOMURL::createObjectURL(ScriptExecutionContext* scriptExecutionContext, MediaStream* stream)
{
- if (!m_scriptExecutionContext || !stream)
+ if (!scriptExecutionContext || !stream)
return String();
- KURL publicURL = BlobURL::createPublicURL(scriptExecutionContext()->securityOrigin());
+ KURL publicURL = BlobURL::createPublicURL(scriptExecutionContext->securityOrigin());
if (publicURL.isEmpty())
return String();
@@ -81,50 +124,51 @@
ASSERT(isMainThread());
MediaStreamRegistry::registry().registerMediaStreamURL(publicURL, stream);
- m_publicStreamURLs.add(publicURL.string());
+ publicStreamURLs(scriptExecutionContext).add(publicURL.string());
return publicURL.string();
}
#endif
-String DOMURL::createObjectURL(Blob* blob)
+String DOMURL::createObjectURL(ScriptExecutionContext* scriptExecutionContext, Blob* blob)
{
- if (!m_scriptExecutionContext || !blob)
+ if (!scriptExecutionContext || !blob)
return String();
- KURL publicURL = BlobURL::createPublicURL(scriptExecutionContext()->securityOrigin());
+ KURL publicURL = BlobURL::createPublicURL(scriptExecutionContext->securityOrigin());
if (publicURL.isEmpty())
return String();
ThreadableBlobRegistry::registerBlobURL(publicURL, blob->url());
- m_publicBlobURLs.add(publicURL.string());
+ publicBlobURLs(scriptExecutionContext).add(publicURL.string());
return publicURL.string();
}
-void DOMURL::revokeObjectURL(const String& urlString)
+void DOMURL::revokeObjectURL(ScriptExecutionContext* scriptExecutionContext, const String& urlString)
{
- if (!m_scriptExecutionContext)
+ if (!scriptExecutionContext)
return;
KURL url(KURL(), urlString);
- if (m_publicBlobURLs.contains(url.string())) {
+ HashSet<String>& blobURLs = publicBlobURLs(scriptExecutionContext);
+ if (blobURLs.contains(url.string())) {
ThreadableBlobRegistry::unregisterBlobURL(url);
- m_publicBlobURLs.remove(url.string());
+ blobURLs.remove(url.string());
}
-
#if ENABLE(MEDIA_STREAM)
- if (m_publicStreamURLs.contains(url.string())) {
+ HashSet<String>& streamURLs = publicStreamURLs(scriptExecutionContext);
+ if (streamURLs.contains(url.string())) {
// FIXME: make sure of this assertion below. Raise a spec question if required.
// Since WebWorkers cannot obtain Stream objects, we should be on the main thread.
ASSERT(isMainThread());
MediaStreamRegistry::registry().unregisterMediaStreamURL(url);
- m_publicStreamURLs.remove(url.string());
+ streamURLs.remove(url.string());
}
#endif
}
+#endif // ENABLE(BLOB)
} // namespace WebCore
-#endif // ENABLE(BLOB)
Modified: trunk/Source/WebCore/html/DOMURL.h (105485 => 105486)
--- trunk/Source/WebCore/html/DOMURL.h 2012-01-20 07:45:46 UTC (rev 105485)
+++ trunk/Source/WebCore/html/DOMURL.h 2012-01-20 08:00:11 UTC (rev 105486)
@@ -1,5 +1,6 @@
/*
* Copyright (C) 2011 Google Inc. All rights reserved.
+ * Copyright (C) 2011 Motorola Mobility Inc.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -26,11 +27,8 @@
#ifndef DOMURL_h
#define DOMURL_h
-#if ENABLE(BLOB)
-
-#include "ActiveDOMObject.h"
+#include "KURL.h"
#include "PlatformString.h"
-#include <wtf/HashSet.h>
#include <wtf/PassRefPtr.h>
#include <wtf/RefCounted.h>
@@ -40,30 +38,22 @@
class MediaStream;
class ScriptExecutionContext;
-class DOMURL : public RefCounted<DOMURL>, public ContextDestructionObserver {
+class DOMURL : public RefCounted<DOMURL> {
+
public:
- static PassRefPtr<DOMURL> create(ScriptExecutionContext* scriptExecutionContext) { return adoptRef(new DOMURL(scriptExecutionContext)); }
- ~DOMURL();
+ static PassRefPtr<DOMURL> create() { return adoptRef(new DOMURL); }
-#if ENABLE(MEDIA_STREAM)
- String createObjectURL(MediaStream*);
-#endif
- String createObjectURL(Blob*);
- void revokeObjectURL(const String&);
+#if ENABLE(BLOB)
+ static void contextDestroyed(ScriptExecutionContext*);
-private:
- explicit DOMURL(ScriptExecutionContext*);
-
- virtual void contextDestroyed();
-
- HashSet<String> m_publicBlobURLs;
+ static String createObjectURL(ScriptExecutionContext*, Blob*);
+ static void revokeObjectURL(ScriptExecutionContext*, const String&);
#if ENABLE(MEDIA_STREAM)
- HashSet<String> m_publicStreamURLs;
+ static String createObjectURL(ScriptExecutionContext*, MediaStream*);
#endif
+#endif
};
} // namespace WebCore
-#endif // ENABLE(BLOB)
-
#endif // DOMURL_h
Modified: trunk/Source/WebCore/html/DOMURL.idl (105485 => 105486)
--- trunk/Source/WebCore/html/DOMURL.idl 2012-01-20 07:45:46 UTC (rev 105485)
+++ trunk/Source/WebCore/html/DOMURL.idl 2012-01-20 08:00:11 UTC (rev 105486)
@@ -1,5 +1,6 @@
/*
* Copyright (C) 2011 Google Inc. All rights reserved.
+ * Copyright (C) 2011 Motorola Mobility Inc.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -26,15 +27,14 @@
module html {
interface [
Conditional=BLOB,
- OmitConstructor,
GenerateNativeConverter,
GenerateToJS,
- NoStaticTables
+ Constructor
] DOMURL {
#if defined(ENABLE_MEDIA_STREAM) && ENABLE_MEDIA_STREAM
- [ConvertNullStringTo=Undefined] DOMString createObjectURL(in MediaStream stream);
+ static [ConvertNullStringTo=Undefined,CallWith=ScriptExecutionContext] DOMString createObjectURL(in MediaStream stream);
#endif
- [ConvertNullStringTo=Undefined] DOMString createObjectURL(in Blob blob);
- void revokeObjectURL(in DOMString url);
+ static [ConvertNullStringTo=Undefined,CallWith=ScriptExecutionContext] DOMString createObjectURL(in Blob blob);
+ static [CallWith=ScriptExecutionContext] void revokeObjectURL(in DOMString url);
};
}
Modified: trunk/Source/WebCore/page/DOMWindow.cpp (105485 => 105486)
--- trunk/Source/WebCore/page/DOMWindow.cpp 2012-01-20 07:45:46 UTC (rev 105485)
+++ trunk/Source/WebCore/page/DOMWindow.cpp 2012-01-20 08:00:11 UTC (rev 105486)
@@ -1892,15 +1892,6 @@
dialogFrame->page()->chrome()->runModal();
}
-#if ENABLE(BLOB)
-DOMURL* DOMWindow::webkitURL() const
-{
- if (!m_domURL && isCurrentlyDisplayedInFrame())
- m_domURL = DOMURL::create(this->scriptExecutionContext());
- return m_domURL.get();
-}
-#endif
-
#if ENABLE(QUOTA)
StorageInfo* DOMWindow::webkitStorageInfo() const
{
Modified: trunk/Source/WebCore/page/DOMWindow.h (105485 => 105486)
--- trunk/Source/WebCore/page/DOMWindow.h 2012-01-20 07:45:46 UTC (rev 105485)
+++ trunk/Source/WebCore/page/DOMWindow.h 2012-01-20 08:00:11 UTC (rev 105486)
@@ -351,10 +351,6 @@
using RefCounted<DOMWindow>::ref;
using RefCounted<DOMWindow>::deref;
-#if ENABLE(BLOB)
- DOMURL* webkitURL() const;
-#endif
-
#if ENABLE(DEVICE_ORIENTATION)
DEFINE_ATTRIBUTE_EVENT_LISTENER(devicemotion);
DEFINE_ATTRIBUTE_EVENT_LISTENER(deviceorientation);
Modified: trunk/Source/WebCore/page/DOMWindow.idl (105485 => 105486)
--- trunk/Source/WebCore/page/DOMWindow.idl 2012-01-20 07:45:46 UTC (rev 105485)
+++ trunk/Source/WebCore/page/DOMWindow.idl 2012-01-20 08:00:11 UTC (rev 105486)
@@ -798,7 +798,7 @@
attribute [Conditional=BLOB] WebKitBlobBuilderConstructor WebKitBlobBuilder;
- readonly attribute [Conditional=BLOB] DOMURL webkitURL;
+ attribute [Conditional=BLOB] DOMURLConstructor webkitURL;
#if defined(ENABLE_QUOTA) && ENABLE_QUOTA
readonly attribute [EnabledAtRuntime=Quota] StorageInfo webkitStorageInfo;
Modified: trunk/Source/WebCore/workers/WorkerContext.cpp (105485 => 105486)
--- trunk/Source/WebCore/workers/WorkerContext.cpp 2012-01-20 07:45:46 UTC (rev 105485)
+++ trunk/Source/WebCore/workers/WorkerContext.cpp 2012-01-20 08:00:11 UTC (rev 105486)
@@ -377,15 +377,6 @@
return &m_eventTargetData;
}
-#if ENABLE(BLOB)
-DOMURL* WorkerContext::webkitURL() const
-{
- if (!m_domURL)
- m_domURL = DOMURL::create(this->scriptExecutionContext());
- return m_domURL.get();
-}
-#endif
-
#if ENABLE(FILE_SYSTEM)
void WorkerContext::webkitRequestFileSystem(int type, long long size, PassRefPtr<FileSystemCallback> successCallback, PassRefPtr<ErrorCallback> errorCallback)
{
Modified: trunk/Source/WebCore/workers/WorkerContext.h (105485 => 105486)
--- trunk/Source/WebCore/workers/WorkerContext.h 2012-01-20 07:45:46 UTC (rev 105485)
+++ trunk/Source/WebCore/workers/WorkerContext.h 2012-01-20 08:00:11 UTC (rev 105486)
@@ -131,10 +131,6 @@
virtual bool isContextThread() const;
virtual bool isJSExecutionForbidden() const;
-#if ENABLE(BLOB)
- DOMURL* webkitURL() const;
-#endif
-
#if ENABLE(FILE_SYSTEM)
enum FileSystemType {
TEMPORARY,
Modified: trunk/Source/WebCore/workers/WorkerContext.idl (105485 => 105486)
--- trunk/Source/WebCore/workers/WorkerContext.idl 2012-01-20 07:45:46 UTC (rev 105485)
+++ trunk/Source/WebCore/workers/WorkerContext.idl 2012-01-20 08:00:11 UTC (rev 105486)
@@ -101,7 +101,7 @@
attribute FileReaderSyncConstructor FileReaderSync;
#endif
- readonly attribute [Conditional=BLOB] DOMURL webkitURL;
+ attribute [Conditional=BLOB] DOMURLConstructor webkitURL;
#if defined(ENABLE_FILE_SYSTEM) && ENABLE_FILE_SYSTEM
const unsigned short TEMPORARY = 0;