Title: [107082] trunk
Revision
107082
Author
commit-qu...@webkit.org
Date
2012-02-08 06:39:18 -0800 (Wed, 08 Feb 2012)

Log Message

Migrate createObjectURL & revokeObjectURL to static (Class) methods.
https://bugs.webkit.org/show_bug.cgi?id=74386

Patch by Kaustubh Atrawalkar <kaust...@motorola.com> on 2012-02-08
Reviewed by Kentaro Hara.

Source/WebCore:

Move createObjectURL & revokeObjectURL from DOMURL implementation to
static methods as per specs - http://www.w3.org/TR/FileAPI/#creating-revoking

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

* GNUmakefile.list.am:
* Target.pri:
* WebCore.gypi:
* WebCore.vcproj/WebCore.vcproj:
* WebCore.xcodeproj/project.pbxproj:
* dom/ScriptExecutionContext.cpp:
(WebCore::ScriptExecutionContext::~ScriptExecutionContext):
(WebCore::ScriptExecutionContext::fileThread):
(WebCore):
(WebCore::ScriptExecutionContext::publicURLManager):
* dom/ScriptExecutionContext.h:
(WebCore):
(ScriptExecutionContext):
* html/DOMURL.cpp:
(WebCore):
(WebCore::DOMURL::createObjectURL): Changed to static.
(WebCore::DOMURL::revokeObjectURL): ditto.
* html/DOMURL.h:
(DOMURL):
(WebCore::DOMURL::create):
* html/DOMURL.idl:
* html/PublicURLManager.h: Added.
(WebCore):
(PublicURLManager):
(WebCore::PublicURLManager::create):
(WebCore::PublicURLManager::contextDestroyed):
(WebCore::PublicURLManager::blobURLs):
(WebCore::PublicURLManager::streamURLs):
* page/DOMWindow.cpp: Removed object initialization for DOMURL.
(WebCore):
* page/DOMWindow.h: ditto.
(DOMWindow):
* page/DOMWindow.idl:
* workers/WorkerContext.cpp:
(WebCore):
* workers/WorkerContext.h:
(WorkerContext):
* workers/WorkerContext.idl:

LayoutTests:

Added test to check if createObjectURL & revokeObjectURL are static functions.

* fast/dom/DOMURL/check-instanceof-domurl-functions-expected.txt: Added.
* fast/dom/DOMURL/check-instanceof-domurl-functions.html: Added.
* platform/gtk/fast/dom/prototype-inheritance-2-expected.txt: GTK Rebaseline.
* platform/gtk/fast/js/global-constructors-expected.txt: ditto.
* platform/qt/fast/dom/constructed-objects-prototypes-expected.txt: Qt Rebaseline.
* platform/qt/fast/dom/prototype-inheritance-2-expected.txt: ditto.
* platform/qt/fast/js/global-constructors-expected.txt: ditto.

Modified Paths

Added Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (107081 => 107082)


--- trunk/LayoutTests/ChangeLog	2012-02-08 14:06:04 UTC (rev 107081)
+++ trunk/LayoutTests/ChangeLog	2012-02-08 14:39:18 UTC (rev 107082)
@@ -1,3 +1,20 @@
+2012-02-08  Kaustubh Atrawalkar  <kaust...@motorola.com>
+
+        Migrate createObjectURL & revokeObjectURL to static (Class) methods.
+        https://bugs.webkit.org/show_bug.cgi?id=74386
+
+        Reviewed by Kentaro Hara.
+
+        Added test to check if createObjectURL & revokeObjectURL are static functions.
+
+        * fast/dom/DOMURL/check-instanceof-domurl-functions-expected.txt: Added.
+        * fast/dom/DOMURL/check-instanceof-domurl-functions.html: Added.
+        * platform/gtk/fast/dom/prototype-inheritance-2-expected.txt: GTK Rebaseline.
+        * platform/gtk/fast/js/global-constructors-expected.txt: ditto.
+        * platform/qt/fast/dom/constructed-objects-prototypes-expected.txt: Qt Rebaseline.
+        * platform/qt/fast/dom/prototype-inheritance-2-expected.txt: ditto.
+        * platform/qt/fast/js/global-constructors-expected.txt: ditto.
+
 2012-02-08  Pavel Podivilov  <podivi...@chromium.org>
 
         Unreviewed, chromium expectations update: mark repaint-on-image-bounds-change.svg as IMAGE+TEXT IMAGE.

