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

Side by Side Diff: content/browser/web_contents/web_drag_source_mac.mm

Issue 10966023: Fix the crash that could occur when the window is closed while web contents drag is in progress. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Patch to land Created 8 years, 2 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "content/browser/web_contents/web_drag_source_mac.h" 5 #import "content/browser/web_contents/web_drag_source_mac.h"
6 6
7 #include <sys/param.h> 7 #include <sys/param.h>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/file_path.h" 10 #include "base/file_path.h"
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after
128 dragOperationMask_ = dragOperationMask; 128 dragOperationMask_ = dragOperationMask;
129 129
130 fileExtension_ = nil; 130 fileExtension_ = nil;
131 131
132 [self fillPasteboard]; 132 [self fillPasteboard];
133 } 133 }
134 134
135 return self; 135 return self;
136 } 136 }
137 137
138 - (void)clearWebContentsView {
139 contents_ = nil;
140 contentsView_ = nil;
141 }
142
138 - (NSDragOperation)draggingSourceOperationMaskForLocal:(BOOL)isLocal { 143 - (NSDragOperation)draggingSourceOperationMaskForLocal:(BOOL)isLocal {
139 return dragOperationMask_; 144 return dragOperationMask_;
140 } 145 }
141 146
142 - (void)lazyWriteToPasteboard:(NSPasteboard*)pboard forType:(NSString*)type { 147 - (void)lazyWriteToPasteboard:(NSPasteboard*)pboard forType:(NSString*)type {
143 // NSHTMLPboardType requires the character set to be declared. Otherwise, it 148 // NSHTMLPboardType requires the character set to be declared. Otherwise, it
144 // assumes US-ASCII. Awesome. 149 // assumes US-ASCII. Awesome.
145 const string16 kHtmlHeader = ASCIIToUTF16( 150 const string16 kHtmlHeader = ASCIIToUTF16(
146 "<meta http-equiv=\"Content-Type\" content=\"text/html;charset=UTF-8\">"); 151 "<meta http-equiv=\"Content-Type\" content=\"text/html;charset=UTF-8\">");
147 152
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after
261 at:position 266 at:position
262 offset:NSZeroSize 267 offset:NSZeroSize
263 event:dragEvent 268 event:dragEvent
264 pasteboard:pasteboard_ 269 pasteboard:pasteboard_
265 source:contentsView_ 270 source:contentsView_
266 slideBack:YES]; 271 slideBack:YES];
267 } 272 }
268 273
269 - (void)endDragAt:(NSPoint)screenPoint 274 - (void)endDragAt:(NSPoint)screenPoint
270 operation:(NSDragOperation)operation { 275 operation:(NSDragOperation)operation {
276 if (!contents_)
277 return;
271 contents_->SystemDragEnded(); 278 contents_->SystemDragEnded();
272 279
273 RenderViewHostImpl* rvh = static_cast<RenderViewHostImpl*>( 280 RenderViewHostImpl* rvh = static_cast<RenderViewHostImpl*>(
274 contents_->GetRenderViewHost()); 281 contents_->GetRenderViewHost());
275 if (rvh) { 282 if (rvh) {
276 // Convert |screenPoint| to view coordinates and flip it. 283 // Convert |screenPoint| to view coordinates and flip it.
277 NSPoint localPoint = NSMakePoint(0, 0); 284 NSPoint localPoint = NSMakePoint(0, 0);
278 if ([contentsView_ window]) 285 if ([contentsView_ window])
279 localPoint = [self convertScreenPoint:screenPoint]; 286 localPoint = [self convertScreenPoint:screenPoint];
280 NSRect viewFrame = [contentsView_ frame]; 287 NSRect viewFrame = [contentsView_ frame];
(...skipping 11 matching lines...) Expand all
292 rvh->DragSourceEndedAt(localPoint.x, localPoint.y, 299 rvh->DragSourceEndedAt(localPoint.x, localPoint.y,
293 screenPoint.x, screenPoint.y, 300 screenPoint.x, screenPoint.y,
294 static_cast<WebKit::WebDragOperation>(operation)); 301 static_cast<WebKit::WebDragOperation>(operation));
295 } 302 }
296 303
297 // Make sure the pasteboard owner isn't us. 304 // Make sure the pasteboard owner isn't us.
298 [pasteboard_ declareTypes:[NSArray array] owner:nil]; 305 [pasteboard_ declareTypes:[NSArray array] owner:nil];
299 } 306 }
300 307
301 - (void)moveDragTo:(NSPoint)screenPoint { 308 - (void)moveDragTo:(NSPoint)screenPoint {
309 if (!contents_)
310 return;
302 RenderViewHostImpl* rvh = static_cast<RenderViewHostImpl*>( 311 RenderViewHostImpl* rvh = static_cast<RenderViewHostImpl*>(
303 contents_->GetRenderViewHost()); 312 contents_->GetRenderViewHost());
304 if (rvh) { 313 if (rvh) {
305 // Convert |screenPoint| to view coordinates and flip it. 314 // Convert |screenPoint| to view coordinates and flip it.
306 NSPoint localPoint = NSMakePoint(0, 0); 315 NSPoint localPoint = NSMakePoint(0, 0);
307 if ([contentsView_ window]) 316 if ([contentsView_ window])
308 localPoint = [self convertScreenPoint:screenPoint]; 317 localPoint = [self convertScreenPoint:screenPoint];
309 NSRect viewFrame = [contentsView_ frame]; 318 NSRect viewFrame = [contentsView_ frame];
310 localPoint.y = viewFrame.size.height - localPoint.y; 319 localPoint.y = viewFrame.size.height - localPoint.y;
311 // Flip |screenPoint|. 320 // Flip |screenPoint|.
(...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after
455 - (NSImage*)dragImage { 464 - (NSImage*)dragImage {
456 if (dragImage_) 465 if (dragImage_)
457 return dragImage_; 466 return dragImage_;
458 467
459 // Default to returning a generic image. 468 // Default to returning a generic image.
460 return content::GetContentClient()->GetNativeImageNamed( 469 return content::GetContentClient()->GetNativeImageNamed(
461 IDR_DEFAULT_FAVICON).ToNSImage(); 470 IDR_DEFAULT_FAVICON).ToNSImage();
462 } 471 }
463 472
464 @end // @implementation WebDragSource (Private) 473 @end // @implementation WebDragSource (Private)
OLDNEW
« no previous file with comments | « content/browser/web_contents/web_drag_source_mac.h ('k') | content/public/browser/web_contents_view.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698