Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(451)

Unified Diff: ui/views/widget/desktop_aura/desktop_drag_drop_client_aurax11.cc

Issue 17029020: linux_aura: Redo how memory is handled in clipboard/drag code. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fixes for sky; ptal Created 7 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ui/views/widget/desktop_aura/desktop_drag_drop_client_aurax11.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ui/views/widget/desktop_aura/desktop_drag_drop_client_aurax11.cc
diff --git a/ui/views/widget/desktop_aura/desktop_drag_drop_client_aurax11.cc b/ui/views/widget/desktop_aura/desktop_drag_drop_client_aurax11.cc
index 004c19c9c203db7ac1053ee08c5de66d4e58d9b6..953e2d730946127fe0a4e21ea85c853e54ab25bb 100644
--- a/ui/views/widget/desktop_aura/desktop_drag_drop_client_aurax11.cc
+++ b/ui/views/widget/desktop_aura/desktop_drag_drop_client_aurax11.cc
@@ -159,10 +159,7 @@ class DesktopDragDropClientAuraX11::X11DragContext :
void OnSelectionNotify(const XSelectionEvent& xselection);
// Clones the fetched targets.
- scoped_ptr<ui::SelectionFormatMap> CloneFetchedTargets() {
- DCHECK(fetched_targets_);
- return fetched_targets_->Clone();
- }
+ const ui::SelectionFormatMap& fetched_targets() { return fetched_targets_; }
// Reads the "XdndActionList" property from |source_window| and copies it
// into |actions|.
@@ -196,7 +193,7 @@ class DesktopDragDropClientAuraX11::X11DragContext :
gfx::Point screen_point_;
// A SelectionFormatMap of data that we have in our process.
- scoped_ptr<ui::SelectionFormatMap> fetched_targets_;
+ ui::SelectionFormatMap fetched_targets_;
// The names of various data types offered by the other window that we
// haven't fetched and put in |fetched_targets_| yet.
@@ -251,7 +248,7 @@ DesktopDragDropClientAuraX11::X11DragContext::X11DragContext(
// This drag originates from an aura window within our process. This means
// that we can shortcut the X11 server and ask the owning SelectionOwner
// for the data it's offering.
- fetched_targets_ = client->CloneFormatMap();
+ fetched_targets_ = client->GetFormatMap();
unfetched_targets_.clear();
}
@@ -281,7 +278,7 @@ void DesktopDragDropClientAuraX11::X11DragContext::OnStartXdndPositionMessage(
drag_drop_client_ = client;
waiting_to_handle_position_ = true;
- fetched_targets_.reset(new ui::SelectionFormatMap);
+ fetched_targets_ = ui::SelectionFormatMap();
RequestNextTarget();
} else {
client->CompleteXdndPosition(source_window, screen_point);
@@ -306,15 +303,11 @@ void DesktopDragDropClientAuraX11::X11DragContext::OnSelectionNotify(
DCHECK(drag_drop_client_);
DCHECK_EQ(event.property, atom_cache_->GetAtom(kChromiumDragReciever));
- unsigned char* data = NULL;
- size_t data_bytes = 0;
+ scoped_refptr<base::RefCountedMemory> data;
::Atom type = None;
if (ui::GetRawBytesOfProperty(local_window_, event.property,
- &data, &data_bytes, NULL, &type)) {
- char* copied_data = new char[data_bytes];
- memcpy(copied_data, data, data_bytes);
- fetched_targets_->Insert(event.target, copied_data, data_bytes);
- XFree(data);
+ &data, NULL, NULL, &type)) {
+ fetched_targets_.Insert(event.target, data);
}
if (!unfetched_targets_.empty()) {
@@ -517,7 +510,7 @@ void DesktopDragDropClientAuraX11::OnXdndDrop(
aura::client::GetDragDropDelegate(target_window_);
if (delegate) {
ui::OSExchangeData data(new ui::OSExchangeDataProviderAuraX11(
- xwindow_, target_current_context_->CloneFetchedTargets()));
+ xwindow_, target_current_context_->fetched_targets()));
ui::DropTargetEvent event(data,
target_window_location_,
@@ -693,7 +686,7 @@ void DesktopDragDropClientAuraX11::DragTranslate(
return;
data->reset(new OSExchangeData(new ui::OSExchangeDataProviderAuraX11(
- xwindow_, target_current_context_->CloneFetchedTargets())));
+ xwindow_, target_current_context_->fetched_targets())));
gfx::Point location = root_location;
aura::Window::ConvertPointToTarget(root_window_, target_window_, &location);
@@ -754,10 +747,9 @@ std::vector< ::Atom> DesktopDragDropClientAuraX11::GetOfferedDragOperations() {
return operations;
}
-scoped_ptr<ui::SelectionFormatMap>
-DesktopDragDropClientAuraX11::CloneFormatMap() const {
- return source_provider_ ? source_provider_->CloneFormatMap() :
- scoped_ptr<ui::SelectionFormatMap>();
+ui::SelectionFormatMap DesktopDragDropClientAuraX11::GetFormatMap() const {
+ return source_provider_ ? source_provider_->GetFormatMap() :
+ ui::SelectionFormatMap();
}
void DesktopDragDropClientAuraX11::CompleteXdndPosition(
« no previous file with comments | « ui/views/widget/desktop_aura/desktop_drag_drop_client_aurax11.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698