blob: ba0cf703e1f8a9ae62c878769dce3cf780f233bb [file] [log] [blame]
// Copyright 2017 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 CONTENT_BROWSER_ANDROID_CONTENT_VIEW_CORE_H_
#define CONTENT_BROWSER_ANDROID_CONTENT_VIEW_CORE_H_
#include <stdint.h>
#include <memory>
#include <vector>
#include "base/android/jni_android.h"
#include "base/android/jni_weak_ref.h"
#include "base/android/scoped_java_ref.h"
#include "base/compiler_specific.h"
#include "base/i18n/rtl.h"
#include "base/macros.h"
#include "base/process/process.h"
#include "content/browser/renderer_host/render_widget_host_view_android.h"
#include "content/browser/web_contents/web_contents_impl.h"
#include "content/public/browser/web_contents_observer.h"
#include "third_party/WebKit/public/platform/WebInputEvent.h"
#include "ui/android/view_android.h"
#include "ui/gfx/geometry/rect.h"
#include "ui/gfx/geometry/rect_f.h"
#include "ui/gfx/selection_bound.h"
#include "url/gurl.h"
namespace ui {
class WindowAndroid;
}
namespace content {
class RenderWidgetHostViewAndroid;
class ContentViewCore : public WebContentsObserver {
public:
static ContentViewCore* FromWebContents(WebContents* web_contents);
ContentViewCore(JNIEnv* env,
const base::android::JavaRef<jobject>& obj,
WebContents* web_contents,
float dpi_scale);
base::android::ScopedJavaLocalRef<jobject> GetJavaObject();
WebContents* GetWebContents() const;
ui::WindowAndroid* GetWindowAndroid() const;
// --------------------------------------------------------------------------
// Methods called from Java via JNI
// --------------------------------------------------------------------------
base::android::ScopedJavaLocalRef<jobject> GetWebContentsAndroid(
JNIEnv* env,
const base::android::JavaParamRef<jobject>& obj);
base::android::ScopedJavaLocalRef<jobject> GetJavaWindowAndroid(
JNIEnv* env,
const base::android::JavaParamRef<jobject>& obj);
void UpdateWindowAndroid(
JNIEnv* env,
const base::android::JavaParamRef<jobject>& obj,
const base::android::JavaParamRef<jobject>& jwindow_android);
void OnJavaContentViewCoreDestroyed(
JNIEnv* env,
const base::android::JavaParamRef<jobject>& obj);
// Returns the amount of the top controls height if controls are in the state
// of shrinking Blink's view size, otherwise 0.
int GetTopControlsShrinkBlinkHeightPixForTesting(
JNIEnv* env,
const base::android::JavaParamRef<jobject>& obj);
void SendOrientationChangeEvent(
JNIEnv* env,
const base::android::JavaParamRef<jobject>& obj,
jint orientation);
jboolean SendMouseWheelEvent(JNIEnv* env,
const base::android::JavaParamRef<jobject>& obj,
jlong time_ms,
jfloat x,
jfloat y,
jfloat ticks_x,
jfloat ticks_y,
jfloat pixels_per_tick);
void SetTextHandlesTemporarilyHidden(
JNIEnv* env,
const base::android::JavaParamRef<jobject>& obj,
jboolean hidden);
void ResetGestureDetection(JNIEnv* env,
const base::android::JavaParamRef<jobject>& obj);
void SetDoubleTapSupportEnabled(
JNIEnv* env,
const base::android::JavaParamRef<jobject>& obj,
jboolean enabled);
void SetMultiTouchZoomSupportEnabled(
JNIEnv* env,
const base::android::JavaParamRef<jobject>& obj,
jboolean enabled);
void SetFocus(JNIEnv* env,
const base::android::JavaParamRef<jobject>& obj,
jboolean focused);
void SetDIPScale(JNIEnv* env,
const base::android::JavaParamRef<jobject>& obj,
jfloat dipScale);
jint GetBackgroundColor(JNIEnv* env, jobject obj);
void SetTextTrackSettings(
JNIEnv* env,
const base::android::JavaParamRef<jobject>& obj,
jboolean textTracksEnabled,
const base::android::JavaParamRef<jstring>& textTrackBackgroundColor,
const base::android::JavaParamRef<jstring>& textTrackFontFamily,
const base::android::JavaParamRef<jstring>& textTrackFontStyle,
const base::android::JavaParamRef<jstring>& textTrackFontVariant,
const base::android::JavaParamRef<jstring>& textTrackTextColor,
const base::android::JavaParamRef<jstring>& textTrackTextShadow,
const base::android::JavaParamRef<jstring>& textTrackTextSize);
void SetBackgroundOpaque(JNIEnv* env,
const base::android::JavaParamRef<jobject>& jobj,
jboolean opaque);
jboolean UsingSynchronousCompositing(
JNIEnv* env,
const base::android::JavaParamRef<jobject>& obj);
// --------------------------------------------------------------------------
// Public methods that call to Java via JNI
// --------------------------------------------------------------------------
void HidePopupsAndPreserveSelection();
void RequestDisallowInterceptTouchEvent();
// Returns the context with which the ContentViewCore was created, typically
// the Activity context.
base::android::ScopedJavaLocalRef<jobject> GetContext() const;
// --------------------------------------------------------------------------
// Methods called from native code
// --------------------------------------------------------------------------
void UpdateCursor(const content::CursorInfo& info);
void OnTouchDown(const base::android::ScopedJavaLocalRef<jobject>& event);
ui::ViewAndroid* GetViewAndroid() const;
private:
class ContentViewUserData;
friend class ContentViewUserData;
~ContentViewCore() override;
// WebContentsObserver implementation.
void RenderViewReady() override;
void RenderViewHostChanged(RenderViewHost* old_host,
RenderViewHost* new_host) override;
void WebContentsDestroyed() override;
// --------------------------------------------------------------------------
// Other private methods and data
// --------------------------------------------------------------------------
void InitWebContents();
void SendScreenRectsAndResizeWidget();
RenderWidgetHostViewAndroid* GetRenderWidgetHostViewAndroid() const;
// Update focus state of the RenderWidgetHostView.
void SetFocusInternal(bool focused);
// Send device_orientation_ to renderer.
void SendOrientationChangeEventInternal();
float dpi_scale() const { return dpi_scale_; }
// A weak reference to the Java ContentViewCore object.
JavaObjectWeakGlobalRef java_ref_;
// Reference to the current WebContents used to determine how and what to
// display in the ContentViewCore.
WebContentsImpl* web_contents_;
// Device scale factor.
float dpi_scale_;
// The cache of device's current orientation set from Java side, this value
// will be sent to Renderer once it is ready.
int device_orientation_;
DISALLOW_COPY_AND_ASSIGN(ContentViewCore);
};
} // namespace content
#endif // CONTENT_BROWSER_ANDROID_CONTENT_VIEW_CORE_H_