| Index: chrome/browser/autocomplete/autocomplete_popup_view_mac.mm
 | 
| ===================================================================
 | 
| --- chrome/browser/autocomplete/autocomplete_popup_view_mac.mm	(revision 46538)
 | 
| +++ chrome/browser/autocomplete/autocomplete_popup_view_mac.mm	(working copy)
 | 
| @@ -44,8 +44,11 @@
 | 
|  const CGFloat kTextXOffset = 29.0;
 | 
|  
 | 
|  // Animation duration when animating the popup window smaller.
 | 
| -const CGFloat kShrinkAnimationDuration = 0.1;
 | 
| +const NSTimeInterval kShrinkAnimationDuration = 0.1;
 | 
|  
 | 
| +// A very short animation duration used to cancel running animations.
 | 
| +const NSTimeInterval kCancelAnimationDuration = 0.00001;
 | 
| +
 | 
|  // Maximum fraction of the popup width that can be used to display match
 | 
|  // contents.
 | 
|  const float kMaxContentsFraction = 0.7;
 | 
| @@ -296,6 +299,29 @@
 | 
|    }
 | 
|  }
 | 
|  
 | 
| +void AutocompletePopupViewMac::SetPopupFrame(const NSRect frame) {
 | 
| +  // Do nothing if the popup is already animating to the given |frame|.
 | 
| +  if  (NSEqualRects(frame, targetPopupFrame_))
 | 
| +    return;
 | 
| +
 | 
| +  NSRect currentPopupFrame = [popup_ frame];
 | 
| +  targetPopupFrame_ = frame;
 | 
| +
 | 
| +  // Animate the frame change if the only change is that the height got smaller.
 | 
| +  // Otherwise, resize immediately.
 | 
| +  bool animate = (NSHeight(frame) < NSHeight(currentPopupFrame) &&
 | 
| +                  NSWidth(frame) == NSWidth(currentPopupFrame));
 | 
| +  NSTimeInterval duration =
 | 
| +      (animate ? kShrinkAnimationDuration: kCancelAnimationDuration);
 | 
| +
 | 
| +  [NSAnimationContext beginGrouping];
 | 
| +  // Don't use the GTM additon for the "Steve" slowdown because this can happen
 | 
| +  // async from user actions and the effects could be a surprise.
 | 
| +  [[NSAnimationContext currentContext] setDuration:duration];
 | 
| +  [[popup_ animator] setFrame:frame display:YES];
 | 
| +  [NSAnimationContext endGrouping];
 | 
| +}
 | 
| +
 | 
|  void AutocompletePopupViewMac::UpdatePopupAppearance() {
 | 
|    DCHECK([NSThread isMainThread]);
 | 
|    const AutocompleteResult& result = model_->result();
 | 
| @@ -354,6 +380,9 @@
 | 
|    [matrix setCellSize:NSMakeSize(r.size.width,
 | 
|                                   cellSize.height + kCellHeightAdjust)];
 | 
|  
 | 
| +  // Save the old matrix frame in order to later restore it.
 | 
| +  NSRect savedMatrixFrame = [matrix frame];
 | 
| +
 | 
|    // Make the matrix big enough to hold all the cells.
 | 
|    [matrix sizeToCells];
 | 
|  
 | 
| @@ -361,24 +390,14 @@
 | 
|    r.size.height = [matrix frame].size.height;
 | 
|    r.origin.y -= r.size.height + kPopupFieldGap;
 | 
|  
 | 
| +  // Resize the matrix back to its original size, since we aren't resizing the
 | 
| +  // window immediately.
 | 
| +  [matrix setFrame:savedMatrixFrame];
 | 
| +
 | 
|    // Update the selection.
 | 
|    PaintUpdatesNow();
 | 
|  
 | 
| -  // Animate the frame change if the only change is that the height got smaller.
 | 
| -  // Otherwise, resize immediately.
 | 
| -  NSRect oldFrame = [popup_ frame];
 | 
| -  if (r.size.height < oldFrame.size.height &&
 | 
| -      r.origin.x == oldFrame.origin.x &&
 | 
| -      r.size.width == oldFrame.size.width) {
 | 
| -    [NSAnimationContext beginGrouping];
 | 
| -    // Don't use the GTM additon for the "Steve" slowdown because this can
 | 
| -    // happen async from user actions and the effects could be a surprise.
 | 
| -   [[NSAnimationContext currentContext] setDuration:kShrinkAnimationDuration];
 | 
| -    [[popup_ animator] setFrame:r display:YES];
 | 
| -    [NSAnimationContext endGrouping];
 | 
| -  } else {
 | 
| -    [popup_ setFrame:r display:YES];
 | 
| -  }
 | 
| +  SetPopupFrame(r);
 | 
|  
 | 
|    if (!IsOpen()) {
 | 
|      [[field_ window] addChildWindow:popup_ ordered:NSWindowAbove];
 | 
| @@ -484,6 +503,8 @@
 | 
|  
 | 
|  @implementation AutocompleteMatrix
 | 
|  
 | 
| +
 | 
| +
 | 
|  // Remove all tracking areas and initialize the one we want.  Removing
 | 
|  // all might be overkill, but it's unclear why there would be others
 | 
|  // for the popup window.
 | 
| 
 |