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,
// Content layer Observers and Delegates
private ContentViewClient mContentViewClient;
private WebContentsObserver mWebContentsObserver;
private VoiceSearchTabHelper mVoiceSearchTabHelper;
private TabChromeWebContentsDelegateAndroid mWebContentsDelegate;
private DomDistillerFeedbackReporter mDomDistillerFeedbackReporter;
......@@ -1437,7 +1436,6 @@ public class Tab implements ViewGroup.OnHierarchyChangeListener,
mWebContentsDelegate = createWebContentsDelegate();
mWebContentsObserver = new TabWebContentsObserver(mContentViewCore.getWebContents());
mVoiceSearchTabHelper = new VoiceSearchTabHelper(mContentViewCore.getWebContents());
if (mContentViewClient != null) mContentViewCore.setContentViewClient(mContentViewClient);
......@@ -1878,11 +1876,6 @@ public class Tab implements ViewGroup.OnHierarchyChangeListener,
mWebContentsObserver = null;
}
if (mVoiceSearchTabHelper != null) {
mVoiceSearchTabHelper.destroy();
mVoiceSearchTabHelper = null;
}
assert mNativeTabAndroid != 0;
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[] = {
{"UmaSessionStats", RegisterUmaSessionStats},
{"UrlUtilities", RegisterUrlUtilities},
{"Variations", variations::android::RegisterVariations},
{"VoiceSearchTabHelper", RegisterVoiceSearchTabHelper},
{"WebsitePreferenceBridge", RegisterWebsitePreferenceBridge},
{"WebsiteSettingsPopupAndroid",
WebsiteSettingsPopupAndroid::RegisterWebsiteSettingsPopupAndroid},
......
......@@ -10,38 +10,36 @@
#include "content/public/browser/web_contents.h"
#include "content/public/common/content_switches.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
bool RegisterVoiceSearchTabHelper(JNIEnv* env) {
return RegisterNativesImpl(env);
VoiceSearchTabHelper::VoiceSearchTabHelper(content::WebContents* contents)
: content::WebContentsObserver(contents) {
gesture_requirement_for_playback_disabled_ =
base::CommandLine::ForCurrentProcess()->HasSwitch(
switches::kDisableGestureRequirementForMediaPlayback);
}
static void UpdateAutoplayStatus(JNIEnv* env,
jobject obj,
jobject j_web_contents) {
VoiceSearchTabHelper::~VoiceSearchTabHelper() {
}
void VoiceSearchTabHelper::NavigationEntryCommitted(
const content::LoadCommittedDetails& load_details) {
// 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.
const base::CommandLine& command_line =
*base::CommandLine::ForCurrentProcess();
if (command_line.HasSwitch(
switches::kDisableGestureRequirementForMediaPlayback))
if (gesture_requirement_for_playback_disabled_)
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();
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) {
// TODO(chrishtr): this is wrong. user_gesture_required_for_media_playback
// will be reset the next time a preference changes.
prefs.user_gesture_required_for_media_playback =
!google_util::IsGoogleSearchUrl(web_contents->GetLastCommittedURL());
prefs.user_gesture_required_for_media_playback = gesture_required;
host->UpdateWebkitPreferences(prefs);
}
}
......@@ -5,8 +5,28 @@
#ifndef 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_
......@@ -39,6 +39,7 @@
#include "content/public/browser/web_contents.h"
#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/enhanced_bookmarks/android/enhanced_bookmark_tab_helper.h"
#include "chrome/browser/ui/android/context_menu_helper.h"
......@@ -161,6 +162,7 @@ void TabHelpers::AttachTabHelpers(WebContents* web_contents) {
ContextMenuHelper::CreateForWebContents(web_contents);
EnhancedBookmarkTabHelper::CreateForWebContents(web_contents);
SingleTabModeTabHelper::CreateForWebContents(web_contents);
VoiceSearchTabHelper::CreateForWebContents(web_contents);
WindowAndroidHelper::CreateForWebContents(web_contents);
#else
extensions::ChromeExtensionWebContentsObserver::CreateForWebContents(
......
......@@ -1665,7 +1665,6 @@
'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/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/infobar/AppBannerInfoBar.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