| OLD | NEW |
| 1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2006-2008 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 <windows.h> | 5 #include <windows.h> |
| 6 #include <shellapi.h> | 6 #include <shellapi.h> |
| 7 | 7 |
| 8 #include "chrome/browser/browser.h" | 8 #include "chrome/browser/browser.h" |
| 9 | 9 |
| 10 #include "base/command_line.h" | 10 #include "base/command_line.h" |
| (...skipping 171 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 182 // chrome won't shutdown cleanly, and may end up crashing when some | 182 // chrome won't shutdown cleanly, and may end up crashing when some |
| 183 // thread tries to use the IO thread (or another thread) that is no longer | 183 // thread tries to use the IO thread (or another thread) that is no longer |
| 184 // valid. | 184 // valid. |
| 185 profile_->ResetTabRestoreService(); | 185 profile_->ResetTabRestoreService(); |
| 186 } | 186 } |
| 187 | 187 |
| 188 SessionService* session_service = profile_->GetSessionService(); | 188 SessionService* session_service = profile_->GetSessionService(); |
| 189 if (session_service) | 189 if (session_service) |
| 190 session_service->WindowClosed(session_id_); | 190 session_service->WindowClosed(session_id_); |
| 191 | 191 |
| 192 TabRestoreService* tab_restore_service = profile()->GetTabRestoreService(); |
| 193 if (tab_restore_service) |
| 194 tab_restore_service->BrowserClosed(this); |
| 195 |
| 192 NotificationService::current()->RemoveObserver( | 196 NotificationService::current()->RemoveObserver( |
| 193 this, NOTIFY_SSL_STATE_CHANGED, NotificationService::AllSources()); | 197 this, NOTIFY_SSL_STATE_CHANGED, NotificationService::AllSources()); |
| 194 | 198 |
| 195 if (profile_->IsOffTheRecord() && | 199 if (profile_->IsOffTheRecord() && |
| 196 !BrowserList::IsOffTheRecordSessionActive()) { | 200 !BrowserList::IsOffTheRecordSessionActive()) { |
| 197 // We reuse the OTR cookie store across OTR windows. If the last OTR | 201 // We reuse the OTR cookie store across OTR windows. If the last OTR |
| 198 // window is closed, then we want to wipe the cookie store clean, so when | 202 // window is closed, then we want to wipe the cookie store clean, so when |
| 199 // an OTR window is open again, it starts with an empty cookie store. This | 203 // an OTR window is open again, it starts with an empty cookie store. This |
| 200 // also frees up the memory that the OTR cookies were using. OTR never | 204 // also frees up the memory that the OTR cookies were using. OTR never |
| 201 // loads or writes persistent cookies (there is no backing store), so we | 205 // loads or writes persistent cookies (there is no backing store), so we |
| (...skipping 230 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 432 | 436 |
| 433 if (BrowserList::size() == 1) | 437 if (BrowserList::size() == 1) |
| 434 browser_shutdown::OnShutdownStarting(browser_shutdown::WINDOW_CLOSE); | 438 browser_shutdown::OnShutdownStarting(browser_shutdown::WINDOW_CLOSE); |
| 435 | 439 |
| 436 // Don't use HasSessionService here, we want to force creation of the | 440 // Don't use HasSessionService here, we want to force creation of the |
| 437 // session service so that user can restore what was open. | 441 // session service so that user can restore what was open. |
| 438 SessionService* session_service = profile()->GetSessionService(); | 442 SessionService* session_service = profile()->GetSessionService(); |
| 439 if (session_service) | 443 if (session_service) |
| 440 session_service->WindowClosing(session_id()); | 444 session_service->WindowClosing(session_id()); |
| 441 | 445 |
| 446 TabRestoreService* tab_restore_service = profile()->GetTabRestoreService(); |
| 447 if (tab_restore_service) |
| 448 tab_restore_service->BrowserClosing(this); |
| 449 |
| 442 CloseAllTabs(); | 450 CloseAllTabs(); |
| 443 } | 451 } |
| 444 | 452 |
| 445 /////////////////////////////////////////////////////////////////////////////// | 453 /////////////////////////////////////////////////////////////////////////////// |
| 446 // Browser, Tab adding/showing functions: | 454 // Browser, Tab adding/showing functions: |
| 447 | 455 |
| 448 TabContents* Browser::AddTabWithURL( | 456 TabContents* Browser::AddTabWithURL( |
| 449 const GURL& url, const GURL& referrer, PageTransition::Type transition, | 457 const GURL& url, const GURL& referrer, PageTransition::Type transition, |
| 450 bool foreground, SiteInstance* instance) { | 458 bool foreground, SiteInstance* instance) { |
| 451 if (type_ == TYPE_APP && tabstrip_model_.count() == 1) { | 459 if (type_ == TYPE_APP && tabstrip_model_.count() == 1) { |
| (...skipping 230 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 682 UserMetrics::RecordAction(L"Duplicate", profile_); | 690 UserMetrics::RecordAction(L"Duplicate", profile_); |
| 683 DuplicateContentsAt(selected_index()); | 691 DuplicateContentsAt(selected_index()); |
| 684 } | 692 } |
| 685 | 693 |
| 686 void Browser::RestoreTab() { | 694 void Browser::RestoreTab() { |
| 687 UserMetrics::RecordAction(L"RestoreTab", profile_); | 695 UserMetrics::RecordAction(L"RestoreTab", profile_); |
| 688 TabRestoreService* service = profile_->GetTabRestoreService(); | 696 TabRestoreService* service = profile_->GetTabRestoreService(); |
| 689 if (!service) | 697 if (!service) |
| 690 return; | 698 return; |
| 691 | 699 |
| 692 const TabRestoreService::Tabs& tabs = service->tabs(); | 700 service->RestoreMostRecentEntry(this); |
| 693 if (tabs.empty() || tabs.front().from_last_session) | |
| 694 return; | |
| 695 | |
| 696 const TabRestoreService::HistoricalTab& tab = tabs.front(); | |
| 697 AddRestoredTab(tab.navigations, tab_count(), tab.current_navigation_index, | |
| 698 true); | |
| 699 service->RemoveHistoricalTabById(tab.id); | |
| 700 } | 701 } |
| 701 | 702 |
| 702 void Browser::ConvertPopupToTabbedBrowser() { | 703 void Browser::ConvertPopupToTabbedBrowser() { |
| 703 UserMetrics::RecordAction(L"ShowAsTab", profile_); | 704 UserMetrics::RecordAction(L"ShowAsTab", profile_); |
| 704 | 705 |
| 705 if (type() != TYPE_NORMAL) { | 706 if (type() != TYPE_NORMAL) { |
| 706 NOTREACHED(); | 707 NOTREACHED(); |
| 707 return; | 708 return; |
| 708 } | 709 } |
| 709 | 710 |
| (...skipping 1235 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1945 controller_.UpdateCommandEnabled(IDC_EXIT, true); | 1946 controller_.UpdateCommandEnabled(IDC_EXIT, true); |
| 1946 // the debugger doesn't work in single process mode | 1947 // the debugger doesn't work in single process mode |
| 1947 controller_.UpdateCommandEnabled(IDC_DEBUGGER, | 1948 controller_.UpdateCommandEnabled(IDC_DEBUGGER, |
| 1948 !RenderProcessHost::run_renderer_in_process()); | 1949 !RenderProcessHost::run_renderer_in_process()); |
| 1949 controller_.UpdateCommandEnabled(IDC_DEVELOPER, true); | 1950 controller_.UpdateCommandEnabled(IDC_DEVELOPER, true); |
| 1950 controller_.UpdateCommandEnabled(IDC_HELPMENU, true); | 1951 controller_.UpdateCommandEnabled(IDC_HELPMENU, true); |
| 1951 } | 1952 } |
| 1952 | 1953 |
| 1953 void Browser::UpdateNavigationCommands() { | 1954 void Browser::UpdateNavigationCommands() { |
| 1954 TabContents* current_tab = GetSelectedTabContents(); | 1955 TabContents* current_tab = GetSelectedTabContents(); |
| 1956 if (!current_tab) { |
| 1957 // It's possible for this to be null during tab restore. |
| 1958 return; |
| 1959 } |
| 1960 |
| 1955 NavigationController* nc = current_tab->controller(); | 1961 NavigationController* nc = current_tab->controller(); |
| 1956 controller_.UpdateCommandEnabled(IDC_BACK, nc->CanGoBack()); | 1962 controller_.UpdateCommandEnabled(IDC_BACK, nc->CanGoBack()); |
| 1957 controller_.UpdateCommandEnabled(IDC_FORWARD, nc->CanGoForward()); | 1963 controller_.UpdateCommandEnabled(IDC_FORWARD, nc->CanGoForward()); |
| 1958 | 1964 |
| 1959 WebContents* web_contents = current_tab->AsWebContents(); | 1965 WebContents* web_contents = current_tab->AsWebContents(); |
| 1960 | 1966 |
| 1961 if (web_contents) { | 1967 if (web_contents) { |
| 1962 controller_.UpdateCommandEnabled(IDC_STAR, true); | 1968 controller_.UpdateCommandEnabled(IDC_STAR, true); |
| 1963 SetStarredButtonToggled(web_contents->is_starred()); | 1969 SetStarredButtonToggled(web_contents->is_starred()); |
| 1964 | 1970 |
| (...skipping 380 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2345 | 2351 |
| 2346 // We need to register the window position pref. | 2352 // We need to register the window position pref. |
| 2347 std::wstring window_pref(prefs::kBrowserWindowPlacement); | 2353 std::wstring window_pref(prefs::kBrowserWindowPlacement); |
| 2348 window_pref.append(L"_"); | 2354 window_pref.append(L"_"); |
| 2349 window_pref.append(app_name); | 2355 window_pref.append(app_name); |
| 2350 PrefService* prefs = g_browser_process->local_state(); | 2356 PrefService* prefs = g_browser_process->local_state(); |
| 2351 DCHECK(prefs); | 2357 DCHECK(prefs); |
| 2352 | 2358 |
| 2353 prefs->RegisterDictionaryPref(window_pref.c_str()); | 2359 prefs->RegisterDictionaryPref(window_pref.c_str()); |
| 2354 } | 2360 } |
| OLD | NEW |