| Index: chrome/android/java_staging/src/org/chromium/chrome/browser/gsa/ContextReporter.java
|
| diff --git a/chrome/android/java_staging/src/org/chromium/chrome/browser/gsa/ContextReporter.java b/chrome/android/java_staging/src/org/chromium/chrome/browser/gsa/ContextReporter.java
|
| deleted file mode 100644
|
| index b88fd436391d77cac759b5a8d809b665e147737d..0000000000000000000000000000000000000000
|
| --- a/chrome/android/java_staging/src/org/chromium/chrome/browser/gsa/ContextReporter.java
|
| +++ /dev/null
|
| @@ -1,232 +0,0 @@
|
| -// Copyright 2015 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.gsa;
|
| -
|
| -import android.text.TextUtils;
|
| -
|
| -import org.chromium.base.Log;
|
| -import org.chromium.base.metrics.RecordHistogram;
|
| -import org.chromium.chrome.browser.ChromeActivity;
|
| -import org.chromium.chrome.browser.Tab;
|
| -import org.chromium.chrome.browser.UrlConstants;
|
| -import org.chromium.chrome.browser.contextualsearch.ContextualSearchObserver;
|
| -import org.chromium.chrome.browser.sync.ProfileSyncService;
|
| -import org.chromium.chrome.browser.tabmodel.EmptyTabModelObserver;
|
| -import org.chromium.chrome.browser.tabmodel.TabModel;
|
| -import org.chromium.chrome.browser.tabmodel.TabModel.TabSelectionType;
|
| -import org.chromium.chrome.browser.tabmodel.TabModelObserver;
|
| -import org.chromium.chrome.browser.tabmodel.TabModelSelector;
|
| -import org.chromium.chrome.browser.tabmodel.TabModelSelectorTabObserver;
|
| -import org.chromium.sync.internal_api.pub.PassphraseType;
|
| -import org.chromium.sync.internal_api.pub.base.ModelType;
|
| -
|
| -import java.util.concurrent.atomic.AtomicBoolean;
|
| -
|
| -import javax.annotation.Nullable;
|
| -
|
| -/**
|
| - * Reports context to GSA for search quality.
|
| - */
|
| -public class ContextReporter {
|
| - private static final String TAG = "cr.GSA";
|
| -
|
| - // Values for UMA histogram.
|
| - public static final int STATUS_SUCCESS = 0;
|
| - public static final int STATUS_GSA_NOT_AVAILABLE = 1;
|
| - public static final int STATUS_SYNC_NOT_INITIALIZED = 2;
|
| - public static final int STATUS_SYNC_NOT_SYNCING_URLS = 3;
|
| - public static final int STATUS_SYNC_NOT_KEYSTORE_PASSPHRASE = 4;
|
| - public static final int STATUS_SYNC_OTHER = 5;
|
| - public static final int STATUS_SVELTE_DEVICE = 6;
|
| - public static final int STATUS_NO_TAB = 7;
|
| - public static final int STATUS_INCOGNITO = 8;
|
| - public static final int STATUS_INVALID_SCHEME = 9;
|
| - public static final int STATUS_TAB_ID_MISMATCH = 10;
|
| - public static final int STATUS_DUP_TITLE_CHANGE = 11;
|
| - public static final int STATUS_CONNECTION_FAILED = 12;
|
| - public static final int STATUS_SYNC_NOT_READY_AT_REPORT_TIME = 13;
|
| - public static final int STATUS_NOT_SIGNED_IN = 14;
|
| - public static final int STATUS_GSA_ACCOUNT_MISSING = 15;
|
| - public static final int STATUS_GSA_ACCOUNT_MISMATCH = 16;
|
| - public static final int STATUS_RESULT_IS_NULL = 17;
|
| - public static final int STATUS_RESULT_FAILED = 18;
|
| - public static final int STATUS_SUCCESS_WITH_SELECTION = 19;
|
| - // This should always stay last and have the highest number.
|
| - private static final int STATUS_BOUNDARY = 20;
|
| -
|
| - private final ChromeActivity mActivity;
|
| - private final GSAContextReportDelegate mDelegate;
|
| - private TabModelSelectorTabObserver mSelectorTabObserver;
|
| - private TabModelObserver mModelObserver;
|
| - private ContextualSearchObserver mContextualSearchObserver;
|
| - private boolean mLastContextWasTitleChange;
|
| - private final AtomicBoolean mContextInUse;
|
| -
|
| - /**
|
| - * Creates a ContextReporter for an Activity.
|
| - * @param activity Chrome Activity which context will be reported.
|
| - * @param controller used to communicate with GSA
|
| - */
|
| - public ContextReporter(ChromeActivity activity, GSAContextReportDelegate controller) {
|
| - mActivity = activity;
|
| - mDelegate = controller;
|
| - mContextInUse = new AtomicBoolean(false);
|
| - Log.d(TAG, "Created a new ContextReporter");
|
| - }
|
| -
|
| - /**
|
| - * Starts reporting context.
|
| - */
|
| - public void enable() {
|
| - Tab currentTab = mActivity.getActivityTab();
|
| - reportUsageOfCurrentContextIfPossible(currentTab, false, null);
|
| -
|
| - TabModelSelector selector = mActivity.getTabModelSelector();
|
| - assert selector != null;
|
| -
|
| - if (mSelectorTabObserver == null) {
|
| - mSelectorTabObserver = new TabModelSelectorTabObserver(selector) {
|
| - @Override
|
| - public void onTitleUpdated(Tab tab) {
|
| - // Report usage declaring this as a title change.
|
| - reportUsageOfCurrentContextIfPossible(tab, true, null);
|
| - }
|
| -
|
| - @Override
|
| - public void onUrlUpdated(Tab tab) {
|
| - reportUsageOfCurrentContextIfPossible(tab, false, null);
|
| - }
|
| - };
|
| - }
|
| - if (mModelObserver == null) {
|
| - assert !selector.getModels().isEmpty();
|
| - mModelObserver = new EmptyTabModelObserver() {
|
| - @Override
|
| - public void didSelectTab(Tab tab, TabSelectionType type, int lastId) {
|
| - reportUsageOfCurrentContextIfPossible(tab, false, null);
|
| - }
|
| - };
|
| - for (TabModel model : selector.getModels()) {
|
| - model.addObserver(mModelObserver);
|
| - }
|
| - }
|
| - if (mContextualSearchObserver == null && mActivity.getContextualSearchManager() != null) {
|
| - mContextualSearchObserver = new ContextualSearchObserver() {
|
| - @Override
|
| - public void onShowContextualSearch(GSAContextDisplaySelection contextSelection) {
|
| - if (contextSelection != null) reportDisplaySelection(contextSelection);
|
| - }
|
| -
|
| - @Override
|
| - public void onHideContextualSearch() {
|
| - reportDisplaySelection(null);
|
| - }
|
| - };
|
| - mActivity.getContextualSearchManager().addObserver(mContextualSearchObserver);
|
| - }
|
| - }
|
| -
|
| - /**
|
| - * Stops reporting context. Called when the app goes to the background.
|
| - */
|
| - public void disable() {
|
| - reportUsageEndedIfNecessary();
|
| -
|
| - if (mSelectorTabObserver != null) {
|
| - mSelectorTabObserver.destroy();
|
| - mSelectorTabObserver = null;
|
| - }
|
| - if (mModelObserver != null) {
|
| - for (TabModel model : mActivity.getTabModelSelector().getModels()) {
|
| - model.removeObserver(mModelObserver);
|
| - }
|
| - mModelObserver = null;
|
| - }
|
| - if (mContextualSearchObserver != null && mActivity.getContextualSearchManager() != null) {
|
| - mActivity.getContextualSearchManager().removeObserver(mContextualSearchObserver);
|
| - mContextualSearchObserver = null;
|
| - }
|
| - }
|
| -
|
| - /**
|
| - * Reports that the given display selection has been established for the current tab.
|
| - * @param displaySelection The information about the selection being displayed.
|
| - */
|
| - private void reportDisplaySelection(@Nullable GSAContextDisplaySelection displaySelection) {
|
| - Tab currentTab = mActivity.getActivityTab();
|
| - reportUsageOfCurrentContextIfPossible(currentTab, false, displaySelection);
|
| - }
|
| -
|
| - private void reportUsageEndedIfNecessary() {
|
| - if (mContextInUse.compareAndSet(true, false)) mDelegate.reportContextUsageEnded();
|
| - }
|
| -
|
| - private void reportUsageOfCurrentContextIfPossible(
|
| - Tab tab, boolean isTitleChange, @Nullable GSAContextDisplaySelection displaySelection) {
|
| - Tab currentTab = mActivity.getActivityTab();
|
| - if (currentTab == null || currentTab.isIncognito()) {
|
| - if (currentTab == null) {
|
| - reportStatus(STATUS_NO_TAB);
|
| - Log.d(TAG, "Not reporting, tab is null");
|
| - } else {
|
| - reportStatus(STATUS_INCOGNITO);
|
| - Log.d(TAG, "Not reporting, tab is incognito");
|
| - }
|
| - reportUsageEndedIfNecessary();
|
| - return;
|
| - }
|
| -
|
| - String currentUrl = currentTab.getUrl();
|
| - if (TextUtils.isEmpty(currentUrl) || !(currentUrl.startsWith(UrlConstants.HTTP_SCHEME)
|
| - || currentUrl.startsWith(UrlConstants.HTTPS_SCHEME))) {
|
| - reportStatus(STATUS_INVALID_SCHEME);
|
| - Log.d(TAG, "Not reporting, URL scheme is invalid");
|
| - reportUsageEndedIfNecessary();
|
| - return;
|
| - }
|
| -
|
| - // Check whether this is a context change we would like to report.
|
| - if (currentTab.getId() != tab.getId()) {
|
| - reportStatus(STATUS_TAB_ID_MISMATCH);
|
| - Log.d(TAG, "Not reporting, tab ID doesn't match");
|
| - return;
|
| - }
|
| - if (isTitleChange && mLastContextWasTitleChange) {
|
| - reportStatus(STATUS_DUP_TITLE_CHANGE);
|
| - Log.d(TAG, "Not reporting, repeated title update");
|
| - return;
|
| - }
|
| -
|
| - reportUsageEndedIfNecessary();
|
| -
|
| - mDelegate.reportContext(currentTab.getUrl(), currentTab.getTitle(), displaySelection);
|
| - mLastContextWasTitleChange = isTitleChange;
|
| - mContextInUse.set(true);
|
| - }
|
| -
|
| - /**
|
| - * Records the given status via UMA.
|
| - * Use one of the STATUS_* constants above.
|
| - */
|
| - public static void reportStatus(int status) {
|
| - RecordHistogram.recordEnumeratedHistogram(
|
| - "Search.IcingContextReportingStatus", status, STATUS_BOUNDARY);
|
| - }
|
| -
|
| - /**
|
| - * Records an appropriate status via UMA given the current sync status.
|
| - */
|
| - public static void reportSyncStatus(ProfileSyncService syncService) {
|
| - if (!syncService.isSyncInitialized()) {
|
| - reportStatus(STATUS_SYNC_NOT_INITIALIZED);
|
| - } else if (!syncService.getActiveDataTypes().contains(ModelType.TYPED_URL)) {
|
| - reportStatus(STATUS_SYNC_NOT_SYNCING_URLS);
|
| - } else if (!syncService.getPassphraseType().equals(PassphraseType.KEYSTORE_PASSPHRASE)) {
|
| - reportStatus(STATUS_SYNC_NOT_KEYSTORE_PASSPHRASE);
|
| - } else {
|
| - reportStatus(STATUS_SYNC_OTHER);
|
| - }
|
| - }
|
| -}
|
|
|