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

Side by Side Diff: chrome/browser/browser.cc

Issue 2821011: Removes phantom tabs. (Closed)
Patch Set: Created 10 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « chrome/browser/browser.h ('k') | chrome/browser/browser_browsertest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 "chrome/browser/browser.h" 5 #include "chrome/browser/browser.h"
6 6
7 #if defined(OS_WIN) 7 #if defined(OS_WIN)
8 #include <shellapi.h> 8 #include <shellapi.h>
9 #include <windows.h> 9 #include <windows.h>
10 #endif // OS_WIN 10 #endif // OS_WIN
(...skipping 222 matching lines...) Expand 10 before | Expand all | Expand 10 after
233 233
234 tab_restore_service_ = profile->GetTabRestoreService(); 234 tab_restore_service_ = profile->GetTabRestoreService();
235 if (tab_restore_service_) { 235 if (tab_restore_service_) {
236 tab_restore_service_->AddObserver(this); 236 tab_restore_service_->AddObserver(this);
237 TabRestoreServiceChanged(tab_restore_service_); 237 TabRestoreServiceChanged(tab_restore_service_);
238 } 238 }
239 } 239 }
240 240
241 Browser::~Browser() { 241 Browser::~Browser() {
242 // The tab strip should not have any significant tabs at this point. 242 // The tab strip should not have any significant tabs at this point.
243 DCHECK(!tabstrip_model_.HasNonPhantomTabs()); 243 DCHECK(tabstrip_model_.empty());
244 tabstrip_model_.RemoveObserver(this); 244 tabstrip_model_.RemoveObserver(this);
245 245
246 BrowserList::RemoveBrowser(this); 246 BrowserList::RemoveBrowser(this);
247 247
248 #if defined(OS_WIN) || defined(OS_LINUX) 248 #if defined(OS_WIN) || defined(OS_LINUX)
249 if (!BrowserList::HasBrowserWithProfile(profile_)) { 249 if (!BrowserList::HasBrowserWithProfile(profile_)) {
250 // We're the last browser window with this profile. We need to nuke the 250 // We're the last browser window with this profile. We need to nuke the
251 // TabRestoreService, which will start the shutdown of the 251 // TabRestoreService, which will start the shutdown of the
252 // NavigationControllers and allow for proper shutdown. If we don't do this 252 // NavigationControllers and allow for proper shutdown. If we don't do this
253 // chrome won't shutdown cleanly, and may end up crashing when some 253 // chrome won't shutdown cleanly, and may end up crashing when some
(...skipping 2090 matching lines...) Expand 10 before | Expand all | Expand 10 after
2344 } 2344 }
2345 2345
2346 void Browser::TabMoved(TabContents* contents, 2346 void Browser::TabMoved(TabContents* contents,
2347 int from_index, 2347 int from_index,
2348 int to_index) { 2348 int to_index) {
2349 DCHECK(from_index >= 0 && to_index >= 0); 2349 DCHECK(from_index >= 0 && to_index >= 0);
2350 // Notify the history service. 2350 // Notify the history service.
2351 SyncHistoryWithTabs(std::min(from_index, to_index)); 2351 SyncHistoryWithTabs(std::min(from_index, to_index));
2352 } 2352 }
2353 2353
2354 void Browser::TabReplacedAt(TabContents* old_contents,
2355 TabContents* new_contents, int index) {
2356 TabDetachedAtImpl(old_contents, index, DETACH_TYPE_REPLACE);
2357 TabInsertedAt(new_contents, index,
2358 (index == tabstrip_model_.selected_index()));
2359
2360 int entry_count = new_contents->controller().entry_count();
2361 if (entry_count > 0) {
2362 // Send out notification so that observers are updated appropriately.
2363 new_contents->controller().NotifyEntryChanged(
2364 new_contents->controller().GetEntryAtIndex(entry_count - 1),
2365 entry_count - 1);
2366 }
2367 }
2368
2369 void Browser::TabPinnedStateChanged(TabContents* contents, int index) { 2354 void Browser::TabPinnedStateChanged(TabContents* contents, int index) {
2370 if (!profile()->HasSessionService()) 2355 if (!profile()->HasSessionService())
2371 return; 2356 return;
2372 SessionService* session_service = profile()->GetSessionService(); 2357 SessionService* session_service = profile()->GetSessionService();
2373 if (session_service) { 2358 if (session_service) {
2374 session_service->SetPinnedState( 2359 session_service->SetPinnedState(
2375 session_id(), 2360 session_id(),
2376 GetTabContentsAt(index)->controller().session_id(), 2361 GetTabContentsAt(index)->controller().session_id(),
2377 tabstrip_model_.IsTabPinned(index)); 2362 tabstrip_model_.IsTabPinned(index));
2378 } 2363 }
(...skipping 1509 matching lines...) Expand 10 before | Expand all | Expand 10 after
3888 } 3873 }
3889 3874
3890 bool Browser::IsPinned(TabContents* source) { 3875 bool Browser::IsPinned(TabContents* source) {
3891 int index = tabstrip_model_.GetIndexOfTabContents(source); 3876 int index = tabstrip_model_.GetIndexOfTabContents(source);
3892 if (index == TabStripModel::kNoTab) { 3877 if (index == TabStripModel::kNoTab) {
3893 NOTREACHED() << "IsPinned called for tab not in our strip"; 3878 NOTREACHED() << "IsPinned called for tab not in our strip";
3894 return false; 3879 return false;
3895 } 3880 }
3896 return tabstrip_model_.IsTabPinned(index); 3881 return tabstrip_model_.IsTabPinned(index);
3897 } 3882 }
OLDNEW
« no previous file with comments | « chrome/browser/browser.h ('k') | chrome/browser/browser_browsertest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698