Added: trunk/LayoutTests/fast/dom/DOMURL/check-instanceof-domurl-functions-expected.txt (0 => 107082)


--- 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-02-08 14:39:18 UTC (rev 107082)
@@ -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 => 107082)


--- trunk/LayoutTests/fast/dom/DOMURL/check-instanceof-domurl-functions.html	                        (rev 0)
+++ trunk/LayoutTests/fast/dom/DOMURL/check-instanceof-domurl-functions.html	2012-02-08 14:39:18 UTC (rev 107082)
@@ -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/LayoutTests/platform/gtk/fast/dom/prototype-inheritance-2-expected.txt (107081 => 107082)


--- trunk/LayoutTests/platform/gtk/fast/dom/prototype-inheritance-2-expected.txt	2012-02-08 14:06:04 UTC (rev 107081)
+++ trunk/LayoutTests/platform/gtk/fast/dom/prototype-inheritance-2-expected.txt	2012-02-08 14:39:18 UTC (rev 107082)
@@ -240,6 +240,7 @@
 Never found DOMParser
 Never found DOMSettableTokenList
 Never found DOMStringList
+Never found DOMURL
 Never found Document
 Never found DocumentFragment
 Never found DocumentType

Modified: trunk/LayoutTests/platform/gtk/fast/js/global-constructors-expected.txt (107081 => 107082)


--- trunk/LayoutTests/platform/gtk/fast/js/global-constructors-expected.txt	2012-02-08 14:06:04 UTC (rev 107081)
+++ trunk/LayoutTests/platform/gtk/fast/js/global-constructors-expected.txt	2012-02-08 14:39:18 UTC (rev 107082)
@@ -333,6 +333,7 @@
 PASS XPathResult.toString() is '[object XPathResultConstructor]'
 PASS XSLTProcessor.toString() is '[object XSLTProcessorConstructor]'
 FAIL webkitPeerConnection.toString() should be [object webkitPeerConnectionConstructor]. Was [object PeerConnectionConstructor].
+FAIL webkitURL.toString() should be [object webkitURLConstructor]. Was [object DOMURLConstructor].
 PASS successfullyParsed is true
 
 TEST COMPLETE

Modified: trunk/LayoutTests/platform/qt/fast/dom/constructed-objects-prototypes-expected.txt (107081 => 107082)


--- trunk/LayoutTests/platform/qt/fast/dom/constructed-objects-prototypes-expected.txt	2012-02-08 14:06:04 UTC (rev 107081)
+++ trunk/LayoutTests/platform/qt/fast/dom/constructed-objects-prototypes-expected.txt	2012-02-08 14:39:18 UTC (rev 107082)
@@ -61,6 +61,8 @@
 PASS (new inner.XPathEvaluator()).constructor.isInner is true
 PASS (new inner.XSLTProcessor()).isInner is true
 PASS (new inner.XSLTProcessor()).constructor.isInner is true
+PASS (new inner.webkitURL()).isInner is true
+PASS (new inner.webkitURL()).constructor.isInner is true
 PASS successfullyParsed is true
 
 TEST COMPLETE

Modified: trunk/LayoutTests/platform/qt/fast/dom/prototype-inheritance-2-expected.txt (107081 => 107082)


--- trunk/LayoutTests/platform/qt/fast/dom/prototype-inheritance-2-expected.txt	2012-02-08 14:06:04 UTC (rev 107081)
+++ trunk/LayoutTests/platform/qt/fast/dom/prototype-inheritance-2-expected.txt	2012-02-08 14:39:18 UTC (rev 107082)
@@ -240,6 +240,7 @@
 Never found DOMParser
 Never found DOMSettableTokenList
 Never found DOMStringList
