Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2029)

Unified Diff: chrome/android/java/src/org/chromium/chrome/browser/webapps/ManifestUpgradeDetector.java

Issue 2161163004: Split fetcher logic out of ManifestUpgradeDetector (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Merge branch 'master' into webapk_updater_images0 Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | chrome/android/java/src/org/chromium/chrome/browser/webapps/ManifestUpgradeDetectorFetcher.java » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/android/java/src/org/chromium/chrome/browser/webapps/ManifestUpgradeDetector.java
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/webapps/ManifestUpgradeDetector.java b/chrome/android/java/src/org/chromium/chrome/browser/webapps/ManifestUpgradeDetector.java
index 24120eba8d50ffe25ec4c1ebfaa7b58ca91f087b..5ac4b9d5f0987380001ce309a25499f6c15d60cc 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/webapps/ManifestUpgradeDetector.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/webapps/ManifestUpgradeDetector.java
@@ -11,29 +11,22 @@ import android.text.TextUtils;
import org.chromium.base.ContextUtils;
import org.chromium.base.Log;
-import org.chromium.base.VisibleForTesting;
-import org.chromium.base.annotations.CalledByNative;
-import org.chromium.chrome.browser.tab.EmptyTabObserver;
import org.chromium.chrome.browser.tab.Tab;
-import org.chromium.content_public.browser.WebContents;
/**
- * This class interacts with C++ to detect whether resources in web manifest of a WebAPK have been
- * updated.
+ * This class checks whether the WebAPK needs to be re-installed and sends a request to re-install
+ * the WebAPK if it needs to be re-installed.
*/
-public class ManifestUpgradeDetector extends EmptyTabObserver {
+public class ManifestUpgradeDetector implements ManifestUpgradeDetectorFetcher.Callback {
/**
* The names of <meta-data> in the WebAPK's AndroidManifest.xml whose values are needed to
* determine whether a WebAPK needs to be upgraded but which are not present in
* {@link WebappInfo}. The names must stay in sync with
* {@linkorg.chromium.webapk.lib.runtime_library.HostBrowserLauncher}.
*/
- private static final String META_DATA_START_URL = "org.chromium.webapk.shell_apk.startUrl";
+ public static final String META_DATA_START_URL = "org.chromium.webapk.shell_apk.startUrl";
- /** Pointer to the native side ManifestUpgradeDetector. */
- private long mNativePointer;
-
- /** The tab that is being observed. */
+ /** The WebAPK's tab. */
private final Tab mTab;
private WebappInfo mWebappInfo;
@@ -41,10 +34,9 @@ public class ManifestUpgradeDetector extends EmptyTabObserver {
private String mStartUrl;
/**
- * A flag for whether metadata is set via {@link set*ForTesting()}, rather than set
- * from WebAPK's AndroidManifest.xml.
+ * Fetches the WebAPK's Web Manifest from the web.
*/
- private boolean mOverrideMetadataForTesting = false;
+ private ManifestUpgradeDetectorFetcher mFetcher;
private static final String TAG = "cr_UpgradeDetector";
@@ -53,16 +45,6 @@ public class ManifestUpgradeDetector extends EmptyTabObserver {
mWebappInfo = info;
}
- @VisibleForTesting
- public void setOverrideMetadataForTesting(boolean overrideMetadataForTesting) {
- mOverrideMetadataForTesting = overrideMetadataForTesting;
- }
-
- @VisibleForTesting
- public void setStartUrlForTesting(String startUrl) {
- mStartUrl = startUrl;
- }
-
/**
* Starts fetching the web manifest resources.
*/
@@ -72,21 +54,23 @@ public class ManifestUpgradeDetector extends EmptyTabObserver {
return;
}
- if (mNativePointer != 0) return;
+ if (mFetcher != null) return;
getMetaDataFromAndroidManifest();
- mNativePointer = nativeInitialize(mTab.getWebContents(),
- mWebappInfo.scopeUri().toString(), mWebappInfo.webManifestUri().toString());
+ mFetcher = createFetcher(
+ mTab, mWebappInfo.scopeUri().toString(), mWebappInfo.webManifestUri().toString());
+ mFetcher.start(this);
+ }
- mTab.addObserver(this);
- nativeStart(mNativePointer);
+ /**
+ * Creates ManifestUpgradeDataFetcher.
+ */
+ protected ManifestUpgradeDetectorFetcher createFetcher(Tab tab, String scopeUrl,
+ String manifestUrl) {
+ return new ManifestUpgradeDetectorFetcher(tab, scopeUrl, manifestUrl);
}
private void getMetaDataFromAndroidManifest() {
- if (mOverrideMetadataForTesting) {
- // The metadata are set via {@link set*ForTesting()}.
- return;
- }
try {
ApplicationInfo appinfo =
ContextUtils.getApplicationContext().getPackageManager().getApplicationInfo(
@@ -101,54 +85,38 @@ public class ManifestUpgradeDetector extends EmptyTabObserver {
* Puts the object in a state where it is safe to be destroyed.
*/
public void destroy() {
- if (mNativePointer != 0) {
- nativeDestroy(mNativePointer);
+ if (mFetcher != null) {
+ mFetcher.destroy();
}
- mNativePointer = 0;
- }
-
- @Override
- public void onWebContentsSwapped(Tab tab, boolean didStartLoad,
- boolean didFinishLoad) {
- updatePointers();
- }
-
- @Override
- public void onContentChanged(Tab tab) {
- updatePointers();
- }
-
- /**
- * Updates which WebContents the native ManifestUpgradeDetector is monitoring.
- */
- private void updatePointers() {
- nativeReplaceWebContents(mNativePointer, mTab.getWebContents());
+ mFetcher = null;
}
/**
* Called when the updated Web Manifest has been fetched.
*/
- @CalledByNative
- private void onDataAvailable(String startUrl, String scope, String name, String shortName,
+ @Override
+ public void onGotManifestData(String startUrl, String scopeUrl, String name, String shortName,
int displayMode, int orientation, long themeColor, long backgroundColor) {
- mTab.removeObserver(this);
- destroy();
+ mFetcher.destroy();
+ mFetcher = null;
// TODO(hanxi): crbug.com/627824. Validate whether the new WebappInfo is
// WebAPK-compatible.
final WebappInfo newInfo = WebappInfo.create(mWebappInfo.id(), startUrl,
- scope, mWebappInfo.encodedIcon(), name, shortName, displayMode, orientation,
+ scopeUrl, mWebappInfo.encodedIcon(), name, shortName, displayMode, orientation,
mWebappInfo.source(), themeColor, backgroundColor, mWebappInfo.isIconGenerated(),
mWebappInfo.webApkPackageName(), mWebappInfo.webManifestUri().toString());
if (requireUpgrade(newInfo)) {
upgrade();
}
+
+ onComplete();
}
/**
* Checks whether the WebAPK needs to be upgraded provided the new Web Manifest info.
*/
- protected boolean requireUpgrade(WebappInfo newInfo) {
+ private boolean requireUpgrade(WebappInfo newInfo) {
boolean scopeMatch = mWebappInfo.scopeUri().equals(newInfo.scopeUri());
if (!scopeMatch) {
// Sometimes the scope doesn't match due to a missing "/" at the end of the scope URL.
@@ -173,12 +141,7 @@ public class ManifestUpgradeDetector extends EmptyTabObserver {
return false;
}
- private void upgrade() {}
+ protected void upgrade() {}
- private native long nativeInitialize(WebContents webContents, String scope,
- String webManifestUrl);
- private native void nativeReplaceWebContents(long nativeManifestUpgradeDetector,
- WebContents webContents);
- private native void nativeDestroy(long nativeManifestUpgradeDetector);
- private native void nativeStart(long nativeManifestUpgradeDetector);
+ protected void onComplete() {}
}
« no previous file with comments | « no previous file | chrome/android/java/src/org/chromium/chrome/browser/webapps/ManifestUpgradeDetectorFetcher.java » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698