Cherry-pick: Don't use webmediaplayer to FullscreenController about fullscreen change
NOTE: this cherry-pick should only be submitted after
https://googleplex-android-review.git.corp.google.com/#/c/523935
BUG=17021433
---------------------------------------------------------------------
Don't use webmediaplayer to FullscreenController about fullscreen change
This is cloned from https://codereview.chromium.org/275163002/
The previous change will break webview because AwWebContentsDelegate::ToggleFullscreenModeForTab is not implemented.
This change passes a runtime switch to blink to disable fullscreen for non-media elements for android webview.
when AwWebContentsDelegate::ToggleFullscreenModeForTab is called, android webview will send a FullscreenChanged IPC to finish the will/DidEnterFullscreen event for the media element.
blink side CL: https://codereview.chromium.org/290643005/
This CL only impacts android webview
BUG=367346
Review URL: https://codereview.chromium.org/292573004
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@281781 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/android_webview/java/src/org/chromium/android_webview/AwWebContentsDelegate.java b/android_webview/java/src/org/chromium/android_webview/AwWebContentsDelegate.java
index bdc5637..dbcf330 100644
--- a/android_webview/java/src/org/chromium/android_webview/AwWebContentsDelegate.java
+++ b/android_webview/java/src/org/chromium/android_webview/AwWebContentsDelegate.java
@@ -35,6 +35,10 @@
@CalledByNative
public abstract void activateContents();
+ @Override
+ @CalledByNative
+ public abstract void toggleFullscreenModeForTab(boolean enterFullscreen);
+
// Call in response to a prior runFileChooser call.
protected static native void nativeFilesSelectedInChooser(int processId, int renderId,
int mode_flags, String[] filePath);
diff --git a/android_webview/java/src/org/chromium/android_webview/AwWebContentsDelegateAdapter.java b/android_webview/java/src/org/chromium/android_webview/AwWebContentsDelegateAdapter.java
index 2edef84..70a148b 100644
--- a/android_webview/java/src/org/chromium/android_webview/AwWebContentsDelegateAdapter.java
+++ b/android_webview/java/src/org/chromium/android_webview/AwWebContentsDelegateAdapter.java
@@ -13,6 +13,7 @@
import android.webkit.ValueCallback;
import org.chromium.base.ThreadUtils;
+import org.chromium.content.browser.ContentVideoView;
import org.chromium.content.browser.ContentViewCore;
/**
@@ -191,4 +192,12 @@
public void activateContents() {
mContentsClient.onRequestFocus();
}
+
+ @Override
+ public void toggleFullscreenModeForTab(boolean enterFullscreen) {
+ if (!enterFullscreen) {
+ ContentVideoView videoView = ContentVideoView.getContentVideoView();
+ if (videoView != null) videoView.exitFullscreen(false);
+ }
+ }
}
diff --git a/android_webview/native/aw_settings.cc b/android_webview/native/aw_settings.cc
index 19c6251..0ed0945 100644
--- a/android_webview/native/aw_settings.cc
+++ b/android_webview/native/aw_settings.cc
@@ -431,6 +431,8 @@
Java_AwSettings_getAllowDisplayingInsecureContentLocked(env, obj);
web_prefs->allow_running_insecure_content =
Java_AwSettings_getAllowRunningInsecureContentLocked(env, obj);
+
+ web_prefs->disallow_fullscreen_for_non_media_elements = true;
}
static jlong Init(JNIEnv* env,
diff --git a/android_webview/native/aw_web_contents_delegate.cc b/android_webview/native/aw_web_contents_delegate.cc
index f9c42b1..ee51dc5 100644
--- a/android_webview/native/aw_web_contents_delegate.cc
+++ b/android_webview/native/aw_web_contents_delegate.cc
@@ -47,7 +47,8 @@
AwWebContentsDelegate::AwWebContentsDelegate(
JNIEnv* env,
jobject obj)
- : WebContentsDelegateAndroid(env, obj) {
+ : WebContentsDelegateAndroid(env, obj),
+ is_fullscreen_(false) {
}
AwWebContentsDelegate::~AwWebContentsDelegate() {
@@ -207,6 +208,25 @@
new MediaAccessPermissionRequest(request, callback)));
}
+void AwWebContentsDelegate::ToggleFullscreenModeForTab(
+ content::WebContents* web_contents, bool enter_fullscreen) {
+ JNIEnv* env = AttachCurrentThread();
+
+ ScopedJavaLocalRef<jobject> java_delegate = GetJavaDelegate(env);
+ if (java_delegate.obj()) {
+ Java_AwWebContentsDelegate_toggleFullscreenModeForTab(
+ env, java_delegate.obj(), enter_fullscreen);
+ }
+ is_fullscreen_ = enter_fullscreen;
+ web_contents->GetRenderViewHost()->WasResized();
+}
+
+bool AwWebContentsDelegate::IsFullscreenForTabOrPending(
+ const content::WebContents* web_contents) const {
+ return is_fullscreen_;
+}
+
+
static void FilesSelectedInChooser(
JNIEnv* env, jclass clazz,
jint process_id, jint render_id, jint mode_flags,
diff --git a/android_webview/native/aw_web_contents_delegate.h b/android_webview/native/aw_web_contents_delegate.h
index 1954bc2..824c922 100644
--- a/android_webview/native/aw_web_contents_delegate.h
+++ b/android_webview/native/aw_web_contents_delegate.h
@@ -53,6 +53,13 @@
content::WebContents* web_contents,
const content::MediaStreamRequest& request,
const content::MediaResponseCallback& callback) OVERRIDE;
+ virtual void ToggleFullscreenModeForTab(content::WebContents* web_contents,
+ bool enter_fullscreen) OVERRIDE;
+ virtual bool IsFullscreenForTabOrPending(
+ const content::WebContents* web_contents) const OVERRIDE;
+
+ private:
+ bool is_fullscreen_;
};
bool RegisterAwWebContentsDelegate(JNIEnv* env);
diff --git a/content/browser/media/android/browser_media_player_manager.cc b/content/browser/media/android/browser_media_player_manager.cc
index 5df9016..79b7983 100644
--- a/content/browser/media/android/browser_media_player_manager.cc
+++ b/content/browser/media/android/browser_media_player_manager.cc
@@ -164,10 +164,10 @@
}
void BrowserMediaPlayerManager::ExitFullscreen(bool release_media_player) {
+ if (WebContentsDelegate* delegate = web_contents_->GetDelegate())
+ delegate->ToggleFullscreenModeForTab(web_contents_, false);
if (!CommandLine::ForCurrentProcess()->HasSwitch(
switches::kDisableOverlayFullscreenVideoSubtitle)) {
- if (WebContentsDelegate* delegate = web_contents_->GetDelegate())
- delegate->ToggleFullscreenModeForTab(web_contents_, false);
if (RenderWidgetHostViewAndroid* view_android =
static_cast<RenderWidgetHostViewAndroid*>(
web_contents_->GetRenderWidgetHostView())) {
@@ -215,8 +215,6 @@
web_contents_->GetRenderWidgetHostView())) {
view_android->SetOverlayVideoMode(true);
}
- if (WebContentsDelegate* delegate = web_contents_->GetDelegate())
- delegate->ToggleFullscreenModeForTab(web_contents_, true);
}
void BrowserMediaPlayerManager::OnMediaMetadataChanged(
diff --git a/content/renderer/media/android/webmediaplayer_android.cc b/content/renderer/media/android/webmediaplayer_android.cc
index 9833546..253b37c 100644
--- a/content/renderer/media/android/webmediaplayer_android.cc
+++ b/content/renderer/media/android/webmediaplayer_android.cc
@@ -765,11 +765,8 @@
}
void WebMediaPlayerAndroid::OnDidEnterFullscreen() {
- if (!player_manager_->IsInFullscreen(frame_)) {
- frame_->view()->willEnterFullScreen();
- frame_->view()->didEnterFullScreen();
+ if (!player_manager_->IsInFullscreen(frame_))
player_manager_->DidEnterFullscreen(frame_);
- }
}
void WebMediaPlayerAndroid::OnDidExitFullscreen() {
@@ -786,8 +783,6 @@
player_manager_->RequestExternalSurface(player_id_, last_computed_rect_);
#endif // defined(VIDEO_HOLE)
- frame_->view()->willExitFullScreen();
- frame_->view()->didExitFullScreen();
player_manager_->DidExitFullscreen();
client_->repaint();
}
diff --git a/content/renderer/web_preferences.cc b/content/renderer/web_preferences.cc
index bd975fd..0eb198d 100644
--- a/content/renderer/web_preferences.cc
+++ b/content/renderer/web_preferences.cc
@@ -294,6 +294,8 @@
settings->setDeviceScaleAdjustment(prefs.device_scale_adjustment);
web_view->setIgnoreViewportTagScaleLimits(prefs.force_enable_zoom);
settings->setAutoZoomFocusedNodeToLegibleScale(true);
+ settings->setDisallowFullscreenForNonMediaElements(
+ prefs.disallow_fullscreen_for_non_media_elements);
settings->setDoubleTapToZoomEnabled(prefs.double_tap_to_zoom_enabled);
settings->setMediaControlsOverlayPlayButtonEnabled(true);
settings->setMediaPlaybackRequiresUserGesture(
diff --git a/webkit/common/webpreferences.cc b/webkit/common/webpreferences.cc
index a953f4a..78834ac 100644
--- a/webkit/common/webpreferences.cc
+++ b/webkit/common/webpreferences.cc
@@ -120,6 +120,7 @@
font_scale_factor(1.0f),
device_scale_adjustment(1.0f),
force_enable_zoom(false),
+ disallow_fullscreen_for_non_media_elements(false),
double_tap_to_zoom_enabled(true),
user_gesture_required_for_media_playback(true),
support_deprecated_target_density_dpi(false),
diff --git a/webkit/common/webpreferences.h b/webkit/common/webpreferences.h
index 241fde3..cd675f9 100644
--- a/webkit/common/webpreferences.h
+++ b/webkit/common/webpreferences.h
@@ -165,6 +165,7 @@
float font_scale_factor;
float device_scale_adjustment;
bool force_enable_zoom;
+ bool disallow_fullscreen_for_non_media_elements;
bool double_tap_to_zoom_enabled;
bool user_gesture_required_for_media_playback;
GURL default_video_poster_url;