Create a MediaSource object.
https://bugs.webkit.org/show_bug.cgi?id=91773

Reviewed by Eric Carlson.

MediaSource object is needed in order to implement the new
object-oriented MediaSource API:
http://dvcs.w3.org/hg/html-media/raw-file/tip/media-source/media-source.html

No new tests - will be able to test after landing:
https://bugs.webkit.org/show_bug.cgi?id=91775

Adding new files to build files:
* CMakeLists.txt:
* DerivedSources.cpp:
* DerivedSources.make:
* DerivedSources.pri:
* GNUmakefile.list.am:
* Target.pri:
* WebCore.gypi:
* WebCore.vcproj/WebCore.vcproj:
* WebCore.xcodeproj/project.pbxproj:

New MediaSource object:
* Modules/mediasource/MediaSource.cpp: Added.
* Modules/mediasource/MediaSource.h: Added.
* Modules/mediasource/MediaSource.idl: Added.

Create a registry for the blob storage and lookup:
* Modules/mediasource/MediaSourceRegistry.cpp: Added.
* Modules/mediasource/MediaSourceRegistry.h: Added.

Connect SourceBuffer to MediaSource:
* Modules/mediasource/SourceBuffer.cpp:
(WebCore::SourceBuffer::SourceBuffer):
(WebCore::SourceBuffer::buffered): Forward call to MediaSource.
(WebCore::SourceBuffer::append): Ditto.
(WebCore::SourceBuffer::abort): Ditto.
* Modules/mediasource/SourceBuffer.h:
(WebCore::SourceBuffer::create): Add a MediaSource to the constructor.
(WebCore::SourceBuffer::clear): Clear the MediaSource.
(SourceBuffer):
* Modules/mediasource/SourceBufferList.cpp: include SourceBuffer.h
* Modules/mediasource/SourceBufferList.h:

Make MediaSource an EventTarget:
* dom/EventTarget.h:
(WebCore):
* dom/EventTargetFactory.in:

Enable creation of MediaSource object URL from JavaScript:
* html/DOMURL.cpp:
(WebCore):
(WebCore::DOMURL::createObjectURL):
(WebCore::DOMURL::revokeObjectURL):
* html/DOMURL.h:
(WebCore):
(DOMURL):
* html/DOMURL.idl:
* html/PublicURLManager.h: create a new sourceURLs list for storing
    reigstered MediaSource URLS.
(WebCore::PublicURLManager::contextDestroyed): make sure everything is
    removed from the sourceURLs list upon destruction.
(PublicURLManager):
(WebCore::PublicURLManager::sourceURLs): getter for the sourceURLs list.

New MediaSource constructor:
* page/DOMWindow.idl:


git-svn-id: http://svn.webkit.org/repository/webkit/trunk@124953 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/Source/WebCore/html/PublicURLManager.h b/Source/WebCore/html/PublicURLManager.h
index 258ac06..f5e7b20 100644
--- a/Source/WebCore/html/PublicURLManager.h
+++ b/Source/WebCore/html/PublicURLManager.h
@@ -37,6 +37,11 @@
 #include "MediaStreamRegistry.h"
 #endif
 
+#if ENABLE(MEDIA_SOURCE)
+#include "MediaSource.h"
+#include "MediaSourceRegistry.h"
+#endif
+
 namespace WebCore {
 
 class ScriptExecutionContext;
@@ -56,18 +61,29 @@
         for (HashSet<String>::iterator iter = m_streamURLs.begin(); iter != streamURLsEnd; ++iter)
             MediaStreamRegistry::registry().unregisterMediaStreamURL(KURL(ParsedURLString, *iter));
 #endif
+#if ENABLE(MEDIA_SOURCE)
+        HashSet<String>::iterator sourceURLsEnd = m_sourceURLs.end();
+        for (HashSet<String>::iterator iter = m_sourceURLs.begin(); iter != sourceURLsEnd; ++iter)
+            MediaSourceRegistry::registry().unregisterMediaSourceURL(KURL(ParsedURLString, *iter));
+#endif
     }
 
     HashSet<String>& blobURLs() { return m_blobURLs; }
 #if ENABLE(MEDIA_STREAM)
     HashSet<String>& streamURLs() { return m_streamURLs; }
 #endif
+#if ENABLE(MEDIA_SOURCE)
+    HashSet<String>& sourceURLs() { return m_sourceURLs; }
+#endif
 
 private:
     HashSet<String> m_blobURLs;
 #if ENABLE(MEDIA_STREAM)
     HashSet<String> m_streamURLs;
 #endif
+#if ENABLE(MEDIA_SOURCE)
+    HashSet<String> m_sourceURLs;
+#endif
 };
 
 } // namespace WebCore