+Never found DOMURL
 Never found Document
 Never found DocumentFragment
 Never found DocumentType

Modified: trunk/LayoutTests/platform/qt/fast/js/global-constructors-expected.txt (107081 => 107082)


--- trunk/LayoutTests/platform/qt/fast/js/global-constructors-expected.txt	2012-02-08 14:06:04 UTC (rev 107081)
+++ trunk/LayoutTests/platform/qt/fast/js/global-constructors-expected.txt	2012-02-08 14:39:18 UTC (rev 107082)
@@ -315,6 +315,7 @@
 PASS XPathException.toString() is '[object XPathExceptionConstructor]'
 PASS XPathResult.toString() is '[object XPathResultConstructor]'
 PASS XSLTProcessor.toString() is '[object XSLTProcessorConstructor]'
+FAIL webkitURL.toString() should be [object webkitURLConstructor]. Was [object DOMURLConstructor].
 PASS successfullyParsed is true
 
 TEST COMPLETE

Modified: trunk/Source/WebCore/ChangeLog (107081 => 107082)


--- trunk/Source/WebCore/ChangeLog	2012-02-08 14:06:04 UTC (rev 107081)
+++ trunk/Source/WebCore/ChangeLog	2012-02-08 14:39:18 UTC (rev 107082)
@@ -1,3 +1,60 @@
+2012-02-08  Kaustubh Atrawalkar  <kaust...@motorola.com>
+
+        Migrate createObjectURL & revokeObjectURL to static (Class) methods.
+        https://bugs.webkit.org/show_bug.cgi?id=74386
+
+        Reviewed by Kentaro Hara.
+
+        Move createObjectURL & revokeObjectURL from DOMURL implementation to
+        static methods as per specs - http://www.w3.org/TR/FileAPI/#creating-revoking
+
+        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
+
+        * GNUmakefile.list.am:
+        * Target.pri:
+        * WebCore.gypi:
+        * WebCore.vcproj/WebCore.vcproj:
+        * WebCore.xcodeproj/project.pbxproj:
+        * dom/ScriptExecutionContext.cpp:
+        (WebCore::ScriptExecutionContext::~ScriptExecutionContext):
+        (WebCore::ScriptExecutionContext::fileThread):
+        (WebCore):
+        (WebCore::ScriptExecutionContext::publicURLManager):
+        * dom/ScriptExecutionContext.h:
+        (WebCore):
+        (ScriptExecutionContext):
+        * html/DOMURL.cpp:
+        (WebCore):
+        (WebCore::DOMURL::createObjectURL): Changed to static.
+        (WebCore::DOMURL::revokeObjectURL): ditto.
+        * html/DOMURL.h:
+        (DOMURL):
+        (WebCore::DOMURL::create):
+        * html/DOMURL.idl:
+        * html/PublicURLManager.h: Added.
+        (WebCore):
+        (PublicURLManager):
+        (WebCore::PublicURLManager::create):
+        (WebCore::PublicURLManager::contextDestroyed):
+        (WebCore::PublicURLManager::blobURLs):
+        (WebCore::PublicURLManager::streamURLs):
+        * page/DOMWindow.cpp: Removed object initialization for DOMURL.
+        (WebCore):
+        * page/DOMWindow.h: ditto.
+        (DOMWindow):
+        * page/DOMWindow.idl:
+        * workers/WorkerContext.cpp:
+        (WebCore):
+        * workers/WorkerContext.h:
+        (WorkerContext):
+        * workers/WorkerContext.idl:
+
 2012-02-01  Brian Grinstead  <briangrinst...@gmail.com>
 
         Web Inspector: Add changes for Spectrum colorpicker

Modified: trunk/Source/WebCore/GNUmakefile.list.am (107081 => 107082)


--- trunk/Source/WebCore/GNUmakefile.list.am	2012-02-08 14:06:04 UTC (rev 107081)
+++ trunk/Source/WebCore/GNUmakefile.list.am	2012-02-08 14:39:18 UTC (rev 107082)
@@ -2256,6 +2256,7 @@
 	Source/WebCore/html/PasswordInputType.h \
 	Source/WebCore/html/PluginDocument.cpp \
 	Source/WebCore/html/PluginDocument.h \
