// Copyright 2015 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_MEDIA_OFFSCREEN_TAB_H_ #define CHROME_BROWSER_MEDIA_OFFSCREEN_TAB_H_ #include <stdint.h> #include <memory> #include <string> #include "base/memory/raw_ptr.h" #include "base/time/time.h" #include "base/timer/timer.h" #include "chrome/browser/profiles/profile_observer.h" #include "content/public/browser/web_contents_delegate.h" #include "content/public/browser/web_contents_observer.h" #include "ui/gfx/geometry/size.h" namespace media_router { class NavigationPolicy; } // namespace media_router namespace content { class BrowserContext; } // namespace content // Owns and controls a sandboxed WebContents instance hosting the rendering // engine for an offscreen tab. Since the offscreen tab does not interact with // the user in any direct way, the WebContents is not attached to any Browser // window/UI, and any input and focusing capabilities are blocked. // // An OffscreenTab instance is shut down one of the three ways: // // 1. When WebContents::IsBeingCaptured() returns false, indicating there are // no more consumers of its captured content (e.g., when all MediaStreams // have been closed). OffscreenTab will auto-detect this case and // self-destruct. // 2. By the renderer, where the WebContents implementation will invoke the // WebContentsDelegate::CloseContents() override. This occurs, for // example, when a page calls window.close(). // 3. Automatically, when the associated profile is destroyed. // // This class operates exclusively on the UI thread and so is not thread-safe. class OffscreenTab final : public ProfileObserver, protected content::WebContentsDelegate, protected content::WebContentsObserver { … }; #endif // CHROME_BROWSER_MEDIA_OFFSCREEN_TAB_H_