| Index: ui/base/gestures/gesture_recognizer_impl.cc | 
| diff --git a/ui/base/gestures/gesture_recognizer_impl.cc b/ui/base/gestures/gesture_recognizer_impl.cc | 
| index 7cb686ed1ced936327465b3b5e66bad25840b3b8..78adfab9c0e6a1b0649a75ecd68f7320a29f96a1 100644 | 
| --- a/ui/base/gestures/gesture_recognizer_impl.cc | 
| +++ b/ui/base/gestures/gesture_recognizer_impl.cc | 
| @@ -17,22 +17,6 @@ namespace ui { | 
|  | 
| namespace { | 
|  | 
| -// This is used to pop a std::queue when returning from a function. | 
| -class ScopedPop { | 
| - public: | 
| -  explicit ScopedPop(std::queue<TouchEvent*>* queue) : queue_(queue) { | 
| -  } | 
| - | 
| -  ~ScopedPop() { | 
| -    delete queue_->front(); | 
| -    queue_->pop(); | 
| -  } | 
| - | 
| - private: | 
| -  std::queue<TouchEvent*>* queue_; | 
| -  DISALLOW_COPY_AND_ASSIGN(ScopedPop); | 
| -}; | 
| - | 
| // CancelledTouchEvent mirrors a TouchEvent object. | 
| class MirroredTouchEvent : public TouchEvent { | 
| public: | 
| @@ -54,24 +38,6 @@ class MirroredTouchEvent : public TouchEvent { | 
| DISALLOW_COPY_AND_ASSIGN(MirroredTouchEvent); | 
| }; | 
|  | 
| -class QueuedTouchEvent : public MirroredTouchEvent { | 
| - public: | 
| -  QueuedTouchEvent(const TouchEvent* real, EventResult result) | 
| -      : MirroredTouchEvent(real), | 
| -        result_(result) { | 
| -  } | 
| - | 
| -  virtual ~QueuedTouchEvent() { | 
| -  } | 
| - | 
| -  EventResult result() const { return result_; } | 
| - | 
| - private: | 
| -  EventResult result_; | 
| - | 
| -  DISALLOW_COPY_AND_ASSIGN(QueuedTouchEvent); | 
| -}; | 
| - | 
| // A mirrored event, except for the type, which is always ET_TOUCH_CANCELLED. | 
| class CancelledTouchEvent : public MirroredTouchEvent { | 
| public: | 
| @@ -139,7 +105,6 @@ GestureRecognizerImpl::GestureRecognizerImpl(GestureEventHelper* helper) | 
|  | 
| GestureRecognizerImpl::~GestureRecognizerImpl() { | 
| STLDeleteValues(&consumer_sequence_); | 
| -  STLDeleteValues(&event_queue_); | 
| } | 
|  | 
| // Checks if this finger is already down, if so, returns the current target. | 
| @@ -208,7 +173,6 @@ void GestureRecognizerImpl::TransferEventsTo(GestureConsumer* current_consumer, | 
| &touch_id_target_); | 
| TransferTouchIdToConsumerMap(current_consumer, new_consumer, | 
| &touch_id_target_for_gestures_); | 
| -    TransferConsumer(current_consumer, new_consumer, &event_queue_); | 
| TransferConsumer(current_consumer, new_consumer, &consumer_sequence_); | 
| } | 
| } | 
| @@ -256,103 +220,21 @@ void GestureRecognizerImpl::SetupTargets(const TouchEvent& event, | 
| } | 
| } | 
|  | 
| -GestureSequence::Gestures* GestureRecognizerImpl::AdvanceTouchQueueByOne( | 
| -    GestureConsumer* consumer, | 
| -    ui::EventResult result) { | 
| -  CHECK(event_queue_[consumer]); | 
| -  CHECK(!event_queue_[consumer]->empty()); | 
| - | 
| -  ScopedPop pop(event_queue_[consumer]); | 
| -  TouchEvent* event = event_queue_[consumer]->front(); | 
| -  GestureSequence* sequence = GetGestureSequenceForConsumer(consumer); | 
| -  if (result != ER_UNHANDLED && | 
| -      event->type() == ET_TOUCH_RELEASED) { | 
| -    // A touch release was was processed (e.g. preventDefault()ed by a | 
| -    // web-page), but we still need to process a touch cancel. | 
| -    CancelledTouchEvent cancelled(event); | 
| -    return sequence->ProcessTouchEventForGesture(cancelled, | 
| -                                                 ER_UNHANDLED); | 
| -  } | 
| -  return sequence->ProcessTouchEventForGesture(*event, result); | 
| -} | 
| - | 
| GestureSequence::Gestures* GestureRecognizerImpl::ProcessTouchEventForGesture( | 
| const TouchEvent& event, | 
| ui::EventResult result, | 
| GestureConsumer* target) { | 
| -  if (event_queue_[target] && event_queue_[target]->size() > 0) { | 
| -    // There are some queued touch-events for this target. Processing |event| | 
| -    // before those queued events will result in unexpected gestures. So | 
| -    // postpone the processing of the events until the queued events have been | 
| -    // processed. | 
| -    event_queue_[target]->push(new QueuedTouchEvent(&event, result)); | 
| -    return NULL; | 
| -  } | 
| - | 
| SetupTargets(event, target); | 
| - | 
| GestureSequence* gesture_sequence = GetGestureSequenceForConsumer(target); | 
| return gesture_sequence->ProcessTouchEventForGesture(event, result); | 
| } | 
|  | 
| -void GestureRecognizerImpl::QueueTouchEventForGesture(GestureConsumer* consumer, | 
| -                                                      const TouchEvent& event) { | 
| -  if (!event_queue_[consumer]) | 
| -    event_queue_[consumer] = new std::queue<TouchEvent*>(); | 
| -  event_queue_[consumer]->push( | 
| -      new QueuedTouchEvent(&event, ER_ASYNC)); | 
| - | 
| -  SetupTargets(event, consumer); | 
| -} | 
| - | 
| -GestureSequence::Gestures* GestureRecognizerImpl::AdvanceTouchQueue( | 
| -    GestureConsumer* consumer, | 
| -    bool processed) { | 
| -  if (!event_queue_[consumer] || event_queue_[consumer]->empty()) { | 
| -    LOG(ERROR) << "Trying to advance an empty gesture queue for " << consumer; | 
| -    return NULL; | 
| -  } | 
| - | 
| -  scoped_ptr<GestureSequence::Gestures> gestures( | 
| -      AdvanceTouchQueueByOne(consumer, processed ? ER_HANDLED : | 
| -                                                   ER_UNHANDLED)); | 
| - | 
| -  // Are there any queued touch-events that should be auto-dequeued? | 
| -  while (!event_queue_[consumer]->empty()) { | 
| -    QueuedTouchEvent* event = | 
| -      static_cast<QueuedTouchEvent*>(event_queue_[consumer]->front()); | 
| -    if (event->result() == ER_ASYNC) | 
| -      break; | 
| - | 
| -    scoped_ptr<GestureSequence::Gestures> current_gestures( | 
| -        AdvanceTouchQueueByOne(consumer, event->result())); | 
| -    if (current_gestures.get()) { | 
| -      if (!gestures.get()) { | 
| -        gestures.reset(current_gestures.release()); | 
| -      } else { | 
| -        gestures->insert(gestures->end(), current_gestures->begin(), | 
| -                                          current_gestures->end()); | 
| -        // The gestures in |current_gestures| are now owned by |gestures|. Make | 
| -        // sure they don't get freed with |current_gestures|. | 
| -        current_gestures->weak_clear(); | 
| -      } | 
| -    } | 
| -  } | 
| - | 
| -  return gestures.release(); | 
| -} | 
| - | 
| -void GestureRecognizerImpl::FlushTouchQueue(GestureConsumer* consumer) { | 
| +void GestureRecognizerImpl::CleanupStateForConsumer(GestureConsumer* consumer) { | 
| if (consumer_sequence_.count(consumer)) { | 
| delete consumer_sequence_[consumer]; | 
| consumer_sequence_.erase(consumer); | 
| } | 
|  | 
| -  if (event_queue_.count(consumer)) { | 
| -    delete event_queue_[consumer]; | 
| -    event_queue_.erase(consumer); | 
| -  } | 
| - | 
| RemoveConsumerFromMap(consumer, &touch_id_target_); | 
| RemoveConsumerFromMap(consumer, &touch_id_target_for_gestures_); | 
| } | 
|  |