chromium/ios/chrome/browser/synced_sessions/model/synced_sessions_util.mm

// 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);
  }
}