+	Source/WebCore/html/PublicURLManager.h \
 	Source/WebCore/html/RadioInputType.cpp \
 	Source/WebCore/html/RadioInputType.h \
 	Source/WebCore/html/RangeInputType.cpp \

Modified: trunk/Source/WebCore/Target.pri (107081 => 107082)


--- trunk/Source/WebCore/Target.pri	2012-02-08 14:06:04 UTC (rev 107081)
+++ trunk/Source/WebCore/Target.pri	2012-02-08 14:39:18 UTC (rev 107082)
@@ -1880,6 +1880,7 @@
     html/MediaFragmentURIParser.h \
     html/MicroDataItemValue.h \
     html/PluginDocument.h \
+    html/PublicURLManager.h \
     html/StepRange.h \
     html/TextDocument.h \
     html/TextTrack.h \

Modified: trunk/Source/WebCore/WebCore.gypi (107081 => 107082)


--- trunk/Source/WebCore/WebCore.gypi	2012-02-08 14:06:04 UTC (rev 107081)
+++ trunk/Source/WebCore/WebCore.gypi	2012-02-08 14:39:18 UTC (rev 107082)
@@ -5375,6 +5375,7 @@
             'html/PasswordInputType.h',
             'html/PluginDocument.cpp',
             'html/PluginDocument.h',
+            'html/PublicURLManager.h',
             'html/RadioInputType.cpp',
             'html/RadioInputType.h',
             'html/RangeInputType.cpp',

Modified: trunk/Source/WebCore/WebCore.vcproj/WebCore.vcproj (107081 => 107082)


--- trunk/Source/WebCore/WebCore.vcproj/WebCore.vcproj	2012-02-08 14:06:04 UTC (rev 107081)
+++ trunk/Source/WebCore/WebCore.vcproj/WebCore.vcproj	2012-02-08 14:39:18 UTC (rev 107082)
@@ -60494,6 +60494,10 @@
 				>
 			</File>
 			<File
+				RelativePath="..\html\PublicURLManager.h"
+				>
+			</File>
+            <File
 				RelativePath="..\html\RadioInputType.cpp"
 				>
 			</File>

Modified: trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj (107081 => 107082)


--- trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj	2012-02-08 14:06:04 UTC (rev 107081)
+++ trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj	2012-02-08 14:39:18 UTC (rev 107082)
@@ -279,6 +279,7 @@
 		0FF5026A102BA9430066F39A /* JSStyleMedia.h in Headers */ = {isa = PBXBuildFile; fileRef = 0FF50268102BA9430066F39A /* JSStyleMedia.h */; };
 		0FF50271102BA96A0066F39A /* StyleMedia.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0FF5026E102BA9660066F39A /* StyleMedia.cpp */; };
 		0FF50272102BA96A0066F39A /* StyleMedia.h in Headers */ = {isa = PBXBuildFile; fileRef = 0FF5026F102BA96A0066F39A /* StyleMedia.h */; };
+		10FB084B14E15C7E00A3DB98 /* PublicURLManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 10FB084A14E15C7E00A3DB98 /* PublicURLManager.h */; };
 		1402645E0AFDC19B005919E2 /* LoggingMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = 1402645D0AFDC19B005919E2 /* LoggingMac.mm */; };
 		1403B99709EB13AF00797C7F /* DOMWindow.h in Headers */ = {isa = PBXBuildFile; fileRef = 1403B99509EB13AF00797C7F /* DOMWindow.h */; settings = {ATTRIBUTES = (Private, ); }; };
 		1403B99809EB13AF00797C7F /* DOMWindow.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1403B99609EB13AF00797C7F /* DOMWindow.cpp */; };
