| OLD | NEW |
| 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 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 #include "app/system_monitor.h" | 5 #include "app/system_monitor.h" |
| 6 #include "base/file_path.h" | 6 #include "base/file_path.h" |
| 7 #include "base/file_util.h" | 7 #include "base/file_util.h" |
| 8 #include "base/path_service.h" | 8 #include "base/path_service.h" |
| 9 #include "base/string_number_conversions.h" | 9 #include "base/string_number_conversions.h" |
| 10 #include "base/scoped_ptr.h" | 10 #include "base/scoped_ptr.h" |
| 11 #include "base/string_util.h" | 11 #include "base/string_util.h" |
| 12 #include "base/stl_util-inl.h" | 12 #include "base/stl_util-inl.h" |
| 13 #include "base/string_number_conversions.h" | 13 #include "base/string_number_conversions.h" |
| 14 #include "base/string_util.h" | 14 #include "base/string_util.h" |
| 15 #include "base/utf_string_conversions.h" | 15 #include "base/utf_string_conversions.h" |
| 16 #include "chrome/browser/browser.h" |
| 16 #include "chrome/browser/defaults.h" | 17 #include "chrome/browser/defaults.h" |
| 17 #include "chrome/browser/dom_ui/new_tab_ui.h" | 18 #include "chrome/browser/dom_ui/new_tab_ui.h" |
| 18 #include "chrome/browser/profile.h" | 19 #include "chrome/browser/profile.h" |
| 19 #include "chrome/browser/profile_manager.h" | 20 #include "chrome/browser/profile_manager.h" |
| 20 #include "chrome/browser/renderer_host/test/test_render_view_host.h" | 21 #include "chrome/browser/renderer_host/test/test_render_view_host.h" |
| 21 #include "chrome/browser/tab_contents/navigation_controller.h" | 22 #include "chrome/browser/tab_contents/navigation_controller.h" |
| 22 #include "chrome/browser/tab_contents/navigation_entry.h" | 23 #include "chrome/browser/tab_contents/navigation_entry.h" |
| 23 #include "chrome/browser/tab_contents/tab_contents.h" | 24 #include "chrome/browser/tab_contents/tab_contents.h" |
| 25 #include "chrome/browser/tab_contents_wrapper.h" |
| 24 #include "chrome/browser/tabs/tab_strip_model.h" | 26 #include "chrome/browser/tabs/tab_strip_model.h" |
| 25 #include "chrome/browser/tabs/tab_strip_model_delegate.h" | 27 #include "chrome/browser/tabs/tab_strip_model_delegate.h" |
| 26 #include "chrome/browser/tabs/tab_strip_model_order_controller.h" | 28 #include "chrome/browser/tabs/tab_strip_model_order_controller.h" |
| 27 #include "chrome/common/extensions/extension.h" | 29 #include "chrome/common/extensions/extension.h" |
| 28 #include "chrome/common/notification_observer_mock.h" | 30 #include "chrome/common/notification_observer_mock.h" |
| 29 #include "chrome/common/notification_registrar.h" | 31 #include "chrome/common/notification_registrar.h" |
| 30 #include "chrome/common/notification_service.h" | 32 #include "chrome/common/notification_service.h" |
| 31 #include "chrome/common/pref_names.h" | 33 #include "chrome/common/pref_names.h" |
| 32 #include "chrome/common/property_bag.h" | 34 #include "chrome/common/property_bag.h" |
| 33 #include "chrome/common/url_constants.h" | 35 #include "chrome/common/url_constants.h" |
| 34 #include "chrome/test/testing_profile.h" | 36 #include "chrome/test/testing_profile.h" |
| 35 #include "testing/gtest/include/gtest/gtest.h" | 37 #include "testing/gtest/include/gtest/gtest.h" |
| 36 | 38 |
| 37 using testing::_; | 39 using testing::_; |
| 38 | 40 |
| 39 namespace { | 41 namespace { |
| 40 | 42 |
| 41 // Class used to delete a TabContents when another TabContents is destroyed. | 43 // Class used to delete a TabContents when another TabContents is destroyed. |
| 42 class DeleteTabContentsOnDestroyedObserver : public NotificationObserver { | 44 class DeleteTabContentsOnDestroyedObserver : public NotificationObserver { |
| 43 public: | 45 public: |
| 44 DeleteTabContentsOnDestroyedObserver(TabContents* source, | 46 DeleteTabContentsOnDestroyedObserver(TabContentsWrapper* source, |
| 45 TabContents* tab_to_delete) | 47 TabContentsWrapper* tab_to_delete) |
| 46 : source_(source), | 48 : source_(source), |
| 47 tab_to_delete_(tab_to_delete) { | 49 tab_to_delete_(tab_to_delete) { |
| 48 registrar_.Add(this, | 50 registrar_.Add(this, |
| 49 NotificationType::TAB_CONTENTS_DESTROYED, | 51 NotificationType::TAB_CONTENTS_DESTROYED, |
| 50 Source<TabContents>(source)); | 52 Source<TabContents>(source->tab_contents())); |
| 51 } | 53 } |
| 52 | 54 |
| 53 virtual void Observe(NotificationType type, | 55 virtual void Observe(NotificationType type, |
| 54 const NotificationSource& source, | 56 const NotificationSource& source, |
| 55 const NotificationDetails& details) { | 57 const NotificationDetails& details) { |
| 56 TabContents* tab_to_delete = tab_to_delete_; | 58 TabContentsWrapper* tab_to_delete = tab_to_delete_; |
| 57 tab_to_delete_ = NULL; | 59 tab_to_delete_ = NULL; |
| 58 delete tab_to_delete; | 60 delete tab_to_delete; |
| 59 } | 61 } |
| 60 | 62 |
| 61 private: | 63 private: |
| 62 TabContents* source_; | 64 TabContentsWrapper* source_; |
| 63 TabContents* tab_to_delete_; | 65 TabContentsWrapper* tab_to_delete_; |
| 64 NotificationRegistrar registrar_; | 66 NotificationRegistrar registrar_; |
| 65 | 67 |
| 66 DISALLOW_COPY_AND_ASSIGN(DeleteTabContentsOnDestroyedObserver); | 68 DISALLOW_COPY_AND_ASSIGN(DeleteTabContentsOnDestroyedObserver); |
| 67 }; | 69 }; |
| 68 | 70 |
| 69 } // namespace | 71 } // namespace |
| 70 | 72 |
| 71 class TabStripDummyDelegate : public TabStripModelDelegate { | 73 class TabStripDummyDelegate : public TabStripModelDelegate { |
| 72 public: | 74 public: |
| 73 explicit TabStripDummyDelegate(TabContents* dummy) | 75 explicit TabStripDummyDelegate(TabContentsWrapper* dummy) |
| 74 : dummy_contents_(dummy), can_close_(true), run_unload_(false) {} | 76 : dummy_contents_(dummy), can_close_(true), run_unload_(false) {} |
| 75 virtual ~TabStripDummyDelegate() {} | 77 virtual ~TabStripDummyDelegate() {} |
| 76 | 78 |
| 77 void set_can_close(bool value) { can_close_ = value; } | 79 void set_can_close(bool value) { can_close_ = value; } |
| 78 void set_run_unload_listener(bool value) { run_unload_ = value; } | 80 void set_run_unload_listener(bool value) { run_unload_ = value; } |
| 79 | 81 |
| 80 // Overridden from TabStripModelDelegate: | 82 // Overridden from TabStripModelDelegate: |
| 81 virtual TabContents* AddBlankTab(bool foreground) { return NULL; } | 83 virtual TabContentsWrapper* AddBlankTab(bool foreground) { |
| 82 virtual TabContents* AddBlankTabAt(int index, bool foreground) { | |
| 83 return NULL; | 84 return NULL; |
| 84 } | 85 } |
| 85 virtual Browser* CreateNewStripWithContents(TabContents* contents, | 86 virtual TabContentsWrapper* AddBlankTabAt(int index, bool foreground) { |
| 87 return NULL; |
| 88 } |
| 89 virtual Browser* CreateNewStripWithContents(TabContentsWrapper* contents, |
| 86 const gfx::Rect& window_bounds, | 90 const gfx::Rect& window_bounds, |
| 87 const DockInfo& dock_info, | 91 const DockInfo& dock_info, |
| 88 bool maximize) { | 92 bool maximize) { |
| 89 return NULL; | 93 return NULL; |
| 90 } | 94 } |
| 91 virtual void ContinueDraggingDetachedTab(TabContents* contents, | 95 virtual void ContinueDraggingDetachedTab(TabContentsWrapper* contents, |
| 92 const gfx::Rect& window_bounds, | 96 const gfx::Rect& window_bounds, |
| 93 const gfx::Rect& tab_bounds) { | 97 const gfx::Rect& tab_bounds) { |
| 94 } | 98 } |
| 95 virtual int GetDragActions() const { return 0; } | 99 virtual int GetDragActions() const { return 0; } |
| 96 virtual TabContents* CreateTabContentsForURL( | 100 virtual TabContentsWrapper* CreateTabContentsForURL( |
| 97 const GURL& url, | 101 const GURL& url, |
| 98 const GURL& referrer, | 102 const GURL& referrer, |
| 99 Profile* profile, | 103 Profile* profile, |
| 100 PageTransition::Type transition, | 104 PageTransition::Type transition, |
| 101 bool defer_load, | 105 bool defer_load, |
| 102 SiteInstance* instance) const { | 106 SiteInstance* instance) const { |
| 103 if (url == GURL(chrome::kChromeUINewTabURL)) | 107 if (url == GURL(chrome::kChromeUINewTabURL)) |
| 104 return dummy_contents_; | 108 return dummy_contents_; |
| 105 return NULL; | 109 return NULL; |
| 106 } | 110 } |
| 107 virtual bool CanDuplicateContentsAt(int index) { return false; } | 111 virtual bool CanDuplicateContentsAt(int index) { return false; } |
| 108 virtual void DuplicateContentsAt(int index) {} | 112 virtual void DuplicateContentsAt(int index) {} |
| 109 virtual void CloseFrameAfterDragSession() {} | 113 virtual void CloseFrameAfterDragSession() {} |
| 110 virtual void CreateHistoricalTab(TabContents* contents) {} | 114 virtual void CreateHistoricalTab(TabContentsWrapper* contents) {} |
| 111 virtual bool RunUnloadListenerBeforeClosing(TabContents* contents) { | 115 virtual bool RunUnloadListenerBeforeClosing(TabContentsWrapper* contents) { |
| 112 return run_unload_; | 116 return run_unload_; |
| 113 } | 117 } |
| 114 virtual bool CanRestoreTab() { return false; } | 118 virtual bool CanRestoreTab() { return false; } |
| 115 virtual void RestoreTab() {} | 119 virtual void RestoreTab() {} |
| 116 virtual bool CanCloseContentsAt(int index) { return can_close_ ; } | 120 virtual bool CanCloseContentsAt(int index) { return can_close_ ; } |
| 117 virtual bool CanBookmarkAllTabs() const { return false; } | 121 virtual bool CanBookmarkAllTabs() const { return false; } |
| 118 virtual void BookmarkAllTabs() {} | 122 virtual void BookmarkAllTabs() {} |
| 119 virtual bool CanCloseTab() const { return true; } | 123 virtual bool CanCloseTab() const { return true; } |
| 120 virtual bool UseVerticalTabs() const { return false; } | 124 virtual bool UseVerticalTabs() const { return false; } |
| 121 virtual void ToggleUseVerticalTabs() {} | 125 virtual void ToggleUseVerticalTabs() {} |
| 122 virtual bool LargeIconsPermitted() const { return true; } | 126 virtual bool LargeIconsPermitted() const { return true; } |
| 123 | 127 |
| 124 private: | 128 private: |
| 125 // A dummy TabContents we give to callers that expect us to actually build a | 129 // A dummy TabContents we give to callers that expect us to actually build a |
| 126 // Destinations tab for them. | 130 // Destinations tab for them. |
| 127 TabContents* dummy_contents_; | 131 TabContentsWrapper* dummy_contents_; |
| 128 | 132 |
| 129 // Whether tabs can be closed. | 133 // Whether tabs can be closed. |
| 130 bool can_close_; | 134 bool can_close_; |
| 131 | 135 |
| 132 // Whether to report that we need to run an unload listener before closing. | 136 // Whether to report that we need to run an unload listener before closing. |
| 133 bool run_unload_; | 137 bool run_unload_; |
| 134 | 138 |
| 135 DISALLOW_COPY_AND_ASSIGN(TabStripDummyDelegate); | 139 DISALLOW_COPY_AND_ASSIGN(TabStripDummyDelegate); |
| 136 }; | 140 }; |
| 137 | 141 |
| 138 class TabStripModelTest : public RenderViewHostTestHarness { | 142 class TabStripModelTest : public RenderViewHostTestHarness { |
| 139 public: | 143 public: |
| 140 TabContents* CreateTabContents() { | 144 TabContentsWrapper* CreateTabContents() { |
| 141 return new TabContents(profile(), NULL, 0, NULL, NULL); | 145 return Browser::TabContentsFactory(profile(), NULL, 0, NULL, NULL); |
| 142 } | 146 } |
| 143 | 147 |
| 144 TabContents* CreateTabContentsWithSharedRPH(TabContents* tab_contents) { | 148 TabContentsWrapper* CreateTabContentsWithSharedRPH( |
| 145 TabContents* retval = new TabContents(profile(), | 149 TabContents* tab_contents) { |
| 150 TabContentsWrapper* retval = Browser::TabContentsFactory(profile(), |
| 146 tab_contents->render_view_host()->site_instance(), MSG_ROUTING_NONE, | 151 tab_contents->render_view_host()->site_instance(), MSG_ROUTING_NONE, |
| 147 NULL, NULL); | 152 NULL, NULL); |
| 148 EXPECT_EQ(retval->GetRenderProcessHost(), | 153 EXPECT_EQ(retval->tab_contents()->GetRenderProcessHost(), |
| 149 tab_contents->GetRenderProcessHost()); | 154 tab_contents->GetRenderProcessHost()); |
| 150 return retval; | 155 return retval; |
| 151 } | 156 } |
| 152 | 157 |
| 153 // Forwards a URL "load" request through to our dummy TabContents | 158 // Forwards a URL "load" request through to our dummy TabContents |
| 154 // implementation. | 159 // implementation. |
| 155 void LoadURL(TabContents* con, const std::wstring& url) { | 160 void LoadURL(TabContents* con, const std::wstring& url) { |
| 156 controller().LoadURL(GURL(WideToUTF16(url)), GURL(), PageTransition::LINK); | 161 controller().LoadURL(GURL(WideToUTF16(url)), GURL(), PageTransition::LINK); |
| 157 } | 162 } |
| 158 | 163 |
| (...skipping 22 matching lines...) Expand all Loading... |
| 181 // Returns the state of the given tab strip as a string. The state consists | 186 // Returns the state of the given tab strip as a string. The state consists |
| 182 // of the ID of each tab contents followed by a 'p' if pinned. For example, | 187 // of the ID of each tab contents followed by a 'p' if pinned. For example, |
| 183 // if the model consists of two tabs with ids 2 and 1, with the first | 188 // if the model consists of two tabs with ids 2 and 1, with the first |
| 184 // tab pinned, this returns "2p 1". | 189 // tab pinned, this returns "2p 1". |
| 185 std::string GetPinnedState(const TabStripModel& model) { | 190 std::string GetPinnedState(const TabStripModel& model) { |
| 186 std::string actual; | 191 std::string actual; |
| 187 for (int i = 0; i < model.count(); ++i) { | 192 for (int i = 0; i < model.count(); ++i) { |
| 188 if (i > 0) | 193 if (i > 0) |
| 189 actual += " "; | 194 actual += " "; |
| 190 | 195 |
| 191 actual += base::IntToString(GetID(model.GetTabContentsAt(i))); | 196 actual += |
| 197 base::IntToString(GetID(model.GetTabContentsAt(i)->tab_contents())); |
| 192 | 198 |
| 193 if (model.IsAppTab(i)) | 199 if (model.IsAppTab(i)) |
| 194 actual += "a"; | 200 actual += "a"; |
| 195 | 201 |
| 196 if (model.IsTabPinned(i)) | 202 if (model.IsTabPinned(i)) |
| 197 actual += "p"; | 203 actual += "p"; |
| 198 } | 204 } |
| 199 return actual; | 205 return actual; |
| 200 } | 206 } |
| 201 | 207 |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 241 CLOSE, | 247 CLOSE, |
| 242 DETACH, | 248 DETACH, |
| 243 SELECT, | 249 SELECT, |
| 244 MOVE, | 250 MOVE, |
| 245 CHANGE, | 251 CHANGE, |
| 246 PINNED, | 252 PINNED, |
| 247 REPLACED | 253 REPLACED |
| 248 }; | 254 }; |
| 249 | 255 |
| 250 struct State { | 256 struct State { |
| 251 State(TabContents* a_dst_contents, | 257 State(TabContentsWrapper* a_dst_contents, |
| 252 int a_dst_index, | 258 int a_dst_index, |
| 253 TabStripModelObserverAction a_action) | 259 TabStripModelObserverAction a_action) |
| 254 : src_contents(NULL), | 260 : src_contents(NULL), |
| 255 dst_contents(a_dst_contents), | 261 dst_contents(a_dst_contents), |
| 256 src_index(-1), | 262 src_index(-1), |
| 257 dst_index(a_dst_index), | 263 dst_index(a_dst_index), |
| 258 user_gesture(false), | 264 user_gesture(false), |
| 259 foreground(false), | 265 foreground(false), |
| 260 action(a_action) { | 266 action(a_action) { |
| 261 } | 267 } |
| 262 | 268 |
| 263 TabContents* src_contents; | 269 TabContentsWrapper* src_contents; |
| 264 TabContents* dst_contents; | 270 TabContentsWrapper* dst_contents; |
| 265 int src_index; | 271 int src_index; |
| 266 int dst_index; | 272 int dst_index; |
| 267 bool user_gesture; | 273 bool user_gesture; |
| 268 bool foreground; | 274 bool foreground; |
| 269 TabStripModelObserverAction action; | 275 TabStripModelObserverAction action; |
| 270 }; | 276 }; |
| 271 | 277 |
| 272 int GetStateCount() const { | 278 int GetStateCount() const { |
| 273 return static_cast<int>(states_.size()); | 279 return static_cast<int>(states_.size()); |
| 274 } | 280 } |
| (...skipping 15 matching lines...) Expand all Loading... |
| 290 return (s->src_contents == state.src_contents && | 296 return (s->src_contents == state.src_contents && |
| 291 s->dst_contents == state.dst_contents && | 297 s->dst_contents == state.dst_contents && |
| 292 s->src_index == state.src_index && | 298 s->src_index == state.src_index && |
| 293 s->dst_index == state.dst_index && | 299 s->dst_index == state.dst_index && |
| 294 s->user_gesture == state.user_gesture && | 300 s->user_gesture == state.user_gesture && |
| 295 s->foreground == state.foreground && | 301 s->foreground == state.foreground && |
| 296 s->action == state.action); | 302 s->action == state.action); |
| 297 } | 303 } |
| 298 | 304 |
| 299 // TabStripModelObserver implementation: | 305 // TabStripModelObserver implementation: |
| 300 virtual void TabInsertedAt(TabContents* contents, | 306 virtual void TabInsertedAt(TabContentsWrapper* contents, |
| 301 int index, | 307 int index, |
| 302 bool foreground) { | 308 bool foreground) { |
| 303 empty_ = false; | 309 empty_ = false; |
| 304 State* s = new State(contents, index, INSERT); | 310 State* s = new State(contents, index, INSERT); |
| 305 s->foreground = foreground; | 311 s->foreground = foreground; |
| 306 states_.push_back(s); | 312 states_.push_back(s); |
| 307 } | 313 } |
| 308 virtual void TabSelectedAt(TabContents* old_contents, | 314 virtual void TabSelectedAt(TabContentsWrapper* old_contents, |
| 309 TabContents* new_contents, | 315 TabContentsWrapper* new_contents, |
| 310 int index, | 316 int index, |
| 311 bool user_gesture) { | 317 bool user_gesture) { |
| 312 State* s = new State(new_contents, index, SELECT); | 318 State* s = new State(new_contents, index, SELECT); |
| 313 s->src_contents = old_contents; | 319 s->src_contents = old_contents; |
| 314 s->user_gesture = user_gesture; | 320 s->user_gesture = user_gesture; |
| 315 states_.push_back(s); | 321 states_.push_back(s); |
| 316 } | 322 } |
| 317 virtual void TabMoved( | 323 virtual void TabMoved( |
| 318 TabContents* contents, int from_index, int to_index) { | 324 TabContentsWrapper* contents, int from_index, int to_index) { |
| 319 State* s = new State(contents, to_index, MOVE); | 325 State* s = new State(contents, to_index, MOVE); |
| 320 s->src_index = from_index; | 326 s->src_index = from_index; |
| 321 states_.push_back(s); | 327 states_.push_back(s); |
| 322 } | 328 } |
| 323 | 329 |
| 324 virtual void TabClosingAt(TabStripModel* tab_strip_model, | 330 virtual void TabClosingAt(TabStripModel* tab_strip_model, |
| 325 TabContents* contents, | 331 TabContentsWrapper* contents, |
| 326 int index) { | 332 int index) { |
| 327 states_.push_back(new State(contents, index, CLOSE)); | 333 states_.push_back(new State(contents, index, CLOSE)); |
| 328 } | 334 } |
| 329 virtual void TabDetachedAt(TabContents* contents, int index) { | 335 virtual void TabDetachedAt(TabContentsWrapper* contents, int index) { |
| 330 states_.push_back(new State(contents, index, DETACH)); | 336 states_.push_back(new State(contents, index, DETACH)); |
| 331 } | 337 } |
| 332 virtual void TabChangedAt(TabContents* contents, int index, | 338 virtual void TabChangedAt(TabContentsWrapper* contents, int index, |
| 333 TabChangeType change_type) { | 339 TabChangeType change_type) { |
| 334 states_.push_back(new State(contents, index, CHANGE)); | 340 states_.push_back(new State(contents, index, CHANGE)); |
| 335 } | 341 } |
| 336 virtual void TabReplacedAt(TabContents* old_contents, | 342 virtual void TabReplacedAt(TabContentsWrapper* old_contents, |
| 337 TabContents* new_contents, int index) { | 343 TabContentsWrapper* new_contents, int index) { |
| 338 State* s = new State(new_contents, index, REPLACED); | 344 State* s = new State(new_contents, index, REPLACED); |
| 339 s ->src_contents = old_contents; | 345 s ->src_contents = old_contents; |
| 340 states_.push_back(s); | 346 states_.push_back(s); |
| 341 } | 347 } |
| 342 virtual void TabPinnedStateChanged(TabContents* contents, int index) { | 348 virtual void TabPinnedStateChanged(TabContentsWrapper* contents, int index) { |
| 343 states_.push_back(new State(contents, index, PINNED)); | 349 states_.push_back(new State(contents, index, PINNED)); |
| 344 } | 350 } |
| 345 virtual void TabStripEmpty() { | 351 virtual void TabStripEmpty() { |
| 346 empty_ = true; | 352 empty_ = true; |
| 347 } | 353 } |
| 348 | 354 |
| 349 void ClearStates() { | 355 void ClearStates() { |
| 350 STLDeleteContainerPointers(states_.begin(), states_.end()); | 356 STLDeleteContainerPointers(states_.begin(), states_.end()); |
| 351 states_.clear(); | 357 states_.clear(); |
| 352 } | 358 } |
| (...skipping 11 matching lines...) Expand all Loading... |
| 364 TEST_F(TabStripModelTest, TestBasicAPI) { | 370 TEST_F(TabStripModelTest, TestBasicAPI) { |
| 365 TabStripDummyDelegate delegate(NULL); | 371 TabStripDummyDelegate delegate(NULL); |
| 366 TabStripModel tabstrip(&delegate, profile()); | 372 TabStripModel tabstrip(&delegate, profile()); |
| 367 MockTabStripModelObserver observer; | 373 MockTabStripModelObserver observer; |
| 368 tabstrip.AddObserver(&observer); | 374 tabstrip.AddObserver(&observer); |
| 369 | 375 |
| 370 EXPECT_TRUE(tabstrip.empty()); | 376 EXPECT_TRUE(tabstrip.empty()); |
| 371 | 377 |
| 372 typedef MockTabStripModelObserver::State State; | 378 typedef MockTabStripModelObserver::State State; |
| 373 | 379 |
| 374 TabContents* contents1 = CreateTabContents(); | 380 TabContentsWrapper* contents1 = CreateTabContents(); |
| 375 | 381 |
| 376 // Note! The ordering of these tests is important, each subsequent test | 382 // Note! The ordering of these tests is important, each subsequent test |
| 377 // builds on the state established in the previous. This is important if you | 383 // builds on the state established in the previous. This is important if you |
| 378 // ever insert tests rather than append. | 384 // ever insert tests rather than append. |
| 379 | 385 |
| 380 // Test AppendTabContents, ContainsIndex | 386 // Test AppendTabContents, ContainsIndex |
| 381 { | 387 { |
| 382 EXPECT_FALSE(tabstrip.ContainsIndex(0)); | 388 EXPECT_FALSE(tabstrip.ContainsIndex(0)); |
| 383 tabstrip.AppendTabContents(contents1, true); | 389 tabstrip.AppendTabContents(contents1, true); |
| 384 EXPECT_TRUE(tabstrip.ContainsIndex(0)); | 390 EXPECT_TRUE(tabstrip.ContainsIndex(0)); |
| 385 EXPECT_EQ(1, tabstrip.count()); | 391 EXPECT_EQ(1, tabstrip.count()); |
| 386 EXPECT_EQ(2, observer.GetStateCount()); | 392 EXPECT_EQ(2, observer.GetStateCount()); |
| 387 State s1(contents1, 0, MockTabStripModelObserver::INSERT); | 393 State s1(contents1, 0, MockTabStripModelObserver::INSERT); |
| 388 s1.foreground = true; | 394 s1.foreground = true; |
| 389 EXPECT_TRUE(observer.StateEquals(0, s1)); | 395 EXPECT_TRUE(observer.StateEquals(0, s1)); |
| 390 State s2(contents1, 0, MockTabStripModelObserver::SELECT); | 396 State s2(contents1, 0, MockTabStripModelObserver::SELECT); |
| 391 s2.src_contents = NULL; | 397 s2.src_contents = NULL; |
| 392 EXPECT_TRUE(observer.StateEquals(1, s2)); | 398 EXPECT_TRUE(observer.StateEquals(1, s2)); |
| 393 observer.ClearStates(); | 399 observer.ClearStates(); |
| 394 } | 400 } |
| 395 | 401 |
| 396 // Test InsertTabContentsAt, foreground tab. | 402 // Test InsertTabContentsAt, foreground tab. |
| 397 TabContents* contents2 = CreateTabContents(); | 403 TabContentsWrapper* contents2 = CreateTabContents(); |
| 398 { | 404 { |
| 399 tabstrip.InsertTabContentsAt(1, contents2, TabStripModel::ADD_SELECTED); | 405 tabstrip.InsertTabContentsAt(1, contents2, TabStripModel::ADD_SELECTED); |
| 400 | 406 |
| 401 EXPECT_EQ(2, tabstrip.count()); | 407 EXPECT_EQ(2, tabstrip.count()); |
| 402 EXPECT_EQ(2, observer.GetStateCount()); | 408 EXPECT_EQ(2, observer.GetStateCount()); |
| 403 State s1(contents2, 1, MockTabStripModelObserver::INSERT); | 409 State s1(contents2, 1, MockTabStripModelObserver::INSERT); |
| 404 s1.foreground = true; | 410 s1.foreground = true; |
| 405 EXPECT_TRUE(observer.StateEquals(0, s1)); | 411 EXPECT_TRUE(observer.StateEquals(0, s1)); |
| 406 State s2(contents2, 1, MockTabStripModelObserver::SELECT); | 412 State s2(contents2, 1, MockTabStripModelObserver::SELECT); |
| 407 s2.src_contents = contents1; | 413 s2.src_contents = contents1; |
| 408 EXPECT_TRUE(observer.StateEquals(1, s2)); | 414 EXPECT_TRUE(observer.StateEquals(1, s2)); |
| 409 observer.ClearStates(); | 415 observer.ClearStates(); |
| 410 } | 416 } |
| 411 | 417 |
| 412 // Test InsertTabContentsAt, background tab. | 418 // Test InsertTabContentsAt, background tab. |
| 413 TabContents* contents3 = CreateTabContents(); | 419 TabContentsWrapper* contents3 = CreateTabContents(); |
| 414 { | 420 { |
| 415 tabstrip.InsertTabContentsAt(2, contents3, TabStripModel::ADD_NONE); | 421 tabstrip.InsertTabContentsAt(2, contents3, TabStripModel::ADD_NONE); |
| 416 | 422 |
| 417 EXPECT_EQ(3, tabstrip.count()); | 423 EXPECT_EQ(3, tabstrip.count()); |
| 418 EXPECT_EQ(1, observer.GetStateCount()); | 424 EXPECT_EQ(1, observer.GetStateCount()); |
| 419 State s1(contents3, 2, MockTabStripModelObserver::INSERT); | 425 State s1(contents3, 2, MockTabStripModelObserver::INSERT); |
| 420 s1.foreground = false; | 426 s1.foreground = false; |
| 421 EXPECT_TRUE(observer.StateEquals(0, s1)); | 427 EXPECT_TRUE(observer.StateEquals(0, s1)); |
| 422 observer.ClearStates(); | 428 observer.ClearStates(); |
| 423 } | 429 } |
| 424 | 430 |
| 425 // Test SelectTabContentsAt | 431 // Test SelectTabContentsAt |
| 426 { | 432 { |
| 427 tabstrip.SelectTabContentsAt(2, true); | 433 tabstrip.SelectTabContentsAt(2, true); |
| 428 EXPECT_EQ(1, observer.GetStateCount()); | 434 EXPECT_EQ(1, observer.GetStateCount()); |
| 429 State s1(contents3, 2, MockTabStripModelObserver::SELECT); | 435 State s1(contents3, 2, MockTabStripModelObserver::SELECT); |
| 430 s1.src_contents = contents2; | 436 s1.src_contents = contents2; |
| 431 s1.user_gesture = true; | 437 s1.user_gesture = true; |
| 432 EXPECT_TRUE(observer.StateEquals(0, s1)); | 438 EXPECT_TRUE(observer.StateEquals(0, s1)); |
| 433 observer.ClearStates(); | 439 observer.ClearStates(); |
| 434 } | 440 } |
| 435 | 441 |
| 436 // Test DetachTabContentsAt | 442 // Test DetachTabContentsAt |
| 437 { | 443 { |
| 438 // Detach | 444 // Detach |
| 439 TabContents* detached = tabstrip.DetachTabContentsAt(2); | 445 TabContentsWrapper* detached = tabstrip.DetachTabContentsAt(2); |
| 440 // ... and append again because we want this for later. | 446 // ... and append again because we want this for later. |
| 441 tabstrip.AppendTabContents(detached, true); | 447 tabstrip.AppendTabContents(detached, true); |
| 442 EXPECT_EQ(4, observer.GetStateCount()); | 448 EXPECT_EQ(4, observer.GetStateCount()); |
| 443 State s1(detached, 2, MockTabStripModelObserver::DETACH); | 449 State s1(detached, 2, MockTabStripModelObserver::DETACH); |
| 444 EXPECT_TRUE(observer.StateEquals(0, s1)); | 450 EXPECT_TRUE(observer.StateEquals(0, s1)); |
| 445 State s2(contents2, 1, MockTabStripModelObserver::SELECT); | 451 State s2(contents2, 1, MockTabStripModelObserver::SELECT); |
| 446 s2.src_contents = contents3; | 452 s2.src_contents = contents3; |
| 447 s2.user_gesture = false; | 453 s2.user_gesture = false; |
| 448 EXPECT_TRUE(observer.StateEquals(1, s2)); | 454 EXPECT_TRUE(observer.StateEquals(1, s2)); |
| 449 State s3(detached, 2, MockTabStripModelObserver::INSERT); | 455 State s3(detached, 2, MockTabStripModelObserver::INSERT); |
| (...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 559 | 565 |
| 560 TEST_F(TabStripModelTest, TestBasicOpenerAPI) { | 566 TEST_F(TabStripModelTest, TestBasicOpenerAPI) { |
| 561 TabStripDummyDelegate delegate(NULL); | 567 TabStripDummyDelegate delegate(NULL); |
| 562 TabStripModel tabstrip(&delegate, profile()); | 568 TabStripModel tabstrip(&delegate, profile()); |
| 563 EXPECT_TRUE(tabstrip.empty()); | 569 EXPECT_TRUE(tabstrip.empty()); |
| 564 | 570 |
| 565 // This is a basic test of opener functionality. opener_contents is created | 571 // This is a basic test of opener functionality. opener_contents is created |
| 566 // as the first tab in the strip and then we create 5 other tabs in the | 572 // as the first tab in the strip and then we create 5 other tabs in the |
| 567 // background with opener_contents set as their opener. | 573 // background with opener_contents set as their opener. |
| 568 | 574 |
| 569 TabContents* opener_contents = CreateTabContents(); | 575 TabContentsWrapper* opener_contents = CreateTabContents(); |
| 570 NavigationController* opener = &opener_contents->controller(); | 576 NavigationController* opener = &opener_contents->controller(); |
| 571 tabstrip.AppendTabContents(opener_contents, true); | 577 tabstrip.AppendTabContents(opener_contents, true); |
| 572 TabContents* contents1 = CreateTabContents(); | 578 TabContentsWrapper* contents1 = CreateTabContents(); |
| 573 TabContents* contents2 = CreateTabContents(); | 579 TabContentsWrapper* contents2 = CreateTabContents(); |
| 574 TabContents* contents3 = CreateTabContents(); | 580 TabContentsWrapper* contents3 = CreateTabContents(); |
| 575 TabContents* contents4 = CreateTabContents(); | 581 TabContentsWrapper* contents4 = CreateTabContents(); |
| 576 TabContents* contents5 = CreateTabContents(); | 582 TabContentsWrapper* contents5 = CreateTabContents(); |
| 577 | 583 |
| 578 // We use |InsertTabContentsAt| here instead of AppendTabContents so that | 584 // We use |InsertTabContentsAt| here instead of AppendTabContents so that |
| 579 // openership relationships are preserved. | 585 // openership relationships are preserved. |
| 580 tabstrip.InsertTabContentsAt(tabstrip.count(), contents1, | 586 tabstrip.InsertTabContentsAt(tabstrip.count(), contents1, |
| 581 TabStripModel::ADD_INHERIT_GROUP); | 587 TabStripModel::ADD_INHERIT_GROUP); |
| 582 tabstrip.InsertTabContentsAt(tabstrip.count(), contents2, | 588 tabstrip.InsertTabContentsAt(tabstrip.count(), contents2, |
| 583 TabStripModel::ADD_INHERIT_GROUP); | 589 TabStripModel::ADD_INHERIT_GROUP); |
| 584 tabstrip.InsertTabContentsAt(tabstrip.count(), contents3, | 590 tabstrip.InsertTabContentsAt(tabstrip.count(), contents3, |
| 585 TabStripModel::ADD_INHERIT_GROUP); | 591 TabStripModel::ADD_INHERIT_GROUP); |
| 586 tabstrip.InsertTabContentsAt(tabstrip.count(), contents4, | 592 tabstrip.InsertTabContentsAt(tabstrip.count(), contents4, |
| (...skipping 25 matching lines...) Expand all Loading... |
| 612 // ForgetAllOpeners should destroy all opener relationships. | 618 // ForgetAllOpeners should destroy all opener relationships. |
| 613 tabstrip.ForgetAllOpeners(); | 619 tabstrip.ForgetAllOpeners(); |
| 614 EXPECT_EQ(-1, tabstrip.GetIndexOfNextTabContentsOpenedBy(opener, 1, false)); | 620 EXPECT_EQ(-1, tabstrip.GetIndexOfNextTabContentsOpenedBy(opener, 1, false)); |
| 615 EXPECT_EQ(-1, tabstrip.GetIndexOfNextTabContentsOpenedBy(opener, 5, false)); | 621 EXPECT_EQ(-1, tabstrip.GetIndexOfNextTabContentsOpenedBy(opener, 5, false)); |
| 616 EXPECT_EQ(-1, tabstrip.GetIndexOfLastTabContentsOpenedBy(opener, 1)); | 622 EXPECT_EQ(-1, tabstrip.GetIndexOfLastTabContentsOpenedBy(opener, 1)); |
| 617 | 623 |
| 618 tabstrip.CloseAllTabs(); | 624 tabstrip.CloseAllTabs(); |
| 619 EXPECT_TRUE(tabstrip.empty()); | 625 EXPECT_TRUE(tabstrip.empty()); |
| 620 } | 626 } |
| 621 | 627 |
| 622 static int GetInsertionIndex(TabStripModel* tabstrip, TabContents* contents) { | 628 static int GetInsertionIndex(TabStripModel* tabstrip, |
| 629 TabContentsWrapper* contents) { |
| 623 return tabstrip->order_controller()->DetermineInsertionIndex( | 630 return tabstrip->order_controller()->DetermineInsertionIndex( |
| 624 contents, PageTransition::LINK, false); | 631 contents, PageTransition::LINK, false); |
| 625 } | 632 } |
| 626 | 633 |
| 627 static void InsertTabContentses(TabStripModel* tabstrip, | 634 static void InsertTabContentses(TabStripModel* tabstrip, |
| 628 TabContents* contents1, | 635 TabContentsWrapper* contents1, |
| 629 TabContents* contents2, | 636 TabContentsWrapper* contents2, |
| 630 TabContents* contents3) { | 637 TabContentsWrapper* contents3) { |
| 631 tabstrip->InsertTabContentsAt(GetInsertionIndex(tabstrip, contents1), | 638 tabstrip->InsertTabContentsAt(GetInsertionIndex(tabstrip, contents1), |
| 632 contents1, TabStripModel::ADD_INHERIT_GROUP); | 639 contents1, TabStripModel::ADD_INHERIT_GROUP); |
| 633 tabstrip->InsertTabContentsAt(GetInsertionIndex(tabstrip, contents2), | 640 tabstrip->InsertTabContentsAt(GetInsertionIndex(tabstrip, contents2), |
| 634 contents2, TabStripModel::ADD_INHERIT_GROUP); | 641 contents2, TabStripModel::ADD_INHERIT_GROUP); |
| 635 tabstrip->InsertTabContentsAt(GetInsertionIndex(tabstrip, contents3), | 642 tabstrip->InsertTabContentsAt(GetInsertionIndex(tabstrip, contents3), |
| 636 contents3, TabStripModel::ADD_INHERIT_GROUP); | 643 contents3, TabStripModel::ADD_INHERIT_GROUP); |
| 637 } | 644 } |
| 638 | 645 |
| 639 // Tests opening background tabs. | 646 // Tests opening background tabs. |
| 640 TEST_F(TabStripModelTest, TestLTRInsertionOptions) { | 647 TEST_F(TabStripModelTest, TestLTRInsertionOptions) { |
| 641 TabStripDummyDelegate delegate(NULL); | 648 TabStripDummyDelegate delegate(NULL); |
| 642 TabStripModel tabstrip(&delegate, profile()); | 649 TabStripModel tabstrip(&delegate, profile()); |
| 643 EXPECT_TRUE(tabstrip.empty()); | 650 EXPECT_TRUE(tabstrip.empty()); |
| 644 | 651 |
| 645 TabContents* opener_contents = CreateTabContents(); | 652 TabContentsWrapper* opener_contents = CreateTabContents(); |
| 646 tabstrip.AppendTabContents(opener_contents, true); | 653 tabstrip.AppendTabContents(opener_contents, true); |
| 647 | 654 |
| 648 TabContents* contents1 = CreateTabContents(); | 655 TabContentsWrapper* contents1 = CreateTabContents(); |
| 649 TabContents* contents2 = CreateTabContents(); | 656 TabContentsWrapper* contents2 = CreateTabContents(); |
| 650 TabContents* contents3 = CreateTabContents(); | 657 TabContentsWrapper* contents3 = CreateTabContents(); |
| 651 | 658 |
| 652 // Test LTR | 659 // Test LTR |
| 653 InsertTabContentses(&tabstrip, contents1, contents2, contents3); | 660 InsertTabContentses(&tabstrip, contents1, contents2, contents3); |
| 654 EXPECT_EQ(contents1, tabstrip.GetTabContentsAt(1)); | 661 EXPECT_EQ(contents1, tabstrip.GetTabContentsAt(1)); |
| 655 EXPECT_EQ(contents2, tabstrip.GetTabContentsAt(2)); | 662 EXPECT_EQ(contents2, tabstrip.GetTabContentsAt(2)); |
| 656 EXPECT_EQ(contents3, tabstrip.GetTabContentsAt(3)); | 663 EXPECT_EQ(contents3, tabstrip.GetTabContentsAt(3)); |
| 657 | 664 |
| 658 tabstrip.CloseAllTabs(); | 665 tabstrip.CloseAllTabs(); |
| 659 EXPECT_TRUE(tabstrip.empty()); | 666 EXPECT_TRUE(tabstrip.empty()); |
| 660 } | 667 } |
| 661 | 668 |
| 662 // Tests inserting tabs with InsertAfter set to false. | 669 // Tests inserting tabs with InsertAfter set to false. |
| 663 TEST_F(TabStripModelTest, InsertBefore) { | 670 TEST_F(TabStripModelTest, InsertBefore) { |
| 664 TabStripDummyDelegate delegate(NULL); | 671 TabStripDummyDelegate delegate(NULL); |
| 665 TabStripModel tabstrip(&delegate, profile()); | 672 TabStripModel tabstrip(&delegate, profile()); |
| 666 tabstrip.SetInsertionPolicy(TabStripModel::INSERT_BEFORE); | 673 tabstrip.SetInsertionPolicy(TabStripModel::INSERT_BEFORE); |
| 667 EXPECT_TRUE(tabstrip.empty()); | 674 EXPECT_TRUE(tabstrip.empty()); |
| 668 | 675 |
| 669 TabContents* contents1 = CreateTabContents(); | 676 TabContentsWrapper* contents1 = CreateTabContents(); |
| 670 TabContents* contents2 = CreateTabContents(); | 677 TabContentsWrapper* contents2 = CreateTabContents(); |
| 671 TabContents* contents3 = CreateTabContents(); | 678 TabContentsWrapper* contents3 = CreateTabContents(); |
| 672 | 679 |
| 673 InsertTabContentses(&tabstrip, contents1, contents2, contents3); | 680 InsertTabContentses(&tabstrip, contents1, contents2, contents3); |
| 674 | 681 |
| 675 // The order should be reversed. | 682 // The order should be reversed. |
| 676 EXPECT_EQ(contents3, tabstrip.GetTabContentsAt(0)); | 683 EXPECT_EQ(contents3, tabstrip.GetTabContentsAt(0)); |
| 677 EXPECT_EQ(contents2, tabstrip.GetTabContentsAt(1)); | 684 EXPECT_EQ(contents2, tabstrip.GetTabContentsAt(1)); |
| 678 EXPECT_EQ(contents1, tabstrip.GetTabContentsAt(2)); | 685 EXPECT_EQ(contents1, tabstrip.GetTabContentsAt(2)); |
| 679 | 686 |
| 680 tabstrip.CloseAllTabs(); | 687 tabstrip.CloseAllTabs(); |
| 681 EXPECT_TRUE(tabstrip.empty()); | 688 EXPECT_TRUE(tabstrip.empty()); |
| 682 } | 689 } |
| 683 | 690 |
| 684 // Tests opening background tabs with InsertAfter set to false. | 691 // Tests opening background tabs with InsertAfter set to false. |
| 685 TEST_F(TabStripModelTest, InsertBeforeOpeners) { | 692 TEST_F(TabStripModelTest, InsertBeforeOpeners) { |
| 686 TabStripDummyDelegate delegate(NULL); | 693 TabStripDummyDelegate delegate(NULL); |
| 687 TabStripModel tabstrip(&delegate, profile()); | 694 TabStripModel tabstrip(&delegate, profile()); |
| 688 tabstrip.SetInsertionPolicy(TabStripModel::INSERT_BEFORE); | 695 tabstrip.SetInsertionPolicy(TabStripModel::INSERT_BEFORE); |
| 689 EXPECT_TRUE(tabstrip.empty()); | 696 EXPECT_TRUE(tabstrip.empty()); |
| 690 TabContents* opener_contents = CreateTabContents(); | 697 TabContentsWrapper* opener_contents = CreateTabContents(); |
| 691 tabstrip.AppendTabContents(opener_contents, true); | 698 tabstrip.AppendTabContents(opener_contents, true); |
| 692 | 699 |
| 693 TabContents* contents1 = CreateTabContents(); | 700 TabContentsWrapper* contents1 = CreateTabContents(); |
| 694 TabContents* contents2 = CreateTabContents(); | 701 TabContentsWrapper* contents2 = CreateTabContents(); |
| 695 TabContents* contents3 = CreateTabContents(); | 702 TabContentsWrapper* contents3 = CreateTabContents(); |
| 696 | 703 |
| 697 InsertTabContentses(&tabstrip, contents1, contents2, contents3); | 704 InsertTabContentses(&tabstrip, contents1, contents2, contents3); |
| 698 | 705 |
| 699 // The order should be reversed. | 706 // The order should be reversed. |
| 700 EXPECT_EQ(contents3, tabstrip.GetTabContentsAt(0)); | 707 EXPECT_EQ(contents3, tabstrip.GetTabContentsAt(0)); |
| 701 EXPECT_EQ(contents2, tabstrip.GetTabContentsAt(1)); | 708 EXPECT_EQ(contents2, tabstrip.GetTabContentsAt(1)); |
| 702 EXPECT_EQ(contents1, tabstrip.GetTabContentsAt(2)); | 709 EXPECT_EQ(contents1, tabstrip.GetTabContentsAt(2)); |
| 703 | 710 |
| 704 tabstrip.CloseAllTabs(); | 711 tabstrip.CloseAllTabs(); |
| 705 EXPECT_TRUE(tabstrip.empty()); | 712 EXPECT_TRUE(tabstrip.empty()); |
| 706 } | 713 } |
| 707 | 714 |
| 708 // This test constructs a tabstrip, and then simulates loading several tabs in | 715 // This test constructs a tabstrip, and then simulates loading several tabs in |
| 709 // the background from link clicks on the first tab. Then it simulates opening | 716 // the background from link clicks on the first tab. Then it simulates opening |
| 710 // a new tab from the first tab in the foreground via a link click, verifies | 717 // a new tab from the first tab in the foreground via a link click, verifies |
| 711 // that this tab is opened adjacent to the opener, then closes it. | 718 // that this tab is opened adjacent to the opener, then closes it. |
| 712 // Finally it tests that a tab opened for some non-link purpose openes at the | 719 // Finally it tests that a tab opened for some non-link purpose openes at the |
| 713 // end of the strip, not bundled to any existing context. | 720 // end of the strip, not bundled to any existing context. |
| 714 TEST_F(TabStripModelTest, TestInsertionIndexDetermination) { | 721 TEST_F(TabStripModelTest, TestInsertionIndexDetermination) { |
| 715 TabStripDummyDelegate delegate(NULL); | 722 TabStripDummyDelegate delegate(NULL); |
| 716 TabStripModel tabstrip(&delegate, profile()); | 723 TabStripModel tabstrip(&delegate, profile()); |
| 717 EXPECT_TRUE(tabstrip.empty()); | 724 EXPECT_TRUE(tabstrip.empty()); |
| 718 | 725 |
| 719 TabContents* opener_contents = CreateTabContents(); | 726 TabContentsWrapper* opener_contents = CreateTabContents(); |
| 720 NavigationController* opener = &opener_contents->controller(); | 727 NavigationController* opener = &opener_contents->controller(); |
| 721 tabstrip.AppendTabContents(opener_contents, true); | 728 tabstrip.AppendTabContents(opener_contents, true); |
| 722 | 729 |
| 723 // Open some other random unrelated tab in the background to monkey with our | 730 // Open some other random unrelated tab in the background to monkey with our |
| 724 // insertion index. | 731 // insertion index. |
| 725 TabContents* other_contents = CreateTabContents(); | 732 TabContentsWrapper* other_contents = CreateTabContents(); |
| 726 tabstrip.AppendTabContents(other_contents, false); | 733 tabstrip.AppendTabContents(other_contents, false); |
| 727 | 734 |
| 728 TabContents* contents1 = CreateTabContents(); | 735 TabContentsWrapper* contents1 = CreateTabContents(); |
| 729 TabContents* contents2 = CreateTabContents(); | 736 TabContentsWrapper* contents2 = CreateTabContents(); |
| 730 TabContents* contents3 = CreateTabContents(); | 737 TabContentsWrapper* contents3 = CreateTabContents(); |
| 731 | 738 |
| 732 // Start by testing LTR | 739 // Start by testing LTR |
| 733 InsertTabContentses(&tabstrip, contents1, contents2, contents3); | 740 InsertTabContentses(&tabstrip, contents1, contents2, contents3); |
| 734 EXPECT_EQ(opener_contents, tabstrip.GetTabContentsAt(0)); | 741 EXPECT_EQ(opener_contents, tabstrip.GetTabContentsAt(0)); |
| 735 EXPECT_EQ(contents1, tabstrip.GetTabContentsAt(1)); | 742 EXPECT_EQ(contents1, tabstrip.GetTabContentsAt(1)); |
| 736 EXPECT_EQ(contents2, tabstrip.GetTabContentsAt(2)); | 743 EXPECT_EQ(contents2, tabstrip.GetTabContentsAt(2)); |
| 737 EXPECT_EQ(contents3, tabstrip.GetTabContentsAt(3)); | 744 EXPECT_EQ(contents3, tabstrip.GetTabContentsAt(3)); |
| 738 EXPECT_EQ(other_contents, tabstrip.GetTabContentsAt(4)); | 745 EXPECT_EQ(other_contents, tabstrip.GetTabContentsAt(4)); |
| 739 | 746 |
| 740 // The opener API should work... | 747 // The opener API should work... |
| 741 EXPECT_EQ(3, tabstrip.GetIndexOfNextTabContentsOpenedBy(opener, 2, false)); | 748 EXPECT_EQ(3, tabstrip.GetIndexOfNextTabContentsOpenedBy(opener, 2, false)); |
| 742 EXPECT_EQ(2, tabstrip.GetIndexOfNextTabContentsOpenedBy(opener, 3, false)); | 749 EXPECT_EQ(2, tabstrip.GetIndexOfNextTabContentsOpenedBy(opener, 3, false)); |
| 743 EXPECT_EQ(3, tabstrip.GetIndexOfLastTabContentsOpenedBy(opener, 1)); | 750 EXPECT_EQ(3, tabstrip.GetIndexOfLastTabContentsOpenedBy(opener, 1)); |
| 744 | 751 |
| 745 // Now open a foreground tab from a link. It should be opened adjacent to the | 752 // Now open a foreground tab from a link. It should be opened adjacent to the |
| 746 // opener tab. | 753 // opener tab. |
| 747 TabContents* fg_link_contents = CreateTabContents(); | 754 TabContentsWrapper* fg_link_contents = CreateTabContents(); |
| 748 int insert_index = tabstrip.order_controller()->DetermineInsertionIndex( | 755 int insert_index = tabstrip.order_controller()->DetermineInsertionIndex( |
| 749 fg_link_contents, PageTransition::LINK, true); | 756 fg_link_contents, PageTransition::LINK, true); |
| 750 EXPECT_EQ(1, insert_index); | 757 EXPECT_EQ(1, insert_index); |
| 751 tabstrip.InsertTabContentsAt(insert_index, fg_link_contents, | 758 tabstrip.InsertTabContentsAt(insert_index, fg_link_contents, |
| 752 TabStripModel::ADD_SELECTED | | 759 TabStripModel::ADD_SELECTED | |
| 753 TabStripModel::ADD_INHERIT_GROUP); | 760 TabStripModel::ADD_INHERIT_GROUP); |
| 754 EXPECT_EQ(1, tabstrip.selected_index()); | 761 EXPECT_EQ(1, tabstrip.selected_index()); |
| 755 EXPECT_EQ(fg_link_contents, tabstrip.GetSelectedTabContents()); | 762 EXPECT_EQ(fg_link_contents, tabstrip.GetSelectedTabContents()); |
| 756 | 763 |
| 757 // Now close this contents. The selection should move to the opener contents. | 764 // Now close this contents. The selection should move to the opener contents. |
| 758 tabstrip.CloseSelectedTab(); | 765 tabstrip.CloseSelectedTab(); |
| 759 EXPECT_EQ(0, tabstrip.selected_index()); | 766 EXPECT_EQ(0, tabstrip.selected_index()); |
| 760 | 767 |
| 761 // Now open a new empty tab. It should open at the end of the strip. | 768 // Now open a new empty tab. It should open at the end of the strip. |
| 762 TabContents* fg_nonlink_contents = CreateTabContents(); | 769 TabContentsWrapper* fg_nonlink_contents = CreateTabContents(); |
| 763 insert_index = tabstrip.order_controller()->DetermineInsertionIndex( | 770 insert_index = tabstrip.order_controller()->DetermineInsertionIndex( |
| 764 fg_nonlink_contents, PageTransition::AUTO_BOOKMARK, true); | 771 fg_nonlink_contents, PageTransition::AUTO_BOOKMARK, true); |
| 765 EXPECT_EQ(tabstrip.count(), insert_index); | 772 EXPECT_EQ(tabstrip.count(), insert_index); |
| 766 // We break the opener relationship... | 773 // We break the opener relationship... |
| 767 tabstrip.InsertTabContentsAt(insert_index, fg_nonlink_contents, | 774 tabstrip.InsertTabContentsAt(insert_index, fg_nonlink_contents, |
| 768 TabStripModel::ADD_NONE); | 775 TabStripModel::ADD_NONE); |
| 769 // Now select it, so that user_gesture == true causes the opener relationship | 776 // Now select it, so that user_gesture == true causes the opener relationship |
| 770 // to be forgotten... | 777 // to be forgotten... |
| 771 tabstrip.SelectTabContentsAt(tabstrip.count() - 1, true); | 778 tabstrip.SelectTabContentsAt(tabstrip.count() - 1, true); |
| 772 EXPECT_EQ(tabstrip.count() - 1, tabstrip.selected_index()); | 779 EXPECT_EQ(tabstrip.count() - 1, tabstrip.selected_index()); |
| (...skipping 18 matching lines...) Expand all Loading... |
| 791 // The next tab (scanning LTR) in the entire strip that has the same opener | 798 // The next tab (scanning LTR) in the entire strip that has the same opener |
| 792 // is selected | 799 // is selected |
| 793 // If there are no other tabs that have the same opener, | 800 // If there are no other tabs that have the same opener, |
| 794 // The opener is selected | 801 // The opener is selected |
| 795 // | 802 // |
| 796 TEST_F(TabStripModelTest, TestSelectOnClose) { | 803 TEST_F(TabStripModelTest, TestSelectOnClose) { |
| 797 TabStripDummyDelegate delegate(NULL); | 804 TabStripDummyDelegate delegate(NULL); |
| 798 TabStripModel tabstrip(&delegate, profile()); | 805 TabStripModel tabstrip(&delegate, profile()); |
| 799 EXPECT_TRUE(tabstrip.empty()); | 806 EXPECT_TRUE(tabstrip.empty()); |
| 800 | 807 |
| 801 TabContents* opener_contents = CreateTabContents(); | 808 TabContentsWrapper* opener_contents = CreateTabContents(); |
| 802 tabstrip.AppendTabContents(opener_contents, true); | 809 tabstrip.AppendTabContents(opener_contents, true); |
| 803 | 810 |
| 804 TabContents* contents1 = CreateTabContents(); | 811 TabContentsWrapper* contents1 = CreateTabContents(); |
| 805 TabContents* contents2 = CreateTabContents(); | 812 TabContentsWrapper* contents2 = CreateTabContents(); |
| 806 TabContents* contents3 = CreateTabContents(); | 813 TabContentsWrapper* contents3 = CreateTabContents(); |
| 807 | 814 |
| 808 // Note that we use Detach instead of Close throughout this test to avoid | 815 // Note that we use Detach instead of Close throughout this test to avoid |
| 809 // having to keep reconstructing these TabContentses. | 816 // having to keep reconstructing these TabContentses. |
| 810 | 817 |
| 811 // First test that closing tabs that are in the background doesn't adjust the | 818 // First test that closing tabs that are in the background doesn't adjust the |
| 812 // current selection. | 819 // current selection. |
| 813 InsertTabContentses(&tabstrip, contents1, contents2, contents3); | 820 InsertTabContentses(&tabstrip, contents1, contents2, contents3); |
| 814 EXPECT_EQ(0, tabstrip.selected_index()); | 821 EXPECT_EQ(0, tabstrip.selected_index()); |
| 815 | 822 |
| 816 tabstrip.DetachTabContentsAt(1); | 823 tabstrip.DetachTabContentsAt(1); |
| (...skipping 27 matching lines...) Expand all Loading... |
| 844 tabstrip.SelectTabContentsAt(2, false); | 851 tabstrip.SelectTabContentsAt(2, false); |
| 845 EXPECT_EQ(2, tabstrip.selected_index()); | 852 EXPECT_EQ(2, tabstrip.selected_index()); |
| 846 tabstrip.CloseTabContentsAt(2, TabStripModel::CLOSE_NONE); | 853 tabstrip.CloseTabContentsAt(2, TabStripModel::CLOSE_NONE); |
| 847 EXPECT_EQ(2, tabstrip.selected_index()); | 854 EXPECT_EQ(2, tabstrip.selected_index()); |
| 848 tabstrip.CloseTabContentsAt(2, TabStripModel::CLOSE_NONE); | 855 tabstrip.CloseTabContentsAt(2, TabStripModel::CLOSE_NONE); |
| 849 EXPECT_EQ(1, tabstrip.selected_index()); | 856 EXPECT_EQ(1, tabstrip.selected_index()); |
| 850 tabstrip.CloseTabContentsAt(1, TabStripModel::CLOSE_NONE); | 857 tabstrip.CloseTabContentsAt(1, TabStripModel::CLOSE_NONE); |
| 851 EXPECT_EQ(0, tabstrip.selected_index()); | 858 EXPECT_EQ(0, tabstrip.selected_index()); |
| 852 // Finally test that when a tab has no "siblings" that the opener is | 859 // Finally test that when a tab has no "siblings" that the opener is |
| 853 // selected. | 860 // selected. |
| 854 TabContents* other_contents = CreateTabContents(); | 861 TabContentsWrapper* other_contents = CreateTabContents(); |
| 855 tabstrip.InsertTabContentsAt(1, other_contents, TabStripModel::ADD_NONE); | 862 tabstrip.InsertTabContentsAt(1, other_contents, TabStripModel::ADD_NONE); |
| 856 EXPECT_EQ(2, tabstrip.count()); | 863 EXPECT_EQ(2, tabstrip.count()); |
| 857 TabContents* opened_contents = CreateTabContents(); | 864 TabContentsWrapper* opened_contents = CreateTabContents(); |
| 858 tabstrip.InsertTabContentsAt(2, opened_contents, | 865 tabstrip.InsertTabContentsAt(2, opened_contents, |
| 859 TabStripModel::ADD_SELECTED | | 866 TabStripModel::ADD_SELECTED | |
| 860 TabStripModel::ADD_INHERIT_GROUP); | 867 TabStripModel::ADD_INHERIT_GROUP); |
| 861 EXPECT_EQ(2, tabstrip.selected_index()); | 868 EXPECT_EQ(2, tabstrip.selected_index()); |
| 862 tabstrip.CloseTabContentsAt(2, TabStripModel::CLOSE_NONE); | 869 tabstrip.CloseTabContentsAt(2, TabStripModel::CLOSE_NONE); |
| 863 EXPECT_EQ(0, tabstrip.selected_index()); | 870 EXPECT_EQ(0, tabstrip.selected_index()); |
| 864 | 871 |
| 865 tabstrip.CloseAllTabs(); | 872 tabstrip.CloseAllTabs(); |
| 866 EXPECT_TRUE(tabstrip.empty()); | 873 EXPECT_TRUE(tabstrip.empty()); |
| 867 } | 874 } |
| 868 | 875 |
| 869 // Tests the following context menu commands: | 876 // Tests the following context menu commands: |
| 870 // - Close Tab | 877 // - Close Tab |
| 871 // - Close Other Tabs | 878 // - Close Other Tabs |
| 872 // - Close Tabs To Right | 879 // - Close Tabs To Right |
| 873 TEST_F(TabStripModelTest, TestContextMenuCloseCommands) { | 880 TEST_F(TabStripModelTest, TestContextMenuCloseCommands) { |
| 874 TabStripDummyDelegate delegate(NULL); | 881 TabStripDummyDelegate delegate(NULL); |
| 875 TabStripModel tabstrip(&delegate, profile()); | 882 TabStripModel tabstrip(&delegate, profile()); |
| 876 EXPECT_TRUE(tabstrip.empty()); | 883 EXPECT_TRUE(tabstrip.empty()); |
| 877 | 884 |
| 878 TabContents* opener_contents = CreateTabContents(); | 885 TabContentsWrapper* opener_contents = CreateTabContents(); |
| 879 tabstrip.AppendTabContents(opener_contents, true); | 886 tabstrip.AppendTabContents(opener_contents, true); |
| 880 | 887 |
| 881 TabContents* contents1 = CreateTabContents(); | 888 TabContentsWrapper* contents1 = CreateTabContents(); |
| 882 TabContents* contents2 = CreateTabContents(); | 889 TabContentsWrapper* contents2 = CreateTabContents(); |
| 883 TabContents* contents3 = CreateTabContents(); | 890 TabContentsWrapper* contents3 = CreateTabContents(); |
| 884 | 891 |
| 885 InsertTabContentses(&tabstrip, contents1, contents2, contents3); | 892 InsertTabContentses(&tabstrip, contents1, contents2, contents3); |
| 886 EXPECT_EQ(0, tabstrip.selected_index()); | 893 EXPECT_EQ(0, tabstrip.selected_index()); |
| 887 | 894 |
| 888 tabstrip.ExecuteContextMenuCommand(2, TabStripModel::CommandCloseTab); | 895 tabstrip.ExecuteContextMenuCommand(2, TabStripModel::CommandCloseTab); |
| 889 EXPECT_EQ(3, tabstrip.count()); | 896 EXPECT_EQ(3, tabstrip.count()); |
| 890 | 897 |
| 891 tabstrip.ExecuteContextMenuCommand(0, TabStripModel::CommandCloseTabsToRight); | 898 tabstrip.ExecuteContextMenuCommand(0, TabStripModel::CommandCloseTabsToRight); |
| 892 EXPECT_EQ(1, tabstrip.count()); | 899 EXPECT_EQ(1, tabstrip.count()); |
| 893 EXPECT_EQ(opener_contents, tabstrip.GetSelectedTabContents()); | 900 EXPECT_EQ(opener_contents, tabstrip.GetSelectedTabContents()); |
| 894 | 901 |
| 895 TabContents* dummy_contents = CreateTabContents(); | 902 TabContentsWrapper* dummy_contents = CreateTabContents(); |
| 896 tabstrip.AppendTabContents(dummy_contents, false); | 903 tabstrip.AppendTabContents(dummy_contents, false); |
| 897 | 904 |
| 898 contents1 = CreateTabContents(); | 905 contents1 = CreateTabContents(); |
| 899 contents2 = CreateTabContents(); | 906 contents2 = CreateTabContents(); |
| 900 contents3 = CreateTabContents(); | 907 contents3 = CreateTabContents(); |
| 901 InsertTabContentses(&tabstrip, contents1, contents2, contents3); | 908 InsertTabContentses(&tabstrip, contents1, contents2, contents3); |
| 902 EXPECT_EQ(5, tabstrip.count()); | 909 EXPECT_EQ(5, tabstrip.count()); |
| 903 | 910 |
| 904 int dummy_index = tabstrip.count() - 1; | 911 int dummy_index = tabstrip.count() - 1; |
| 905 tabstrip.SelectTabContentsAt(dummy_index, true); | 912 tabstrip.SelectTabContentsAt(dummy_index, true); |
| 906 EXPECT_EQ(dummy_contents, tabstrip.GetSelectedTabContents()); | 913 EXPECT_EQ(dummy_contents, tabstrip.GetSelectedTabContents()); |
| 907 | 914 |
| 908 tabstrip.ExecuteContextMenuCommand(dummy_index, | 915 tabstrip.ExecuteContextMenuCommand(dummy_index, |
| 909 TabStripModel::CommandCloseOtherTabs); | 916 TabStripModel::CommandCloseOtherTabs); |
| 910 EXPECT_EQ(1, tabstrip.count()); | 917 EXPECT_EQ(1, tabstrip.count()); |
| 911 EXPECT_EQ(dummy_contents, tabstrip.GetSelectedTabContents()); | 918 EXPECT_EQ(dummy_contents, tabstrip.GetSelectedTabContents()); |
| 912 | 919 |
| 913 tabstrip.CloseAllTabs(); | 920 tabstrip.CloseAllTabs(); |
| 914 EXPECT_TRUE(tabstrip.empty()); | 921 EXPECT_TRUE(tabstrip.empty()); |
| 915 } | 922 } |
| 916 | 923 |
| 917 // Tests GetIndicesClosedByCommand. | 924 // Tests GetIndicesClosedByCommand. |
| 918 TEST_F(TabStripModelTest, GetIndicesClosedByCommand) { | 925 TEST_F(TabStripModelTest, GetIndicesClosedByCommand) { |
| 919 TabStripDummyDelegate delegate(NULL); | 926 TabStripDummyDelegate delegate(NULL); |
| 920 TabStripModel tabstrip(&delegate, profile()); | 927 TabStripModel tabstrip(&delegate, profile()); |
| 921 EXPECT_TRUE(tabstrip.empty()); | 928 EXPECT_TRUE(tabstrip.empty()); |
| 922 | 929 |
| 923 TabContents* contents1 = CreateTabContents(); | 930 TabContentsWrapper* contents1 = CreateTabContents(); |
| 924 TabContents* contents2 = CreateTabContents(); | 931 TabContentsWrapper* contents2 = CreateTabContents(); |
| 925 TabContents* contents3 = CreateTabContents(); | 932 TabContentsWrapper* contents3 = CreateTabContents(); |
| 926 TabContents* contents4 = CreateTabContents(); | 933 TabContentsWrapper* contents4 = CreateTabContents(); |
| 927 TabContents* contents5 = CreateTabContents(); | 934 TabContentsWrapper* contents5 = CreateTabContents(); |
| 928 | 935 |
| 929 tabstrip.AppendTabContents(contents1, true); | 936 tabstrip.AppendTabContents(contents1, true); |
| 930 tabstrip.AppendTabContents(contents2, true); | 937 tabstrip.AppendTabContents(contents2, true); |
| 931 tabstrip.AppendTabContents(contents3, true); | 938 tabstrip.AppendTabContents(contents3, true); |
| 932 tabstrip.AppendTabContents(contents4, true); | 939 tabstrip.AppendTabContents(contents4, true); |
| 933 tabstrip.AppendTabContents(contents5, true); | 940 tabstrip.AppendTabContents(contents5, true); |
| 934 | 941 |
| 935 EXPECT_EQ("4 3 2 1", GetIndicesClosedByCommandAsString( | 942 EXPECT_EQ("4 3 2 1", GetIndicesClosedByCommandAsString( |
| 936 tabstrip, 0, TabStripModel::CommandCloseTabsToRight)); | 943 tabstrip, 0, TabStripModel::CommandCloseTabsToRight)); |
| 937 EXPECT_EQ("4 3 2", GetIndicesClosedByCommandAsString( | 944 EXPECT_EQ("4 3 2", GetIndicesClosedByCommandAsString( |
| (...skipping 25 matching lines...) Expand all Loading... |
| 963 | 970 |
| 964 // Tests whether or not TabContentses are inserted in the correct position | 971 // Tests whether or not TabContentses are inserted in the correct position |
| 965 // using this "smart" function with a simulated middle click action on a series | 972 // using this "smart" function with a simulated middle click action on a series |
| 966 // of links on the home page. | 973 // of links on the home page. |
| 967 TEST_F(TabStripModelTest, AddTabContents_MiddleClickLinksAndClose) { | 974 TEST_F(TabStripModelTest, AddTabContents_MiddleClickLinksAndClose) { |
| 968 TabStripDummyDelegate delegate(NULL); | 975 TabStripDummyDelegate delegate(NULL); |
| 969 TabStripModel tabstrip(&delegate, profile()); | 976 TabStripModel tabstrip(&delegate, profile()); |
| 970 EXPECT_TRUE(tabstrip.empty()); | 977 EXPECT_TRUE(tabstrip.empty()); |
| 971 | 978 |
| 972 // Open the Home Page | 979 // Open the Home Page |
| 973 TabContents* homepage_contents = CreateTabContents(); | 980 TabContentsWrapper* homepage_contents = CreateTabContents(); |
| 974 tabstrip.AddTabContents( | 981 tabstrip.AddTabContents( |
| 975 homepage_contents, -1, PageTransition::AUTO_BOOKMARK, | 982 homepage_contents, -1, PageTransition::AUTO_BOOKMARK, |
| 976 TabStripModel::ADD_SELECTED); | 983 TabStripModel::ADD_SELECTED); |
| 977 | 984 |
| 978 // Open some other tab, by user typing. | 985 // Open some other tab, by user typing. |
| 979 TabContents* typed_page_contents = CreateTabContents(); | 986 TabContentsWrapper* typed_page_contents = CreateTabContents(); |
| 980 tabstrip.AddTabContents( | 987 tabstrip.AddTabContents( |
| 981 typed_page_contents, -1, PageTransition::TYPED, | 988 typed_page_contents, -1, PageTransition::TYPED, |
| 982 TabStripModel::ADD_SELECTED); | 989 TabStripModel::ADD_SELECTED); |
| 983 | 990 |
| 984 EXPECT_EQ(2, tabstrip.count()); | 991 EXPECT_EQ(2, tabstrip.count()); |
| 985 | 992 |
| 986 // Re-select the home page. | 993 // Re-select the home page. |
| 987 tabstrip.SelectTabContentsAt(0, true); | 994 tabstrip.SelectTabContentsAt(0, true); |
| 988 | 995 |
| 989 // Open a bunch of tabs by simulating middle clicking on links on the home | 996 // Open a bunch of tabs by simulating middle clicking on links on the home |
| 990 // page. | 997 // page. |
| 991 TabContents* middle_click_contents1 = CreateTabContents(); | 998 TabContentsWrapper* middle_click_contents1 = CreateTabContents(); |
| 992 tabstrip.AddTabContents( | 999 tabstrip.AddTabContents( |
| 993 middle_click_contents1, -1, PageTransition::LINK, | 1000 middle_click_contents1, -1, PageTransition::LINK, |
| 994 TabStripModel::ADD_NONE); | 1001 TabStripModel::ADD_NONE); |
| 995 TabContents* middle_click_contents2 = CreateTabContents(); | 1002 TabContentsWrapper* middle_click_contents2 = CreateTabContents(); |
| 996 tabstrip.AddTabContents( | 1003 tabstrip.AddTabContents( |
| 997 middle_click_contents2, -1, PageTransition::LINK, | 1004 middle_click_contents2, -1, PageTransition::LINK, |
| 998 TabStripModel::ADD_NONE); | 1005 TabStripModel::ADD_NONE); |
| 999 TabContents* middle_click_contents3 = CreateTabContents(); | 1006 TabContentsWrapper* middle_click_contents3 = CreateTabContents(); |
| 1000 tabstrip.AddTabContents( | 1007 tabstrip.AddTabContents( |
| 1001 middle_click_contents3, -1, PageTransition::LINK, | 1008 middle_click_contents3, -1, PageTransition::LINK, |
| 1002 TabStripModel::ADD_NONE); | 1009 TabStripModel::ADD_NONE); |
| 1003 | 1010 |
| 1004 EXPECT_EQ(5, tabstrip.count()); | 1011 EXPECT_EQ(5, tabstrip.count()); |
| 1005 | 1012 |
| 1006 EXPECT_EQ(homepage_contents, tabstrip.GetTabContentsAt(0)); | 1013 EXPECT_EQ(homepage_contents, tabstrip.GetTabContentsAt(0)); |
| 1007 EXPECT_EQ(middle_click_contents1, tabstrip.GetTabContentsAt(1)); | 1014 EXPECT_EQ(middle_click_contents1, tabstrip.GetTabContentsAt(1)); |
| 1008 EXPECT_EQ(middle_click_contents2, tabstrip.GetTabContentsAt(2)); | 1015 EXPECT_EQ(middle_click_contents2, tabstrip.GetTabContentsAt(2)); |
| 1009 EXPECT_EQ(middle_click_contents3, tabstrip.GetTabContentsAt(3)); | 1016 EXPECT_EQ(middle_click_contents3, tabstrip.GetTabContentsAt(3)); |
| (...skipping 22 matching lines...) Expand all Loading... |
| 1032 } | 1039 } |
| 1033 | 1040 |
| 1034 // Tests whether or not a TabContents created by a left click on a link that | 1041 // Tests whether or not a TabContents created by a left click on a link that |
| 1035 // opens a new tab is inserted correctly adjacent to the tab that spawned it. | 1042 // opens a new tab is inserted correctly adjacent to the tab that spawned it. |
| 1036 TEST_F(TabStripModelTest, AddTabContents_LeftClickPopup) { | 1043 TEST_F(TabStripModelTest, AddTabContents_LeftClickPopup) { |
| 1037 TabStripDummyDelegate delegate(NULL); | 1044 TabStripDummyDelegate delegate(NULL); |
| 1038 TabStripModel tabstrip(&delegate, profile()); | 1045 TabStripModel tabstrip(&delegate, profile()); |
| 1039 EXPECT_TRUE(tabstrip.empty()); | 1046 EXPECT_TRUE(tabstrip.empty()); |
| 1040 | 1047 |
| 1041 // Open the Home Page | 1048 // Open the Home Page |
| 1042 TabContents* homepage_contents = CreateTabContents(); | 1049 TabContentsWrapper* homepage_contents = CreateTabContents(); |
| 1043 tabstrip.AddTabContents( | 1050 tabstrip.AddTabContents( |
| 1044 homepage_contents, -1, PageTransition::AUTO_BOOKMARK, | 1051 homepage_contents, -1, PageTransition::AUTO_BOOKMARK, |
| 1045 TabStripModel::ADD_SELECTED); | 1052 TabStripModel::ADD_SELECTED); |
| 1046 | 1053 |
| 1047 // Open some other tab, by user typing. | 1054 // Open some other tab, by user typing. |
| 1048 TabContents* typed_page_contents = CreateTabContents(); | 1055 TabContentsWrapper* typed_page_contents = CreateTabContents(); |
| 1049 tabstrip.AddTabContents( | 1056 tabstrip.AddTabContents( |
| 1050 typed_page_contents, -1, PageTransition::TYPED, | 1057 typed_page_contents, -1, PageTransition::TYPED, |
| 1051 TabStripModel::ADD_SELECTED); | 1058 TabStripModel::ADD_SELECTED); |
| 1052 | 1059 |
| 1053 EXPECT_EQ(2, tabstrip.count()); | 1060 EXPECT_EQ(2, tabstrip.count()); |
| 1054 | 1061 |
| 1055 // Re-select the home page. | 1062 // Re-select the home page. |
| 1056 tabstrip.SelectTabContentsAt(0, true); | 1063 tabstrip.SelectTabContentsAt(0, true); |
| 1057 | 1064 |
| 1058 // Open a tab by simulating a left click on a link that opens in a new tab. | 1065 // Open a tab by simulating a left click on a link that opens in a new tab. |
| 1059 TabContents* left_click_contents = CreateTabContents(); | 1066 TabContentsWrapper* left_click_contents = CreateTabContents(); |
| 1060 tabstrip.AddTabContents(left_click_contents, -1, PageTransition::LINK, | 1067 tabstrip.AddTabContents(left_click_contents, -1, PageTransition::LINK, |
| 1061 TabStripModel::ADD_SELECTED); | 1068 TabStripModel::ADD_SELECTED); |
| 1062 | 1069 |
| 1063 // Verify the state meets our expectations. | 1070 // Verify the state meets our expectations. |
| 1064 EXPECT_EQ(3, tabstrip.count()); | 1071 EXPECT_EQ(3, tabstrip.count()); |
| 1065 EXPECT_EQ(homepage_contents, tabstrip.GetTabContentsAt(0)); | 1072 EXPECT_EQ(homepage_contents, tabstrip.GetTabContentsAt(0)); |
| 1066 EXPECT_EQ(left_click_contents, tabstrip.GetTabContentsAt(1)); | 1073 EXPECT_EQ(left_click_contents, tabstrip.GetTabContentsAt(1)); |
| 1067 EXPECT_EQ(typed_page_contents, tabstrip.GetTabContentsAt(2)); | 1074 EXPECT_EQ(typed_page_contents, tabstrip.GetTabContentsAt(2)); |
| 1068 | 1075 |
| 1069 // The newly created tab should be selected. | 1076 // The newly created tab should be selected. |
| (...skipping 12 matching lines...) Expand all Loading... |
| 1082 | 1089 |
| 1083 // Tests whether or not new tabs that should split context (typed pages, | 1090 // Tests whether or not new tabs that should split context (typed pages, |
| 1084 // generated urls, also blank tabs) open at the end of the tabstrip instead of | 1091 // generated urls, also blank tabs) open at the end of the tabstrip instead of |
| 1085 // in the middle. | 1092 // in the middle. |
| 1086 TEST_F(TabStripModelTest, AddTabContents_CreateNewBlankTab) { | 1093 TEST_F(TabStripModelTest, AddTabContents_CreateNewBlankTab) { |
| 1087 TabStripDummyDelegate delegate(NULL); | 1094 TabStripDummyDelegate delegate(NULL); |
| 1088 TabStripModel tabstrip(&delegate, profile()); | 1095 TabStripModel tabstrip(&delegate, profile()); |
| 1089 EXPECT_TRUE(tabstrip.empty()); | 1096 EXPECT_TRUE(tabstrip.empty()); |
| 1090 | 1097 |
| 1091 // Open the Home Page | 1098 // Open the Home Page |
| 1092 TabContents* homepage_contents = CreateTabContents(); | 1099 TabContentsWrapper* homepage_contents = CreateTabContents(); |
| 1093 tabstrip.AddTabContents( | 1100 tabstrip.AddTabContents( |
| 1094 homepage_contents, -1, PageTransition::AUTO_BOOKMARK, | 1101 homepage_contents, -1, PageTransition::AUTO_BOOKMARK, |
| 1095 TabStripModel::ADD_SELECTED); | 1102 TabStripModel::ADD_SELECTED); |
| 1096 | 1103 |
| 1097 // Open some other tab, by user typing. | 1104 // Open some other tab, by user typing. |
| 1098 TabContents* typed_page_contents = CreateTabContents(); | 1105 TabContentsWrapper* typed_page_contents = CreateTabContents(); |
| 1099 tabstrip.AddTabContents( | 1106 tabstrip.AddTabContents( |
| 1100 typed_page_contents, -1, PageTransition::TYPED, | 1107 typed_page_contents, -1, PageTransition::TYPED, |
| 1101 TabStripModel::ADD_SELECTED); | 1108 TabStripModel::ADD_SELECTED); |
| 1102 | 1109 |
| 1103 EXPECT_EQ(2, tabstrip.count()); | 1110 EXPECT_EQ(2, tabstrip.count()); |
| 1104 | 1111 |
| 1105 // Re-select the home page. | 1112 // Re-select the home page. |
| 1106 tabstrip.SelectTabContentsAt(0, true); | 1113 tabstrip.SelectTabContentsAt(0, true); |
| 1107 | 1114 |
| 1108 // Open a new blank tab in the foreground. | 1115 // Open a new blank tab in the foreground. |
| 1109 TabContents* new_blank_contents = CreateTabContents(); | 1116 TabContentsWrapper* new_blank_contents = CreateTabContents(); |
| 1110 tabstrip.AddTabContents(new_blank_contents, -1, PageTransition::TYPED, | 1117 tabstrip.AddTabContents(new_blank_contents, -1, PageTransition::TYPED, |
| 1111 TabStripModel::ADD_SELECTED); | 1118 TabStripModel::ADD_SELECTED); |
| 1112 | 1119 |
| 1113 // Verify the state of the tabstrip. | 1120 // Verify the state of the tabstrip. |
| 1114 EXPECT_EQ(3, tabstrip.count()); | 1121 EXPECT_EQ(3, tabstrip.count()); |
| 1115 EXPECT_EQ(homepage_contents, tabstrip.GetTabContentsAt(0)); | 1122 EXPECT_EQ(homepage_contents, tabstrip.GetTabContentsAt(0)); |
| 1116 EXPECT_EQ(typed_page_contents, tabstrip.GetTabContentsAt(1)); | 1123 EXPECT_EQ(typed_page_contents, tabstrip.GetTabContentsAt(1)); |
| 1117 EXPECT_EQ(new_blank_contents, tabstrip.GetTabContentsAt(2)); | 1124 EXPECT_EQ(new_blank_contents, tabstrip.GetTabContentsAt(2)); |
| 1118 | 1125 |
| 1119 // Now open a couple more blank tabs in the background. | 1126 // Now open a couple more blank tabs in the background. |
| 1120 TabContents* background_blank_contents1 = CreateTabContents(); | 1127 TabContentsWrapper* background_blank_contents1 = CreateTabContents(); |
| 1121 tabstrip.AddTabContents( | 1128 tabstrip.AddTabContents( |
| 1122 background_blank_contents1, -1, PageTransition::TYPED, | 1129 background_blank_contents1, -1, PageTransition::TYPED, |
| 1123 TabStripModel::ADD_NONE); | 1130 TabStripModel::ADD_NONE); |
| 1124 TabContents* background_blank_contents2 = CreateTabContents(); | 1131 TabContentsWrapper* background_blank_contents2 = CreateTabContents(); |
| 1125 tabstrip.AddTabContents( | 1132 tabstrip.AddTabContents( |
| 1126 background_blank_contents2, -1, PageTransition::GENERATED, | 1133 background_blank_contents2, -1, PageTransition::GENERATED, |
| 1127 TabStripModel::ADD_NONE); | 1134 TabStripModel::ADD_NONE); |
| 1128 EXPECT_EQ(5, tabstrip.count()); | 1135 EXPECT_EQ(5, tabstrip.count()); |
| 1129 EXPECT_EQ(homepage_contents, tabstrip.GetTabContentsAt(0)); | 1136 EXPECT_EQ(homepage_contents, tabstrip.GetTabContentsAt(0)); |
| 1130 EXPECT_EQ(typed_page_contents, tabstrip.GetTabContentsAt(1)); | 1137 EXPECT_EQ(typed_page_contents, tabstrip.GetTabContentsAt(1)); |
| 1131 EXPECT_EQ(new_blank_contents, tabstrip.GetTabContentsAt(2)); | 1138 EXPECT_EQ(new_blank_contents, tabstrip.GetTabContentsAt(2)); |
| 1132 EXPECT_EQ(background_blank_contents1, tabstrip.GetTabContentsAt(3)); | 1139 EXPECT_EQ(background_blank_contents1, tabstrip.GetTabContentsAt(3)); |
| 1133 EXPECT_EQ(background_blank_contents2, tabstrip.GetTabContentsAt(4)); | 1140 EXPECT_EQ(background_blank_contents2, tabstrip.GetTabContentsAt(4)); |
| 1134 | 1141 |
| 1135 tabstrip.CloseAllTabs(); | 1142 tabstrip.CloseAllTabs(); |
| 1136 EXPECT_TRUE(tabstrip.empty()); | 1143 EXPECT_TRUE(tabstrip.empty()); |
| 1137 } | 1144 } |
| 1138 | 1145 |
| 1139 // Tests whether opener state is correctly forgotten when the user switches | 1146 // Tests whether opener state is correctly forgotten when the user switches |
| 1140 // context. | 1147 // context. |
| 1141 TEST_F(TabStripModelTest, AddTabContents_ForgetOpeners) { | 1148 TEST_F(TabStripModelTest, AddTabContents_ForgetOpeners) { |
| 1142 TabStripDummyDelegate delegate(NULL); | 1149 TabStripDummyDelegate delegate(NULL); |
| 1143 TabStripModel tabstrip(&delegate, profile()); | 1150 TabStripModel tabstrip(&delegate, profile()); |
| 1144 EXPECT_TRUE(tabstrip.empty()); | 1151 EXPECT_TRUE(tabstrip.empty()); |
| 1145 | 1152 |
| 1146 // Open the Home Page | 1153 // Open the Home Page |
| 1147 TabContents* homepage_contents = CreateTabContents(); | 1154 TabContentsWrapper* homepage_contents = CreateTabContents(); |
| 1148 tabstrip.AddTabContents( | 1155 tabstrip.AddTabContents( |
| 1149 homepage_contents, -1, PageTransition::AUTO_BOOKMARK, | 1156 homepage_contents, -1, PageTransition::AUTO_BOOKMARK, |
| 1150 TabStripModel::ADD_SELECTED); | 1157 TabStripModel::ADD_SELECTED); |
| 1151 | 1158 |
| 1152 // Open some other tab, by user typing. | 1159 // Open some other tab, by user typing. |
| 1153 TabContents* typed_page_contents = CreateTabContents(); | 1160 TabContentsWrapper* typed_page_contents = CreateTabContents(); |
| 1154 tabstrip.AddTabContents( | 1161 tabstrip.AddTabContents( |
| 1155 typed_page_contents, -1, PageTransition::TYPED, | 1162 typed_page_contents, -1, PageTransition::TYPED, |
| 1156 TabStripModel::ADD_SELECTED); | 1163 TabStripModel::ADD_SELECTED); |
| 1157 | 1164 |
| 1158 EXPECT_EQ(2, tabstrip.count()); | 1165 EXPECT_EQ(2, tabstrip.count()); |
| 1159 | 1166 |
| 1160 // Re-select the home page. | 1167 // Re-select the home page. |
| 1161 tabstrip.SelectTabContentsAt(0, true); | 1168 tabstrip.SelectTabContentsAt(0, true); |
| 1162 | 1169 |
| 1163 // Open a bunch of tabs by simulating middle clicking on links on the home | 1170 // Open a bunch of tabs by simulating middle clicking on links on the home |
| 1164 // page. | 1171 // page. |
| 1165 TabContents* middle_click_contents1 = CreateTabContents(); | 1172 TabContentsWrapper* middle_click_contents1 = CreateTabContents(); |
| 1166 tabstrip.AddTabContents( | 1173 tabstrip.AddTabContents( |
| 1167 middle_click_contents1, -1, PageTransition::LINK, | 1174 middle_click_contents1, -1, PageTransition::LINK, |
| 1168 TabStripModel::ADD_NONE); | 1175 TabStripModel::ADD_NONE); |
| 1169 TabContents* middle_click_contents2 = CreateTabContents(); | 1176 TabContentsWrapper* middle_click_contents2 = CreateTabContents(); |
| 1170 tabstrip.AddTabContents( | 1177 tabstrip.AddTabContents( |
| 1171 middle_click_contents2, -1, PageTransition::LINK, | 1178 middle_click_contents2, -1, PageTransition::LINK, |
| 1172 TabStripModel::ADD_NONE); | 1179 TabStripModel::ADD_NONE); |
| 1173 TabContents* middle_click_contents3 = CreateTabContents(); | 1180 TabContentsWrapper* middle_click_contents3 = CreateTabContents(); |
| 1174 tabstrip.AddTabContents( | 1181 tabstrip.AddTabContents( |
| 1175 middle_click_contents3, -1, PageTransition::LINK, | 1182 middle_click_contents3, -1, PageTransition::LINK, |
| 1176 TabStripModel::ADD_NONE); | 1183 TabStripModel::ADD_NONE); |
| 1177 | 1184 |
| 1178 // Break out of the context by selecting a tab in a different context. | 1185 // Break out of the context by selecting a tab in a different context. |
| 1179 EXPECT_EQ(typed_page_contents, tabstrip.GetTabContentsAt(4)); | 1186 EXPECT_EQ(typed_page_contents, tabstrip.GetTabContentsAt(4)); |
| 1180 tabstrip.SelectLastTab(); | 1187 tabstrip.SelectLastTab(); |
| 1181 EXPECT_EQ(typed_page_contents, tabstrip.GetSelectedTabContents()); | 1188 EXPECT_EQ(typed_page_contents, tabstrip.GetSelectedTabContents()); |
| 1182 | 1189 |
| 1183 // Step back into the context by selecting a tab inside it. | 1190 // Step back into the context by selecting a tab inside it. |
| (...skipping 13 matching lines...) Expand all Loading... |
| 1197 EXPECT_EQ(homepage_contents, tabstrip.GetSelectedTabContents()); | 1204 EXPECT_EQ(homepage_contents, tabstrip.GetSelectedTabContents()); |
| 1198 | 1205 |
| 1199 EXPECT_EQ(1, tabstrip.count()); | 1206 EXPECT_EQ(1, tabstrip.count()); |
| 1200 | 1207 |
| 1201 tabstrip.CloseAllTabs(); | 1208 tabstrip.CloseAllTabs(); |
| 1202 EXPECT_TRUE(tabstrip.empty()); | 1209 EXPECT_TRUE(tabstrip.empty()); |
| 1203 } | 1210 } |
| 1204 | 1211 |
| 1205 // Added for http://b/issue?id=958960 | 1212 // Added for http://b/issue?id=958960 |
| 1206 TEST_F(TabStripModelTest, AppendContentsReselectionTest) { | 1213 TEST_F(TabStripModelTest, AppendContentsReselectionTest) { |
| 1207 TabContents fake_destinations_tab(profile(), NULL, 0, NULL, NULL); | 1214 TabContents* fake_destinations_tab = |
| 1208 TabStripDummyDelegate delegate(&fake_destinations_tab); | 1215 new TabContents(profile(), NULL, 0, NULL, NULL); |
| 1216 TabContentsWrapper wrapper(fake_destinations_tab); |
| 1217 TabStripDummyDelegate delegate(&wrapper); |
| 1209 TabStripModel tabstrip(&delegate, profile()); | 1218 TabStripModel tabstrip(&delegate, profile()); |
| 1210 EXPECT_TRUE(tabstrip.empty()); | 1219 EXPECT_TRUE(tabstrip.empty()); |
| 1211 | 1220 |
| 1212 // Open the Home Page | 1221 // Open the Home Page |
| 1213 TabContents* homepage_contents = CreateTabContents(); | 1222 TabContentsWrapper* homepage_contents = CreateTabContents(); |
| 1214 tabstrip.AddTabContents( | 1223 tabstrip.AddTabContents( |
| 1215 homepage_contents, -1, PageTransition::AUTO_BOOKMARK, | 1224 homepage_contents, -1, PageTransition::AUTO_BOOKMARK, |
| 1216 TabStripModel::ADD_SELECTED); | 1225 TabStripModel::ADD_SELECTED); |
| 1217 | 1226 |
| 1218 // Open some other tab, by user typing. | 1227 // Open some other tab, by user typing. |
| 1219 TabContents* typed_page_contents = CreateTabContents(); | 1228 TabContentsWrapper* typed_page_contents = CreateTabContents(); |
| 1220 tabstrip.AddTabContents( | 1229 tabstrip.AddTabContents( |
| 1221 typed_page_contents, -1, PageTransition::TYPED, | 1230 typed_page_contents, -1, PageTransition::TYPED, |
| 1222 TabStripModel::ADD_NONE); | 1231 TabStripModel::ADD_NONE); |
| 1223 | 1232 |
| 1224 // The selected tab should still be the first. | 1233 // The selected tab should still be the first. |
| 1225 EXPECT_EQ(0, tabstrip.selected_index()); | 1234 EXPECT_EQ(0, tabstrip.selected_index()); |
| 1226 | 1235 |
| 1227 // Now simulate a link click that opens a new tab (by virtue of target=_blank) | 1236 // Now simulate a link click that opens a new tab (by virtue of target=_blank) |
| 1228 // and make sure the right tab gets selected when the new tab is closed. | 1237 // and make sure the right tab gets selected when the new tab is closed. |
| 1229 TabContents* target_blank_contents = CreateTabContents(); | 1238 TabContentsWrapper* target_blank_contents = CreateTabContents(); |
| 1230 tabstrip.AppendTabContents(target_blank_contents, true); | 1239 tabstrip.AppendTabContents(target_blank_contents, true); |
| 1231 EXPECT_EQ(2, tabstrip.selected_index()); | 1240 EXPECT_EQ(2, tabstrip.selected_index()); |
| 1232 tabstrip.CloseTabContentsAt(2, TabStripModel::CLOSE_NONE); | 1241 tabstrip.CloseTabContentsAt(2, TabStripModel::CLOSE_NONE); |
| 1233 EXPECT_EQ(0, tabstrip.selected_index()); | 1242 EXPECT_EQ(0, tabstrip.selected_index()); |
| 1234 | 1243 |
| 1235 // clean up after ourselves | 1244 // clean up after ourselves |
| 1236 tabstrip.CloseAllTabs(); | 1245 tabstrip.CloseAllTabs(); |
| 1237 } | 1246 } |
| 1238 | 1247 |
| 1239 // Added for http://b/issue?id=1027661 | 1248 // Added for http://b/issue?id=1027661 |
| 1240 TEST_F(TabStripModelTest, ReselectionConsidersChildrenTest) { | 1249 TEST_F(TabStripModelTest, ReselectionConsidersChildrenTest) { |
| 1241 TabStripDummyDelegate delegate(NULL); | 1250 TabStripDummyDelegate delegate(NULL); |
| 1242 TabStripModel strip(&delegate, profile()); | 1251 TabStripModel strip(&delegate, profile()); |
| 1243 | 1252 |
| 1244 // Open page A | 1253 // Open page A |
| 1245 TabContents* page_a_contents = CreateTabContents(); | 1254 TabContentsWrapper* page_a_contents = CreateTabContents(); |
| 1246 strip.AddTabContents( | 1255 strip.AddTabContents( |
| 1247 page_a_contents, -1, PageTransition::AUTO_BOOKMARK, | 1256 page_a_contents, -1, PageTransition::AUTO_BOOKMARK, |
| 1248 TabStripModel::ADD_SELECTED); | 1257 TabStripModel::ADD_SELECTED); |
| 1249 | 1258 |
| 1250 // Simulate middle click to open page A.A and A.B | 1259 // Simulate middle click to open page A.A and A.B |
| 1251 TabContents* page_a_a_contents = CreateTabContents(); | 1260 TabContentsWrapper* page_a_a_contents = CreateTabContents(); |
| 1252 strip.AddTabContents(page_a_a_contents, -1, PageTransition::LINK, | 1261 strip.AddTabContents(page_a_a_contents, -1, PageTransition::LINK, |
| 1253 TabStripModel::ADD_NONE); | 1262 TabStripModel::ADD_NONE); |
| 1254 TabContents* page_a_b_contents = CreateTabContents(); | 1263 TabContentsWrapper* page_a_b_contents = CreateTabContents(); |
| 1255 strip.AddTabContents(page_a_b_contents, -1, PageTransition::LINK, | 1264 strip.AddTabContents(page_a_b_contents, -1, PageTransition::LINK, |
| 1256 TabStripModel::ADD_NONE); | 1265 TabStripModel::ADD_NONE); |
| 1257 | 1266 |
| 1258 // Select page A.A | 1267 // Select page A.A |
| 1259 strip.SelectTabContentsAt(1, true); | 1268 strip.SelectTabContentsAt(1, true); |
| 1260 EXPECT_EQ(page_a_a_contents, strip.GetSelectedTabContents()); | 1269 EXPECT_EQ(page_a_a_contents, strip.GetSelectedTabContents()); |
| 1261 | 1270 |
| 1262 // Simulate a middle click to open page A.A.A | 1271 // Simulate a middle click to open page A.A.A |
| 1263 TabContents* page_a_a_a_contents = CreateTabContents(); | 1272 TabContentsWrapper* page_a_a_a_contents = CreateTabContents(); |
| 1264 strip.AddTabContents(page_a_a_a_contents, -1, PageTransition::LINK, | 1273 strip.AddTabContents(page_a_a_a_contents, -1, PageTransition::LINK, |
| 1265 TabStripModel::ADD_NONE); | 1274 TabStripModel::ADD_NONE); |
| 1266 | 1275 |
| 1267 EXPECT_EQ(page_a_a_a_contents, strip.GetTabContentsAt(2)); | 1276 EXPECT_EQ(page_a_a_a_contents, strip.GetTabContentsAt(2)); |
| 1268 | 1277 |
| 1269 // Close page A.A | 1278 // Close page A.A |
| 1270 strip.CloseTabContentsAt(strip.selected_index(), TabStripModel::CLOSE_NONE); | 1279 strip.CloseTabContentsAt(strip.selected_index(), TabStripModel::CLOSE_NONE); |
| 1271 | 1280 |
| 1272 // Page A.A.A should be selected, NOT A.B | 1281 // Page A.A.A should be selected, NOT A.B |
| 1273 EXPECT_EQ(page_a_a_a_contents, strip.GetSelectedTabContents()); | 1282 EXPECT_EQ(page_a_a_a_contents, strip.GetSelectedTabContents()); |
| (...skipping 12 matching lines...) Expand all Loading... |
| 1286 | 1295 |
| 1287 // Clean up. | 1296 // Clean up. |
| 1288 strip.CloseAllTabs(); | 1297 strip.CloseAllTabs(); |
| 1289 } | 1298 } |
| 1290 | 1299 |
| 1291 TEST_F(TabStripModelTest, AddTabContents_NewTabAtEndOfStripInheritsGroup) { | 1300 TEST_F(TabStripModelTest, AddTabContents_NewTabAtEndOfStripInheritsGroup) { |
| 1292 TabStripDummyDelegate delegate(NULL); | 1301 TabStripDummyDelegate delegate(NULL); |
| 1293 TabStripModel strip(&delegate, profile()); | 1302 TabStripModel strip(&delegate, profile()); |
| 1294 | 1303 |
| 1295 // Open page A | 1304 // Open page A |
| 1296 TabContents* page_a_contents = CreateTabContents(); | 1305 TabContentsWrapper* page_a_contents = CreateTabContents(); |
| 1297 strip.AddTabContents(page_a_contents, -1, PageTransition::START_PAGE, | 1306 strip.AddTabContents(page_a_contents, -1, PageTransition::START_PAGE, |
| 1298 TabStripModel::ADD_SELECTED); | 1307 TabStripModel::ADD_SELECTED); |
| 1299 | 1308 |
| 1300 // Open pages B, C and D in the background from links on page A... | 1309 // Open pages B, C and D in the background from links on page A... |
| 1301 TabContents* page_b_contents = CreateTabContents(); | 1310 TabContentsWrapper* page_b_contents = CreateTabContents(); |
| 1302 TabContents* page_c_contents = CreateTabContents(); | 1311 TabContentsWrapper* page_c_contents = CreateTabContents(); |
| 1303 TabContents* page_d_contents = CreateTabContents(); | 1312 TabContentsWrapper* page_d_contents = CreateTabContents(); |
| 1304 strip.AddTabContents(page_b_contents, -1, PageTransition::LINK, | 1313 strip.AddTabContents(page_b_contents, -1, PageTransition::LINK, |
| 1305 TabStripModel::ADD_NONE); | 1314 TabStripModel::ADD_NONE); |
| 1306 strip.AddTabContents(page_c_contents, -1, PageTransition::LINK, | 1315 strip.AddTabContents(page_c_contents, -1, PageTransition::LINK, |
| 1307 TabStripModel::ADD_NONE); | 1316 TabStripModel::ADD_NONE); |
| 1308 strip.AddTabContents(page_d_contents, -1, PageTransition::LINK, | 1317 strip.AddTabContents(page_d_contents, -1, PageTransition::LINK, |
| 1309 TabStripModel::ADD_NONE); | 1318 TabStripModel::ADD_NONE); |
| 1310 | 1319 |
| 1311 // Switch to page B's tab. | 1320 // Switch to page B's tab. |
| 1312 strip.SelectTabContentsAt(1, true); | 1321 strip.SelectTabContentsAt(1, true); |
| 1313 | 1322 |
| 1314 // Open a New Tab at the end of the strip (simulate Ctrl+T) | 1323 // Open a New Tab at the end of the strip (simulate Ctrl+T) |
| 1315 TabContents* new_tab_contents = CreateTabContents(); | 1324 TabContentsWrapper* new_tab_contents = CreateTabContents(); |
| 1316 strip.AddTabContents(new_tab_contents, -1, PageTransition::TYPED, | 1325 strip.AddTabContents(new_tab_contents, -1, PageTransition::TYPED, |
| 1317 TabStripModel::ADD_SELECTED); | 1326 TabStripModel::ADD_SELECTED); |
| 1318 | 1327 |
| 1319 EXPECT_EQ(4, strip.GetIndexOfTabContents(new_tab_contents)); | 1328 EXPECT_EQ(4, strip.GetIndexOfTabContents(new_tab_contents)); |
| 1320 EXPECT_EQ(4, strip.selected_index()); | 1329 EXPECT_EQ(4, strip.selected_index()); |
| 1321 | 1330 |
| 1322 // Close the New Tab that was just opened. We should be returned to page B's | 1331 // Close the New Tab that was just opened. We should be returned to page B's |
| 1323 // Tab... | 1332 // Tab... |
| 1324 strip.CloseTabContentsAt(4, TabStripModel::CLOSE_NONE); | 1333 strip.CloseTabContentsAt(4, TabStripModel::CLOSE_NONE); |
| 1325 | 1334 |
| 1326 EXPECT_EQ(1, strip.selected_index()); | 1335 EXPECT_EQ(1, strip.selected_index()); |
| 1327 | 1336 |
| 1328 // Open a non-New Tab tab at the end of the strip, with a TYPED transition. | 1337 // Open a non-New Tab tab at the end of the strip, with a TYPED transition. |
| 1329 // This is like typing a URL in the address bar and pressing Alt+Enter. The | 1338 // This is like typing a URL in the address bar and pressing Alt+Enter. The |
| 1330 // behavior should be the same as above. | 1339 // behavior should be the same as above. |
| 1331 TabContents* page_e_contents = CreateTabContents(); | 1340 TabContentsWrapper* page_e_contents = CreateTabContents(); |
| 1332 strip.AddTabContents(page_e_contents, -1, PageTransition::TYPED, | 1341 strip.AddTabContents(page_e_contents, -1, PageTransition::TYPED, |
| 1333 TabStripModel::ADD_SELECTED); | 1342 TabStripModel::ADD_SELECTED); |
| 1334 | 1343 |
| 1335 EXPECT_EQ(4, strip.GetIndexOfTabContents(page_e_contents)); | 1344 EXPECT_EQ(4, strip.GetIndexOfTabContents(page_e_contents)); |
| 1336 EXPECT_EQ(4, strip.selected_index()); | 1345 EXPECT_EQ(4, strip.selected_index()); |
| 1337 | 1346 |
| 1338 // Close the Tab. Selection should shift back to page B's Tab. | 1347 // Close the Tab. Selection should shift back to page B's Tab. |
| 1339 strip.CloseTabContentsAt(4, TabStripModel::CLOSE_NONE); | 1348 strip.CloseTabContentsAt(4, TabStripModel::CLOSE_NONE); |
| 1340 | 1349 |
| 1341 EXPECT_EQ(1, strip.selected_index()); | 1350 EXPECT_EQ(1, strip.selected_index()); |
| 1342 | 1351 |
| 1343 // Open a non-New Tab tab at the end of the strip, with some other | 1352 // Open a non-New Tab tab at the end of the strip, with some other |
| 1344 // transition. This is like right clicking on a bookmark and choosing "Open | 1353 // transition. This is like right clicking on a bookmark and choosing "Open |
| 1345 // in New Tab". No opener relationship should be preserved between this Tab | 1354 // in New Tab". No opener relationship should be preserved between this Tab |
| 1346 // and the one that was active when the gesture was performed. | 1355 // and the one that was active when the gesture was performed. |
| 1347 TabContents* page_f_contents = CreateTabContents(); | 1356 TabContentsWrapper* page_f_contents = CreateTabContents(); |
| 1348 strip.AddTabContents(page_f_contents, -1, PageTransition::AUTO_BOOKMARK, | 1357 strip.AddTabContents(page_f_contents, -1, PageTransition::AUTO_BOOKMARK, |
| 1349 TabStripModel::ADD_SELECTED); | 1358 TabStripModel::ADD_SELECTED); |
| 1350 | 1359 |
| 1351 EXPECT_EQ(4, strip.GetIndexOfTabContents(page_f_contents)); | 1360 EXPECT_EQ(4, strip.GetIndexOfTabContents(page_f_contents)); |
| 1352 EXPECT_EQ(4, strip.selected_index()); | 1361 EXPECT_EQ(4, strip.selected_index()); |
| 1353 | 1362 |
| 1354 // Close the Tab. The next-adjacent should be selected. | 1363 // Close the Tab. The next-adjacent should be selected. |
| 1355 strip.CloseTabContentsAt(4, TabStripModel::CLOSE_NONE); | 1364 strip.CloseTabContentsAt(4, TabStripModel::CLOSE_NONE); |
| 1356 | 1365 |
| 1357 EXPECT_EQ(3, strip.selected_index()); | 1366 EXPECT_EQ(3, strip.selected_index()); |
| 1358 | 1367 |
| 1359 // Clean up. | 1368 // Clean up. |
| 1360 strip.CloseAllTabs(); | 1369 strip.CloseAllTabs(); |
| 1361 } | 1370 } |
| 1362 | 1371 |
| 1363 // A test of navigations in a tab that is part of a group of opened from some | 1372 // A test of navigations in a tab that is part of a group of opened from some |
| 1364 // parent tab. If the navigations are link clicks, the group relationship of | 1373 // parent tab. If the navigations are link clicks, the group relationship of |
| 1365 // the tab to its parent are preserved. If they are of any other type, they are | 1374 // the tab to its parent are preserved. If they are of any other type, they are |
| 1366 // not preserved. | 1375 // not preserved. |
| 1367 TEST_F(TabStripModelTest, NavigationForgetsOpeners) { | 1376 TEST_F(TabStripModelTest, NavigationForgetsOpeners) { |
| 1368 TabStripDummyDelegate delegate(NULL); | 1377 TabStripDummyDelegate delegate(NULL); |
| 1369 TabStripModel strip(&delegate, profile()); | 1378 TabStripModel strip(&delegate, profile()); |
| 1370 | 1379 |
| 1371 // Open page A | 1380 // Open page A |
| 1372 TabContents* page_a_contents = CreateTabContents(); | 1381 TabContentsWrapper* page_a_contents = CreateTabContents(); |
| 1373 strip.AddTabContents(page_a_contents, -1, PageTransition::START_PAGE, | 1382 strip.AddTabContents(page_a_contents, -1, PageTransition::START_PAGE, |
| 1374 TabStripModel::ADD_SELECTED); | 1383 TabStripModel::ADD_SELECTED); |
| 1375 | 1384 |
| 1376 // Open pages B, C and D in the background from links on page A... | 1385 // Open pages B, C and D in the background from links on page A... |
| 1377 TabContents* page_b_contents = CreateTabContents(); | 1386 TabContentsWrapper* page_b_contents = CreateTabContents(); |
| 1378 TabContents* page_c_contents = CreateTabContents(); | 1387 TabContentsWrapper* page_c_contents = CreateTabContents(); |
| 1379 TabContents* page_d_contents = CreateTabContents(); | 1388 TabContentsWrapper* page_d_contents = CreateTabContents(); |
| 1380 strip.AddTabContents(page_b_contents, -1, PageTransition::LINK, | 1389 strip.AddTabContents(page_b_contents, -1, PageTransition::LINK, |
| 1381 TabStripModel::ADD_NONE); | 1390 TabStripModel::ADD_NONE); |
| 1382 strip.AddTabContents(page_c_contents, -1, PageTransition::LINK, | 1391 strip.AddTabContents(page_c_contents, -1, PageTransition::LINK, |
| 1383 TabStripModel::ADD_NONE); | 1392 TabStripModel::ADD_NONE); |
| 1384 strip.AddTabContents(page_d_contents, -1, PageTransition::LINK, | 1393 strip.AddTabContents(page_d_contents, -1, PageTransition::LINK, |
| 1385 TabStripModel::ADD_NONE); | 1394 TabStripModel::ADD_NONE); |
| 1386 | 1395 |
| 1387 // Open page E in a different opener group from page A. | 1396 // Open page E in a different opener group from page A. |
| 1388 TabContents* page_e_contents = CreateTabContents(); | 1397 TabContentsWrapper* page_e_contents = CreateTabContents(); |
| 1389 strip.AddTabContents(page_e_contents, -1, PageTransition::START_PAGE, | 1398 strip.AddTabContents(page_e_contents, -1, PageTransition::START_PAGE, |
| 1390 TabStripModel::ADD_NONE); | 1399 TabStripModel::ADD_NONE); |
| 1391 | 1400 |
| 1392 // Tell the TabStripModel that we are navigating page D via a link click. | 1401 // Tell the TabStripModel that we are navigating page D via a link click. |
| 1393 strip.SelectTabContentsAt(3, true); | 1402 strip.SelectTabContentsAt(3, true); |
| 1394 strip.TabNavigating(page_d_contents, PageTransition::LINK); | 1403 strip.TabNavigating(page_d_contents, PageTransition::LINK); |
| 1395 | 1404 |
| 1396 // Close page D, page C should be selected. (part of same group). | 1405 // Close page D, page C should be selected. (part of same group). |
| 1397 strip.CloseTabContentsAt(3, TabStripModel::CLOSE_NONE); | 1406 strip.CloseTabContentsAt(3, TabStripModel::CLOSE_NONE); |
| 1398 EXPECT_EQ(2, strip.selected_index()); | 1407 EXPECT_EQ(2, strip.selected_index()); |
| (...skipping 12 matching lines...) Expand all Loading... |
| 1411 // A test that the forgetting behavior tested in NavigationForgetsOpeners above | 1420 // A test that the forgetting behavior tested in NavigationForgetsOpeners above |
| 1412 // doesn't cause the opener relationship for a New Tab opened at the end of the | 1421 // doesn't cause the opener relationship for a New Tab opened at the end of the |
| 1413 // TabStrip to be reset (Test 1 below), unless another any other tab is | 1422 // TabStrip to be reset (Test 1 below), unless another any other tab is |
| 1414 // seelcted (Test 2 below). | 1423 // seelcted (Test 2 below). |
| 1415 TEST_F(TabStripModelTest, NavigationForgettingDoesntAffectNewTab) { | 1424 TEST_F(TabStripModelTest, NavigationForgettingDoesntAffectNewTab) { |
| 1416 TabStripDummyDelegate delegate(NULL); | 1425 TabStripDummyDelegate delegate(NULL); |
| 1417 TabStripModel strip(&delegate, profile()); | 1426 TabStripModel strip(&delegate, profile()); |
| 1418 | 1427 |
| 1419 // Open a tab and several tabs from it, then select one of the tabs that was | 1428 // Open a tab and several tabs from it, then select one of the tabs that was |
| 1420 // opened. | 1429 // opened. |
| 1421 TabContents* page_a_contents = CreateTabContents(); | 1430 TabContentsWrapper* page_a_contents = CreateTabContents(); |
| 1422 strip.AddTabContents(page_a_contents, -1, PageTransition::START_PAGE, | 1431 strip.AddTabContents(page_a_contents, -1, PageTransition::START_PAGE, |
| 1423 TabStripModel::ADD_SELECTED); | 1432 TabStripModel::ADD_SELECTED); |
| 1424 | 1433 |
| 1425 TabContents* page_b_contents = CreateTabContents(); | 1434 TabContentsWrapper* page_b_contents = CreateTabContents(); |
| 1426 TabContents* page_c_contents = CreateTabContents(); | 1435 TabContentsWrapper* page_c_contents = CreateTabContents(); |
| 1427 TabContents* page_d_contents = CreateTabContents(); | 1436 TabContentsWrapper* page_d_contents = CreateTabContents(); |
| 1428 strip.AddTabContents(page_b_contents, -1, PageTransition::LINK, | 1437 strip.AddTabContents(page_b_contents, -1, PageTransition::LINK, |
| 1429 TabStripModel::ADD_NONE); | 1438 TabStripModel::ADD_NONE); |
| 1430 strip.AddTabContents(page_c_contents, -1, PageTransition::LINK, | 1439 strip.AddTabContents(page_c_contents, -1, PageTransition::LINK, |
| 1431 TabStripModel::ADD_NONE); | 1440 TabStripModel::ADD_NONE); |
| 1432 strip.AddTabContents(page_d_contents, -1, PageTransition::LINK, | 1441 strip.AddTabContents(page_d_contents, -1, PageTransition::LINK, |
| 1433 TabStripModel::ADD_NONE); | 1442 TabStripModel::ADD_NONE); |
| 1434 | 1443 |
| 1435 strip.SelectTabContentsAt(2, true); | 1444 strip.SelectTabContentsAt(2, true); |
| 1436 | 1445 |
| 1437 // TEST 1: If the user is in a group of tabs and opens a new tab at the end | 1446 // TEST 1: If the user is in a group of tabs and opens a new tab at the end |
| 1438 // of the strip, closing that new tab will select the tab that they were | 1447 // of the strip, closing that new tab will select the tab that they were |
| 1439 // last on. | 1448 // last on. |
| 1440 | 1449 |
| 1441 // Now simulate opening a new tab at the end of the TabStrip. | 1450 // Now simulate opening a new tab at the end of the TabStrip. |
| 1442 TabContents* new_tab_contents1 = CreateTabContents(); | 1451 TabContentsWrapper* new_tab_contents1 = CreateTabContents(); |
| 1443 strip.AddTabContents(new_tab_contents1, -1, PageTransition::TYPED, | 1452 strip.AddTabContents(new_tab_contents1, -1, PageTransition::TYPED, |
| 1444 TabStripModel::ADD_SELECTED); | 1453 TabStripModel::ADD_SELECTED); |
| 1445 | 1454 |
| 1446 // At this point, if we close this tab the last selected one should be | 1455 // At this point, if we close this tab the last selected one should be |
| 1447 // re-selected. | 1456 // re-selected. |
| 1448 strip.CloseTabContentsAt(strip.count() - 1, TabStripModel::CLOSE_NONE); | 1457 strip.CloseTabContentsAt(strip.count() - 1, TabStripModel::CLOSE_NONE); |
| 1449 EXPECT_EQ(page_c_contents, strip.GetTabContentsAt(strip.selected_index())); | 1458 EXPECT_EQ(page_c_contents, strip.GetTabContentsAt(strip.selected_index())); |
| 1450 | 1459 |
| 1451 // TEST 2: If the user is in a group of tabs and opens a new tab at the end | 1460 // TEST 2: If the user is in a group of tabs and opens a new tab at the end |
| 1452 // of the strip, selecting any other tab in the strip will cause that new | 1461 // of the strip, selecting any other tab in the strip will cause that new |
| 1453 // tab's opener relationship to be forgotten. | 1462 // tab's opener relationship to be forgotten. |
| 1454 | 1463 |
| 1455 // Open a new tab again. | 1464 // Open a new tab again. |
| 1456 TabContents* new_tab_contents2 = CreateTabContents(); | 1465 TabContentsWrapper* new_tab_contents2 = CreateTabContents(); |
| 1457 strip.AddTabContents(new_tab_contents2, -1, PageTransition::TYPED, | 1466 strip.AddTabContents(new_tab_contents2, -1, PageTransition::TYPED, |
| 1458 TabStripModel::ADD_SELECTED); | 1467 TabStripModel::ADD_SELECTED); |
| 1459 | 1468 |
| 1460 // Now select the first tab. | 1469 // Now select the first tab. |
| 1461 strip.SelectTabContentsAt(0, true); | 1470 strip.SelectTabContentsAt(0, true); |
| 1462 | 1471 |
| 1463 // Now select the last tab. | 1472 // Now select the last tab. |
| 1464 strip.SelectTabContentsAt(strip.count() - 1, true); | 1473 strip.SelectTabContentsAt(strip.count() - 1, true); |
| 1465 | 1474 |
| 1466 // Now close the last tab. The next adjacent should be selected. | 1475 // Now close the last tab. The next adjacent should be selected. |
| 1467 strip.CloseTabContentsAt(strip.count() - 1, TabStripModel::CLOSE_NONE); | 1476 strip.CloseTabContentsAt(strip.count() - 1, TabStripModel::CLOSE_NONE); |
| 1468 EXPECT_EQ(page_d_contents, strip.GetTabContentsAt(strip.selected_index())); | 1477 EXPECT_EQ(page_d_contents, strip.GetTabContentsAt(strip.selected_index())); |
| 1469 | 1478 |
| 1470 strip.CloseAllTabs(); | 1479 strip.CloseAllTabs(); |
| 1471 } | 1480 } |
| 1472 | 1481 |
| 1473 // Tests that fast shutdown is attempted appropriately. | 1482 // Tests that fast shutdown is attempted appropriately. |
| 1474 TEST_F(TabStripModelTest, FastShutdown) { | 1483 TEST_F(TabStripModelTest, FastShutdown) { |
| 1475 TabStripDummyDelegate delegate(NULL); | 1484 TabStripDummyDelegate delegate(NULL); |
| 1476 TabStripModel tabstrip(&delegate, profile()); | 1485 TabStripModel tabstrip(&delegate, profile()); |
| 1477 MockTabStripModelObserver observer; | 1486 MockTabStripModelObserver observer; |
| 1478 tabstrip.AddObserver(&observer); | 1487 tabstrip.AddObserver(&observer); |
| 1479 | 1488 |
| 1480 EXPECT_TRUE(tabstrip.empty()); | 1489 EXPECT_TRUE(tabstrip.empty()); |
| 1481 | 1490 |
| 1482 // Make sure fast shutdown is attempted when tabs that share a RPH are shut | 1491 // Make sure fast shutdown is attempted when tabs that share a RPH are shut |
| 1483 // down. | 1492 // down. |
| 1484 { | 1493 { |
| 1485 TabContents* contents1 = CreateTabContents(); | 1494 TabContentsWrapper* contents1 = CreateTabContents(); |
| 1486 TabContents* contents2 = CreateTabContentsWithSharedRPH(contents1); | 1495 TabContentsWrapper* contents2 = |
| 1496 CreateTabContentsWithSharedRPH(contents1->tab_contents()); |
| 1487 | 1497 |
| 1488 SetID(contents1, 1); | 1498 SetID(contents1->tab_contents(), 1); |
| 1489 SetID(contents2, 2); | 1499 SetID(contents2->tab_contents(), 2); |
| 1490 | 1500 |
| 1491 tabstrip.AppendTabContents(contents1, true); | 1501 tabstrip.AppendTabContents(contents1, true); |
| 1492 tabstrip.AppendTabContents(contents2, true); | 1502 tabstrip.AppendTabContents(contents2, true); |
| 1493 | 1503 |
| 1494 // Turn on the fake unload listener so the tabs don't actually get shut | 1504 // Turn on the fake unload listener so the tabs don't actually get shut |
| 1495 // down when we call CloseAllTabs()---we need to be able to check that | 1505 // down when we call CloseAllTabs()---we need to be able to check that |
| 1496 // fast shutdown was attempted. | 1506 // fast shutdown was attempted. |
| 1497 delegate.set_run_unload_listener(true); | 1507 delegate.set_run_unload_listener(true); |
| 1498 tabstrip.CloseAllTabs(); | 1508 tabstrip.CloseAllTabs(); |
| 1499 // On a mock RPH this checks whether we *attempted* fast shutdown. | 1509 // On a mock RPH this checks whether we *attempted* fast shutdown. |
| 1500 // A real RPH would reject our attempt since there is an unload handler. | 1510 // A real RPH would reject our attempt since there is an unload handler. |
| 1501 EXPECT_TRUE(contents1->GetRenderProcessHost()->fast_shutdown_started()); | 1511 EXPECT_TRUE(contents1->tab_contents()-> |
| 1512 GetRenderProcessHost()->fast_shutdown_started()); |
| 1502 EXPECT_EQ(2, tabstrip.count()); | 1513 EXPECT_EQ(2, tabstrip.count()); |
| 1503 | 1514 |
| 1504 delegate.set_run_unload_listener(false); | 1515 delegate.set_run_unload_listener(false); |
| 1505 tabstrip.CloseAllTabs(); | 1516 tabstrip.CloseAllTabs(); |
| 1506 EXPECT_TRUE(tabstrip.empty()); | 1517 EXPECT_TRUE(tabstrip.empty()); |
| 1507 } | 1518 } |
| 1508 | 1519 |
| 1509 // Make sure fast shutdown is not attempted when only some tabs that share a | 1520 // Make sure fast shutdown is not attempted when only some tabs that share a |
| 1510 // RPH are shut down. | 1521 // RPH are shut down. |
| 1511 { | 1522 { |
| 1512 TabContents* contents1 = CreateTabContents(); | 1523 TabContentsWrapper* contents1 = CreateTabContents(); |
| 1513 TabContents* contents2 = CreateTabContentsWithSharedRPH(contents1); | 1524 TabContentsWrapper* contents2 = |
| 1525 CreateTabContentsWithSharedRPH(contents1->tab_contents()); |
| 1514 | 1526 |
| 1515 SetID(contents1, 1); | 1527 SetID(contents1->tab_contents(), 1); |
| 1516 SetID(contents2, 2); | 1528 SetID(contents2->tab_contents(), 2); |
| 1517 | 1529 |
| 1518 tabstrip.AppendTabContents(contents1, true); | 1530 tabstrip.AppendTabContents(contents1, true); |
| 1519 tabstrip.AppendTabContents(contents2, true); | 1531 tabstrip.AppendTabContents(contents2, true); |
| 1520 | 1532 |
| 1521 tabstrip.CloseTabContentsAt(1, TabStripModel::CLOSE_NONE); | 1533 tabstrip.CloseTabContentsAt(1, TabStripModel::CLOSE_NONE); |
| 1522 EXPECT_FALSE(contents1->GetRenderProcessHost()->fast_shutdown_started()); | 1534 EXPECT_FALSE(contents1->tab_contents()-> |
| 1535 GetRenderProcessHost()->fast_shutdown_started()); |
| 1523 EXPECT_EQ(1, tabstrip.count()); | 1536 EXPECT_EQ(1, tabstrip.count()); |
| 1524 | 1537 |
| 1525 tabstrip.CloseAllTabs(); | 1538 tabstrip.CloseAllTabs(); |
| 1526 EXPECT_TRUE(tabstrip.empty()); | 1539 EXPECT_TRUE(tabstrip.empty()); |
| 1527 } | 1540 } |
| 1528 } | 1541 } |
| 1529 | 1542 |
| 1530 // Tests various permutations of apps. | 1543 // Tests various permutations of apps. |
| 1531 TEST_F(TabStripModelTest, Apps) { | 1544 TEST_F(TabStripModelTest, Apps) { |
| 1532 TabStripDummyDelegate delegate(NULL); | 1545 TabStripDummyDelegate delegate(NULL); |
| 1533 TabStripModel tabstrip(&delegate, profile()); | 1546 TabStripModel tabstrip(&delegate, profile()); |
| 1534 MockTabStripModelObserver observer; | 1547 MockTabStripModelObserver observer; |
| 1535 tabstrip.AddObserver(&observer); | 1548 tabstrip.AddObserver(&observer); |
| 1536 | 1549 |
| 1537 EXPECT_TRUE(tabstrip.empty()); | 1550 EXPECT_TRUE(tabstrip.empty()); |
| 1538 | 1551 |
| 1539 typedef MockTabStripModelObserver::State State; | 1552 typedef MockTabStripModelObserver::State State; |
| 1540 | 1553 |
| 1541 #if defined(OS_WIN) | 1554 #if defined(OS_WIN) |
| 1542 FilePath path(FILE_PATH_LITERAL("c:\\foo")); | 1555 FilePath path(FILE_PATH_LITERAL("c:\\foo")); |
| 1543 #elif defined(OS_POSIX) | 1556 #elif defined(OS_POSIX) |
| 1544 FilePath path(FILE_PATH_LITERAL("/foo")); | 1557 FilePath path(FILE_PATH_LITERAL("/foo")); |
| 1545 #endif | 1558 #endif |
| 1546 scoped_refptr<Extension> extension_app(new Extension(path, | 1559 scoped_refptr<Extension> extension_app(new Extension(path, |
| 1547 Extension::INVALID)); | 1560 Extension::INVALID)); |
| 1548 extension_app->launch_web_url_ = "http://www.google.com"; | 1561 extension_app->launch_web_url_ = "http://www.google.com"; |
| 1549 TabContents* contents1 = CreateTabContents(); | 1562 TabContentsWrapper* contents1 = CreateTabContents(); |
| 1550 contents1->SetExtensionApp(extension_app); | 1563 contents1->tab_contents()->SetExtensionApp(extension_app); |
| 1551 TabContents* contents2 = CreateTabContents(); | 1564 TabContentsWrapper* contents2 = CreateTabContents(); |
| 1552 contents2->SetExtensionApp(extension_app); | 1565 contents2->tab_contents()->SetExtensionApp(extension_app); |
| 1553 TabContents* contents3 = CreateTabContents(); | 1566 TabContentsWrapper* contents3 = CreateTabContents(); |
| 1554 | 1567 |
| 1555 SetID(contents1, 1); | 1568 SetID(contents1->tab_contents(), 1); |
| 1556 SetID(contents2, 2); | 1569 SetID(contents2->tab_contents(), 2); |
| 1557 SetID(contents3, 3); | 1570 SetID(contents3->tab_contents(), 3); |
| 1558 | 1571 |
| 1559 // Note! The ordering of these tests is important, each subsequent test | 1572 // Note! The ordering of these tests is important, each subsequent test |
| 1560 // builds on the state established in the previous. This is important if you | 1573 // builds on the state established in the previous. This is important if you |
| 1561 // ever insert tests rather than append. | 1574 // ever insert tests rather than append. |
| 1562 | 1575 |
| 1563 // Initial state, tab3 only and selected. | 1576 // Initial state, tab3 only and selected. |
| 1564 tabstrip.AppendTabContents(contents3, true); | 1577 tabstrip.AppendTabContents(contents3, true); |
| 1565 | 1578 |
| 1566 observer.ClearStates(); | 1579 observer.ClearStates(); |
| 1567 | 1580 |
| (...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1657 TEST_F(TabStripModelTest, Pinning) { | 1670 TEST_F(TabStripModelTest, Pinning) { |
| 1658 TabStripDummyDelegate delegate(NULL); | 1671 TabStripDummyDelegate delegate(NULL); |
| 1659 TabStripModel tabstrip(&delegate, profile()); | 1672 TabStripModel tabstrip(&delegate, profile()); |
| 1660 MockTabStripModelObserver observer; | 1673 MockTabStripModelObserver observer; |
| 1661 tabstrip.AddObserver(&observer); | 1674 tabstrip.AddObserver(&observer); |
| 1662 | 1675 |
| 1663 EXPECT_TRUE(tabstrip.empty()); | 1676 EXPECT_TRUE(tabstrip.empty()); |
| 1664 | 1677 |
| 1665 typedef MockTabStripModelObserver::State State; | 1678 typedef MockTabStripModelObserver::State State; |
| 1666 | 1679 |
| 1667 TabContents* contents1 = CreateTabContents(); | 1680 TabContentsWrapper* contents1 = CreateTabContents(); |
| 1668 TabContents* contents2 = CreateTabContents(); | 1681 TabContentsWrapper* contents2 = CreateTabContents(); |
| 1669 TabContents* contents3 = CreateTabContents(); | 1682 TabContentsWrapper* contents3 = CreateTabContents(); |
| 1670 | 1683 |
| 1671 SetID(contents1, 1); | 1684 SetID(contents1->tab_contents(), 1); |
| 1672 SetID(contents2, 2); | 1685 SetID(contents2->tab_contents(), 2); |
| 1673 SetID(contents3, 3); | 1686 SetID(contents3->tab_contents(), 3); |
| 1674 | 1687 |
| 1675 // Note! The ordering of these tests is important, each subsequent test | 1688 // Note! The ordering of these tests is important, each subsequent test |
| 1676 // builds on the state established in the previous. This is important if you | 1689 // builds on the state established in the previous. This is important if you |
| 1677 // ever insert tests rather than append. | 1690 // ever insert tests rather than append. |
| 1678 | 1691 |
| 1679 // Initial state, three tabs, first selected. | 1692 // Initial state, three tabs, first selected. |
| 1680 tabstrip.AppendTabContents(contents1, true); | 1693 tabstrip.AppendTabContents(contents1, true); |
| 1681 tabstrip.AppendTabContents(contents2, false); | 1694 tabstrip.AppendTabContents(contents2, false); |
| 1682 tabstrip.AppendTabContents(contents3, false); | 1695 tabstrip.AppendTabContents(contents3, false); |
| 1683 | 1696 |
| (...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1792 // Pin "3" and "1". | 1805 // Pin "3" and "1". |
| 1793 { | 1806 { |
| 1794 tabstrip.SetTabPinned(0, true); | 1807 tabstrip.SetTabPinned(0, true); |
| 1795 tabstrip.SetTabPinned(1, true); | 1808 tabstrip.SetTabPinned(1, true); |
| 1796 | 1809 |
| 1797 EXPECT_EQ("1p 3p 2", GetPinnedState(tabstrip)); | 1810 EXPECT_EQ("1p 3p 2", GetPinnedState(tabstrip)); |
| 1798 | 1811 |
| 1799 observer.ClearStates(); | 1812 observer.ClearStates(); |
| 1800 } | 1813 } |
| 1801 | 1814 |
| 1802 TabContents* contents4 = CreateTabContents(); | 1815 TabContentsWrapper* contents4 = CreateTabContents(); |
| 1803 SetID(contents4, 4); | 1816 SetID(contents4->tab_contents(), 4); |
| 1804 | 1817 |
| 1805 // Insert "4" between "1" and "3". As "1" and "4" are pinned, "4" should end | 1818 // Insert "4" between "1" and "3". As "1" and "4" are pinned, "4" should end |
| 1806 // up after them. | 1819 // up after them. |
| 1807 { | 1820 { |
| 1808 tabstrip.InsertTabContentsAt(1, contents4, TabStripModel::ADD_NONE); | 1821 tabstrip.InsertTabContentsAt(1, contents4, TabStripModel::ADD_NONE); |
| 1809 | 1822 |
| 1810 ASSERT_EQ(1, observer.GetStateCount()); | 1823 ASSERT_EQ(1, observer.GetStateCount()); |
| 1811 State state(contents4, 2, MockTabStripModelObserver::INSERT); | 1824 State state(contents4, 2, MockTabStripModelObserver::INSERT); |
| 1812 EXPECT_TRUE(observer.StateEquals(0, state)); | 1825 EXPECT_TRUE(observer.StateEquals(0, state)); |
| 1813 | 1826 |
| 1814 EXPECT_EQ("1p 3p 4 2", GetPinnedState(tabstrip)); | 1827 EXPECT_EQ("1p 3p 4 2", GetPinnedState(tabstrip)); |
| 1815 } | 1828 } |
| 1816 | 1829 |
| 1817 tabstrip.CloseAllTabs(); | 1830 tabstrip.CloseAllTabs(); |
| 1818 } | 1831 } |
| 1819 | 1832 |
| 1820 // Makes sure the TabStripModel calls the right observer methods during a | 1833 // Makes sure the TabStripModel calls the right observer methods during a |
| 1821 // replace. | 1834 // replace. |
| 1822 TEST_F(TabStripModelTest, ReplaceSendsSelected) { | 1835 TEST_F(TabStripModelTest, ReplaceSendsSelected) { |
| 1823 typedef MockTabStripModelObserver::State State; | 1836 typedef MockTabStripModelObserver::State State; |
| 1824 | 1837 |
| 1825 TabStripDummyDelegate delegate(NULL); | 1838 TabStripDummyDelegate delegate(NULL); |
| 1826 TabStripModel strip(&delegate, profile()); | 1839 TabStripModel strip(&delegate, profile()); |
| 1827 | 1840 |
| 1828 TabContents* first_contents = CreateTabContents(); | 1841 TabContentsWrapper* first_contents = CreateTabContents(); |
| 1829 strip.AddTabContents(first_contents, -1, PageTransition::TYPED, | 1842 strip.AddTabContents(first_contents, -1, PageTransition::TYPED, |
| 1830 TabStripModel::ADD_SELECTED); | 1843 TabStripModel::ADD_SELECTED); |
| 1831 | 1844 |
| 1832 MockTabStripModelObserver tabstrip_observer; | 1845 MockTabStripModelObserver tabstrip_observer; |
| 1833 strip.AddObserver(&tabstrip_observer); | 1846 strip.AddObserver(&tabstrip_observer); |
| 1834 | 1847 |
| 1835 TabContents* new_contents = CreateTabContents(); | 1848 TabContentsWrapper* new_contents = CreateTabContents(); |
| 1836 strip.ReplaceTabContentsAt(0, new_contents); | 1849 strip.ReplaceTabContentsAt(0, new_contents); |
| 1837 | 1850 |
| 1838 ASSERT_EQ(2, tabstrip_observer.GetStateCount()); | 1851 ASSERT_EQ(2, tabstrip_observer.GetStateCount()); |
| 1839 | 1852 |
| 1840 // First event should be for replaced. | 1853 // First event should be for replaced. |
| 1841 State state(new_contents, 0, MockTabStripModelObserver::REPLACED); | 1854 State state(new_contents, 0, MockTabStripModelObserver::REPLACED); |
| 1842 state.src_contents = first_contents; | 1855 state.src_contents = first_contents; |
| 1843 EXPECT_TRUE(tabstrip_observer.StateEquals(0, state)); | 1856 EXPECT_TRUE(tabstrip_observer.StateEquals(0, state)); |
| 1844 | 1857 |
| 1845 // And the second for selected. | 1858 // And the second for selected. |
| 1846 state = State(new_contents, 0, MockTabStripModelObserver::SELECT); | 1859 state = State(new_contents, 0, MockTabStripModelObserver::SELECT); |
| 1847 state.src_contents = first_contents; | 1860 state.src_contents = first_contents; |
| 1848 EXPECT_TRUE(tabstrip_observer.StateEquals(1, state)); | 1861 EXPECT_TRUE(tabstrip_observer.StateEquals(1, state)); |
| 1849 | 1862 |
| 1850 // Now add another tab and replace it, making sure we don't get a selected | 1863 // Now add another tab and replace it, making sure we don't get a selected |
| 1851 // event this time. | 1864 // event this time. |
| 1852 TabContents* third_contents = CreateTabContents(); | 1865 TabContentsWrapper* third_contents = CreateTabContents(); |
| 1853 strip.AddTabContents(third_contents, 1, PageTransition::TYPED, | 1866 strip.AddTabContents(third_contents, 1, PageTransition::TYPED, |
| 1854 TabStripModel::ADD_NONE); | 1867 TabStripModel::ADD_NONE); |
| 1855 | 1868 |
| 1856 tabstrip_observer.ClearStates(); | 1869 tabstrip_observer.ClearStates(); |
| 1857 | 1870 |
| 1858 // And replace it. | 1871 // And replace it. |
| 1859 new_contents = CreateTabContents(); | 1872 new_contents = CreateTabContents(); |
| 1860 strip.ReplaceTabContentsAt(1, new_contents); | 1873 strip.ReplaceTabContentsAt(1, new_contents); |
| 1861 | 1874 |
| 1862 ASSERT_EQ(1, tabstrip_observer.GetStateCount()); | 1875 ASSERT_EQ(1, tabstrip_observer.GetStateCount()); |
| 1863 | 1876 |
| 1864 state = State(new_contents, 1, MockTabStripModelObserver::REPLACED); | 1877 state = State(new_contents, 1, MockTabStripModelObserver::REPLACED); |
| 1865 state.src_contents = third_contents; | 1878 state.src_contents = third_contents; |
| 1866 EXPECT_TRUE(tabstrip_observer.StateEquals(0, state)); | 1879 EXPECT_TRUE(tabstrip_observer.StateEquals(0, state)); |
| 1867 | 1880 |
| 1868 strip.CloseAllTabs(); | 1881 strip.CloseAllTabs(); |
| 1869 } | 1882 } |
| 1870 | 1883 |
| 1871 // Makes sure TabStripModel handles the case of deleting a tab while removing | 1884 // Makes sure TabStripModel handles the case of deleting a tab while removing |
| 1872 // another tab. | 1885 // another tab. |
| 1873 TEST_F(TabStripModelTest, DeleteFromDestroy) { | 1886 TEST_F(TabStripModelTest, DeleteFromDestroy) { |
| 1874 TabStripDummyDelegate delegate(NULL); | 1887 TabStripDummyDelegate delegate(NULL); |
| 1875 TabStripModel strip(&delegate, profile()); | 1888 TabStripModel strip(&delegate, profile()); |
| 1876 TabContents* contents1 = CreateTabContents(); | 1889 TabContentsWrapper* contents1 = CreateTabContents(); |
| 1877 TabContents* contents2 = CreateTabContents(); | 1890 TabContentsWrapper* contents2 = CreateTabContents(); |
| 1878 strip.AppendTabContents(contents1, true); | 1891 strip.AppendTabContents(contents1, true); |
| 1879 strip.AppendTabContents(contents2, true); | 1892 strip.AppendTabContents(contents2, true); |
| 1880 // DeleteTabContentsOnDestroyedObserver deletes contents1 when contents2 sends | 1893 // DeleteTabContentsOnDestroyedObserver deletes contents1 when contents2 sends |
| 1881 // out notification that it is being destroyed. | 1894 // out notification that it is being destroyed. |
| 1882 DeleteTabContentsOnDestroyedObserver observer(contents2, contents1); | 1895 DeleteTabContentsOnDestroyedObserver observer(contents2, contents1); |
| 1883 strip.CloseAllTabs(); | 1896 strip.CloseAllTabs(); |
| 1884 } | 1897 } |
| OLD | NEW |