text: // Copyright 2015 The Chromium Authors. All rights reserved.
  // Use of this source code is governed by a BSD-style license that can be
  // found in the LICENSE file.
  
  #ifndef CHROME_BROWSER_SESSIONS_TAB_LOADER_TESTER_H_
  #define CHROME_BROWSER_SESSIONS_TAB_LOADER_TESTER_H_
  
  #include "base/timer/timer.h"
  #include "chrome/browser/resource_coordinator/session_restore_policy.h"
  #include "chrome/browser/sessions/tab_loader.h"
  
  // Wraps a TabLoader and exposes helper functions for testing. See tab_loader.h
  // for full documentation.
  class TabLoaderTester {
   public:
    using TabVector = TabLoader::TabVector;
    using TabSet = TabLoader::TabSet;
  
    TabLoaderTester();
    explicit TabLoaderTester(TabLoader* tab_loader);
  
    TabLoaderTester(const TabLoaderTester&) = delete;
    TabLoaderTester& operator=(const TabLoaderTester&) = delete;
  
    ~TabLoaderTester();
  
    void SetTabLoader(TabLoader*);
    TabLoader* tab_loader() { return tab_loader_; }
  
    // Test only functions exposed from TabLoader.
    static void SetMaxLoadedTabCountForTesting(size_t value);
    static void SetConstructionCallbackForTesting(
        base::RepeatingCallback<void(TabLoader*)>* callback);
    void SetMaxSimultaneousLoadsForTesting(size_t loading_slots);
    void SetTickClockForTesting(base::TickClock* tick_clock);
    void MaybeLoadSomeTabsForTesting();
  
    // Additional exposed TabLoader functions.
    void ForceLoadTimerFired();
    void OnMemoryPressure(
        base::MemoryPressureListener::MemoryPressureLevel memory_pressure_level);
    void SetTabLoadingEnabled(bool enabled);
    bool IsLoadingEnabled() const;
  
    // Accessors to TabLoader internals.
    size_t force_load_delay_multiplier() const;
    base::TimeTicks force_load_time() const;
    base::OneShotTimer& force_load_timer();
    const TabVector& tabs_to_load() const;
    const TabSet& tabs_load_initiated() const;
    size_t scheduled_to_load_count() const;
    static TabLoader* shared_tab_loader();
  
    // Returns the session restore policy engine that is currently being used.
    resource_coordinator::SessionRestorePolicy* GetPolicy();
  
    // Additional helper functions.
    bool IsSharedTabLoader() const;
    bool HasTimedOutLoads() const;
    void WaitForTabLoadingEnabled();
  
   private:
    TabLoader* tab_loader_ = nullptr;
  };
  
  #endif  // CHROME_BROWSER_SESSIONS_TAB_LOADER_TESTER_H_
  