| Index: chrome/android/java/src/org/chromium/chrome/browser/webapps/WebappRegistry.java | 
| diff --git a/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebappRegistry.java b/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebappRegistry.java | 
| index 153e3941b2ef1f79e1e5d16d67fd8910e3596ac2..115f9f8ffab3330a57811ac6498f2de2881fc4da 100644 | 
| --- a/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebappRegistry.java | 
| +++ b/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebappRegistry.java | 
| @@ -104,7 +104,6 @@ public class WebappRegistry { | 
| SharedPreferences preferences = openSharedPreferences(context); | 
| if (getRegisteredWebappIds(preferences).contains(webappId)) { | 
| WebappDataStorage storage = WebappDataStorage.open(context, webappId); | 
| -                    storage.updateLastUsedTime(); | 
| return storage; | 
| } | 
| return null; | 
| @@ -119,6 +118,40 @@ public class WebappRegistry { | 
| } | 
|  | 
| /** | 
| +     * Runs the callback, supplying the WebappDataStorage object whose scope most closely matches | 
| +     * the provided URL, or null if a matching web app cannot be found. The most closely matching | 
| +     * scope is the longest scope which has the same prefix as the URL to open. | 
| +     * @param context  Context to open the registry with. | 
| +     * @param url      The URL to search for. | 
| +     * @return The storage object for the web app, or null if webappId is not registered. | 
| +     */ | 
| +    public static void getWebappDataStorageForUrl(final Context context, final String url, | 
| +            final FetchWebappDataStorageCallback callback) { | 
| +        new AsyncTask<Void, Void, WebappDataStorage>() { | 
| +            @Override | 
| +            protected final WebappDataStorage doInBackground(Void... nothing) { | 
| +                SharedPreferences preferences = openSharedPreferences(context); | 
| +                WebappDataStorage bestMatch = null; | 
| +                int largestOverlap = 0; | 
| +                for (String id : getRegisteredWebappIds(preferences)) { | 
| +                    WebappDataStorage storage = WebappDataStorage.open(context, id); | 
| +                    String scope = storage.getScope(); | 
| +                    if (url.startsWith(scope) && scope.length() > largestOverlap) { | 
| +                        bestMatch = storage; | 
| +                        largestOverlap = scope.length(); | 
| +                    } | 
| +                } | 
| +                return bestMatch; | 
| +            } | 
| + | 
| +            protected final void onPostExecute(WebappDataStorage storage) { | 
| +                assert callback != null; | 
| +                callback.onWebappDataStorageRetrieved(storage); | 
| +            } | 
| +        }.execute(); | 
| +    } | 
| + | 
| +    /** | 
| * Asynchronously retrieves the list of web app IDs which this registry is aware of. | 
| * @param context  Context to open the registry with. | 
| * @param callback Called when the set has been retrieved. The set may be empty. | 
|  |