[SCM] WebKit Debian packaging branch, debian/experimental, updated. upstream/1.3.3-9427-gc2be6fc

jianli at chromium.org jianli at chromium.org
Wed Dec 22 11:30:39 UTC 2010


The following commit has been merged in the debian/experimental branch:
commit 37d8a5830e65a553335b3ec92138e648bba73337
Author: jianli at chromium.org <jianli at chromium.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date:   Tue Jul 27 20:18:30 2010 +0000

    Add ScriptExecutionContext argument to File/Blob constructors.
    https://bugs.webkit.org/show_bug.cgi?id=40587
    
    Reviewed by David Levin.
    
    Remove DragData::createClipboard and add Clipboard::create for it to be
    called directly in DragController. This is because we need to pass
    Frame pointer to Clipboard class and use it to get ScriptExecutionContext
    in order to construct File objects in Clipboard::files().
    
    * bindings/js/SerializedScriptValue.cpp:
    (WebCore::DeserializingTreeWalker::convertIfTerminal):
    * bindings/v8/SerializedScriptValue.cpp:
    (WebCore::ZigZag::Reader::readBlob):
    (WebCore::ZigZag::Reader::readFile):
    (WebCore::ZigZag::Reader::readFileList):
    * dom/Clipboard.h:
    * editing/Editor.cpp:
    (WebCore::Editor::dispatchCPPEvent):
    * editing/Editor.h:
    * editing/android/EditorAndroid.cpp:
    (WebCore::Editor::newGeneralClipboard):
    * editing/brew/EditorBrew.cpp:
    (WebCore::Editor::newGeneralClipboard):
    * editing/chromium/EditorChromium.cpp:
    (WebCore::Editor::newGeneralClipboard):
    * editing/haiku/EditorHaiku.cpp:
    (WebCore::Editor::newGeneralClipboard):
    * editing/mac/EditorMac.mm:
    (WebCore::Editor::newGeneralClipboard):
    * editing/qt/EditorQt.cpp:
    (WebCore::Editor::newGeneralClipboard):
    * editing/wx/EditorWx.cpp:
    (WebCore::Editor::newGeneralClipboard):
    * html/Blob.cpp:
    (WebCore::Blob::Blob):
    (WebCore::Blob::slice):
    * html/Blob.h:
    (WebCore::Blob::create):
    * html/Blob.idl:
    * html/BlobBuilder.cpp:
    (WebCore::BlobBuilder::getBlob):
    * html/BlobBuilder.h:
    * html/BlobBuilder.idl:
    * html/File.cpp:
    (WebCore::File::File):
    * html/File.h:
    (WebCore::File::create):
    * html/HTMLInputElement.cpp:
    (WebCore::HTMLInputElement::appendFormData):
    (WebCore::HTMLInputElement::setFileListFromRenderer):
    * page/DragController.cpp:
    (WebCore::DragController::dragExited):
    (WebCore::DragController::performDrag):
    (WebCore::DragController::tryDHTMLDrag):
    * page/chromium/EventHandlerChromium.cpp:
    (WebCore::EventHandler::createDraggingClipboard):
    * page/gtk/EventHandlerGtk.cpp:
    (WebCore::EventHandler::createDraggingClipboard):
    * page/win/EventHandlerWin.cpp:
    (WebCore::EventHandler::createDraggingClipboard):
    * platform/DragData.h:
    * platform/android/ClipboardAndroid.cpp:
    (WebCore::Clipboard::create):
    * platform/android/DragDataAndroid.cpp:
    * platform/brew/ClipboardBrew.cpp:
    (WebCore::Clipboard::create):
    * platform/brew/DragDataBrew.cpp:
    * platform/chromium/ClipboardChromium.cpp:
    (WebCore::Clipboard::create):
    (WebCore::ClipboardChromium::ClipboardChromium):
    (WebCore::ClipboardChromium::create):
    (WebCore::ClipboardChromium::files):
    * platform/chromium/ClipboardChromium.h:
    * platform/chromium/DragDataChromium.cpp:
    * platform/efl/ClipboardEfl.cpp:
    (WebCore::Editor::newGeneralClipboard):
    (WebCore::Clipboard::create):
    * platform/efl/DragDataEfl.cpp:
    * platform/gtk/ClipboardGtk.cpp:
    (WebCore::Editor::newGeneralClipboard):
    (WebCore::Clipboard::create):
    (WebCore::ClipboardGtk::ClipboardGtk):
    (WebCore::ClipboardGtk::files):
    * platform/gtk/ClipboardGtk.h:
    (WebCore::ClipboardGtk::create):
    * platform/gtk/DragDataGtk.cpp:
    * platform/haiku/ClipboardHaiku.cpp:
    (WebCore::Clipboard::create):
    * platform/haiku/DragDataHaiku.cpp:
    * platform/mac/ClipboardMac.mm:
    (WebCore::Clipboard::create):
    (WebCore::ClipboardMac::files):
    * platform/mac/DragDataMac.mm:
    * platform/qt/ClipboardQt.cpp:
    (WebCore::Clipboard::create):
    * platform/qt/DragDataQt.cpp:
    * platform/win/ClipboardWin.cpp:
    (WebCore::Clipboard::create):
    (WebCore::ClipboardWin::ClipboardWin):
    (WebCore::ClipboardWin::files):
    * platform/win/ClipboardWin.h:
    (WebCore::ClipboardWin::create):
    * platform/win/DragDataWin.cpp:
    * platform/win/EditorWin.cpp:
    (WebCore::Editor::newGeneralClipboard):
    * platform/wince/DragDataWince.cpp:
    * platform/wince/EditorWince.cpp:
    (WebCore::Editor::newGeneralClipboard):
    * platform/wx/ClipboardWx.cpp:
    (WebCore::Clipboard::create):
    * platform/wx/DragDataWx.cpp:
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@64152 268f45cc-cd09-0410-ab3c-d52691b4dbfc

diff --git a/WebCore/ChangeLog b/WebCore/ChangeLog
index 8751ea8..0c6b65d 100644
--- a/WebCore/ChangeLog
+++ b/WebCore/ChangeLog
@@ -1,3 +1,118 @@
+2010-07-27  Jian Li  <jianli at chromium.org>
+
+        Reviewed by David Levin.
+
+        Add ScriptExecutionContext argument to File/Blob constructors.
+        https://bugs.webkit.org/show_bug.cgi?id=40587
+
+        Remove DragData::createClipboard and add Clipboard::create for it to be
+        called directly in DragController. This is because we need to pass
+        Frame pointer to Clipboard class and use it to get ScriptExecutionContext
+        in order to construct File objects in Clipboard::files().
+
+        * bindings/js/SerializedScriptValue.cpp:
+        (WebCore::DeserializingTreeWalker::convertIfTerminal):
+        * bindings/v8/SerializedScriptValue.cpp:
+        (WebCore::ZigZag::Reader::readBlob):
+        (WebCore::ZigZag::Reader::readFile):
+        (WebCore::ZigZag::Reader::readFileList):
+        * dom/Clipboard.h:
+        * editing/Editor.cpp:
+        (WebCore::Editor::dispatchCPPEvent):
+        * editing/Editor.h:
+        * editing/android/EditorAndroid.cpp:
+        (WebCore::Editor::newGeneralClipboard):
+        * editing/brew/EditorBrew.cpp:
+        (WebCore::Editor::newGeneralClipboard):
+        * editing/chromium/EditorChromium.cpp:
+        (WebCore::Editor::newGeneralClipboard):
+        * editing/haiku/EditorHaiku.cpp:
+        (WebCore::Editor::newGeneralClipboard):
+        * editing/mac/EditorMac.mm:
+        (WebCore::Editor::newGeneralClipboard):
+        * editing/qt/EditorQt.cpp:
+        (WebCore::Editor::newGeneralClipboard):
+        * editing/wx/EditorWx.cpp:
+        (WebCore::Editor::newGeneralClipboard):
+        * html/Blob.cpp:
+        (WebCore::Blob::Blob):
+        (WebCore::Blob::slice):
+        * html/Blob.h:
+        (WebCore::Blob::create):
+        * html/Blob.idl:
+        * html/BlobBuilder.cpp:
+        (WebCore::BlobBuilder::getBlob):
+        * html/BlobBuilder.h:
+        * html/BlobBuilder.idl:
+        * html/File.cpp:
+        (WebCore::File::File):
+        * html/File.h:
+        (WebCore::File::create):
+        * html/HTMLInputElement.cpp:
+        (WebCore::HTMLInputElement::appendFormData):
+        (WebCore::HTMLInputElement::setFileListFromRenderer):
+        * page/DragController.cpp:
+        (WebCore::DragController::dragExited):
+        (WebCore::DragController::performDrag):
+        (WebCore::DragController::tryDHTMLDrag):
+        * page/chromium/EventHandlerChromium.cpp:
+        (WebCore::EventHandler::createDraggingClipboard):
+        * page/gtk/EventHandlerGtk.cpp:
+        (WebCore::EventHandler::createDraggingClipboard):
+        * page/win/EventHandlerWin.cpp:
+        (WebCore::EventHandler::createDraggingClipboard):
+        * platform/DragData.h:
+        * platform/android/ClipboardAndroid.cpp:
+        (WebCore::Clipboard::create):
+        * platform/android/DragDataAndroid.cpp:
+        * platform/brew/ClipboardBrew.cpp:
+        (WebCore::Clipboard::create):
+        * platform/brew/DragDataBrew.cpp:
+        * platform/chromium/ClipboardChromium.cpp:
+        (WebCore::Clipboard::create):
+        (WebCore::ClipboardChromium::ClipboardChromium):
+        (WebCore::ClipboardChromium::create):
+        (WebCore::ClipboardChromium::files):
+        * platform/chromium/ClipboardChromium.h:
+        * platform/chromium/DragDataChromium.cpp:
+        * platform/efl/ClipboardEfl.cpp:
+        (WebCore::Editor::newGeneralClipboard):
+        (WebCore::Clipboard::create):
+        * platform/efl/DragDataEfl.cpp:
+        * platform/gtk/ClipboardGtk.cpp:
+        (WebCore::Editor::newGeneralClipboard):
+        (WebCore::Clipboard::create):
+        (WebCore::ClipboardGtk::ClipboardGtk):
+        (WebCore::ClipboardGtk::files):
+        * platform/gtk/ClipboardGtk.h:
+        (WebCore::ClipboardGtk::create):
+        * platform/gtk/DragDataGtk.cpp:
+        * platform/haiku/ClipboardHaiku.cpp:
+        (WebCore::Clipboard::create):
+        * platform/haiku/DragDataHaiku.cpp:
+        * platform/mac/ClipboardMac.mm:
+        (WebCore::Clipboard::create):
+        (WebCore::ClipboardMac::files):
+        * platform/mac/DragDataMac.mm:
+        * platform/qt/ClipboardQt.cpp:
+        (WebCore::Clipboard::create):
+        * platform/qt/DragDataQt.cpp:
+        * platform/win/ClipboardWin.cpp:
+        (WebCore::Clipboard::create):
+        (WebCore::ClipboardWin::ClipboardWin):
+        (WebCore::ClipboardWin::files):
+        * platform/win/ClipboardWin.h:
+        (WebCore::ClipboardWin::create):
+        * platform/win/DragDataWin.cpp:
+        * platform/win/EditorWin.cpp:
+        (WebCore::Editor::newGeneralClipboard):
+        * platform/wince/DragDataWince.cpp:
+        * platform/wince/EditorWince.cpp:
+        (WebCore::Editor::newGeneralClipboard):
+        * platform/wx/ClipboardWx.cpp:
+        (WebCore::Clipboard::create):
+        * platform/wx/DragDataWx.cpp:
+
 2010-07-27  Dumitru Daniliuc  <dumi at chromium.org>
 
         Reviewed by David Levin.
diff --git a/WebCore/bindings/js/SerializedScriptValue.cpp b/WebCore/bindings/js/SerializedScriptValue.cpp
index 90f8d7c..6d6fa21 100644
--- a/WebCore/bindings/js/SerializedScriptValue.cpp
+++ b/WebCore/bindings/js/SerializedScriptValue.cpp
@@ -736,18 +736,23 @@ struct DeserializingTreeWalker : public BaseWalker {
                 return jsNumber(m_exec, value.asDouble());
             case SerializedScriptValueData::DateType:
                 return new (m_exec) DateInstance(m_exec, m_globalObject->dateStructure(), value.asDouble());
-            case SerializedScriptValueData::FileType:
+            case SerializedScriptValueData::FileType: {
                 if (!m_isDOMGlobalObject)
                     return jsNull();
-                return toJS(m_exec, static_cast<JSDOMGlobalObject*>(m_globalObject), File::create(value.asString().crossThreadString()));
+                ScriptExecutionContext* scriptExecutionContext = static_cast<JSDOMGlobalObject*>(m_exec->lexicalGlobalObject())->scriptExecutionContext();
+                ASSERT(scriptExecutionContext);
+                return toJS(m_exec, static_cast<JSDOMGlobalObject*>(m_globalObject), File::create(scriptExecutionContext, value.asString().crossThreadString()));
+            }
             case SerializedScriptValueData::FileListType: {
                 if (!m_isDOMGlobalObject)
                     return jsNull();
                 RefPtr<FileList> result = FileList::create();
                 SerializedFileList* serializedFileList = value.asFileList();
                 unsigned length = serializedFileList->length();
+                ScriptExecutionContext* scriptExecutionContext = static_cast<JSDOMGlobalObject*>(m_exec->lexicalGlobalObject())->scriptExecutionContext();
+                ASSERT(scriptExecutionContext);
                 for (unsigned i = 0; i < length; i++)
-                    result->append(File::create(serializedFileList->item(i)));
+                    result->append(File::create(scriptExecutionContext, serializedFileList->item(i)));
                 return toJS(m_exec, static_cast<JSDOMGlobalObject*>(m_globalObject), result.get());
             }
             case SerializedScriptValueData::ImageDataType: {
diff --git a/WebCore/bindings/v8/SerializedScriptValue.cpp b/WebCore/bindings/v8/SerializedScriptValue.cpp
index 47c4c2e..9dc4d0f 100644
--- a/WebCore/bindings/v8/SerializedScriptValue.cpp
+++ b/WebCore/bindings/v8/SerializedScriptValue.cpp
@@ -45,6 +45,7 @@
 #include "V8FileList.h"
 #include "V8ImageData.h"
 #include "V8Proxy.h"
+#include "V8Utilities.h"
 
 #include <wtf/Assertions.h>
 #include <wtf/RefCounted.h>
@@ -854,7 +855,7 @@ private:
         String path;
         if (!readWebCoreString(&path))
             return false;
-        PassRefPtr<Blob> blob = Blob::create(path);
+        PassRefPtr<Blob> blob = Blob::create(getScriptExecutionContext(), path);
         *value = toV8(blob);
         return true;
     }
@@ -864,7 +865,7 @@ private:
         String path;
         if (!readWebCoreString(&path))
             return false;
-        PassRefPtr<File> file = File::create(path);
+        PassRefPtr<File> file = File::create(getScriptExecutionContext(), path);
         *value = toV8(file);
         return true;
     }
@@ -879,7 +880,7 @@ private:
             String path;
             if (!readWebCoreString(&path))
                 return false;
-            fileList->append(File::create(path));
+            fileList->append(File::create(getScriptExecutionContext(), path));
         }
         *value = toV8(fileList);
         return true;
