blob: 35f04cf7114e910a35d9af01b1dee862739a9667 [file] [log] [blame]
// Copyright 2012 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROME_BROWSER_UI_SEARCH_INSTANT_CONTROLLER_H_
#define CHROME_BROWSER_UI_SEARCH_INSTANT_CONTROLLER_H_
#include <memory>
#include "base/gtest_prod_util.h"
#include "base/memory/raw_ptr.h"
#include "build/build_config.h"
#include "chrome/browser/ui/tabs/tab_strip_model_observer.h"
#if BUILDFLAG(IS_ANDROID)
#error "Instant is only used on desktop";
#endif
class Profile;
class TabStripModel;
namespace content {
class WebContents;
} // namespace content
// InstantController is responsible for updating the theme and most visited info
// of the current tab when
// * the user switches to an existing NTP tab, or
// * an open tab navigates to an NTP.
//
// InstantController is owned by Browser via BrowserInstantController.
class InstantController : public TabStripModelObserver {
public:
explicit InstantController(Profile* profile, TabStripModel* tab_strip_model);
InstantController(const InstantController&) = delete;
InstantController& operator=(const InstantController&) = delete;
~InstantController() override;
// TabStripModelObserver:
void OnTabStripModelChanged(
TabStripModel* tab_strip_model,
const TabStripModelChange& change,
const TabStripSelectionChange& selection) override;
private:
class TabObserver;
FRIEND_TEST_ALL_PREFIXES(InstantExtendedTest,
DispatchMVChangeEventWhileNavigatingBackToNTP);
void StartWatchingTab(content::WebContents* web_contents);
void StopWatchingTab(content::WebContents* web_contents);
// Sends theme info and most visited items to the Instant renderer process.
void UpdateInfoForInstantTab();
const raw_ptr<Profile> profile_;
// Observes the currently active tab, and calls us back if it becomes an NTP.
std::unique_ptr<TabObserver> tab_observer_;
};
#endif // CHROME_BROWSER_UI_SEARCH_INSTANT_CONTROLLER_H_