blob: 0aa5e4ff05fe896041dc85230374715466bcbe0d [file] [log] [blame]
// Copyright 2019 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_UI_ANDROID_OVERLAY_OVERLAY_WINDOW_ANDROID_H_
#define CHROME_BROWSER_UI_ANDROID_OVERLAY_OVERLAY_WINDOW_ANDROID_H_
#include "base/android/jni_weak_ref.h"
#include "base/android/scoped_java_ref.h"
#include "content/public/browser/overlay_window.h"
#include "ui/android/window_android.h"
#include "ui/android/window_android_observer.h"
#include "ui/gfx/geometry/size.h"
namespace cc {
class SurfaceLayer;
} // namespace cc
namespace thin_webview {
namespace android {
class CompositorView;
} // namespace android
} // namespace thin_webview
class OverlayWindowAndroid : public content::OverlayWindow,
public ui::WindowAndroidObserver {
public:
explicit OverlayWindowAndroid(
content::PictureInPictureWindowController* controller);
~OverlayWindowAndroid() override;
void OnActivityStart(
JNIEnv* env,
const base::android::JavaParamRef<jobject>& obj,
const base::android::JavaParamRef<jobject>& jwindow_android);
void Destroy(JNIEnv* env);
void Play(JNIEnv* env);
void CompositorViewCreated(
JNIEnv* env,
const base::android::JavaParamRef<jobject>& compositor_view);
void OnViewSizeChanged(JNIEnv* env, jint width, jint height);
// ui::WindowAndroidObserver implementation.
void OnCompositingDidCommit() override {}
void OnRootWindowVisibilityChanged(bool visible) override {}
void OnAttachCompositor() override;
void OnDetachCompositor() override;
void OnAnimate(base::TimeTicks frame_begin_time) override {}
void OnActivityStopped() override;
void OnActivityStarted() override {}
// OverlayWindow implementation.
bool IsActive() override;
void Close() override;
void ShowInactive() override {}
void Hide() override;
bool IsVisible() override;
bool IsAlwaysOnTop() override;
gfx::Rect GetBounds() override;
void UpdateVideoSize(const gfx::Size& natural_size) override;
void SetPlaybackState(PlaybackState playback_state) override {}
void SetAlwaysHidePlayPauseButton(bool is_visible) override {}
void SetSkipAdButtonVisibility(bool is_visible) override {}
void SetNextTrackButtonVisibility(bool is_visible) override {}
void SetPreviousTrackButtonVisibility(bool is_visible) override {}
void SetSurfaceId(const viz::SurfaceId& surface_id) override;
cc::Layer* GetLayerForTesting() override;
private:
// A weak reference to Java PictureInPictureActivity object.
JavaObjectWeakGlobalRef java_ref_;
ui::WindowAndroid* window_android_;
thin_webview::android::CompositorView* compositor_view_;
scoped_refptr<cc::SurfaceLayer> surface_layer_;
gfx::Rect bounds_;
gfx::Size video_size_;
content::PictureInPictureWindowController* controller_;
};
#endif // CHROME_BROWSER_UI_ANDROID_OVERLAY_OVERLAY_WINDOW_ANDROID_H_