910e62b5创建于 1月15日历史提交
// Copyright 2025 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_LENS_LENS_MEDIA_LINK_HANDLER_H_
#define CHROME_BROWSER_UI_LENS_LENS_MEDIA_LINK_HANDLER_H_

#include "base/memory/raw_ptr.h"
#include "base/time/time.h"
#include "url/gurl.h"

namespace content {
class MediaSession;
class WebContents;
}  // namespace content

namespace lens {

// This class is intended to handle media links that are clicked while the Lens
// overlay is open. The primary responsibility is to intercept links to other
// videos on YouTube and seek to the appropriate timestamp before playing the
// video. This class should be constructed per-navigation and does not store
// state between navigations.
class LensMediaLinkHandler {
 public:
  explicit LensMediaLinkHandler(content::WebContents* web_contents);
  virtual ~LensMediaLinkHandler();

  // Called when the user clicks a link to `target` while `web_contents` is the
  // focused tab. Returns true if the navigation should be skipped due to
  // having a media session that should be seeked instead, false if it should be
  // allowed to proceed. This function does not actually modify or replace
  // the navigation.
  bool MaybeReplaceNavigation(const GURL& target);

  content::WebContents* web_contents() { return web_contents_; }

  // Use this instead of MediaSession::GetIfExists() to make tests easier.
  virtual content::MediaSession* GetMediaSessionIfExists();

 private:
  raw_ptr<content::WebContents> web_contents_ = nullptr;
};

}  // namespace lens

#endif  // CHROME_BROWSER_UI_LENS_LENS_MEDIA_LINK_HANDLER_H_