Commit b068d2b8 authored by Shakti Sahu's avatar Shakti Sahu Committed by Commit Bot

ThinWebView : Set background color

Currently ThinWebView background is set to white from the cc::Layer.
This causes a white flash in the video player. This CL adds the ability
to set a background color

Bug: 1151187
Change-Id: I32bcee040d1662a04477feb6b8ac6dc92f652a54
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2552222Reviewed-by: default avatarDavid Trainor <dtrainor@chromium.org>
Commit-Queue: Shakti Sahu <shaktisahu@chromium.org>
Cr-Commit-Position: refs/heads/master@{#830078}
parent 729dbbbd
...@@ -5,6 +5,7 @@ ...@@ -5,6 +5,7 @@
package org.chromium.chrome.browser.video_tutorials.player; package org.chromium.chrome.browser.video_tutorials.player;
import android.content.Context; import android.content.Context;
import android.graphics.Color;
import android.util.Pair; import android.util.Pair;
import android.view.View; import android.view.View;
...@@ -99,7 +100,9 @@ public class VideoPlayerCoordinatorImpl implements VideoPlayerCoordinator { ...@@ -99,7 +100,9 @@ public class VideoPlayerCoordinatorImpl implements VideoPlayerCoordinator {
mMediaSessionObserver = new PlaybackStateObserver( mMediaSessionObserver = new PlaybackStateObserver(
MediaSession.fromWebContents(mWebContents), () -> { return mMediator; }); MediaSession.fromWebContents(mWebContents), () -> { return mMediator; });
ThinWebView thinWebView = ThinWebViewFactory.create(mContext, new ThinWebViewConstraints()); ThinWebViewConstraints constraints = new ThinWebViewConstraints();
constraints.backgroundColor = Color.BLACK;
ThinWebView thinWebView = ThinWebViewFactory.create(mContext, constraints);
thinWebView.attachWebContents(mWebContents, webContentView, mWebContentsDelegate); thinWebView.attachWebContents(mWebContents, webContentView, mWebContentsDelegate);
return thinWebView; return thinWebView;
} }
......
...@@ -13,6 +13,7 @@ ...@@ -13,6 +13,7 @@
#include "components/thin_webview/internal/jni_headers/CompositorViewImpl_jni.h" #include "components/thin_webview/internal/jni_headers/CompositorViewImpl_jni.h"
#include "content/public/browser/android/compositor.h" #include "content/public/browser/android/compositor.h"
#include "third_party/skia/include/core/SkColor.h" #include "third_party/skia/include/core/SkColor.h"
#include "ui/android/color_helpers.h"
#include "ui/android/window_android.h" #include "ui/android/window_android.h"
using base::android::JavaParamRef; using base::android::JavaParamRef;
...@@ -24,14 +25,14 @@ namespace { ...@@ -24,14 +25,14 @@ namespace {
const int kPixelFormatUnknown = 0; const int kPixelFormatUnknown = 0;
} // namespace } // namespace
jlong JNI_CompositorViewImpl_Init( jlong JNI_CompositorViewImpl_Init(JNIEnv* env,
JNIEnv* env, const JavaParamRef<jobject>& obj,
const JavaParamRef<jobject>& obj, const JavaParamRef<jobject>& jwindow_android,
const JavaParamRef<jobject>& jwindow_android) { jint java_background_color) {
ui::WindowAndroid* window_android = ui::WindowAndroid* window_android =
ui::WindowAndroid::FromJavaWindowAndroid(jwindow_android); ui::WindowAndroid::FromJavaWindowAndroid(jwindow_android);
auto compositor_view = auto compositor_view = std::make_unique<CompositorViewImpl>(
std::make_unique<CompositorViewImpl>(env, obj, window_android); env, obj, window_android, java_background_color);
return reinterpret_cast<intptr_t>(compositor_view.release()); return reinterpret_cast<intptr_t>(compositor_view.release());
} }
...@@ -48,13 +49,16 @@ CompositorView* CompositorView::FromJavaObject( ...@@ -48,13 +49,16 @@ CompositorView* CompositorView::FromJavaObject(
CompositorViewImpl::CompositorViewImpl(JNIEnv* env, CompositorViewImpl::CompositorViewImpl(JNIEnv* env,
jobject obj, jobject obj,
ui::WindowAndroid* window_android) ui::WindowAndroid* window_android,
int64_t java_background_color)
: obj_(env, obj), : obj_(env, obj),
root_layer_(cc::SolidColorLayer::Create()), root_layer_(cc::SolidColorLayer::Create()),
current_surface_format_(kPixelFormatUnknown) { current_surface_format_(kPixelFormatUnknown) {
compositor_.reset(content::Compositor::Create(this, window_android)); compositor_.reset(content::Compositor::Create(this, window_android));
root_layer_->SetIsDrawable(true); root_layer_->SetIsDrawable(true);
root_layer_->SetBackgroundColor(SK_ColorWHITE); base::Optional<SkColor> background_color =
ui::JavaColorToOptionalSkColor(java_background_color);
root_layer_->SetBackgroundColor(background_color.value());
} }
CompositorViewImpl::~CompositorViewImpl() = default; CompositorViewImpl::~CompositorViewImpl() = default;
......
...@@ -35,7 +35,8 @@ class CompositorViewImpl : public CompositorView, ...@@ -35,7 +35,8 @@ class CompositorViewImpl : public CompositorView,
public: public:
CompositorViewImpl(JNIEnv* env, CompositorViewImpl(JNIEnv* env,
jobject obj, jobject obj,
ui::WindowAndroid* window_android); ui::WindowAndroid* window_android,
int64_t java_background_color);
~CompositorViewImpl() override; ~CompositorViewImpl() override;
void Destroy(JNIEnv* env, const base::android::JavaParamRef<jobject>& object); void Destroy(JNIEnv* env, const base::android::JavaParamRef<jobject>& object);
......
...@@ -45,8 +45,8 @@ public class CompositorViewImpl implements CompositorView { ...@@ -45,8 +45,8 @@ public class CompositorViewImpl implements CompositorView {
mContext = context; mContext = context;
mViewConstraints = constraints.clone(); mViewConstraints = constraints.clone();
mView = useSurfaceView() ? createSurfaceView() : createTextureView(); mView = useSurfaceView() ? createSurfaceView() : createTextureView();
mNativeCompositorViewImpl = mNativeCompositorViewImpl = CompositorViewImplJni.get().init(
CompositorViewImplJni.get().init(CompositorViewImpl.this, windowAndroid); CompositorViewImpl.this, windowAndroid, constraints.backgroundColor);
} }
@Override @Override
...@@ -168,7 +168,7 @@ public class CompositorViewImpl implements CompositorView { ...@@ -168,7 +168,7 @@ public class CompositorViewImpl implements CompositorView {
@NativeMethods @NativeMethods
interface Natives { interface Natives {
long init(CompositorViewImpl caller, WindowAndroid windowAndroid); long init(CompositorViewImpl caller, WindowAndroid windowAndroid, int backgroundColor);
void destroy(long nativeCompositorViewImpl, CompositorViewImpl caller); void destroy(long nativeCompositorViewImpl, CompositorViewImpl caller);
void surfaceCreated(long nativeCompositorViewImpl, CompositorViewImpl caller); void surfaceCreated(long nativeCompositorViewImpl, CompositorViewImpl caller);
void surfaceDestroyed(long nativeCompositorViewImpl, CompositorViewImpl caller); void surfaceDestroyed(long nativeCompositorViewImpl, CompositorViewImpl caller);
......
...@@ -4,6 +4,8 @@ ...@@ -4,6 +4,8 @@
package org.chromium.components.thinwebview; package org.chromium.components.thinwebview;
import android.graphics.Color;
/** Various constraints associated with the thin webview based on the usage. */ /** Various constraints associated with the thin webview based on the usage. */
public class ThinWebViewConstraints implements Cloneable { public class ThinWebViewConstraints implements Cloneable {
/** /**
...@@ -11,10 +13,16 @@ public class ThinWebViewConstraints implements Cloneable { ...@@ -11,10 +13,16 @@ public class ThinWebViewConstraints implements Cloneable {
*/ */
public boolean supportsOpacity; public boolean supportsOpacity;
/**
* Background color of this view.
*/
public int backgroundColor = Color.WHITE;
@Override @Override
public ThinWebViewConstraints clone() { public ThinWebViewConstraints clone() {
ThinWebViewConstraints clone = new ThinWebViewConstraints(); ThinWebViewConstraints clone = new ThinWebViewConstraints();
clone.supportsOpacity = supportsOpacity; clone.supportsOpacity = supportsOpacity;
clone.backgroundColor = backgroundColor;
return clone; return clone;
} }
} }
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment