OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2006, 2007 Apple Inc. All rights reserved. | 2 * Copyright (C) 2006, 2007 Apple Inc. All rights reserved. |
3 * Copyright (C) 2008, 2009 Google Inc. | 3 * Copyright (C) 2008, 2009 Google Inc. |
4 * | 4 * |
5 * Redistribution and use in source and binary forms, with or without | 5 * Redistribution and use in source and binary forms, with or without |
6 * modification, are permitted provided that the following conditions | 6 * modification, are permitted provided that the following conditions |
7 * are met: | 7 * are met: |
8 * 1. Redistributions of source code must retain the above copyright | 8 * 1. Redistributions of source code must retain the above copyright |
9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
10 * 2. Redistributions in binary form must reproduce the above copyright | 10 * 2. Redistributions in binary form must reproduce the above copyright |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
57 // A wrapper class that invalidates a DataTransferItemList when the associated C
lipboard object goes out of scope. | 57 // A wrapper class that invalidates a DataTransferItemList when the associated C
lipboard object goes out of scope. |
58 class DataTransferItemListPolicyWrapper : public DataTransferItemList { | 58 class DataTransferItemListPolicyWrapper : public DataTransferItemList { |
59 public: | 59 public: |
60 static PassRefPtr<DataTransferItemListPolicyWrapper> create(PassRefPtr<Clipb
oardChromium>, PassRefPtr<ChromiumDataObject>); | 60 static PassRefPtr<DataTransferItemListPolicyWrapper> create(PassRefPtr<Clipb
oardChromium>, PassRefPtr<ChromiumDataObject>); |
61 virtual ~DataTransferItemListPolicyWrapper(); | 61 virtual ~DataTransferItemListPolicyWrapper(); |
62 | 62 |
63 virtual size_t length() const; | 63 virtual size_t length() const; |
64 virtual PassRefPtr<DataTransferItem> item(unsigned long index) OVERRIDE; | 64 virtual PassRefPtr<DataTransferItem> item(unsigned long index) OVERRIDE; |
65 virtual void deleteItem(unsigned long index, ExceptionState&) OVERRIDE; | 65 virtual void deleteItem(unsigned long index, ExceptionState&) OVERRIDE; |
66 virtual void clear() OVERRIDE; | 66 virtual void clear() OVERRIDE; |
67 virtual void add(const String& data, const String& type, ExceptionState&) OV
ERRIDE; | 67 virtual PassRefPtr<DataTransferItem> add(const String& data, const String& t
ype, ExceptionState&) OVERRIDE; |
68 virtual void add(PassRefPtr<File>) OVERRIDE; | 68 virtual PassRefPtr<DataTransferItem> add(PassRefPtr<File>) OVERRIDE; |
69 | 69 |
70 private: | 70 private: |
71 DataTransferItemListPolicyWrapper(PassRefPtr<ClipboardChromium>, PassRefPtr<
ChromiumDataObject>); | 71 DataTransferItemListPolicyWrapper(PassRefPtr<ClipboardChromium>, PassRefPtr<
ChromiumDataObject>); |
72 | 72 |
73 RefPtr<ClipboardChromium> m_clipboard; | 73 RefPtr<ClipboardChromium> m_clipboard; |
74 RefPtr<ChromiumDataObject> m_dataObject; | 74 RefPtr<ChromiumDataObject> m_dataObject; |
75 }; | 75 }; |
76 | 76 |
77 | 77 |
78 PassRefPtr<DataTransferItemListPolicyWrapper> DataTransferItemListPolicyWrapper:
:create( | 78 PassRefPtr<DataTransferItemListPolicyWrapper> DataTransferItemListPolicyWrapper:
:create( |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
112 m_dataObject->deleteItem(index); | 112 m_dataObject->deleteItem(index); |
113 } | 113 } |
114 | 114 |
115 void DataTransferItemListPolicyWrapper::clear() | 115 void DataTransferItemListPolicyWrapper::clear() |
116 { | 116 { |
117 if (!m_clipboard->canWriteData()) | 117 if (!m_clipboard->canWriteData()) |
118 return; | 118 return; |
119 m_dataObject->clearAll(); | 119 m_dataObject->clearAll(); |
120 } | 120 } |
121 | 121 |
122 void DataTransferItemListPolicyWrapper::add(const String& data, const String& ty
pe, ExceptionState& es) | 122 PassRefPtr<DataTransferItem> DataTransferItemListPolicyWrapper::add(const String
& data, const String& type, ExceptionState& es) |
123 { | 123 { |
124 if (!m_clipboard->canWriteData()) | 124 if (!m_clipboard->canWriteData()) |
125 return; | 125 return 0; |
126 m_dataObject->add(data, type, es); | 126 RefPtr<ChromiumDataObjectItem> item = m_dataObject->add(data, type, es); |
| 127 if (!item) |
| 128 return 0; |
| 129 return DataTransferItemPolicyWrapper::create(m_clipboard, item); |
127 } | 130 } |
128 | 131 |
129 void DataTransferItemListPolicyWrapper::add(PassRefPtr<File> file) | 132 PassRefPtr<DataTransferItem> DataTransferItemListPolicyWrapper::add(PassRefPtr<F
ile> file) |
130 { | 133 { |
131 if (!m_clipboard->canWriteData()) | 134 if (!m_clipboard->canWriteData()) |
132 return; | 135 return 0; |
133 m_dataObject->add(file, m_clipboard->frame()->document()->scriptExecutionCon
text()); | 136 RefPtr<ChromiumDataObjectItem> item = m_dataObject->add(file, m_clipboard->f
rame()->document()->scriptExecutionContext()); |
| 137 if (!item) |
| 138 return 0; |
| 139 return DataTransferItemPolicyWrapper::create(m_clipboard, item); |
134 } | 140 } |
135 | 141 |
136 DataTransferItemListPolicyWrapper::DataTransferItemListPolicyWrapper( | 142 DataTransferItemListPolicyWrapper::DataTransferItemListPolicyWrapper( |
137 PassRefPtr<ClipboardChromium> clipboard, PassRefPtr<ChromiumDataObject> data
Object) | 143 PassRefPtr<ClipboardChromium> clipboard, PassRefPtr<ChromiumDataObject> data
Object) |
138 : m_clipboard(clipboard) | 144 : m_clipboard(clipboard) |
139 , m_dataObject(dataObject) | 145 , m_dataObject(dataObject) |
140 { | 146 { |
141 } | 147 } |
142 | 148 |
143 } // namespace | 149 } // namespace |
(...skipping 322 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
466 | 472 |
467 PassRefPtr<DataTransferItemList> ClipboardChromium::items() | 473 PassRefPtr<DataTransferItemList> ClipboardChromium::items() |
468 { | 474 { |
469 // FIXME: According to the spec, we are supposed to return the same collecti
on of items each | 475 // FIXME: According to the spec, we are supposed to return the same collecti
on of items each |
470 // time. We now return a wrapper that always wraps the *same* set of items,
so JS shouldn't be | 476 // time. We now return a wrapper that always wraps the *same* set of items,
so JS shouldn't be |
471 // able to tell, but we probably still want to fix this. | 477 // able to tell, but we probably still want to fix this. |
472 return DataTransferItemListPolicyWrapper::create(this, m_dataObject); | 478 return DataTransferItemListPolicyWrapper::create(this, m_dataObject); |
473 } | 479 } |
474 | 480 |
475 } // namespace WebCore | 481 } // namespace WebCore |
OLD | NEW |