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 "chrome/browser/sessions/session_restore.h" | 5 #include "chrome/browser/sessions/session_restore.h" |
6 | 6 |
7 #include <vector> | 7 #include <vector> |
8 | 8 |
9 #include "base/callback.h" | 9 #include "base/callback.h" |
10 #include "base/command_line.h" | 10 #include "base/command_line.h" |
(...skipping 280 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
291 delete this; | 291 delete this; |
292 return; | 292 return; |
293 } | 293 } |
294 | 294 |
295 if (browser_) { | 295 if (browser_) { |
296 registrar_.Add(this, NotificationType::BROWSER_CLOSED, | 296 registrar_.Add(this, NotificationType::BROWSER_CLOSED, |
297 Source<Browser>(browser_)); | 297 Source<Browser>(browser_)); |
298 } | 298 } |
299 } | 299 } |
300 | 300 |
| 301 void RestoreForeignSession(std::vector<SessionWindow*>* windows) { |
| 302 tab_loader_.reset(new TabLoader()); |
| 303 // Create a browser instance to put the restored tabs in. |
| 304 bool has_tabbed_browser = false; |
| 305 for (std::vector<SessionWindow*>::iterator i = (*windows).begin(); |
| 306 i != (*windows).end(); ++i) { |
| 307 Browser* browser = NULL; |
| 308 if (!has_tabbed_browser && (*i)->type == Browser::TYPE_NORMAL) |
| 309 has_tabbed_browser = true; |
| 310 browser = new Browser(static_cast<Browser::Type>((*i)->type), |
| 311 profile_); |
| 312 browser->set_override_bounds((*i)->bounds); |
| 313 browser->set_maximized_state((*i)->is_maximized ? |
| 314 Browser::MAXIMIZED_STATE_MAXIMIZED : |
| 315 Browser::MAXIMIZED_STATE_UNMAXIMIZED); |
| 316 browser->CreateBrowserWindow(); |
| 317 |
| 318 // Restore and show the browser. |
| 319 const int initial_tab_count = browser->tab_count(); |
| 320 RestoreTabsToBrowser(*(*i), browser); |
| 321 ShowBrowser(browser, initial_tab_count, |
| 322 (*i)->selected_tab_index); |
| 323 NotifySessionServiceOfRestoredTabs(browser, initial_tab_count); |
| 324 FinishedTabCreation(true, has_tabbed_browser); |
| 325 } |
| 326 } |
| 327 |
301 ~SessionRestoreImpl() { | 328 ~SessionRestoreImpl() { |
302 STLDeleteElements(&windows_); | 329 STLDeleteElements(&windows_); |
303 restoring = false; | 330 restoring = false; |
304 } | 331 } |
305 | 332 |
306 virtual void Observe(NotificationType type, | 333 virtual void Observe(NotificationType type, |
307 const NotificationSource& source, | 334 const NotificationSource& source, |
308 const NotificationDetails& details) { | 335 const NotificationDetails& details) { |
309 switch (type.value) { | 336 switch (type.value) { |
310 case NotificationType::BROWSER_CLOSED: | 337 case NotificationType::BROWSER_CLOSED: |
(...skipping 296 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
607 void SessionRestore::RestoreSession(Profile* profile, | 634 void SessionRestore::RestoreSession(Profile* profile, |
608 Browser* browser, | 635 Browser* browser, |
609 bool clobber_existing_window, | 636 bool clobber_existing_window, |
610 bool always_create_tabbed_browser, | 637 bool always_create_tabbed_browser, |
611 const std::vector<GURL>& urls_to_open) { | 638 const std::vector<GURL>& urls_to_open) { |
612 Restore(profile, browser, false, clobber_existing_window, | 639 Restore(profile, browser, false, clobber_existing_window, |
613 always_create_tabbed_browser, urls_to_open); | 640 always_create_tabbed_browser, urls_to_open); |
614 } | 641 } |
615 | 642 |
616 // static | 643 // static |
| 644 void SessionRestore::RestoreForeignSessionWindows(Profile* profile, |
| 645 std::vector<SessionWindow*>* windows) { |
| 646 // Create a SessionRestore object to eventually restore the tabs. |
| 647 std::vector<GURL> gurls; |
| 648 SessionRestoreImpl restorer(profile, |
| 649 static_cast<Browser*>(NULL), true, false, true, gurls); |
| 650 restorer.RestoreForeignSession(windows); |
| 651 } |
| 652 |
| 653 // static |
617 void SessionRestore::RestoreSessionSynchronously( | 654 void SessionRestore::RestoreSessionSynchronously( |
618 Profile* profile, | 655 Profile* profile, |
619 const std::vector<GURL>& urls_to_open) { | 656 const std::vector<GURL>& urls_to_open) { |
620 Restore(profile, NULL, true, false, true, urls_to_open); | 657 Restore(profile, NULL, true, false, true, urls_to_open); |
621 } | 658 } |
622 | 659 |
623 // static | 660 // static |
624 bool SessionRestore::IsRestoring() { | 661 bool SessionRestore::IsRestoring() { |
625 return restoring; | 662 return restoring; |
626 } | 663 } |
OLD | NEW |