| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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/extensions/api/sessions/sessions_api.h" | 5 #include "chrome/browser/extensions/api/sessions/sessions_api.h" |
| 6 | 6 |
| 7 #include <vector> | 7 #include <vector> |
| 8 | 8 |
| 9 #include "base/i18n/rtl.h" | 9 #include "base/i18n/rtl.h" |
| 10 #include "base/lazy_instance.h" | 10 #include "base/lazy_instance.h" |
| (...skipping 12 matching lines...) Expand all Loading... |
| 23 #include "chrome/browser/sessions/session_restore.h" | 23 #include "chrome/browser/sessions/session_restore.h" |
| 24 #include "chrome/browser/sessions/tab_restore_service_factory.h" | 24 #include "chrome/browser/sessions/tab_restore_service_factory.h" |
| 25 #include "chrome/browser/sync/profile_sync_service.h" | 25 #include "chrome/browser/sync/profile_sync_service.h" |
| 26 #include "chrome/browser/sync/profile_sync_service_factory.h" | 26 #include "chrome/browser/sync/profile_sync_service_factory.h" |
| 27 #include "chrome/browser/ui/browser.h" | 27 #include "chrome/browser/ui/browser.h" |
| 28 #include "chrome/browser/ui/browser_finder.h" | 28 #include "chrome/browser/ui/browser_finder.h" |
| 29 #include "chrome/browser/ui/browser_tab_restore_service_delegate.h" | 29 #include "chrome/browser/ui/browser_tab_restore_service_delegate.h" |
| 30 #include "chrome/browser/ui/host_desktop.h" | 30 #include "chrome/browser/ui/host_desktop.h" |
| 31 #include "chrome/browser/ui/tabs/tab_strip_model.h" | 31 #include "chrome/browser/ui/tabs/tab_strip_model.h" |
| 32 #include "chrome/common/pref_names.h" | 32 #include "chrome/common/pref_names.h" |
| 33 #include "components/sessions/content/content_live_tab.h" |
| 33 #include "components/sync_driver/glue/synced_session.h" | 34 #include "components/sync_driver/glue/synced_session.h" |
| 34 #include "components/sync_driver/open_tabs_ui_delegate.h" | 35 #include "components/sync_driver/open_tabs_ui_delegate.h" |
| 35 #include "components/url_formatter/url_formatter.h" | 36 #include "components/url_formatter/url_formatter.h" |
| 36 #include "content/public/browser/web_contents.h" | 37 #include "content/public/browser/web_contents.h" |
| 37 #include "extensions/browser/extension_function_dispatcher.h" | 38 #include "extensions/browser/extension_function_dispatcher.h" |
| 38 #include "extensions/browser/extension_function_registry.h" | 39 #include "extensions/browser/extension_function_registry.h" |
| 39 #include "extensions/browser/extension_system.h" | 40 #include "extensions/browser/extension_system.h" |
| 40 #include "extensions/common/error_utils.h" | 41 #include "extensions/common/error_utils.h" |
| 41 #include "ui/base/layout.h" | 42 #include "ui/base/layout.h" |
| 42 | 43 |
| (...skipping 404 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 447 | 448 |
| 448 if (entries.empty()) { | 449 if (entries.empty()) { |
| 449 SetError(kNoRecentlyClosedSessionsError); | 450 SetError(kNoRecentlyClosedSessionsError); |
| 450 return false; | 451 return false; |
| 451 } | 452 } |
| 452 | 453 |
| 453 bool is_window = is_window_entry(entries.front()); | 454 bool is_window = is_window_entry(entries.front()); |
| 454 TabRestoreServiceDelegate* delegate = | 455 TabRestoreServiceDelegate* delegate = |
| 455 BrowserTabRestoreServiceDelegate::FindDelegateForWebContents( | 456 BrowserTabRestoreServiceDelegate::FindDelegateForWebContents( |
| 456 browser->tab_strip_model()->GetActiveWebContents()); | 457 browser->tab_strip_model()->GetActiveWebContents()); |
| 457 std::vector<content::WebContents*> contents = | 458 std::vector<sessions::LiveTab*> restored_tabs = |
| 458 tab_restore_service->RestoreMostRecentEntry(delegate, host_desktop_type); | 459 tab_restore_service->RestoreMostRecentEntry(delegate, host_desktop_type); |
| 459 DCHECK(contents.size()); | 460 DCHECK(restored_tabs.size()); |
| 460 | 461 |
| 462 sessions::ContentLiveTab* first_tab = |
| 463 static_cast<sessions::ContentLiveTab*>(restored_tabs[0]); |
| 461 if (is_window) { | 464 if (is_window) { |
| 462 return SetResultRestoredWindow( | 465 return SetResultRestoredWindow( |
| 463 ExtensionTabUtil::GetWindowIdOfTab(contents[0])); | 466 ExtensionTabUtil::GetWindowIdOfTab(first_tab->web_contents())); |
| 464 } | 467 } |
| 465 | 468 |
| 466 SetResultRestoredTab(contents[0]); | 469 SetResultRestoredTab(first_tab->web_contents()); |
| 467 return true; | 470 return true; |
| 468 } | 471 } |
| 469 | 472 |
| 470 bool SessionsRestoreFunction::RestoreLocalSession(const SessionId& session_id, | 473 bool SessionsRestoreFunction::RestoreLocalSession(const SessionId& session_id, |
| 471 Browser* browser) { | 474 Browser* browser) { |
| 472 TabRestoreService* tab_restore_service = | 475 TabRestoreService* tab_restore_service = |
| 473 TabRestoreServiceFactory::GetForProfile(GetProfile()); | 476 TabRestoreServiceFactory::GetForProfile(GetProfile()); |
| 474 chrome::HostDesktopType host_desktop_type = browser->host_desktop_type(); | 477 chrome::HostDesktopType host_desktop_type = browser->host_desktop_type(); |
| 475 TabRestoreService::Entries entries = tab_restore_service->entries(); | 478 TabRestoreService::Entries entries = tab_restore_service->entries(); |
| 476 | 479 |
| (...skipping 10 matching lines...) Expand all Loading... |
| 487 // The only time a full window is being restored is if the entry ID | 490 // The only time a full window is being restored is if the entry ID |
| 488 // matches the provided ID and the entry type is Window. | 491 // matches the provided ID and the entry type is Window. |
| 489 is_window = is_window_entry(*it); | 492 is_window = is_window_entry(*it); |
| 490 break; | 493 break; |
| 491 } | 494 } |
| 492 } | 495 } |
| 493 | 496 |
| 494 TabRestoreServiceDelegate* delegate = | 497 TabRestoreServiceDelegate* delegate = |
| 495 BrowserTabRestoreServiceDelegate::FindDelegateForWebContents( | 498 BrowserTabRestoreServiceDelegate::FindDelegateForWebContents( |
| 496 browser->tab_strip_model()->GetActiveWebContents()); | 499 browser->tab_strip_model()->GetActiveWebContents()); |
| 497 std::vector<content::WebContents*> contents = | 500 std::vector<sessions::LiveTab*> restored_tabs = |
| 498 tab_restore_service->RestoreEntryById(delegate, | 501 tab_restore_service->RestoreEntryById(delegate, session_id.id(), |
| 499 session_id.id(), | 502 host_desktop_type, UNKNOWN); |
| 500 host_desktop_type, | 503 // If the ID is invalid, restored_tabs will be empty. |
| 501 UNKNOWN); | 504 if (!restored_tabs.size()) { |
| 502 // If the ID is invalid, contents will be empty. | |
| 503 if (!contents.size()) { | |
| 504 SetInvalidIdError(session_id.ToString()); | 505 SetInvalidIdError(session_id.ToString()); |
| 505 return false; | 506 return false; |
| 506 } | 507 } |
| 507 | 508 |
| 508 // Retrieve the window through any of the tabs in contents. | 509 sessions::ContentLiveTab* first_tab = |
| 510 static_cast<sessions::ContentLiveTab*>(restored_tabs[0]); |
| 511 |
| 512 // Retrieve the window through any of the tabs in restored_tabs. |
| 509 if (is_window) { | 513 if (is_window) { |
| 510 return SetResultRestoredWindow( | 514 return SetResultRestoredWindow( |
| 511 ExtensionTabUtil::GetWindowIdOfTab(contents[0])); | 515 ExtensionTabUtil::GetWindowIdOfTab(first_tab->web_contents())); |
| 512 } | 516 } |
| 513 | 517 |
| 514 SetResultRestoredTab(contents[0]); | 518 SetResultRestoredTab(first_tab->web_contents()); |
| 515 return true; | 519 return true; |
| 516 } | 520 } |
| 517 | 521 |
| 518 bool SessionsRestoreFunction::RestoreForeignSession(const SessionId& session_id, | 522 bool SessionsRestoreFunction::RestoreForeignSession(const SessionId& session_id, |
| 519 Browser* browser) { | 523 Browser* browser) { |
| 520 ProfileSyncService* service = | 524 ProfileSyncService* service = |
| 521 ProfileSyncServiceFactory::GetInstance()->GetForProfile(GetProfile()); | 525 ProfileSyncServiceFactory::GetInstance()->GetForProfile(GetProfile()); |
| 522 if (!(service && service->GetPreferredDataTypes().Has(syncer::SESSIONS))) { | 526 if (!(service && service->GetPreferredDataTypes().Has(syncer::SESSIONS))) { |
| 523 SetError(kSessionSyncError); | 527 SetError(kSessionSyncError); |
| 524 return false; | 528 return false; |
| (...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 650 return g_factory.Pointer(); | 654 return g_factory.Pointer(); |
| 651 } | 655 } |
| 652 | 656 |
| 653 void SessionsAPI::OnListenerAdded(const EventListenerInfo& details) { | 657 void SessionsAPI::OnListenerAdded(const EventListenerInfo& details) { |
| 654 sessions_event_router_.reset( | 658 sessions_event_router_.reset( |
| 655 new SessionsEventRouter(Profile::FromBrowserContext(browser_context_))); | 659 new SessionsEventRouter(Profile::FromBrowserContext(browser_context_))); |
| 656 EventRouter::Get(browser_context_)->UnregisterObserver(this); | 660 EventRouter::Get(browser_context_)->UnregisterObserver(this); |
| 657 } | 661 } |
| 658 | 662 |
| 659 } // namespace extensions | 663 } // namespace extensions |
| OLD | NEW |