| // Copyright 2023 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #import "ios/chrome/browser/synced_sessions/model/synced_sessions_util.h" |
| |
| #import "ios/chrome/browser/synced_sessions/model/distant_session.h" |
| #import "ios/chrome/browser/synced_sessions/model/distant_tab.h" |
| #import "ios/chrome/browser/url_loading/model/url_loading_browser_agent.h" |
| #import "ios/chrome/browser/url_loading/model/url_loading_params.h" |
| #import "ui/base/device_form_factor.h" |
| |
| int GetDefaultNumberOfTabsToLoadSimultaneously() { |
| return ui::GetDeviceFormFactor() == |
| ui::DeviceFormFactor::DEVICE_FORM_FACTOR_PHONE |
| ? 6 |
| : 20; |
| } |
| |
| void OpenDistantTab(const synced_sessions::DistantTab* tab, |
| bool in_incognito, |
| bool instant_load, |
| UrlLoadingBrowserAgent* url_loader, |
| UrlLoadStrategy load_strategy) { |
| UrlLoadParams params = UrlLoadParams::InNewTab(tab->virtual_url); |
| params.SetInBackground(YES); |
| params.web_params.transition_type = ui::PAGE_TRANSITION_AUTO_BOOKMARK; |
| params.load_strategy = load_strategy; |
| params.in_incognito = in_incognito; |
| params.instant_load = instant_load; |
| params.placeholder_title = tab->title; |
| url_loader->Load(params); |
| } |
| |
| void OpenDistantSessionInBackground( |
| const synced_sessions::DistantSession* session, |
| bool in_incognito, |
| int maximum_instant_load_tabs, |
| UrlLoadingBrowserAgent* url_loader, |
| UrlLoadStrategy first_tab_load_strategy) { |
| const int tab_count = static_cast<int>(session->tabs.size()); |
| for (int i = 0; i < tab_count; i++) { |
| OpenDistantTab(session->tabs[i].get(), in_incognito, |
| /*instant_load=*/i < maximum_instant_load_tabs, url_loader, |
| i == 0 ? first_tab_load_strategy : UrlLoadStrategy::NORMAL); |
| } |
| } |