@@ -6980,6 +6981,7 @@
 		0FF5026E102BA9660066F39A /* StyleMedia.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = StyleMedia.cpp; sourceTree = "<group>"; };
 		0FF5026F102BA96A0066F39A /* StyleMedia.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = StyleMedia.h; sourceTree = "<group>"; };
 		0FF50270102BA96A0066F39A /* StyleMedia.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = StyleMedia.idl; sourceTree = "<group>"; };
+		10FB084A14E15C7E00A3DB98 /* PublicURLManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PublicURLManager.h; sourceTree = "<group>"; };
 		1402645D0AFDC19B005919E2 /* LoggingMac.mm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.objcpp; path = LoggingMac.mm; sourceTree = "<group>"; };
 		1403B90C09EB124500797C7F /* DOMWindow.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = DOMWindow.idl; sourceTree = "<group>"; };
 		1403B99509EB13AF00797C7F /* DOMWindow.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DOMWindow.h; sourceTree = "<group>"; };
@@ -16941,6 +16943,7 @@
 				F55B3D961251F12D003EF269 /* PasswordInputType.h */,
 				97205AB91239292700B17380 /* PluginDocument.cpp */,
 				97205ABA1239292700B17380 /* PluginDocument.h */,
+				10FB084A14E15C7E00A3DB98 /* PublicURLManager.h */,
 				F55B3D971251F12D003EF269 /* RadioInputType.cpp */,
 				F55B3D981251F12D003EF269 /* RadioInputType.h */,
 				F55B3D991251F12D003EF269 /* RangeInputType.cpp */,
@@ -24157,6 +24160,7 @@
 				1AAADDBF14DC640700AF64B3 /* ScrollingTreeState.h in Headers */,
 				1AAADDE414DC8C8F00AF64B3 /* ScrollingTreeNode.h in Headers */,
 				1AAADDE914DC8DF800AF64B3 /* ScrollingTreeNodeMac.h in Headers */,
+				10FB084B14E15C7E00A3DB98 /* PublicURLManager.h in Headers */,
 				7A54858014E02D51006AE05A /* InspectorHistory.h in Headers */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;

Modified: trunk/Source/WebCore/dom/ScriptExecutionContext.cpp (107081 => 107082)


--- trunk/Source/WebCore/dom/ScriptExecutionContext.cpp	2012-02-08 14:06:04 UTC (rev 107081)
+++ trunk/Source/WebCore/dom/ScriptExecutionContext.cpp	2012-02-08 14:39:18 UTC (rev 107082)
@@ -38,6 +38,7 @@
 #include "EventTarget.h"
 #include "FileThread.h"
 #include "MessagePort.h"
+#include "PublicURLManager.h"
 #include "ScriptCallStack.h"
 #include "SecurityOrigin.h"
 #include "Settings.h"
@@ -126,6 +127,10 @@
         m_fileThread = 0;
     }
 #endif
+#if ENABLE(BLOB)
+    if (m_publicURLManager)
+        m_publicURLManager->contextDestroyed();
+#endif
 }
 
 #if ENABLE(SQL_DATABASE)
@@ -385,6 +390,15 @@
 }
 #endif
 
