2010-09-10  Michael Nordman  <michaeln@google.com>

        Reviewed by Dumitru Daniliuc.

        Decouple Blob from ScriptExecutionContext.
        https://bugs.webkit.org/show_bug.cgi?id=45410

        - Removed ScriptExecutionContext pointers from Blob and File constructors.
        - Removed ScriptExecutionContext's collection of Blobs instance in that context.
        - Refactored BlobURL to make a distinction between 'public' blob urls and 'internal'
          urls that are used solely as identifiers. The former requires a SecurityOrigin to
          to manufacture, the latter does not.
        - Added a constant and accessor for the blob protocol scheme on the BlobURL class.

        No new tests are added since this is a cleanup.

        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneDeserializer::readFile):
        (WebCore::CloneDeserializer::readTerminal):
        * bindings/v8/SerializedScriptValue.cpp:
        (WebCore::ZigZag::Reader::readBlob):
        (WebCore::ZigZag::Reader::readFile):
        (WebCore::ZigZag::Reader::readFileList):
        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::~ScriptExecutionContext):
        (WebCore::ScriptExecutionContext::createPublicBlobURL):
        (WebCore::ScriptExecutionContext::revokePublicBlobURL):
        * dom/ScriptExecutionContext.h:
        * fileapi/Blob.cpp:
        (WebCore::Blob::Blob):
        (WebCore::Blob::~Blob):
        (WebCore::Blob::slice):
        * fileapi/Blob.h:
        (WebCore::Blob::create):
        (WebCore::Blob::url):
        * fileapi/Blob.idl:
        * fileapi/BlobBuilder.cpp:
        (WebCore::BlobBuilder::getBlob):
        * fileapi/BlobBuilder.h:
        * fileapi/BlobBuilder.idl:
        * fileapi/BlobURL.cpp:
        (WebCore::BlobURL::createPublicURL):
        (WebCore::BlobURL::createInternalURL):
        (WebCore::BlobURL::getOrigin):
        (WebCore::BlobURL::getIdentifier):
        (WebCore::BlobURL::createBlobURL):
        * fileapi/BlobURL.h:
        (WebCore::BlobURL::blobProtocol):
        (WebCore::BlobURL::BlobURL):
        * fileapi/File.cpp:
        (WebCore::File::File):
        * fileapi/File.h:
        (WebCore::File::create):
        * fileapi/FileReader.cpp: Register a public url to perform the read.
        (WebCore::FileReader::cleanup):
        (WebCore::FileReader::start):
        (WebCore::FileReader::didFinishLoading):
        (WebCore::FileReader::failed):
        * fileapi/FileReader.h: Added m_urlForReading data member.
        * fileapi/FileReaderSync.cpp:
        (WebCore::FileReaderSync::read): Register a public url to perform the read.
        * fileapi/ThreadableBlobRegistry.cpp:
        (WebCore::ThreadableBlobRegistry::registerBlobURL):
        (WebCore::ThreadableBlobRegistry::unregisterBlobURL):
        * fileapi/ThreadableBlobRegistry.h:
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::appendFormData):
        (WebCore::HTMLInputElement::setFileListFromRenderer):
        * page/SecurityOrigin.cpp: Use BlobURL.blobProtocol().
        (WebCore::SecurityOrigin::create):
        (WebCore::SecurityOrigin::canRequest):
        (WebCore::SecurityOrigin::canDisplay):
        * platform/chromium/ClipboardChromium.cpp:
        (WebCore::ClipboardChromium::files):
        * platform/gtk/ClipboardGtk.cpp:
        (WebCore::ClipboardGtk::files):
        * platform/mac/ClipboardMac.mm:
        (WebCore::ClipboardMac::files):
        * platform/win/ClipboardWin.cpp:
        (WebCore::ClipboardWin::files):

git-svn-id: http://svn.webkit.org/repository/webkit/trunk@67208 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/WebCore/bindings/js/SerializedScriptValue.cpp b/WebCore/bindings/js/SerializedScriptValue.cpp
index fcd3314..fa8a1ed 100644
--- a/WebCore/bindings/js/SerializedScriptValue.cpp
+++ b/WebCore/bindings/js/SerializedScriptValue.cpp
@@ -974,10 +974,8 @@
         Identifier type;
         if (!readStringData(type))
             return 0;
-        if (m_isDOMGlobalObject) {
-            ScriptExecutionContext* scriptExecutionContext = static_cast<JSDOMGlobalObject*>(m_exec->lexicalGlobalObject())->scriptExecutionContext();
-            file = File::create(scriptExecutionContext, String(path.ustring().impl()), KURL(KURL(), String(url.ustring().impl())), String(type.ustring().impl()));
-        }
+        if (m_isDOMGlobalObject)
+            file = File::create(String(path.ustring().impl()), KURL(KURL(), String(url.ustring().impl())), String(type.ustring().impl()));
         return true;
     }
 
@@ -1074,9 +1072,7 @@
                 return JSValue();
             if (!m_isDOMGlobalObject)
                 return jsNull();
-            ScriptExecutionContext* scriptExecutionContext = static_cast<JSDOMGlobalObject*>(m_exec->lexicalGlobalObject())->scriptExecutionContext();
-            ASSERT(scriptExecutionContext);
-            return toJS(m_exec, static_cast<JSDOMGlobalObject*>(m_globalObject), Blob::create(scriptExecutionContext, KURL(KURL(), url.ustring().impl()), String(type.ustring().impl()), size));
+            return toJS(m_exec, static_cast<JSDOMGlobalObject*>(m_globalObject), Blob::create(KURL(KURL(), url.ustring().impl()), String(type.ustring().impl()), size));
         }
         case StringTag: {
             Identifier ident;