Index: third_party/WebKit/Source/core/clipboard/DataObject.cpp |
diff --git a/third_party/WebKit/Source/core/clipboard/DataObject.cpp b/third_party/WebKit/Source/core/clipboard/DataObject.cpp |
index 480e775cbb1b1fceb3fb0315b2f471605f8905c7..799c43096751a5c5713d7462949bde2f78526c6f 100644 |
--- a/third_party/WebKit/Source/core/clipboard/DataObject.cpp |
+++ b/third_party/WebKit/Source/core/clipboard/DataObject.cpp |
@@ -90,10 +90,14 @@ void DataObject::DeleteItem(unsigned long index) { |
if (index >= length()) |
return; |
item_list_.erase(index); |
+ NotifyItemListChanged(); |
} |
void DataObject::ClearAll() { |
+ if (item_list_.IsEmpty()) |
+ return; |
item_list_.clear(); |
+ NotifyItemListChanged(); |
} |
DataObjectItem* DataObject::Add(const String& data, const String& type) { |
@@ -128,6 +132,7 @@ void DataObject::ClearData(const String& type) { |
item_list_[i]->GetType() == type) { |
// Per the spec, type must be unique among all items of kind 'string'. |
item_list_.erase(i); |
+ NotifyItemListChanged(); |
return; |
} |
} |
@@ -256,16 +261,29 @@ bool DataObject::InternalAddStringItem(DataObjectItem* item) { |
} |
item_list_.push_back(item); |
+ NotifyItemListChanged(); |
return true; |
} |
void DataObject::InternalAddFileItem(DataObjectItem* item) { |
DCHECK_EQ(item->Kind(), DataObjectItem::kFileKind); |
item_list_.push_back(item); |
+ NotifyItemListChanged(); |
+} |
+ |
+void DataObject::AddObserver(Observer* observer) { |
+ DCHECK(!observers_.Contains(observer)); |
+ observers_.insert(observer); |
+} |
+ |
+void DataObject::NotifyItemListChanged() const { |
+ for (const auto& observer : observers_) |
+ observer->OnItemListChanged(); |
} |
DEFINE_TRACE(DataObject) { |
visitor->Trace(item_list_); |
+ visitor->Trace(observers_); |
Supplementable<DataObject>::Trace(visitor); |
} |