+#if ENABLE(BLOB)
+PublicURLManager& ScriptExecutionContext::publicURLManager()
+{
+    if (!m_publicURLManager)
+        m_publicURLManager = PublicURLManager::create();
+    return *m_publicURLManager;
+}
+#endif
+
 void ScriptExecutionContext::adjustMinimumTimerInterval(double oldMinimumTimerInterval)
 {
     if (minimumTimerInterval() != oldMinimumTimerInterval) {

Modified: trunk/Source/WebCore/dom/ScriptExecutionContext.h (107081 => 107082)


--- trunk/Source/WebCore/dom/ScriptExecutionContext.h	2012-02-08 14:06:04 UTC (rev 107081)
+++ trunk/Source/WebCore/dom/ScriptExecutionContext.h	2012-02-08 14:39:18 UTC (rev 107082)
@@ -53,6 +53,9 @@
 class EventTarget;
 class MessagePort;
 
+#if ENABLE(BLOB)
+class PublicURLManager;
+#endif
 #if ENABLE(SQL_DATABASE)
 class Database;
 class DatabaseTaskSynchronizer;
@@ -103,6 +106,9 @@
     virtual void resumeActiveDOMObjects();
     virtual void stopActiveDOMObjects();
 
+#if ENABLE(BLOB)
+    PublicURLManager& publicURLManager();
+#endif
     void didCreateActiveDOMObject(ActiveDOMObject*, void* upcastPointer);
     void willDestroyActiveDOMObject(ActiveDOMObject*);
 
@@ -205,6 +211,9 @@
     bool m_inDispatchErrorEvent;
     class PendingException;
     OwnPtr<Vector<OwnPtr<PendingException> > > m_pendingExceptions;
+#if ENABLE(BLOB)
+    OwnPtr<PublicURLManager> m_publicURLManager;
+#endif
 
 #if ENABLE(SQL_DATABASE)
     RefPtr<DatabaseThread> m_databaseThread;

Modified: trunk/Source/WebCore/html/DOMURL.cpp (107081 => 107082)


--- trunk/Source/WebCore/html/DOMURL.cpp	2012-02-08 14:06:04 UTC (rev 107081)
+++ trunk/Source/WebCore/html/DOMURL.cpp	2012-02-08 14:39:18 UTC (rev 107082)
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2011 Google Inc. All rights reserved.
+ * Copyright (C) 2012 Motorola Mobility Inc.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -29,11 +30,15 @@
 
 #include "DOMURL.h"
 
+#include "ActiveDOMObject.h"
 #include "Blob.h"
 #include "BlobURL.h"
 #include "KURL.h"
+#include "PublicURLManager.h"
 #include "ScriptExecutionContext.h"
+#include "SecurityOrigin.h"
 #include "ThreadableBlobRegistry.h"
+#include <wtf/PassOwnPtr.h>
 #include <wtf/MainThread.h>
 
 #if ENABLE(MEDIA_STREAM)
@@ -43,37 +48,13 @@
 
 namespace WebCore {
 
-DOMURL::DOMURL(ScriptExecutionContext* scriptExecutionContext)
-    : ContextDestructionObserver(scriptExecutionContext)
-{
-}
-
-DOMURL::~DOMURL()
-{
-}
-
-void DOMURL::contextDestroyed()
-{
-    ContextDestructionObserver::contextDestroyed();
-
-    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
-}
-
-#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,46 +62,48 @@
     ASSERT(isMainThread());
 
     MediaStreamRegistry::registry().registerMediaStreamURL(publicURL, stream);
-    m_publicStreamURLs.add(publicURL.string());
+    scriptExecutionContext->publicURLManager().streamURLs().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());
+    scriptExecutionContext->publicURLManager().blobURLs().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 = scriptExecutionContext->publicURLManager().blobURLs();
+    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 = scriptExecutionContext->publicURLManager().streamURLs();
+    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
 }

Modified: trunk/Source/WebCore/html/DOMURL.h (107081 => 107082)


--- trunk/Source/WebCore/html/DOMURL.h	2012-02-08 14:06:04 UTC (rev 107081)
+++ trunk/Source/WebCore/html/DOMURL.h	2012-02-08 14:39:18 UTC (rev 107082)
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2011 Google Inc. All rights reserved.
+ * Copyright (C) 2012 Motorola Mobility Inc.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -26,9 +27,7 @@
 #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>
@@ -40,30 +39,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 (107081 => 107082)


--- trunk/Source/WebCore/html/DOMURL.idl	2012-02-08 14:06:04 UTC (rev 107081)
+++ trunk/Source/WebCore/html/DOMURL.idl	2012-02-08 14:39:18 UTC (rev 107082)
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2011 Google Inc. All rights reserved.
+ * Copyright (C) 2012 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,15 @@
 module html {
     interface [
         Conditional=BLOB,
-        OmitConstructor,
+        Constructor,
         JSGenerateToNativeObject,
         JSGenerateToJS,
         JSNoStaticTables
     ] DOMURL {
 #if defined(ENABLE_MEDIA_STREAM) && ENABLE_MEDIA_STREAM
-        [ConvertNullStringTo=Undefined] DOMString createObjectURL(in MediaStream stream);
+        static [CallWith=ScriptExecutionContext,ConvertNullStringTo=Undefined] DOMString createObjectURL(in MediaStream stream);
 #endif
-        [ConvertNullStringTo=Undefined] DOMString createObjectURL(in Blob blob);
-        void revokeObjectURL(in DOMString url);
+        static [CallWith=ScriptExecutionContext,ConvertNullStringTo=Undefined] DOMString createObjectURL(in Blob blob);
+        static [CallWith=ScriptExecutionContext] void revokeObjectURL(in DOMString url);
     };
 }

Copied: trunk/Source/WebCore/html/PublicURLManager.h (from rev 107081, trunk/Source/WebCore/html/DOMURL.h) (0 => 107082)


--- trunk/Source/WebCore/html/PublicURLManager.h	                        (rev 0)
+++ trunk/Source/WebCore/html/PublicURLManager.h	2012-02-08 14:39:18 UTC (rev 107082)
@@ -0,0 +1,76 @@
+/*
+ * Copyright (C) 2012 Motorola Mobility Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1.  Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ * 2.  Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in the
+ *     documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef PublicURLManager_h
+#define PublicURLManager_h
+
+#if ENABLE(BLOB)
+#include "PlatformString.h"
+#include "ScriptExecutionContext.h"
+#include "ThreadableBlobRegistry.h"
+#include <wtf/HashSet.h>
+
+#if ENABLE(MEDIA_STREAM)
+#include "MediaStream.h"
+#include "MediaStreamRegistry.h"
+#endif
+
+namespace WebCore {
+
+class ScriptExecutionContext;
+
+class PublicURLManager {
+
+public:
+    static PassOwnPtr<PublicURLManager> create() { return adoptPtr(new PublicURLManager); }
+    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
+    }
+
+    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
+};
+
+} // namespace WebCore
+
+#endif // BLOB
+#endif // PUBLICURLMANAGER_h

Modified: trunk/Source/WebCore/page/DOMWindow.cpp (107081 => 107082)


--- trunk/Source/WebCore/page/DOMWindow.cpp	2012-02-08 14:06:04 UTC (rev 107081)
+++ trunk/Source/WebCore/page/DOMWindow.cpp	2012-02-08 14:39:18 UTC (rev 107082)
@@ -1897,15 +1897,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 (107081 => 107082)


--- trunk/Source/WebCore/page/DOMWindow.h	2012-02-08 14:06:04 UTC (rev 107081)
+++ trunk/Source/WebCore/page/DOMWindow.h	2012-02-08 14:39:18 UTC (rev 107082)
@@ -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 (107081 => 107082)


--- trunk/Source/WebCore/page/DOMWindow.idl	2012-02-08 14:06:04 UTC (rev 107081)
+++ trunk/Source/WebCore/page/DOMWindow.idl	2012-02-08 14:39:18 UTC (rev 107082)
@@ -782,7 +782,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 [V8EnabledAtRuntime=Quota] StorageInfo webkitStorageInfo;

Modified: trunk/Source/WebCore/workers/WorkerContext.cpp (107081 => 107082)


--- trunk/Source/WebCore/workers/WorkerContext.cpp	2012-02-08 14:06:04 UTC (rev 107081)
+++ trunk/Source/WebCore/workers/WorkerContext.cpp	2012-02-08 14:39:18 UTC (rev 107082)
@@ -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 (107081 => 107082)


--- trunk/Source/WebCore/workers/WorkerContext.h	2012-02-08 14:06:04 UTC (rev 107081)
+++ trunk/Source/WebCore/workers/WorkerContext.h	2012-02-08 14:39:18 UTC (rev 107082)
@@ -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 (107081 => 107082)


--- trunk/Source/WebCore/workers/WorkerContext.idl	2012-02-08 14:06:04 UTC (rev 107081)
+++ trunk/Source/WebCore/workers/WorkerContext.idl	2012-02-08 14:39:18 UTC (rev 107082)
@@ -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;
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to