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

Side by Side Diff: chrome/browser/ui/cocoa/bookmarks/bookmark_bar_folder_view.mm

Issue 8404022: Fix yet another crash with bookmarks drag&drop on Mac. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 9 years, 1 month 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #import "chrome/browser/ui/cocoa/bookmarks/bookmark_bar_folder_view.h" 5 #import "chrome/browser/ui/cocoa/bookmarks/bookmark_bar_folder_view.h"
6 6
7 #include "chrome/browser/bookmarks/bookmark_pasteboard_helper_mac.h" 7 #include "chrome/browser/bookmarks/bookmark_pasteboard_helper_mac.h"
8 #include "chrome/browser/profiles/profile.h" 8 #include "chrome/browser/profiles/profile.h"
9 #import "chrome/browser/ui/cocoa/bookmarks/bookmark_bar_controller.h" 9 #import "chrome/browser/ui/cocoa/bookmarks/bookmark_bar_controller.h"
10 #import "chrome/browser/ui/cocoa/bookmarks/bookmark_folder_target.h" 10 #import "chrome/browser/ui/cocoa/bookmarks/bookmark_folder_target.h"
(...skipping 169 matching lines...) Expand 10 before | Expand all | Expand 10 after
180 - (BOOL)performDragOperationForBookmarkButton:(id<NSDraggingInfo>)info { 180 - (BOOL)performDragOperationForBookmarkButton:(id<NSDraggingInfo>)info {
181 BOOL doDrag = NO; 181 BOOL doDrag = NO;
182 NSData* data = [[info draggingPasteboard] 182 NSData* data = [[info draggingPasteboard]
183 dataForType:kBookmarkButtonDragType]; 183 dataForType:kBookmarkButtonDragType];
184 // [info draggingSource] is nil if not the same application. 184 // [info draggingSource] is nil if not the same application.
185 if (data && [info draggingSource]) { 185 if (data && [info draggingSource]) {
186 BookmarkButton* button = nil; 186 BookmarkButton* button = nil;
187 [data getBytes:&button length:sizeof(button)]; 187 [data getBytes:&button length:sizeof(button)];
188 188
189 // If we're dragging from one profile to another, disallow moving (only 189 // If we're dragging from one profile to another, disallow moving (only
190 // allow copying). Note that we need to call |GetOriginalProfile()| to make 190 // allow copying). Each profile has its own bookmark model, so one way to
191 // sure that Incognito profiles are handled correctly. 191 // check whether we are dragging across profiles is to see if the
192 NSWindow* source_window = [[button delegate] browserWindow]; 192 // |BookmarkNode| corresponding to |button| exists in this profile. If it
193 BrowserWindowController* source_window_controller = 193 // does, we're dragging within a profile; otherwise, we're dragging across
194 [BrowserWindowController 194 // profiles.
195 browserWindowControllerForWindow:source_window]; 195 const BookmarkModel* const model = [[self controller] bookmarkModel];
196 const Profile* source_profile = 196 const BookmarkNode* const source_node = [button bookmarkNode];
197 [source_window_controller profile]->GetOriginalProfile(); 197 const BookmarkNode* const target_node =
198 const Profile* target_profile = 198 model->GetNodeByID(source_node->id());
199 [[self controller] bookmarkModel]->profile()->GetOriginalProfile();
200 199
201 BOOL copy = 200 BOOL copy =
202 !([info draggingSourceOperationMask] & NSDragOperationMove) || 201 !([info draggingSourceOperationMask] & NSDragOperationMove) ||
203 source_profile != target_profile; 202 (source_node != target_node);
204 doDrag = [[self controller] dragButton:button 203 doDrag = [[self controller] dragButton:button
205 to:[info draggingLocation] 204 to:[info draggingLocation]
206 copy:copy]; 205 copy:copy];
207 UserMetrics::RecordAction(UserMetricsAction("BookmarkBarFolder_DragEnd")); 206 UserMetrics::RecordAction(UserMetricsAction("BookmarkBarFolder_DragEnd"));
208 } 207 }
209 return doDrag; 208 return doDrag;
210 } 209 }
211 210
212 - (BOOL)performDragOperation:(id<NSDraggingInfo>)info { 211 - (BOOL)performDragOperation:(id<NSDraggingInfo>)info {
213 if ([[self controller] dragBookmarkData:info]) 212 if ([[self controller] dragBookmarkData:info])
214 return YES; 213 return YES;
215 NSPasteboard* pboard = [info draggingPasteboard]; 214 NSPasteboard* pboard = [info draggingPasteboard];
216 if ([pboard dataForType:kBookmarkButtonDragType] && 215 if ([pboard dataForType:kBookmarkButtonDragType] &&
217 [self performDragOperationForBookmarkButton:info]) 216 [self performDragOperationForBookmarkButton:info])
218 return YES; 217 return YES;
219 if ([pboard containsURLData] && [self performDragOperationForURL:info]) 218 if ([pboard containsURLData] && [self performDragOperationForURL:info])
220 return YES; 219 return YES;
221 return NO; 220 return NO;
222 } 221 }
223 222
224 @end 223 @end
OLDNEW
« no previous file with comments | « chrome/browser/bookmarks/bookmark_model.cc ('k') | chrome/browser/ui/cocoa/bookmarks/bookmark_bar_folder_view_unittest.mm » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698