| Index: chrome/browser/tabs/tab_strip_model_observer.h | 
| diff --git a/chrome/browser/tabs/tab_strip_model_observer.h b/chrome/browser/tabs/tab_strip_model_observer.h | 
| index b2753508c3a3b43e9da450429fcab804dad735de..5a69eb55b187234ce6d333d19b39e3966599ba2a 100644 | 
| --- a/chrome/browser/tabs/tab_strip_model_observer.h | 
| +++ b/chrome/browser/tabs/tab_strip_model_observer.h | 
| @@ -8,6 +8,7 @@ | 
|  | 
| class TabContentsWrapper; | 
| class TabStripModel; | 
| +class TabStripSelectionModel; | 
|  | 
| //////////////////////////////////////////////////////////////////////////////// | 
| // | 
| @@ -61,24 +62,26 @@ class TabStripModelObserver { | 
| // happens. | 
| virtual void TabDeactivated(TabContentsWrapper* contents); | 
|  | 
| -  // Sent when the selection changes. The previously selected tab is identified | 
| -  // by |old_contents| and the newly selected tab by |new_contents|. |index| is | 
| -  // the index of |new_contents|. When using multiple selection this may be sent | 
| -  // even when the active tab has not changed. For example, if the selection is | 
| -  // extended this method is invoked to inform observers the selection has | 
| -  // changed, but |old_contents| and |new_contents| are the same.  If you only | 
| -  // care about when the active tab changes, check for when |old_contents| | 
| -  // differs from |new_contents|. |user_gesture| specifies whether or not this | 
| +  // Sent when the active tab changes. The previously active tab is identified | 
| +  // by |old_contents| and the newly active tab by |new_contents|. |index| is | 
| +  // the index of |new_contents|. |user_gesture| specifies whether or not this | 
| // was done by a user input event (e.g. clicking on a tab, keystroke) or as a | 
| // side-effect of some other function. | 
| -  // | 
| -  // TODO(dpapad): Add TabSelectionChanged method for when the selected tabs | 
| -  // change. | 
| +  // Note: It is possible for the selection to change while the active tab | 
| +  // remains unchanged. For example, control-click may not change the active tab | 
| +  // but does change the selection. In this case |ActiveTabChanged| is not sent. | 
| +  // If you care about any changes to the selection, override | 
| +  // TabSelectionChanged. | 
| virtual void ActiveTabChanged(TabContentsWrapper* old_contents, | 
| TabContentsWrapper* new_contents, | 
| int index, | 
| bool user_gesture); | 
|  | 
| +  // Sent when the selection changes. More precisely when selected tabs, anchor | 
| +  // tab or active tab change. |old_model| is a snapshot of the selection model | 
| +  // before the change. See also ActiveTabChanged for details. | 
| +  virtual void TabSelectionChanged(const TabStripSelectionModel& old_model); | 
| + | 
| // The specified TabContents at |from_index| was moved to |to_index|. | 
| virtual void TabMoved(TabContentsWrapper* contents, | 
| int from_index, | 
|  |