OLD | NEW |
1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 2012 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 "components/sessions/core/tab_restore_service_helper.h" | 5 #include "components/sessions/core/tab_restore_service_helper.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 | 8 |
9 #include <algorithm> | 9 #include <algorithm> |
10 #include <iterator> | 10 #include <iterator> |
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
122 } | 122 } |
123 | 123 |
124 const TabRestoreService::Entries& TabRestoreServiceHelper::entries() const { | 124 const TabRestoreService::Entries& TabRestoreServiceHelper::entries() const { |
125 return entries_; | 125 return entries_; |
126 } | 126 } |
127 | 127 |
128 std::vector<LiveTab*> TabRestoreServiceHelper::RestoreMostRecentEntry( | 128 std::vector<LiveTab*> TabRestoreServiceHelper::RestoreMostRecentEntry( |
129 LiveTabContext* context) { | 129 LiveTabContext* context) { |
130 if (entries_.empty()) | 130 if (entries_.empty()) |
131 return std::vector<LiveTab*>(); | 131 return std::vector<LiveTab*>(); |
132 return RestoreEntryById(context, entries_.front()->id, UNKNOWN); | 132 return RestoreEntryById(context, entries_.front()->id, |
| 133 WindowOpenDisposition::UNKNOWN); |
133 } | 134 } |
134 | 135 |
135 std::unique_ptr<TabRestoreService::Tab> | 136 std::unique_ptr<TabRestoreService::Tab> |
136 TabRestoreServiceHelper::RemoveTabEntryById(SessionID::id_type id) { | 137 TabRestoreServiceHelper::RemoveTabEntryById(SessionID::id_type id) { |
137 auto it = GetEntryIteratorById(id); | 138 auto it = GetEntryIteratorById(id); |
138 if (it == entries_.end()) | 139 if (it == entries_.end()) |
139 return nullptr; | 140 return nullptr; |
140 | 141 |
141 if ((*it)->type != TabRestoreService::TAB) | 142 if ((*it)->type != TabRestoreService::TAB) |
142 return nullptr; | 143 return nullptr; |
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
235 UpdateTabBrowserIDs(restored_tab_browser_id, | 236 UpdateTabBrowserIDs(restored_tab_browser_id, |
236 context->GetSessionID().id()); | 237 context->GetSessionID().id()); |
237 for (auto& tab_j : window.tabs) | 238 for (auto& tab_j : window.tabs) |
238 tab_j->browser_id = context->GetSessionID().id(); | 239 tab_j->browser_id = context->GetSessionID().id(); |
239 } | 240 } |
240 break; | 241 break; |
241 } | 242 } |
242 } | 243 } |
243 context->ShowBrowserWindow(); | 244 context->ShowBrowserWindow(); |
244 | 245 |
245 if (disposition == CURRENT_TAB && current_context && | 246 if (disposition == WindowOpenDisposition::CURRENT_TAB && |
246 current_context->GetActiveLiveTab()) { | 247 current_context && current_context->GetActiveLiveTab()) { |
247 current_context->CloseTab(); | 248 current_context->CloseTab(); |
248 } | 249 } |
249 break; | 250 break; |
250 } | 251 } |
251 } | 252 } |
252 | 253 |
253 if (!restoring_tab_in_window) { | 254 if (!restoring_tab_in_window) { |
254 entries_.erase(entry_iterator); | 255 entries_.erase(entry_iterator); |
255 } | 256 } |
256 | 257 |
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
366 tab->pinned = context->IsTabPinned(tab->tabstrip_index); | 367 tab->pinned = context->IsTabPinned(tab->tabstrip_index); |
367 } | 368 } |
368 } | 369 } |
369 | 370 |
370 LiveTabContext* TabRestoreServiceHelper::RestoreTab( | 371 LiveTabContext* TabRestoreServiceHelper::RestoreTab( |
371 const Tab& tab, | 372 const Tab& tab, |
372 LiveTabContext* context, | 373 LiveTabContext* context, |
373 WindowOpenDisposition disposition, | 374 WindowOpenDisposition disposition, |
374 LiveTab** live_tab) { | 375 LiveTab** live_tab) { |
375 LiveTab* restored_tab; | 376 LiveTab* restored_tab; |
376 if (disposition == CURRENT_TAB && context) { | 377 if (disposition == WindowOpenDisposition::CURRENT_TAB && context) { |
377 restored_tab = context->ReplaceRestoredTab( | 378 restored_tab = context->ReplaceRestoredTab( |
378 tab.navigations, tab.current_navigation_index, tab.from_last_session, | 379 tab.navigations, tab.current_navigation_index, tab.from_last_session, |
379 tab.extension_app_id, tab.platform_data.get(), tab.user_agent_override); | 380 tab.extension_app_id, tab.platform_data.get(), tab.user_agent_override); |
380 } else { | 381 } else { |
381 // We only respsect the tab's original browser if there's no disposition. | 382 // We only respsect the tab's original browser if there's no disposition. |
382 if (disposition == UNKNOWN && tab.browser_id) { | 383 if (disposition == WindowOpenDisposition::UNKNOWN && tab.browser_id) { |
383 context = client_->FindLiveTabContextWithID(tab.browser_id); | 384 context = client_->FindLiveTabContextWithID(tab.browser_id); |
384 } | 385 } |
385 | 386 |
386 int tab_index = -1; | 387 int tab_index = -1; |
387 | 388 |
388 // |context| will be NULL in cases where one isn't already available (eg, | 389 // |context| will be NULL in cases where one isn't already available (eg, |
389 // when invoked on Mac OS X with no windows open). In this case, create a | 390 // when invoked on Mac OS X with no windows open). In this case, create a |
390 // new browser into which we restore the tabs. | 391 // new browser into which we restore the tabs. |
391 if (context && disposition != NEW_WINDOW) { | 392 if (context && disposition != WindowOpenDisposition::NEW_WINDOW) { |
392 tab_index = tab.tabstrip_index; | 393 tab_index = tab.tabstrip_index; |
393 } else { | 394 } else { |
394 context = client_->CreateLiveTabContext(std::string()); | 395 context = client_->CreateLiveTabContext(std::string()); |
395 if (tab.browser_id) | 396 if (tab.browser_id) |
396 UpdateTabBrowserIDs(tab.browser_id, context->GetSessionID().id()); | 397 UpdateTabBrowserIDs(tab.browser_id, context->GetSessionID().id()); |
397 } | 398 } |
398 | 399 |
399 // Place the tab at the end if the tab index is no longer valid or | 400 // Place the tab at the end if the tab index is no longer valid or |
400 // we were passed a specific disposition. | 401 // we were passed a specific disposition. |
401 if (tab_index < 0 || tab_index > context->GetTabCount() || | 402 if (tab_index < 0 || tab_index > context->GetTabCount() || |
402 disposition != UNKNOWN) { | 403 disposition != WindowOpenDisposition::UNKNOWN) { |
403 tab_index = context->GetTabCount(); | 404 tab_index = context->GetTabCount(); |
404 } | 405 } |
405 | 406 |
406 restored_tab = context->AddRestoredTab( | 407 restored_tab = context->AddRestoredTab( |
407 tab.navigations, tab_index, tab.current_navigation_index, | 408 tab.navigations, tab_index, tab.current_navigation_index, |
408 tab.extension_app_id, disposition != NEW_BACKGROUND_TAB, tab.pinned, | 409 tab.extension_app_id, |
| 410 disposition != WindowOpenDisposition::NEW_BACKGROUND_TAB, tab.pinned, |
409 tab.from_last_session, tab.platform_data.get(), | 411 tab.from_last_session, tab.platform_data.get(), |
410 tab.user_agent_override); | 412 tab.user_agent_override); |
411 restored_tab->LoadIfNecessary(); | 413 restored_tab->LoadIfNecessary(); |
412 } | 414 } |
413 client_->OnTabRestored( | 415 client_->OnTabRestored( |
414 tab.navigations.at(tab.current_navigation_index).virtual_url()); | 416 tab.navigations.at(tab.current_navigation_index).virtual_url()); |
415 if (live_tab) | 417 if (live_tab) |
416 *live_tab = restored_tab; | 418 *live_tab = restored_tab; |
417 | 419 |
418 return context; | 420 return context; |
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
482 tab.browser_id = new_id; | 484 tab.browser_id = new_id; |
483 } | 485 } |
484 } | 486 } |
485 } | 487 } |
486 | 488 |
487 base::Time TabRestoreServiceHelper::TimeNow() const { | 489 base::Time TabRestoreServiceHelper::TimeNow() const { |
488 return time_factory_ ? time_factory_->TimeNow() : base::Time::Now(); | 490 return time_factory_ ? time_factory_->TimeNow() : base::Time::Now(); |
489 } | 491 } |
490 | 492 |
491 } // namespace sessions | 493 } // namespace sessions |
OLD | NEW |