diff --git a/WebCore/dom/Clipboard.h b/WebCore/dom/Clipboard.h
index 4018e4f..0562280 100644
--- a/WebCore/dom/Clipboard.h
+++ b/WebCore/dom/Clipboard.h
@@ -33,11 +33,15 @@
 
 namespace WebCore {
 
+    class DragData;
     class FileList;
+    class Frame;
 
     // State available during IE's events for drag and drop and copy/paste
     class Clipboard : public RefCounted<Clipboard> {
     public:
+        static PassRefPtr<Clipboard> create(ClipboardAccessPolicy, DragData*, Frame*);
+
         virtual ~Clipboard() { }
 
         // Is this operation a drag-drop or a copy-paste?
diff --git a/WebCore/editing/Editor.cpp b/WebCore/editing/Editor.cpp
index 76b5a90..44d8d5f 100644
--- a/WebCore/editing/Editor.cpp
+++ b/WebCore/editing/Editor.cpp
@@ -713,7 +713,7 @@ bool Editor::dispatchCPPEvent(const AtomicString &eventType, ClipboardAccessPoli
         return true;
     target = target->shadowAncestorNode();
     
-    RefPtr<Clipboard> clipboard = newGeneralClipboard(policy);
+    RefPtr<Clipboard> clipboard = newGeneralClipboard(policy, m_frame);
 
     ExceptionCode ec = 0;
     RefPtr<Event> evt = ClipboardEvent::create(eventType, true, true, clipboard);
diff --git a/WebCore/editing/Editor.h b/WebCore/editing/Editor.h
index cd1b204..db249e7 100644
--- a/WebCore/editing/Editor.h
+++ b/WebCore/editing/Editor.h
@@ -42,6 +42,7 @@ class DeleteButtonController;
 class EditCommand;
 class EditorClient;
 class EditorInternalCommand;
+class Frame;
 class HTMLElement;
 class HitTestResult;
 class KillRing;
@@ -309,7 +310,7 @@ private:
 
     bool canDeleteRange(Range*) const;
     bool canSmartReplaceWithPasteboard(Pasteboard*);
-    PassRefPtr<Clipboard> newGeneralClipboard(ClipboardAccessPolicy);
+    PassRefPtr<Clipboard> newGeneralClipboard(ClipboardAccessPolicy, Frame*);
     void pasteAsPlainTextWithPasteboard(Pasteboard*);
     void pasteWithPasteboard(Pasteboard*, bool allowPlainText);
     void replaceSelectionWithFragment(PassRefPtr<DocumentFragment>, bool selectReplacement, bool smartReplace, bool matchStyle);
diff --git a/WebCore/editing/android/EditorAndroid.cpp b/WebCore/editing/android/EditorAndroid.cpp
index 8e00326..61cce01 100644
--- a/WebCore/editing/android/EditorAndroid.cpp
+++ b/WebCore/editing/android/EditorAndroid.cpp
@@ -31,7 +31,7 @@
 
 namespace WebCore {
 
-PassRefPtr<Clipboard> Editor::newGeneralClipboard(ClipboardAccessPolicy policy)
+PassRefPtr<Clipboard> Editor::newGeneralClipboard(ClipboardAccessPolicy policy, Frame*)
 {
     return new ClipboardAndroid(policy, false);
 }
diff --git a/WebCore/editing/brew/EditorBrew.cpp b/WebCore/editing/brew/EditorBrew.cpp
index b610b62..4a1f4d7 100644
--- a/WebCore/editing/brew/EditorBrew.cpp
+++ b/WebCore/editing/brew/EditorBrew.cpp
@@ -31,7 +31,7 @@
 
 namespace WebCore {
 
-PassRefPtr<Clipboard> Editor::newGeneralClipboard(ClipboardAccessPolicy policy)
+PassRefPtr<Clipboard> Editor::newGeneralClipboard(ClipboardAccessPolicy policy, Frame*)
 {
     return new ClipboardBrew(policy, false);
 }
diff --git a/WebCore/editing/chromium/EditorChromium.cpp b/WebCore/editing/chromium/EditorChromium.cpp
index 1ea085b..7a13b12 100644
--- a/WebCore/editing/chromium/EditorChromium.cpp
+++ b/WebCore/editing/chromium/EditorChromium.cpp
@@ -33,12 +33,13 @@
 
 #include "ChromiumDataObject.h"
 #include "ClipboardChromium.h"
+#include "Frame.h"
 
 namespace WebCore {
 
-PassRefPtr<Clipboard> Editor::newGeneralClipboard(ClipboardAccessPolicy policy)
+PassRefPtr<Clipboard> Editor::newGeneralClipboard(ClipboardAccessPolicy policy, Frame* frame)
 {
-    return ClipboardChromium::create(false, ChromiumDataObject::create(), policy);
+    return ClipboardChromium::create(false, ChromiumDataObject::create(), policy, frame);
 }
 
 } // namespace WebCore
diff --git a/WebCore/editing/haiku/EditorHaiku.cpp b/WebCore/editing/haiku/EditorHaiku.cpp
index 723d4ff..4596c9e 100644
--- a/WebCore/editing/haiku/EditorHaiku.cpp
+++ b/WebCore/editing/haiku/EditorHaiku.cpp
@@ -35,7 +35,7 @@
 
 namespace WebCore {
 
-PassRefPtr<Clipboard> Editor::newGeneralClipboard(ClipboardAccessPolicy policy)
+PassRefPtr<Clipboard> Editor::newGeneralClipboard(ClipboardAccessPolicy policy, Frame*)
 {
     return ClipboardHaiku::create(policy, false);
 }
diff --git a/WebCore/editing/mac/EditorMac.mm b/WebCore/editing/mac/EditorMac.mm
index ca001a2..2c5a602 100644
--- a/WebCore/editing/mac/EditorMac.mm
+++ b/WebCore/editing/mac/EditorMac.mm
@@ -33,9 +33,9 @@
 
 namespace WebCore {
 
-PassRefPtr<Clipboard> Editor::newGeneralClipboard(ClipboardAccessPolicy policy)
+PassRefPtr<Clipboard> Editor::newGeneralClipboard(ClipboardAccessPolicy policy, Frame* frame)
 {
-    return ClipboardMac::create(false, [NSPasteboard generalPasteboard], policy, 0);
+    return ClipboardMac::create(false, [NSPasteboard generalPasteboard], policy, frame);
 }
 
 void Editor::showFontPanel()
diff --git a/WebCore/editing/qt/EditorQt.cpp b/WebCore/editing/qt/EditorQt.cpp
index e74e2f3..7fb3634 100644
--- a/WebCore/editing/qt/EditorQt.cpp
+++ b/WebCore/editing/qt/EditorQt.cpp
@@ -39,7 +39,7 @@
 
 namespace WebCore {
 
-PassRefPtr<Clipboard> Editor::newGeneralClipboard(ClipboardAccessPolicy policy)
+PassRefPtr<Clipboard> Editor::newGeneralClipboard(ClipboardAccessPolicy policy, Frame*)
 {
     return ClipboardQt::create(policy);
 }
diff --git a/WebCore/editing/wx/EditorWx.cpp b/WebCore/editing/wx/EditorWx.cpp
index cb9e836..a2ec654 100644
--- a/WebCore/editing/wx/EditorWx.cpp
+++ b/WebCore/editing/wx/EditorWx.cpp
@@ -31,7 +31,7 @@
 
 namespace WebCore {
 
-PassRefPtr<Clipboard> Editor::newGeneralClipboard(ClipboardAccessPolicy policy) 
+PassRefPtr<Clipboard> Editor::newGeneralClipboard(ClipboardAccessPolicy policy, Frame*) 
 { 
     return ClipboardWx::create(policy, true);
 }
diff --git a/WebCore/html/Blob.cpp b/WebCore/html/Blob.cpp
index 0680d82..a41fb2e 100644
--- a/WebCore/html/Blob.cpp
+++ b/WebCore/html/Blob.cpp
@@ -36,19 +36,19 @@
 
 namespace WebCore {
 
-Blob::Blob(const String& type, const BlobItemList& items)
+Blob::Blob(ScriptExecutionContext*, const String& type, const BlobItemList& items)
     : m_type(type)
 {
     for (size_t i = 0; i < items.size(); ++i)
         m_items.append(items[i]);
 }
 
-Blob::Blob(const PassRefPtr<BlobItem>& item)
+Blob::Blob(ScriptExecutionContext*, const PassRefPtr<BlobItem>& item)
 {
     m_items.append(item);
 }
 
-Blob::Blob(const String& path)
+Blob::Blob(ScriptExecutionContext*, const String& path)
 {
     // Note: this doesn't initialize the type unlike File(path).
     m_items.append(FileBlobItem::create(path));
@@ -71,7 +71,7 @@ const String& Blob::path() const
 }
 
 #if ENABLE(BLOB_SLICE)
-PassRefPtr<Blob> Blob::slice(long long start, long long length, const String& contentType) const
+PassRefPtr<Blob> Blob::slice(ScriptExecutionContext* scriptExecutionContext, long long start, long long length, const String& contentType) const
 {
     if (start < 0)
         start = 0;
@@ -95,7 +95,7 @@ PassRefPtr<Blob> Blob::slice(long long start, long long length, const String& co
         length -= items.last()->size();
         start = 0;
     }
-    return Blob::create(contentType, items);
+    return Blob::create(scriptExecutionContext, contentType, items);
 }
 #endif // ENABLE(BLOB_SLICE)
 
diff --git a/WebCore/html/Blob.h b/WebCore/html/Blob.h
index f5526c7..12ccca7 100644
--- a/WebCore/html/Blob.h
+++ b/WebCore/html/Blob.h
@@ -39,19 +39,21 @@
 
 namespace WebCore {
 
+class ScriptExecutionContext;
+
 class Blob : public RefCounted<Blob> {
 public:
-    static PassRefPtr<Blob> create(const String& type, const BlobItemList& items)
+    static PassRefPtr<Blob> create(ScriptExecutionContext* scriptExecutionContext, const String& type, const BlobItemList& items)
     {
-        return adoptRef(new Blob(type, items));
+        return adoptRef(new Blob(scriptExecutionContext, type, items));
     }
 
     // FIXME: Deprecated method.  This is called only from
     // bindings/v8/SerializedScriptValue.cpp and the usage in it will become invalid once
     // BlobBuilder is introduced.
-    static PassRefPtr<Blob> create(const String& path)
+    static PassRefPtr<Blob> create(ScriptExecutionContext* scriptExecutionContext, const String& path)
     {
-        return adoptRef(new Blob(path));
+        return adoptRef(new Blob(scriptExecutionContext, path));
     }
 
     virtual ~Blob() { }
@@ -66,15 +68,15 @@ public:
     const BlobItemList& items() const { return m_items; }
 
 #if ENABLE(BLOB_SLICE)
-    PassRefPtr<Blob> slice(long long start, long long length, const String& contentType = String()) const;
+    PassRefPtr<Blob> slice(ScriptExecutionContext*, long long start, long long length, const String& contentType = String()) const;
 #endif
 
 protected:
-    Blob(const String& type, const BlobItemList&);
-    Blob(const PassRefPtr<BlobItem>&);
+    Blob(ScriptExecutionContext*, const String& type, const BlobItemList&);
+    Blob(ScriptExecutionContext*, const PassRefPtr<BlobItem>&);
 
     // FIXME: Deprecated constructor.  See also the comment for Blob::create(path).
-    Blob(const String& path);
+    Blob(ScriptExecutionContext*, const String& path);
 
     BlobItemList m_items;
     String m_type;
diff --git a/WebCore/html/Blob.idl b/WebCore/html/Blob.idl
index 0ae2759..626bb73 100644
--- a/WebCore/html/Blob.idl
+++ b/WebCore/html/Blob.idl
@@ -34,8 +34,10 @@ module html {
         readonly attribute unsigned long long size;
         readonly attribute DOMString type;
 
+#if !defined(LANGUAGE_OBJECTIVE_C)
 #if defined(ENABLE_BLOB_SLICE) && ENABLE_BLOB_SLICE
-        Blob slice(in long long start, in long long length, in [Optional, ConvertUndefinedOrNullToNullString] DOMString contentType);
+        [CallWith=ScriptExecutionContext] Blob slice(in long long start, in long long length, in [Optional, ConvertUndefinedOrNullToNullString] DOMString contentType);
+#endif
 #endif
     };
 
diff --git a/WebCore/html/BlobBuilder.cpp b/WebCore/html/BlobBuilder.cpp
index b2684fc..0592ff0 100644
--- a/WebCore/html/BlobBuilder.cpp
+++ b/WebCore/html/BlobBuilder.cpp
@@ -81,9 +81,9 @@ bool BlobBuilder::append(PassRefPtr<Blob> blob)
     return false;
 }
 
-PassRefPtr<Blob> BlobBuilder::getBlob(const String& contentType) const
+PassRefPtr<Blob> BlobBuilder::getBlob(ScriptExecutionContext* scriptExecutionContext, const String& contentType) const
 {
-    return Blob::create(contentType, m_items);
+    return Blob::create(scriptExecutionContext, contentType, m_items);
 }
 
 } // namespace WebCore
diff --git a/WebCore/html/BlobBuilder.h b/WebCore/html/BlobBuilder.h
index 1173c04..5d1700f 100644
--- a/WebCore/html/BlobBuilder.h
+++ b/WebCore/html/BlobBuilder.h
@@ -38,6 +38,7 @@
 namespace WebCore {
 
 class Blob;
+class ScriptExecutionContext;
 
 typedef int ExceptionCode;
 
@@ -49,7 +50,7 @@ public:
     bool append(const String& text, ExceptionCode&);
     bool append(const String& text, const String& ending, ExceptionCode&);
 
-    PassRefPtr<Blob> getBlob(const String& contentType = String()) const;
+    PassRefPtr<Blob> getBlob(ScriptExecutionContext*, const String& contentType = String()) const;
 
 private:
     BlobItemList m_items;
diff --git a/WebCore/html/BlobBuilder.idl b/WebCore/html/BlobBuilder.idl
index 93cb87f..53c7add 100644
--- a/WebCore/html/BlobBuilder.idl
+++ b/WebCore/html/BlobBuilder.idl
@@ -34,7 +34,9 @@ module html {
         GenerateNativeConverter,
         NoStaticTables
     ] BlobBuilder {
-        Blob getBlob(in [Optional, ConvertUndefinedOrNullToNullString] DOMString contentType);
+#if !defined(LANGUAGE_OBJECTIVE_C)
+        [CallWith=ScriptExecutionContext] Blob getBlob(in [Optional, ConvertUndefinedOrNullToNullString] DOMString contentType);
+#endif
         void append(in Blob blob);
         void append(in DOMString value, in [Optional, ConvertUndefinedOrNullToNullString] DOMString endings) raises (DOMException);
     };
diff --git a/WebCore/html/File.cpp b/WebCore/html/File.cpp
index 4000dcb..109e0d3 100644
--- a/WebCore/html/File.cpp
+++ b/WebCore/html/File.cpp
@@ -31,15 +31,15 @@
 
 namespace WebCore {
 
-File::File(const String& path)
-    : Blob(path)
+File::File(ScriptExecutionContext* scriptExecutionContext, const String& path)
+    : Blob(scriptExecutionContext, path)
 {
     Init();
 }
 
 #if ENABLE(DIRECTORY_UPLOAD)
-File::File(const String& relativePath, const String& filePath)
-    : Blob(FileBlobItem::create(filePath, relativePath))
+File::File(ScriptExecutionContext* scriptExecutionContext, const String& relativePath, const String& filePath)
+    : Blob(scriptExecutionContext, FileBlobItem::create(filePath, relativePath))
 {
     Init();
 }
diff --git a/WebCore/html/File.h b/WebCore/html/File.h
index d685472..c0aecc8 100644
--- a/WebCore/html/File.h
+++ b/WebCore/html/File.h
@@ -34,15 +34,15 @@ namespace WebCore {
 
 class File : public Blob {
 public:
-    static PassRefPtr<File> create(const String& path)
+    static PassRefPtr<File> create(ScriptExecutionContext* scriptExecutionContext, const String& path)
     {
-        return adoptRef(new File(path));
+        return adoptRef(new File(scriptExecutionContext, path));
     }
 
 #if ENABLE(DIRECTORY_UPLOAD)
-    static PassRefPtr<File> create(const String& relativePath, const String& path)
+    static PassRefPtr<File> create(ScriptExecutionContext* scriptExecutionContext, const String& relativePath, const String& path)
     {
-        return adoptRef(new File(relativePath, path));
+        return adoptRef(new File(scriptExecutionContext, relativePath, path));
     }
 #endif
 
@@ -59,11 +59,11 @@ public:
     unsigned long long fileSize() const { return size(); }
 
 private:
-    File(const String& path);
+    File(ScriptExecutionContext*, const String& path);
     void Init();
 
 #if ENABLE(DIRECTORY_UPLOAD)
-    File(const String& relativePath, const String& path);
+    File(ScriptExecutionContext*, const String& relativePath, const String& path);
 #endif
 };
 
diff --git a/WebCore/html/HTMLInputElement.cpp b/WebCore/html/HTMLInputElement.cpp
index a87bfa6..bd3fb4c 100644
--- a/WebCore/html/HTMLInputElement.cpp
+++ b/WebCore/html/HTMLInputElement.cpp
@@ -1342,7 +1342,7 @@ bool HTMLInputElement::appendFormData(FormDataList& encoding, bool multipart)
         // If no filename at all is entered, return successful but empty.
         // Null would be more logical, but Netscape posts an empty file. Argh.
         if (!numFiles) {
-            encoding.appendBlob(name(), File::create(""));
+            encoding.appendBlob(name(), File::create(document()->scriptExecutionContext(), ""));
             return true;
         }
 
@@ -1980,15 +1980,15 @@ void HTMLInputElement::setFileListFromRenderer(const Vector<String>& paths)
         for (int i = 0; i < size; i++) {
             // Normalize backslashes to slashes before exposing the relative path to script.
             String relativePath = paths[i].substring(1 + rootPath.length()).replace('\\','/');
-            m_fileList->append(File::create(relativePath, paths[i]));
+            m_fileList->append(File::create(document()->scriptExecutionContext(), relativePath, paths[i]));
         }
     } else {
         for (int i = 0; i < size; i++)
-            m_fileList->append(File::create(paths[i]));
+            m_fileList->append(File::create(document()->scriptExecutionContext(), paths[i]));
     }
 #else
     for (int i = 0; i < size; i++)
-        m_fileList->append(File::create(paths[i]));
+        m_fileList->append(File::create(document()->scriptExecutionContext(), paths[i]));
 #endif
 
     setFormControlValueMatchesRenderer(true);
diff --git a/WebCore/page/DragController.cpp b/WebCore/page/DragController.cpp
index 716772b..d93a256 100644
--- a/WebCore/page/DragController.cpp
+++ b/WebCore/page/DragController.cpp
@@ -170,7 +170,7 @@ void DragController::dragExited(DragData* dragData)
 
     if (RefPtr<FrameView> v = mainFrame->view()) {
         ClipboardAccessPolicy policy = (!m_documentUnderMouse || m_documentUnderMouse->securityOrigin()->isLocal()) ? ClipboardReadable : ClipboardTypesReadable;
-        RefPtr<Clipboard> clipboard = dragData->createClipboard(policy);
+        RefPtr<Clipboard> clipboard = Clipboard::create(policy, dragData, mainFrame);
         clipboard->setSourceOperation(dragData->draggingSourceOperationMask());
         mainFrame->eventHandler()->cancelDragAndDrop(createMouseEvent(dragData), clipboard.get());
         clipboard->setAccessPolicy(ClipboardNumb);    // invalidate clipboard here for security
@@ -193,7 +193,7 @@ bool DragController::performDrag(DragData* dragData)
         RefPtr<Frame> mainFrame = m_page->mainFrame();
         if (mainFrame->view()) {
             // Sending an event can result in the destruction of the view and part.
-            RefPtr<Clipboard> clipboard = dragData->createClipboard(ClipboardReadable);
+            RefPtr<Clipboard> clipboard = Clipboard::create(ClipboardReadable, dragData, mainFrame.get());
             clipboard->setSourceOperation(dragData->draggingSourceOperationMask());
             mainFrame->eventHandler()->performDragAndDrop(createMouseEvent(dragData), clipboard.get());
             clipboard->setAccessPolicy(ClipboardNumb);    // invalidate clipboard here for security
@@ -524,7 +524,7 @@ bool DragController::tryDHTMLDrag(DragData* dragData, DragOperation& operation)
         return false;
 
     ClipboardAccessPolicy policy = m_documentUnderMouse->securityOrigin()->isLocal() ? ClipboardReadable : ClipboardTypesReadable;
-    RefPtr<Clipboard> clipboard = dragData->createClipboard(policy);
+    RefPtr<Clipboard> clipboard = Clipboard::create(policy, dragData, mainFrame.get());
     DragOperation srcOpMask = dragData->draggingSourceOperationMask();
     clipboard->setSourceOperation(srcOpMask);
 
diff --git a/WebCore/page/chromium/EventHandlerChromium.cpp b/WebCore/page/chromium/EventHandlerChromium.cpp
index ff161af..719163f 100644
--- a/WebCore/page/chromium/EventHandlerChromium.cpp
+++ b/WebCore/page/chromium/EventHandlerChromium.cpp
@@ -129,7 +129,7 @@ bool EventHandler::eventActivatedView(const PlatformMouseEvent& event) const
 PassRefPtr<Clipboard> EventHandler::createDraggingClipboard() const
 {
     RefPtr<ChromiumDataObject> dataObject = ChromiumDataObject::create();
-    return ClipboardChromium::create(true, dataObject.get(), ClipboardWritable);
+    return ClipboardChromium::create(true, dataObject.get(), ClipboardWritable, m_frame);
 }
 
 void EventHandler::focusDocumentView()
diff --git a/WebCore/page/gtk/EventHandlerGtk.cpp b/WebCore/page/gtk/EventHandlerGtk.cpp
index 0ff67d2..429aea6 100644
--- a/WebCore/page/gtk/EventHandlerGtk.cpp
+++ b/WebCore/page/gtk/EventHandlerGtk.cpp
@@ -96,7 +96,7 @@ bool EventHandler::passWheelEventToWidget(PlatformWheelEvent& event, Widget* wid
 
 PassRefPtr<Clipboard> EventHandler::createDraggingClipboard() const
 {
-    return ClipboardGtk::create(ClipboardWritable, DataObjectGtk::create(), true);
+    return ClipboardGtk::create(ClipboardWritable, DataObjectGtk::create(), true, m_frame);
 }
 
 bool EventHandler::passMousePressEventToSubframe(MouseEventWithHitTestResults& mev, Frame* subframe)
diff --git a/WebCore/page/win/EventHandlerWin.cpp b/WebCore/page/win/EventHandlerWin.cpp
index e1d5be9..ee4b360 100644
--- a/WebCore/page/win/EventHandlerWin.cpp
+++ b/WebCore/page/win/EventHandlerWin.cpp
@@ -98,7 +98,7 @@ PassRefPtr<Clipboard> EventHandler::createDraggingClipboard() const
 #else
     COMPtr<WCDataObject> dataObject;
     WCDataObject::createInstance(&dataObject);
-    return ClipboardWin::create(true, dataObject.get(), ClipboardWritable);
+    return ClipboardWin::create(true, dataObject.get(), ClipboardWritable, m_frame);
 #endif
 }
 
diff --git a/WebCore/platform/DragData.h b/WebCore/platform/DragData.h
index d668963..548bc67 100644
--- a/WebCore/platform/DragData.h
+++ b/WebCore/platform/DragData.h
@@ -26,7 +26,6 @@
 #ifndef DragData_h
 #define DragData_h
 
-#include "ClipboardAccessPolicy.h"
 #include "Color.h"
 #include "DragActions.h"
 #include "IntPoint.h"
@@ -68,7 +67,6 @@ typedef void* DragDataRef;
 
 namespace WebCore {
     
-    class Clipboard;
     class Document;
     class DocumentFragment;
     class KURL;
@@ -95,7 +93,6 @@ namespace WebCore {
         const IntPoint& globalPosition() const { return m_globalPosition; }
         DragDataRef platformData() const { return m_platformDragData; }
         DragOperation draggingSourceOperationMask() const { return m_draggingSourceOperationMask; }
-        PassRefPtr<Clipboard> createClipboard(ClipboardAccessPolicy) const;
         bool containsURL(FilenameConversionPolicy filenamePolicy = ConvertFilenames) const;
         bool containsPlainText() const;
         bool containsCompatibleContent() const;
diff --git a/WebCore/platform/android/ClipboardAndroid.cpp b/WebCore/platform/android/ClipboardAndroid.cpp
index 375f980..d9b2d68 100644
--- a/WebCore/platform/android/ClipboardAndroid.cpp
+++ b/WebCore/platform/android/ClipboardAndroid.cpp
@@ -35,6 +35,11 @@
 
 namespace WebCore {
 
+PassRefPtr<Clipboard> Clipboard::create(ClipboardAccessPolicy, DragData*, Frame*)
+{
+    return 0;
+}
+
 ClipboardAndroid::ClipboardAndroid(ClipboardAccessPolicy policy, bool isForDragging)
     : Clipboard(policy, isForDragging)
 {
diff --git a/WebCore/platform/android/DragDataAndroid.cpp b/WebCore/platform/android/DragDataAndroid.cpp
index 756d007..4e99b2c 100644
--- a/WebCore/platform/android/DragDataAndroid.cpp
+++ b/WebCore/platform/android/DragDataAndroid.cpp
@@ -27,7 +27,6 @@
 #include "config.h"
 #include "DragData.h"
 
-#include "Clipboard.h"
 #include "Document.h"
 #include "DocumentFragment.h"
 
@@ -58,11 +57,6 @@ Color DragData::asColor() const
     return Color();
 }
     
-PassRefPtr<Clipboard> DragData::createClipboard(ClipboardAccessPolicy) const
-{
-    return 0;
-}
-    
 bool DragData::containsCompatibleContent() const
 {
     return false;
diff --git a/WebCore/platform/brew/ClipboardBrew.cpp b/WebCore/platform/brew/ClipboardBrew.cpp
index 3fd085a..720d6a6 100644
--- a/WebCore/platform/brew/ClipboardBrew.cpp
+++ b/WebCore/platform/brew/ClipboardBrew.cpp
@@ -36,6 +36,11 @@
 
 namespace WebCore {
 
+PassRefPtr<Clipboard> Clipboard::create(ClipboardAccessPolicy, DragData*, Frame*)
+{
+    return 0;
+}
+
 ClipboardBrew::ClipboardBrew(ClipboardAccessPolicy policy, bool isForDragging)
     : Clipboard(policy, isForDragging)
 {
diff --git a/WebCore/platform/brew/DragDataBrew.cpp b/WebCore/platform/brew/DragDataBrew.cpp
index eec8bc4..d114fd6 100644
--- a/WebCore/platform/brew/DragDataBrew.cpp
+++ b/WebCore/platform/brew/DragDataBrew.cpp
@@ -27,7 +27,6 @@
 #include "config.h"
 #include "DragData.h"
 
-#include "Clipboard.h"
 #include "Document.h"
 #include "DocumentFragment.h"
 
@@ -58,11 +57,6 @@ Color DragData::asColor() const
     return Color();
 }
 
-PassRefPtr<Clipboard> DragData::createClipboard(ClipboardAccessPolicy) const
-{
-    return 0;
-}
-
 bool DragData::containsCompatibleContent() const
 {
     return false;
diff --git a/WebCore/platform/chromium/ClipboardChromium.cpp b/WebCore/platform/chromium/ClipboardChromium.cpp
index 8aad8aa..06244a2 100644
--- a/WebCore/platform/chromium/ClipboardChromium.cpp
+++ b/WebCore/platform/chromium/ClipboardChromium.cpp
@@ -32,6 +32,7 @@
 #include "ChromiumDataObject.h"
 #include "ClipboardUtilitiesChromium.h"
 #include "Document.h"
+#include "DragData.h"
 #include "Element.h"
 #include "FileList.h"
 #include "Frame.h"
@@ -43,6 +44,7 @@
 #include "PlatformString.h"
 #include "Range.h"
 #include "RenderImage.h"
+#include "ScriptExecutionContext.h"
 #include "StringBuilder.h"
 #include "markup.h"
 
@@ -89,18 +91,25 @@ static ClipboardDataType clipboardTypeFromMIMEType(const String& type)
     return ClipboardDataTypeOther;
 }
 
+PassRefPtr<Clipboard> Clipboard::create(ClipboardAccessPolicy policy, DragData* dragData, Frame* frame)
+{
+    return ClipboardChromium::create(true, dragData->platformData(), policy, frame);
+}
+
 ClipboardChromium::ClipboardChromium(bool isForDragging,
                                      PassRefPtr<ChromiumDataObject> dataObject,
-                                     ClipboardAccessPolicy policy)
+                                     ClipboardAccessPolicy policy,
+                                     Frame* frame)
     : Clipboard(policy, isForDragging)
     , m_dataObject(dataObject)
+    , m_frame(frame)
 {
 }
 
 PassRefPtr<ClipboardChromium> ClipboardChromium::create(bool isForDragging,
-    PassRefPtr<ChromiumDataObject> dataObject, ClipboardAccessPolicy policy)
+    PassRefPtr<ChromiumDataObject> dataObject, ClipboardAccessPolicy policy, Frame* frame)
 {
-    return adoptRef(new ClipboardChromium(isForDragging, dataObject, policy));
+    return adoptRef(new ClipboardChromium(isForDragging, dataObject, policy, frame));
 }
 
 void ClipboardChromium::clearData(const String& type)
@@ -355,9 +364,10 @@ PassRefPtr<FileList> ClipboardChromium::files() const
     if (!m_dataObject || m_dataObject->filenames.isEmpty())
         return FileList::create();
 
+    ScriptExecutionContext* scriptExecutionContext = m_frame->document()->scriptExecutionContext();
     RefPtr<FileList> fileList = FileList::create();
     for (size_t i = 0; i < m_dataObject->filenames.size(); ++i)
-        fileList->append(File::create(m_dataObject->filenames.at(i)));
+        fileList->append(File::create(scriptExecutionContext, m_dataObject->filenames.at(i)));
 
     return fileList.release();
 }
diff --git a/WebCore/platform/chromium/ClipboardChromium.h b/WebCore/platform/chromium/ClipboardChromium.h
index fbebde2..a4150d0 100644
--- a/WebCore/platform/chromium/ClipboardChromium.h
+++ b/WebCore/platform/chromium/ClipboardChromium.h
@@ -38,6 +38,7 @@ namespace WebCore {
 
     class CachedImage;
     class ChromiumDataObject;
+    class Frame;
     class IntPoint;
 
     class ClipboardChromium : public Clipboard, public CachedResourceClient {
@@ -45,7 +46,7 @@ namespace WebCore {
         ~ClipboardChromium() {}
 
         static PassRefPtr<ClipboardChromium> create(
-            bool isForDragging, PassRefPtr<ChromiumDataObject>, ClipboardAccessPolicy);
+            bool isForDragging, PassRefPtr<ChromiumDataObject>, ClipboardAccessPolicy, Frame*);
 
         // Returns the file name (not including the extension). This removes any
         // invalid file system characters as well as making sure the
@@ -79,11 +80,12 @@ namespace WebCore {
         virtual bool hasData();
 
     private:
-        ClipboardChromium(bool, PassRefPtr<ChromiumDataObject>, ClipboardAccessPolicy);
+        ClipboardChromium(bool, PassRefPtr<ChromiumDataObject>, ClipboardAccessPolicy, Frame*);
 
         void resetFromClipboard();
         void setDragImage(CachedImage*, Node*, const IntPoint&);
         RefPtr<ChromiumDataObject> m_dataObject;
+        Frame* m_frame;
     };
 
 } // namespace WebCore
diff --git a/WebCore/platform/chromium/DragDataChromium.cpp b/WebCore/platform/chromium/DragDataChromium.cpp
index 2c2151a..674d34d 100644
--- a/WebCore/platform/chromium/DragDataChromium.cpp
+++ b/WebCore/platform/chromium/DragDataChromium.cpp
@@ -32,8 +32,6 @@
 
 #include "ChromiumBridge.h"
 #include "ChromiumDataObject.h"
-#include "Clipboard.h"
-#include "ClipboardChromium.h"
 #include "DocumentFragment.h"
 #include "FileSystem.h"
 #include "KURL.h"
@@ -48,14 +46,6 @@ static bool containsHTML(const ChromiumDataObject* dropData)
     return dropData->textHtml.length() > 0;
 }
 
-PassRefPtr<Clipboard> DragData::createClipboard(ClipboardAccessPolicy policy) const
-{
-    RefPtr<ClipboardChromium> clipboard = ClipboardChromium::create(true,
-        m_platformDragData, policy);
-
-    return clipboard.release();
-}
-
 bool DragData::containsURL(FilenameConversionPolicy filenamePolicy) const
 {
     return !asURL(filenamePolicy).isEmpty();
diff --git a/WebCore/platform/efl/ClipboardEfl.cpp b/WebCore/platform/efl/ClipboardEfl.cpp
index 6ef51cf..1633ccb 100644
--- a/WebCore/platform/efl/ClipboardEfl.cpp
+++ b/WebCore/platform/efl/ClipboardEfl.cpp
@@ -27,11 +27,16 @@
 #include "StringHash.h"
 
 namespace WebCore {
-PassRefPtr<Clipboard> Editor::newGeneralClipboard(ClipboardAccessPolicy policy)
+PassRefPtr<Clipboard> Editor::newGeneralClipboard(ClipboardAccessPolicy policy, Frame*)
 {
     return new ClipboardEfl(policy, false);
 }
 
+PassRefPtr<Clipboard> Clipboard::create(ClipboardAccessPolicy, DragData*, Frame*)
+{
+    return 0;
+}
+
 ClipboardEfl::ClipboardEfl(ClipboardAccessPolicy policy, bool forDragging)
     : Clipboard(policy, forDragging)
 {
diff --git a/WebCore/platform/efl/DragDataEfl.cpp b/WebCore/platform/efl/DragDataEfl.cpp
index f6b446c..a8458d6 100644
--- a/WebCore/platform/efl/DragDataEfl.cpp
+++ b/WebCore/platform/efl/DragDataEfl.cpp
@@ -21,7 +21,6 @@
 #include "config.h"
 #include "DragData.h"
 
-#include "Clipboard.h"
 #include "Document.h"
 #include "DocumentFragment.h"
 
@@ -61,11 +60,6 @@ Color DragData::asColor() const
     return Color();
 }
 
-PassRefPtr<Clipboard> DragData::createClipboard(ClipboardAccessPolicy) const
-{
-    return 0;
-}
-
 bool DragData::containsCompatibleContent() const
 {
     return false;
diff --git a/WebCore/platform/gtk/ClipboardGtk.cpp b/WebCore/platform/gtk/ClipboardGtk.cpp
index 924fabc..c08b03f 100644
--- a/WebCore/platform/gtk/ClipboardGtk.cpp
+++ b/WebCore/platform/gtk/ClipboardGtk.cpp
@@ -18,6 +18,7 @@
 #include "ClipboardGtk.h"
 
 #include "CachedImage.h"
+#include "DragData.h"
 #include "Editor.h"
 #include "Element.h"
 #include "FileList.h"
@@ -27,6 +28,7 @@
 #include "Pasteboard.h"
 #include "PasteboardHelper.h"
 #include "RenderImage.h"
+#include "ScriptExecutionContext.h"
 #include "StringHash.h"
 #include "markup.h"
 #include <wtf/text/CString.h>
@@ -43,24 +45,31 @@ enum ClipboardType {
     ClipboardTypeUnknown
 };
 
-PassRefPtr<Clipboard> Editor::newGeneralClipboard(ClipboardAccessPolicy policy)
+PassRefPtr<Clipboard> Editor::newGeneralClipboard(ClipboardAccessPolicy policy, Frame* frame)
 {
-    return ClipboardGtk::create(policy, gtk_clipboard_get_for_display(gdk_display_get_default(), GDK_SELECTION_CLIPBOARD), false);
+    return ClipboardGtk::create(policy, gtk_clipboard_get_for_display(gdk_display_get_default(), GDK_SELECTION_CLIPBOARD), false, frame);
 }
 
-ClipboardGtk::ClipboardGtk(ClipboardAccessPolicy policy, GtkClipboard* clipboard)
+PassRefPtr<Clipboard> Clipboard::create(ClipboardAccessPolicy policy, DragData* dragData, Frame* frame)
+{
+    return ClipboardGtk::create(policy, dragData->platformData(), true, frame);
+}
+
+ClipboardGtk::ClipboardGtk(ClipboardAccessPolicy policy, GtkClipboard* clipboard, Frame* frame)
     : Clipboard(policy, false)
     , m_dataObject(DataObjectGtk::forClipboard(clipboard))
     , m_clipboard(clipboard)
     , m_helper(Pasteboard::generalPasteboard()->helper())
+    , m_frame(frame)
 {
 }
 
-ClipboardGtk::ClipboardGtk(ClipboardAccessPolicy policy, PassRefPtr<DataObjectGtk> dataObject, bool forDragging)
+ClipboardGtk::ClipboardGtk(ClipboardAccessPolicy policy, PassRefPtr<DataObjectGtk> dataObject, bool forDragging, Frame* frame)
     : Clipboard(policy, forDragging)
     , m_dataObject(dataObject)
     , m_clipboard(0)
     , m_helper(Pasteboard::generalPasteboard()->helper())
+    , m_frame(frame)
 {
 }
 
@@ -255,8 +264,9 @@ PassRefPtr<FileList> ClipboardGtk::files() const
     RefPtr<FileList> fileList = FileList::create();
     Vector<String> fileVector(m_dataObject->files());
 
+    ScriptExecutionContext* scriptExecutionContext = m_frame->document()->scriptExecutionContext();
     for (size_t i = 0; i < fileVector.size(); i++)
-        fileList->append(File::create(fileVector[i]));
+        fileList->append(File::create(scriptExecutionContext, fileVector[i]));
 
     return fileList.release();
 }
diff --git a/WebCore/platform/gtk/ClipboardGtk.h b/WebCore/platform/gtk/ClipboardGtk.h
index c3438c4..5b42ac6 100644
--- a/WebCore/platform/gtk/ClipboardGtk.h
+++ b/WebCore/platform/gtk/ClipboardGtk.h
@@ -34,20 +34,21 @@ typedef struct _GtkClipboard GtkClipboard;
 
 namespace WebCore {
     class CachedImage;
+    class Frame;
     class PasteboardHelper;
 
     // State available during IE's events for drag and drop and copy/paste
     // Created from the EventHandlerGtk to be used by the dom
     class ClipboardGtk : public Clipboard {
     public:
-        static PassRefPtr<ClipboardGtk> create(ClipboardAccessPolicy policy, GtkClipboard* clipboard, bool isForDragging)
+        static PassRefPtr<ClipboardGtk> create(ClipboardAccessPolicy policy, GtkClipboard* clipboard, bool isForDragging, Frame* frame)
         {
-            return adoptRef(new ClipboardGtk(policy, clipboard));
+            return adoptRef(new ClipboardGtk(policy, clipboard, frame));
         }
 
-        static PassRefPtr<ClipboardGtk> create(ClipboardAccessPolicy policy, PassRefPtr<DataObjectGtk> dataObject, bool isForDragging)
+        static PassRefPtr<ClipboardGtk> create(ClipboardAccessPolicy policy, PassRefPtr<DataObjectGtk> dataObject, bool isForDragging, Frame* frame)
         {
-            return adoptRef(new ClipboardGtk(policy, dataObject, isForDragging));
+            return adoptRef(new ClipboardGtk(policy, dataObject, isForDragging, frame));
         }
         virtual ~ClipboardGtk();
 
@@ -77,12 +78,13 @@ namespace WebCore {
         PassRefPtr<DataObjectGtk> dataObject() { return m_dataObject; }
 
     private:
-        ClipboardGtk(ClipboardAccessPolicy, GtkClipboard*);
-        ClipboardGtk(ClipboardAccessPolicy, PassRefPtr<DataObjectGtk>, bool);
+        ClipboardGtk(ClipboardAccessPolicy, GtkClipboard*, Frame*);
+        ClipboardGtk(ClipboardAccessPolicy, PassRefPtr<DataObjectGtk>, bool, Frame*);
 
         RefPtr<DataObjectGtk> m_dataObject;
         GtkClipboard* m_clipboard;
         PasteboardHelper* m_helper;
+        Frame* m_frame;
     };
 }
 
diff --git a/WebCore/platform/gtk/DragDataGtk.cpp b/WebCore/platform/gtk/DragDataGtk.cpp
index 68f7ffc..69966aa 100644
--- a/WebCore/platform/gtk/DragDataGtk.cpp
+++ b/WebCore/platform/gtk/DragDataGtk.cpp
@@ -62,11 +62,6 @@ Color DragData::asColor() const
     return Color();
 }
 
-PassRefPtr<Clipboard> DragData::createClipboard(ClipboardAccessPolicy policy) const
-{
-    return ClipboardGtk::create(policy, m_platformDragData, true);
-}
-
 bool DragData::containsCompatibleContent() const
 {
     return containsPlainText() || containsURL() || m_platformDragData->hasMarkup() || containsColor() || containsFiles();
diff --git a/WebCore/platform/haiku/ClipboardHaiku.cpp b/WebCore/platform/haiku/ClipboardHaiku.cpp
index f73be01..9931131 100644
--- a/WebCore/platform/haiku/ClipboardHaiku.cpp
+++ b/WebCore/platform/haiku/ClipboardHaiku.cpp
@@ -42,6 +42,11 @@
 
 namespace WebCore {
 
+PassRefPtr<Clipboard> Clipboard::create(ClipboardAccessPolicy policy, DragData*, Frame*)
+{
+    return ClipboardHaiku::create(policy, true);
+}
+
 ClipboardHaiku::ClipboardHaiku(ClipboardAccessPolicy policy, bool forDragging)
     : Clipboard(policy, forDragging)
 {
diff --git a/WebCore/platform/haiku/DragDataHaiku.cpp b/WebCore/platform/haiku/DragDataHaiku.cpp
index 7f40b8a..7c2dc9c 100644
--- a/WebCore/platform/haiku/DragDataHaiku.cpp
+++ b/WebCore/platform/haiku/DragDataHaiku.cpp
@@ -27,7 +27,6 @@
 #include "config.h"
 #include "DragData.h"
 
-#include "ClipboardHaiku.h"
 #include "Document.h"
 #include "DocumentFragment.h"
 #include "NotImplemented.h"
@@ -76,11 +75,6 @@ Color DragData::asColor() const
     return Color();
 }
 
-WTF::PassRefPtr<Clipboard> DragData::createClipboard(ClipboardAccessPolicy policy) const
-{
-    return ClipboardHaiku::create(policy, true);
-}
-
 bool DragData::containsCompatibleContent() const
 {
     return containsColor() || containsURL() || containsPlainText();
diff --git a/WebCore/platform/mac/ClipboardMac.mm b/WebCore/platform/mac/ClipboardMac.mm
index ddfa0d5..0cbb3f6 100644
--- a/WebCore/platform/mac/ClipboardMac.mm
+++ b/WebCore/platform/mac/ClipboardMac.mm
@@ -29,6 +29,7 @@
 #import "DOMElementInternal.h"
 #import "DragClient.h"
 #import "DragController.h"
+#import "DragData.h"
 #import "Editor.h"
 #import "FoundationExtras.h"
 #import "FileList.h"
@@ -37,6 +38,7 @@
 #import "Page.h"
 #import "Pasteboard.h"
 #import "RenderImage.h"
+#import "ScriptExecutionContext.h"
 #import "SecurityOrigin.h"
 #import "WebCoreSystemInterface.h"
 
@@ -46,6 +48,11 @@ typedef unsigned NSUInteger;
 
 namespace WebCore {
 
+PassRefPtr<Clipboard> Clipboard::create(ClipboardAccessPolicy policy, DragData* dragData, Frame* frame)
+{
+    return ClipboardMac::create(true, [dragData->platformData() draggingPasteboard], policy, frame);
+}
+
 ClipboardMac::ClipboardMac(bool forDragging, NSPasteboard *pasteboard, ClipboardAccessPolicy policy, Frame *frame)
     : Clipboard(policy, forDragging)
     , m_pasteboard(pasteboard)
@@ -306,11 +313,12 @@ PassRefPtr<FileList> ClipboardMac::files() const
     NSArray *absoluteURLs = absoluteURLsFromPasteboardFilenames(m_pasteboard.get());
     NSUInteger count = [absoluteURLs count];
 
+    ScriptExecutionContext* scriptExecutionContext = m_frame->document()->scriptExecutionContext();
     RefPtr<FileList> fileList = FileList::create();
     for (NSUInteger x = 0; x < count; x++) {
         NSURL *absoluteURL = [NSURL URLWithString:[absoluteURLs objectAtIndex:x]];
         ASSERT([absoluteURL isFileURL]);
-        fileList->append(File::create([absoluteURL path]));
+        fileList->append(File::create(scriptExecutionContext, [absoluteURL path]));
     }
     return fileList.release(); // We will always return a FileList, sometimes empty
 }
diff --git a/WebCore/platform/mac/DragDataMac.mm b/WebCore/platform/mac/DragDataMac.mm
index fa416ed..9cb4836 100644
--- a/WebCore/platform/mac/DragDataMac.mm
+++ b/WebCore/platform/mac/DragDataMac.mm
@@ -27,8 +27,6 @@
 #import "DragData.h"
 
 #if ENABLE(DRAG_SUPPORT)
-#import "ClipboardMac.h"
-#import "ClipboardAccessPolicy.h"
 #import "Document.h"
 #import "DocumentFragment.h"
 #import "DOMDocumentFragment.h"
@@ -100,11 +98,6 @@ Color DragData::asColor() const
                     (int)([color blueComponent] * 255.0 + 0.5), (int)([color alphaComponent] * 255.0 + 0.5));
 }
 
-PassRefPtr<Clipboard> DragData::createClipboard(ClipboardAccessPolicy policy) const
-{
-    return ClipboardMac::create(true, [m_platformDragData draggingPasteboard], policy, 0);
-}
-
 bool DragData::containsCompatibleContent() const
 {
     NSPasteboard *pasteboard = [m_platformDragData draggingPasteboard];
diff --git a/WebCore/platform/qt/ClipboardQt.cpp b/WebCore/platform/qt/ClipboardQt.cpp
index 7d22349..6ca4830 100644
--- a/WebCore/platform/qt/ClipboardQt.cpp
+++ b/WebCore/platform/qt/ClipboardQt.cpp
@@ -31,6 +31,7 @@
 #include "CSSHelper.h"
 #include "CachedImage.h"
 #include "Document.h"
+#include "DragData.h"
 #include "Element.h"
 #include "FileList.h"
 #include "Frame.h"
@@ -68,6 +69,11 @@ static bool isHtmlMimeType(const String& type)
     return type == "text/html" || type.startsWith("text/html;");
 }
 
+PassRefPtr<Clipboard> Clipboard::create(ClipboardAccessPolicy policy, DragData* dragData, Frame*)
+{
+    return ClipboardQt::create(policy, dragData->platformData());
+}
+
 ClipboardQt::ClipboardQt(ClipboardAccessPolicy policy, const QMimeData* readableClipboard)
     : Clipboard(policy, true)
     , m_readableData(readableClipboard)
diff --git a/WebCore/platform/qt/DragDataQt.cpp b/WebCore/platform/qt/DragDataQt.cpp
index 808606d..4033123 100644
--- a/WebCore/platform/qt/DragDataQt.cpp
+++ b/WebCore/platform/qt/DragDataQt.cpp
@@ -26,7 +26,6 @@
 #include "config.h"
 #include "DragData.h"
 
-#include "ClipboardQt.h"
 #include "Document.h"
 #include "DocumentFragment.h"
 #include "markup.h"
@@ -100,11 +99,6 @@ Color DragData::asColor() const
     return qvariant_cast<QColor>(m_platformDragData->colorData());
 }
 
-PassRefPtr<Clipboard> DragData::createClipboard(ClipboardAccessPolicy policy) const
-{
-    return ClipboardQt::create(policy, m_platformDragData);
-}
-
 bool DragData::containsCompatibleContent() const
 {
     if (!m_platformDragData)
diff --git a/WebCore/platform/win/ClipboardWin.cpp b/WebCore/platform/win/ClipboardWin.cpp
index 2cd6feb..fad1646 100644
--- a/WebCore/platform/win/ClipboardWin.cpp
+++ b/WebCore/platform/win/ClipboardWin.cpp
@@ -393,17 +393,24 @@ exit:
     return hr;
 }
 
-ClipboardWin::ClipboardWin(bool isForDragging, IDataObject* dataObject, ClipboardAccessPolicy policy)
+PassRefPtr<Clipboard> Clipboard::create(ClipboardAccessPolicy policy, DragData* dragData, Frame* frame)
+{
+    return ClipboardWin::create(true, dragData->platformData(), policy, frame);
+}
+
+ClipboardWin::ClipboardWin(bool isForDragging, IDataObject* dataObject, ClipboardAccessPolicy policy, Frame* frame)
     : Clipboard(policy, isForDragging)
     , m_dataObject(dataObject)
     , m_writableDataObject(0)
+    , m_frame(frame)
 {
 }
 
-ClipboardWin::ClipboardWin(bool isForDragging, WCDataObject* dataObject, ClipboardAccessPolicy policy)
+ClipboardWin::ClipboardWin(bool isForDragging, WCDataObject* dataObject, ClipboardAccessPolicy policy, Frame* frame)
     : Clipboard(policy, isForDragging)
     , m_dataObject(dataObject)
     , m_writableDataObject(dataObject)
+    , m_frame(frame)
 {
 }
 
@@ -589,12 +596,13 @@ PassRefPtr<FileList> ClipboardWin::files() const
     if (!hdrop)
         return files.release();
 
+    ScriptExecutionContext* scriptExecutionContext = m_frame->document()->scriptExecutionContext();
     WCHAR filename[MAX_PATH];
     UINT fileCount = DragQueryFileW(hdrop, 0xFFFFFFFF, 0, 0);
     for (UINT i = 0; i < fileCount; i++) {
         if (!DragQueryFileW(hdrop, i, filename, ARRAYSIZE(filename)))
             continue;
-        files->append(File::create(reinterpret_cast<UChar*>(filename)));
+        files->append(File::create(scriptExecutionContext, reinterpret_cast<UChar*>(filename)));
     }
 
     GlobalUnlock(medium.hGlobal);
diff --git a/WebCore/platform/win/ClipboardWin.h b/WebCore/platform/win/ClipboardWin.h
index 1b139ed..6a08087 100644
--- a/WebCore/platform/win/ClipboardWin.h
+++ b/WebCore/platform/win/ClipboardWin.h
@@ -35,19 +35,20 @@ struct IDataObject;
 namespace WebCore {
 
 class CachedImage;
+class Frame;
 class IntPoint;
 class WCDataObject;
 
 // State available during IE's events for drag and drop and copy/paste
 class ClipboardWin : public Clipboard, public CachedResourceClient {
 public:
-    static PassRefPtr<ClipboardWin> create(bool isForDragging, IDataObject* dataObject, ClipboardAccessPolicy policy)
+    static PassRefPtr<ClipboardWin> create(bool isForDragging, IDataObject* dataObject, ClipboardAccessPolicy policy, Frame* frame)
     {
-        return adoptRef(new ClipboardWin(isForDragging, dataObject, policy));
+        return adoptRef(new ClipboardWin(isForDragging, dataObject, policy, frame));
     }
-    static PassRefPtr<ClipboardWin> create(bool isForDragging, WCDataObject* dataObject, ClipboardAccessPolicy policy)
+    static PassRefPtr<ClipboardWin> create(bool isForDragging, WCDataObject* dataObject, ClipboardAccessPolicy policy, Frame* frame)
     {
-        return adoptRef(new ClipboardWin(isForDragging, dataObject, policy));
+        return adoptRef(new ClipboardWin(isForDragging, dataObject, policy, frame));
     }
     ~ClipboardWin();
 
@@ -76,8 +77,8 @@ public:
     void setExternalDataObject(IDataObject *dataObject);
 
 private:
-    ClipboardWin(bool isForDragging, IDataObject*, ClipboardAccessPolicy);
-    ClipboardWin(bool isForDragging, WCDataObject*, ClipboardAccessPolicy);
+    ClipboardWin(bool isForDragging, IDataObject*, ClipboardAccessPolicy, Frame*);
+    ClipboardWin(bool isForDragging, WCDataObject*, ClipboardAccessPolicy, Frame*);
 
     void resetFromClipboard();
     void setDragImage(CachedImage*, Node*, const IntPoint&);
diff --git a/WebCore/platform/win/DragDataWin.cpp b/WebCore/platform/win/DragDataWin.cpp
index 82e537e..05f9103 100644
--- a/WebCore/platform/win/DragDataWin.cpp
+++ b/WebCore/platform/win/DragDataWin.cpp
@@ -26,9 +26,7 @@
 #include "config.h"
 #include "DragData.h"
 
-#include "ClipboardWin.h"
 #include "ClipboardUtilitiesWin.h"
-#include "ClipboardAccessPolicy.h"
 #include "DocumentFragment.h"
 #include "PlatformString.h"
 #include "Markup.h"
@@ -39,11 +37,6 @@
 
 namespace WebCore {
 
-PassRefPtr<Clipboard> DragData::createClipboard(ClipboardAccessPolicy policy) const
-{
-    return ClipboardWin::create(true, m_platformDragData, policy);
-}
-
 bool DragData::containsURL(FilenameConversionPolicy filenamePolicy) const
 {
     return SUCCEEDED(m_platformDragData->QueryGetData(urlWFormat())) 
diff --git a/WebCore/platform/win/EditorWin.cpp b/WebCore/platform/win/EditorWin.cpp
index 09abdbd..075827d 100644
--- a/WebCore/platform/win/EditorWin.cpp
+++ b/WebCore/platform/win/EditorWin.cpp
@@ -30,6 +30,7 @@
 #include "ClipboardWin.h"
 #include "Document.h"
 #include "Element.h"
+#include "Frame.h"
 #include "htmlediting.h"
 #include "TextIterator.h"
 #include "visible_units.h"
@@ -38,13 +39,13 @@
 
 namespace WebCore {
 
-PassRefPtr<Clipboard> Editor::newGeneralClipboard(ClipboardAccessPolicy policy)
+PassRefPtr<Clipboard> Editor::newGeneralClipboard(ClipboardAccessPolicy policy, Frame* frame)
 {
     COMPtr<IDataObject> clipboardData;
     if (!SUCCEEDED(OleGetClipboard(&clipboardData)))
         clipboardData = 0;
 
-    return ClipboardWin::create(false, clipboardData.get(), policy);
+    return ClipboardWin::create(false, clipboardData.get(), policy, frame);
 }
 
 } // namespace WebCore
diff --git a/WebCore/platform/wince/DragDataWince.cpp b/WebCore/platform/wince/DragDataWince.cpp
index 5f2a7ba..73dd8a2 100644
--- a/WebCore/platform/wince/DragDataWince.cpp
+++ b/WebCore/platform/wince/DragDataWince.cpp
@@ -21,17 +21,11 @@
 #include "config.h"
 #include "DragData.h"
 
-#include "Clipboard.h"
 #include "DocumentFragment.h"
 #include "PlatformString.h"
 
 namespace WebCore {
 
-PassRefPtr<Clipboard> DragData::createClipboard(ClipboardAccessPolicy policy) const
-{
-    return 0;
-}
-
 bool DragData::containsURL(FilenameConversionPolicy filenamePolicy) const
 {
     return false;
diff --git a/WebCore/platform/wince/EditorWince.cpp b/WebCore/platform/wince/EditorWince.cpp
index 02af780..71f4db9 100644
--- a/WebCore/platform/wince/EditorWince.cpp
+++ b/WebCore/platform/wince/EditorWince.cpp
@@ -35,7 +35,7 @@
 
 namespace WebCore {
 
-PassRefPtr<Clipboard> Editor::newGeneralClipboard(ClipboardAccessPolicy policy)
+PassRefPtr<Clipboard> Editor::newGeneralClipboard(ClipboardAccessPolicy policy, Frame*)
 {
     return adoptRef(new ClipboardWince(policy, false));
 }
diff --git a/WebCore/platform/wx/ClipboardWx.cpp b/WebCore/platform/wx/ClipboardWx.cpp
index 6100831..25bef55 100644
--- a/WebCore/platform/wx/ClipboardWx.cpp
+++ b/WebCore/platform/wx/ClipboardWx.cpp
@@ -37,6 +37,11 @@
 
 namespace WebCore {
     
+PassRefPtr<Clipboard> Clipboard::create(ClipboardAccessPolicy, DragData*, Frame*)
+{
+    return 0;
+}
+
 ClipboardWx::ClipboardWx(ClipboardAccessPolicy policy, bool forDragging) 
     : Clipboard(policy, forDragging)
 {
diff --git a/WebCore/platform/wx/DragDataWx.cpp b/WebCore/platform/wx/DragDataWx.cpp
index 278f123..35e3753 100644
--- a/WebCore/platform/wx/DragDataWx.cpp
+++ b/WebCore/platform/wx/DragDataWx.cpp
@@ -26,7 +26,6 @@
 #include "config.h"
 #include "DragData.h"
 
-#include "Clipboard.h"
 #include "Document.h"
 #include "DocumentFragment.h"
 
@@ -66,11 +65,6 @@ Color DragData::asColor() const
     return Color();
 }
 
-PassRefPtr<Clipboard> DragData::createClipboard(ClipboardAccessPolicy) const
-{
-    return 0;
-}
-    
 bool DragData::containsCompatibleContent() const
 {
     return false;

-- 
WebKit Debian packaging



More information about the Pkg-webkit-commits mailing list