Commit fe9592fc authored by jdduke's avatar jdduke Committed by Commit bot

Make VoiceSearchTabHelper a purely native object

There's no reason for VoiceSearchTabHelper to exist as a Java entity. It
simply routes a WebContentsObserver callback originating in native
code back to some more native code for processing, and has no Java
dependencies.

Review URL: https://codereview.chromium.org/979813004

Cr-Commit-Position: refs/heads/master@{#319186}
parent 6d0e2690
...@@ -166,7 +166,6 @@ public class Tab implements ViewGroup.OnHierarchyChangeListener, ...@@ -166,7 +166,6 @@ public class Tab implements ViewGroup.OnHierarchyChangeListener,
// Content layer Observers and Delegates // Content layer Observers and Delegates
private ContentViewClient mContentViewClient; private ContentViewClient mContentViewClient;
private WebContentsObserver mWebContentsObserver; private WebContentsObserver mWebContentsObserver;
private VoiceSearchTabHelper mVoiceSearchTabHelper;
private TabChromeWebContentsDelegateAndroid mWebContentsDelegate; private TabChromeWebContentsDelegateAndroid mWebContentsDelegate;
private DomDistillerFeedbackReporter mDomDistillerFeedbackReporter; private DomDistillerFeedbackReporter mDomDistillerFeedbackReporter;
...@@ -1437,7 +1436,6 @@ public class Tab implements ViewGroup.OnHierarchyChangeListener, ...@@ -1437,7 +1436,6 @@ public class Tab implements ViewGroup.OnHierarchyChangeListener,
mWebContentsDelegate = createWebContentsDelegate(); mWebContentsDelegate = createWebContentsDelegate();
mWebContentsObserver = new TabWebContentsObserver(mContentViewCore.getWebContents()); mWebContentsObserver = new TabWebContentsObserver(mContentViewCore.getWebContents());
mVoiceSearchTabHelper = new VoiceSearchTabHelper(mContentViewCore.getWebContents());
if (mContentViewClient != null) mContentViewCore.setContentViewClient(mContentViewClient); if (mContentViewClient != null) mContentViewCore.setContentViewClient(mContentViewClient);
...@@ -1878,11 +1876,6 @@ public class Tab implements ViewGroup.OnHierarchyChangeListener, ...@@ -1878,11 +1876,6 @@ public class Tab implements ViewGroup.OnHierarchyChangeListener,
mWebContentsObserver = null; mWebContentsObserver = null;
} }
if (mVoiceSearchTabHelper != null) {
mVoiceSearchTabHelper.destroy();
mVoiceSearchTabHelper = null;
}
assert mNativeTabAndroid != 0; assert mNativeTabAndroid != 0;
nativeDestroyWebContents(mNativeTabAndroid, deleteNativeWebContents); nativeDestroyWebContents(mNativeTabAndroid, deleteNativeWebContents);
} }
......
// Copyright 2014 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.
package org.chromium.chrome.browser;
import org.chromium.content_public.browser.WebContents;
import org.chromium.content_public.browser.WebContentsObserver;
/**
* Tab helper to toggle media autoplay for voice URL searches.
*/
public class VoiceSearchTabHelper extends WebContentsObserver {
private final WebContents mWebContents;
/**
* Create an instance of VoiceSearchTabHelper.
*
* @param webContents WebContents to update media autoplay status.
*/
public VoiceSearchTabHelper(WebContents webContents) {
super(webContents);
mWebContents = webContents;
}
@Override
public void navigationEntryCommitted() {
nativeUpdateAutoplayStatus(mWebContents);
}
private native void nativeUpdateAutoplayStatus(WebContents webContents);
}
...@@ -236,7 +236,6 @@ static base::android::RegistrationMethod kChromeRegisteredMethods[] = { ...@@ -236,7 +236,6 @@ static base::android::RegistrationMethod kChromeRegisteredMethods[] = {
{"UmaSessionStats", RegisterUmaSessionStats}, {"UmaSessionStats", RegisterUmaSessionStats},
{"UrlUtilities", RegisterUrlUtilities}, {"UrlUtilities", RegisterUrlUtilities},
{"Variations", variations::android::RegisterVariations}, {"Variations", variations::android::RegisterVariations},
{"VoiceSearchTabHelper", RegisterVoiceSearchTabHelper},
{"WebsitePreferenceBridge", RegisterWebsitePreferenceBridge}, {"WebsitePreferenceBridge", RegisterWebsitePreferenceBridge},
{"WebsiteSettingsPopupAndroid", {"WebsiteSettingsPopupAndroid",
WebsiteSettingsPopupAndroid::RegisterWebsiteSettingsPopupAndroid}, WebsiteSettingsPopupAndroid::RegisterWebsiteSettingsPopupAndroid},
......
...@@ -10,38 +10,36 @@ ...@@ -10,38 +10,36 @@
#include "content/public/browser/web_contents.h" #include "content/public/browser/web_contents.h"
#include "content/public/common/content_switches.h" #include "content/public/common/content_switches.h"
#include "content/public/common/web_preferences.h" #include "content/public/common/web_preferences.h"
#include "jni/VoiceSearchTabHelper_jni.h"
using content::WebContents; DEFINE_WEB_CONTENTS_USER_DATA_KEY(VoiceSearchTabHelper);
// Register native methods VoiceSearchTabHelper::VoiceSearchTabHelper(content::WebContents* contents)
bool RegisterVoiceSearchTabHelper(JNIEnv* env) { : content::WebContentsObserver(contents) {
return RegisterNativesImpl(env); gesture_requirement_for_playback_disabled_ =
base::CommandLine::ForCurrentProcess()->HasSwitch(
switches::kDisableGestureRequirementForMediaPlayback);
} }
static void UpdateAutoplayStatus(JNIEnv* env, VoiceSearchTabHelper::~VoiceSearchTabHelper() {
jobject obj, }
jobject j_web_contents) {
void VoiceSearchTabHelper::NavigationEntryCommitted(
const content::LoadCommittedDetails& load_details) {
// In the case where media autoplay has been disabled by default (e.g. in // In the case where media autoplay has been disabled by default (e.g. in
// performance media tests) do not update it based on navigation changes. // performance media tests) do not update it based on navigation changes.
const base::CommandLine& command_line = if (gesture_requirement_for_playback_disabled_)
*base::CommandLine::ForCurrentProcess();
if (command_line.HasSwitch(
switches::kDisableGestureRequirementForMediaPlayback))
return; return;
WebContents* web_contents = WebContents::FromJavaWebContents(j_web_contents); content::RenderViewHost* host = web_contents()->GetRenderViewHost();
content::RenderViewHost* host = web_contents->GetRenderViewHost();
content::WebPreferences prefs = host->GetWebkitPreferences(); content::WebPreferences prefs = host->GetWebkitPreferences();
bool gesture_required = bool gesture_required =
!google_util::IsGoogleSearchUrl(web_contents->GetLastCommittedURL()); !google_util::IsGoogleSearchUrl(web_contents()->GetLastCommittedURL());
if (gesture_required != prefs.user_gesture_required_for_media_playback) { if (gesture_required != prefs.user_gesture_required_for_media_playback) {
// TODO(chrishtr): this is wrong. user_gesture_required_for_media_playback // TODO(chrishtr): this is wrong. user_gesture_required_for_media_playback
// will be reset the next time a preference changes. // will be reset the next time a preference changes.
prefs.user_gesture_required_for_media_playback = prefs.user_gesture_required_for_media_playback = gesture_required;
!google_util::IsGoogleSearchUrl(web_contents->GetLastCommittedURL());
host->UpdateWebkitPreferences(prefs); host->UpdateWebkitPreferences(prefs);
} }
} }
...@@ -5,8 +5,28 @@ ...@@ -5,8 +5,28 @@
#ifndef CHROME_BROWSER_ANDROID_VOICE_SEARCH_TAB_HELPER_H_ #ifndef CHROME_BROWSER_ANDROID_VOICE_SEARCH_TAB_HELPER_H_
#define CHROME_BROWSER_ANDROID_VOICE_SEARCH_TAB_HELPER_H_ #define CHROME_BROWSER_ANDROID_VOICE_SEARCH_TAB_HELPER_H_
#include "base/android/jni_android.h" #include "base/macros.h"
#include "content/public/browser/web_contents_observer.h"
#include "content/public/browser/web_contents_user_data.h"
bool RegisterVoiceSearchTabHelper(JNIEnv* env); // Tab helper to toggle media autoplay for voice URL searches.
class VoiceSearchTabHelper
: public content::WebContentsObserver,
public content::WebContentsUserData<VoiceSearchTabHelper> {
public:
~VoiceSearchTabHelper() override;
// content::WebContentsObserver overrides.
void NavigationEntryCommitted(
const content::LoadCommittedDetails& load_details) override;
private:
explicit VoiceSearchTabHelper(content::WebContents* contents);
friend class content::WebContentsUserData<VoiceSearchTabHelper>;
bool gesture_requirement_for_playback_disabled_;
DISALLOW_COPY_AND_ASSIGN(VoiceSearchTabHelper);
};
#endif // CHROME_BROWSER_ANDROID_VOICE_SEARCH_TAB_HELPER_H_ #endif // CHROME_BROWSER_ANDROID_VOICE_SEARCH_TAB_HELPER_H_
...@@ -39,6 +39,7 @@ ...@@ -39,6 +39,7 @@
#include "content/public/browser/web_contents.h" #include "content/public/browser/web_contents.h"
#if defined(OS_ANDROID) #if defined(OS_ANDROID)
#include "chrome/browser/android/voice_search_tab_helper.h"
#include "chrome/browser/android/webapps/single_tab_mode_tab_helper.h" #include "chrome/browser/android/webapps/single_tab_mode_tab_helper.h"
#include "chrome/browser/enhanced_bookmarks/android/enhanced_bookmark_tab_helper.h" #include "chrome/browser/enhanced_bookmarks/android/enhanced_bookmark_tab_helper.h"
#include "chrome/browser/ui/android/context_menu_helper.h" #include "chrome/browser/ui/android/context_menu_helper.h"
...@@ -161,6 +162,7 @@ void TabHelpers::AttachTabHelpers(WebContents* web_contents) { ...@@ -161,6 +162,7 @@ void TabHelpers::AttachTabHelpers(WebContents* web_contents) {
ContextMenuHelper::CreateForWebContents(web_contents); ContextMenuHelper::CreateForWebContents(web_contents);
EnhancedBookmarkTabHelper::CreateForWebContents(web_contents); EnhancedBookmarkTabHelper::CreateForWebContents(web_contents);
SingleTabModeTabHelper::CreateForWebContents(web_contents); SingleTabModeTabHelper::CreateForWebContents(web_contents);
VoiceSearchTabHelper::CreateForWebContents(web_contents);
WindowAndroidHelper::CreateForWebContents(web_contents); WindowAndroidHelper::CreateForWebContents(web_contents);
#else #else
extensions::ChromeExtensionWebContentsObserver::CreateForWebContents( extensions::ChromeExtensionWebContentsObserver::CreateForWebContents(
......
...@@ -1665,7 +1665,6 @@ ...@@ -1665,7 +1665,6 @@
'android/java/src/org/chromium/chrome/browser/TtsPlatformImpl.java', 'android/java/src/org/chromium/chrome/browser/TtsPlatformImpl.java',
'android/java/src/org/chromium/chrome/browser/UrlUtilities.java', 'android/java/src/org/chromium/chrome/browser/UrlUtilities.java',
'android/java/src/org/chromium/chrome/browser/util/FeatureUtilities.java', 'android/java/src/org/chromium/chrome/browser/util/FeatureUtilities.java',
'android/java/src/org/chromium/chrome/browser/VoiceSearchTabHelper.java',
'android/java/src/org/chromium/chrome/browser/WebsiteSettingsPopup.java', 'android/java/src/org/chromium/chrome/browser/WebsiteSettingsPopup.java',
'android/java/src/org/chromium/chrome/browser/infobar/AppBannerInfoBar.java', 'android/java/src/org/chromium/chrome/browser/infobar/AppBannerInfoBar.java',
'android/java/src/org/chromium/chrome/browser/infobar/AccountChooserInfoBar.java', 'android/java/src/org/chromium/chrome/browser/infobar/AccountChooserInfoBar.java',
......
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