| 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 "chrome/browser/session_restore.h" | 5 #include "chrome/browser/session_restore.h" |
| 6 | 6 |
| 7 #include <vector> | 7 #include <vector> |
| 8 | 8 |
| 9 #include "base/scoped_ptr.h" | 9 #include "base/scoped_ptr.h" |
| 10 #include "chrome/browser/browser.h" | 10 #include "chrome/browser/browser.h" |
| (...skipping 164 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 175 // SessionRestoreImpl --------------------------------------------------------- | 175 // SessionRestoreImpl --------------------------------------------------------- |
| 176 | 176 |
| 177 // SessionRestoreImpl is responsible for fetching the set of tabs to create | 177 // SessionRestoreImpl is responsible for fetching the set of tabs to create |
| 178 // from SessionService. SessionRestoreImpl deletes itself when done. | 178 // from SessionService. SessionRestoreImpl deletes itself when done. |
| 179 | 179 |
| 180 class SessionRestoreImpl : public NotificationObserver { | 180 class SessionRestoreImpl : public NotificationObserver { |
| 181 public: | 181 public: |
| 182 SessionRestoreImpl(Profile* profile, | 182 SessionRestoreImpl(Profile* profile, |
| 183 Browser* browser, | 183 Browser* browser, |
| 184 bool use_saved_session, | 184 bool use_saved_session, |
| 185 int show_command, | |
| 186 bool synchronous, | 185 bool synchronous, |
| 187 bool clobber_existing_window, | 186 bool clobber_existing_window, |
| 188 bool always_create_tabbed_browser, | 187 bool always_create_tabbed_browser, |
| 189 const std::vector<GURL>& urls_to_open) | 188 const std::vector<GURL>& urls_to_open) |
| 190 : profile_(profile), | 189 : profile_(profile), |
| 191 browser_(browser), | 190 browser_(browser), |
| 192 show_command_(show_command), | |
| 193 use_saved_session_(use_saved_session), | 191 use_saved_session_(use_saved_session), |
| 194 synchronous_(synchronous), | 192 synchronous_(synchronous), |
| 195 clobber_existing_window_(clobber_existing_window), | 193 clobber_existing_window_(clobber_existing_window), |
| 196 always_create_tabbed_browser_(always_create_tabbed_browser), | 194 always_create_tabbed_browser_(always_create_tabbed_browser), |
| 197 urls_to_open_(urls_to_open) { | 195 urls_to_open_(urls_to_open) { |
| 198 } | 196 } |
| 199 | 197 |
| 200 void SessionRestoreImpl::Restore() { | 198 void SessionRestoreImpl::Restore() { |
| 201 SessionService* session_service = profile_->GetSessionService(); | 199 SessionService* session_service = profile_->GetSessionService(); |
| 202 DCHECK(session_service); | 200 DCHECK(session_service); |
| (...skipping 30 matching lines...) Expand all Loading... |
| 233 private: | 231 private: |
| 234 // Invoked when done with creating all the tabs/browsers. | 232 // Invoked when done with creating all the tabs/browsers. |
| 235 // | 233 // |
| 236 // |created_tabbed_browser| indicates whether a tabbed browser was created, | 234 // |created_tabbed_browser| indicates whether a tabbed browser was created, |
| 237 // or we used an existing tabbed browser. | 235 // or we used an existing tabbed browser. |
| 238 // | 236 // |
| 239 // If successful, this begins loading tabs and deletes itself when all tabs | 237 // If successful, this begins loading tabs and deletes itself when all tabs |
| 240 // have been loaded. | 238 // have been loaded. |
| 241 void FinishedTabCreation(bool succeeded, bool created_tabbed_browser) { | 239 void FinishedTabCreation(bool succeeded, bool created_tabbed_browser) { |
| 242 if (!created_tabbed_browser && always_create_tabbed_browser_) { | 240 if (!created_tabbed_browser && always_create_tabbed_browser_) { |
| 243 Browser* browser = new Browser(gfx::Rect(), show_command_, profile_, | 241 Browser* browser = Browser::Create(profile_); |
| 244 BrowserType::TABBED_BROWSER, | |
| 245 std::wstring()); | |
| 246 if (urls_to_open_.empty()) { | 242 if (urls_to_open_.empty()) { |
| 247 // No tab browsers were created and no URLs were supplied on the command | 243 // No tab browsers were created and no URLs were supplied on the command |
| 248 // line. Add an empty URL, which is treated as opening the users home | 244 // line. Add an empty URL, which is treated as opening the users home |
| 249 // page. | 245 // page. |
| 250 urls_to_open_.push_back(GURL()); | 246 urls_to_open_.push_back(GURL()); |
| 251 } | 247 } |
| 252 AppendURLsToBrowser(browser, urls_to_open_); | 248 AppendURLsToBrowser(browser, urls_to_open_); |
| 253 browser->Show(); | 249 browser->window()->Show(); |
| 254 } | 250 } |
| 255 | 251 |
| 256 if (synchronous_) | 252 if (synchronous_) |
| 257 MessageLoop::current()->Quit(); | 253 MessageLoop::current()->Quit(); |
| 258 | 254 |
| 259 if (succeeded) { | 255 if (succeeded) { |
| 260 DCHECK(tab_loader_.get()); | 256 DCHECK(tab_loader_.get()); |
| 261 // TabLoader delets itself when done loading. | 257 // TabLoader delets itself when done loading. |
| 262 tab_loader_.release()->LoadTabs(); | 258 tab_loader_.release()->LoadTabs(); |
| 263 } | 259 } |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 296 !clobber_existing_window_) { | 292 !clobber_existing_window_) { |
| 297 // If there is an open tabbed browser window, use it. Otherwise fall | 293 // If there is an open tabbed browser window, use it. Otherwise fall |
| 298 // through and create a new one. | 294 // through and create a new one. |
| 299 browser = current_browser; | 295 browser = current_browser; |
| 300 if (browser && (browser->type() != BrowserType::TABBED_BROWSER || | 296 if (browser && (browser->type() != BrowserType::TABBED_BROWSER || |
| 301 browser->profile()->IsOffTheRecord())) { | 297 browser->profile()->IsOffTheRecord())) { |
| 302 browser = NULL; | 298 browser = NULL; |
| 303 } | 299 } |
| 304 } | 300 } |
| 305 if (!browser) { | 301 if (!browser) { |
| 306 const int show_command = | 302 browser = new Browser((*i)->type, profile_); |
| 307 (*i)->is_maximized ? SW_SHOWMAXIMIZED : show_command_; | 303 browser->set_override_bounds((*i)->bounds); |
| 308 browser = new Browser((*i)->bounds, show_command, profile_, (*i)->type, | 304 browser->set_override_maximized((*i)->is_maximized); |
| 309 std::wstring()); | 305 browser->CreateBrowserWindow(); |
| 310 } | 306 } |
| 311 if ((*i)->type == BrowserType::TABBED_BROWSER) | 307 if ((*i)->type == BrowserType::TABBED_BROWSER) |
| 312 last_browser = browser; | 308 last_browser = browser; |
| 313 const int initial_tab_count = browser->tab_count(); | 309 const int initial_tab_count = browser->tab_count(); |
| 314 RestoreTabsToBrowser(*(*i), browser); | 310 RestoreTabsToBrowser(*(*i), browser); |
| 315 ShowBrowser(browser, initial_tab_count, (*i)->selected_tab_index); | 311 ShowBrowser(browser, initial_tab_count, (*i)->selected_tab_index); |
| 316 NotifySessionServiceOfRestoredTabs(browser, initial_tab_count); | 312 NotifySessionServiceOfRestoredTabs(browser, initial_tab_count); |
| 317 } | 313 } |
| 318 | 314 |
| 319 // If we're restoring a session as the result of a crash and the session | 315 // If we're restoring a session as the result of a crash and the session |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 356 if (browser_ == browser) { | 352 if (browser_ == browser) { |
| 357 browser->SelectTabContentsAt(browser->tab_count() - 1, true); | 353 browser->SelectTabContentsAt(browser->tab_count() - 1, true); |
| 358 return; | 354 return; |
| 359 } | 355 } |
| 360 | 356 |
| 361 DCHECK(browser); | 357 DCHECK(browser); |
| 362 DCHECK(browser->tab_count()); | 358 DCHECK(browser->tab_count()); |
| 363 browser->SelectTabContentsAt( | 359 browser->SelectTabContentsAt( |
| 364 std::min(initial_tab_count + std::max(0, selected_session_index), | 360 std::min(initial_tab_count + std::max(0, selected_session_index), |
| 365 browser->tab_count() - 1), true); | 361 browser->tab_count() - 1), true); |
| 366 browser->Show(); | 362 browser->window()->Show(); |
| 367 } | 363 } |
| 368 | 364 |
| 369 void AppendURLsToBrowser(Browser* browser, const std::vector<GURL>& urls) { | 365 void AppendURLsToBrowser(Browser* browser, const std::vector<GURL>& urls) { |
| 370 for (size_t i = 0; i < urls.size(); ++i) { | 366 for (size_t i = 0; i < urls.size(); ++i) { |
| 371 browser->AddTabWithURL(urls[i], GURL(), PageTransition::START_PAGE, | 367 browser->AddTabWithURL(urls[i], GURL(), PageTransition::START_PAGE, |
| 372 (i == 0), NULL); | 368 (i == 0), NULL); |
| 373 } | 369 } |
| 374 } | 370 } |
| 375 | 371 |
| 376 // Invokes TabRestored on the SessionService for all tabs in browser after | 372 // Invokes TabRestored on the SessionService for all tabs in browser after |
| 377 // initial_count. | 373 // initial_count. |
| 378 void NotifySessionServiceOfRestoredTabs(Browser* browser, int initial_count) { | 374 void NotifySessionServiceOfRestoredTabs(Browser* browser, int initial_count) { |
| 379 SessionService* session_service = profile_->GetSessionService(); | 375 SessionService* session_service = profile_->GetSessionService(); |
| 380 for (int i = initial_count; i < browser->tab_count(); ++i) | 376 for (int i = initial_count; i < browser->tab_count(); ++i) |
| 381 session_service->TabRestored(browser->GetTabContentsAt(i)->controller()); | 377 session_service->TabRestored(browser->GetTabContentsAt(i)->controller()); |
| 382 } | 378 } |
| 383 | 379 |
| 384 // The profile to create the sessions for. | 380 // The profile to create the sessions for. |
| 385 Profile* profile_; | 381 Profile* profile_; |
| 386 | 382 |
| 387 // The first browser to restore to, may be null. | 383 // The first browser to restore to, may be null. |
| 388 Browser* browser_; | 384 Browser* browser_; |
| 389 | 385 |
| 390 // Used when creating windows. Passed to the window. | |
| 391 const int show_command_; | |
| 392 | |
| 393 // Whether we're restoring the saved session (true) or the last session | 386 // Whether we're restoring the saved session (true) or the last session |
| 394 // (false). | 387 // (false). |
| 395 const bool use_saved_session_; | 388 const bool use_saved_session_; |
| 396 | 389 |
| 397 // Whether or not restore is synchronous. | 390 // Whether or not restore is synchronous. |
| 398 const bool synchronous_; | 391 const bool synchronous_; |
| 399 | 392 |
| 400 // See description in RestoreSession (in .h). | 393 // See description in RestoreSession (in .h). |
| 401 const bool clobber_existing_window_; | 394 const bool clobber_existing_window_; |
| 402 | 395 |
| (...skipping 17 matching lines...) Expand all Loading... |
| 420 } // namespace | 413 } // namespace |
| 421 | 414 |
| 422 // SessionRestore ------------------------------------------------------------- | 415 // SessionRestore ------------------------------------------------------------- |
| 423 | 416 |
| 424 // static | 417 // static |
| 425 size_t SessionRestore::num_tabs_to_load_ = 0; | 418 size_t SessionRestore::num_tabs_to_load_ = 0; |
| 426 | 419 |
| 427 static void Restore(Profile* profile, | 420 static void Restore(Profile* profile, |
| 428 Browser* browser, | 421 Browser* browser, |
| 429 bool use_saved_session, | 422 bool use_saved_session, |
| 430 int show_command, | |
| 431 bool synchronous, | 423 bool synchronous, |
| 432 bool clobber_existing_window, | 424 bool clobber_existing_window, |
| 433 bool always_create_tabbed_browser, | 425 bool always_create_tabbed_browser, |
| 434 const std::vector<GURL>& urls_to_open) { | 426 const std::vector<GURL>& urls_to_open) { |
| 435 DCHECK(profile); | 427 DCHECK(profile); |
| 436 if (!profile->GetSessionService()) | 428 if (!profile->GetSessionService()) |
| 437 return; | 429 return; |
| 438 // SessionRestoreImpl takes care of deleting itself when done. | 430 // SessionRestoreImpl takes care of deleting itself when done. |
| 439 SessionRestoreImpl* restorer = | 431 SessionRestoreImpl* restorer = |
| 440 new SessionRestoreImpl(profile, browser, use_saved_session, show_command, | 432 new SessionRestoreImpl(profile, browser, use_saved_session, |
| 441 synchronous, clobber_existing_window, | 433 synchronous, clobber_existing_window, |
| 442 always_create_tabbed_browser, | 434 always_create_tabbed_browser, |
| 443 urls_to_open); | 435 urls_to_open); |
| 444 restorer->Restore(); | 436 restorer->Restore(); |
| 445 } | 437 } |
| 446 | 438 |
| 447 // static | 439 // static |
| 448 void SessionRestore::RestoreSession(Profile* profile, | 440 void SessionRestore::RestoreSession(Profile* profile, |
| 449 Browser* browser, | 441 Browser* browser, |
| 450 bool use_saved_session, | 442 bool use_saved_session, |
| 451 bool clobber_existing_window, | 443 bool clobber_existing_window, |
| 452 bool always_create_tabbed_browser, | 444 bool always_create_tabbed_browser, |
| 453 const std::vector<GURL>& urls_to_open) { | 445 const std::vector<GURL>& urls_to_open) { |
| 454 Restore(profile, browser, use_saved_session, SW_SHOW, false, | 446 Restore(profile, browser, use_saved_session, false, clobber_existing_window, |
| 455 clobber_existing_window, always_create_tabbed_browser, urls_to_open); | 447 always_create_tabbed_browser, urls_to_open); |
| 456 } | 448 } |
| 457 | 449 |
| 458 // static | 450 // static |
| 459 void SessionRestore::RestoreSessionSynchronously( | 451 void SessionRestore::RestoreSessionSynchronously( |
| 460 Profile* profile, | 452 Profile* profile, |
| 461 bool use_saved_session, | 453 bool use_saved_session, |
| 462 int show_command, | |
| 463 const std::vector<GURL>& urls_to_open) { | 454 const std::vector<GURL>& urls_to_open) { |
| 464 Restore(profile, NULL, use_saved_session, SW_SHOW, true, false, true, | 455 Restore(profile, NULL, use_saved_session, true, false, true, urls_to_open); |
| 465 urls_to_open); | |
| 466 } | 456 } |
| OLD | NEW |