// 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.physicalweb; import org.chromium.base.Log; import org.json.JSONException; import org.json.JSONObject; import java.net.MalformedURLException; import java.net.URL; /** * A result from the Physical Web Server. * * This represents metadata about a URL retrieved from from a PWS response. It does not * necessarily represent one response as a single PWS response may include metadata about multiple * URLs. */ class PwsResult { private static final String TAG = "PhysicalWeb"; private static final String PAGE_INFO_KEY = "pageInfo"; private static final String REQUEST_URL_KEY = "scannedUrl"; private static final String SITE_URL_KEY = "resolvedUrl"; private static final String ICON_KEY = "icon"; private static final String TITLE_KEY = "title"; private static final String DESCRIPTION_KEY = "description"; private static final String GROUP_ID_KEY = "groupId"; /** * The URL that was set in the request to the PWS. */ public final String requestUrl; /** * The destination URL that the requestUrl redirects to. */ public final String siteUrl; /** * The URL for the destination's favicon. */ public final String iconUrl; /** * The title of the web page. */ public final String title; /** * The description of the webpage. */ public final String description; /** * The group id as determined by the PWS. * This value is useful for associating multiple URLs that refer to similar content in the same * bucket. */ public final String groupId; /** * Construct a PwsResult. */ PwsResult(String requestUrl, String siteUrl, String iconUrl, String title, String description, String groupId) { this.requestUrl = requestUrl; this.siteUrl = siteUrl; this.iconUrl = iconUrl; this.title = title; this.description = description; String groupIdToSet = groupId; if (groupId == null) { try { groupIdToSet = new URL(siteUrl).getHost() + title; } catch (MalformedURLException e) { Log.e(TAG, "PwsResult created with a malformed URL", e); groupIdToSet = siteUrl + title; } } this.groupId = groupIdToSet; } /** * Creates a JSON object that represents this data structure. * @return a JSON serialization of this data structure. * @throws JSONException if the values cannot be deserialized. */ public JSONObject jsonSerialize() throws JSONException { return new JSONObject() .put(REQUEST_URL_KEY, requestUrl) .put(SITE_URL_KEY, siteUrl) .put(PAGE_INFO_KEY, new JSONObject() .put(ICON_KEY, iconUrl) .put(TITLE_KEY, title) .put(DESCRIPTION_KEY, description) .put(GROUP_ID_KEY, groupId)); } /** * Populates a PwsResult with data from a given JSON object. * @param jsonObject a serialized PwsResult. * @return The PwsResult represented by the serialized object. * @throws JSONException if the values cannot be serialized. */ public static PwsResult jsonDeserialize(JSONObject jsonObject) throws JSONException { JSONObject pageInfo = jsonObject.getJSONObject(PAGE_INFO_KEY); return new PwsResult( jsonObject.getString(REQUEST_URL_KEY), jsonObject.getString(SITE_URL_KEY), pageInfo.optString(ICON_KEY, null), pageInfo.optString(TITLE_KEY, ""), pageInfo.optString(DESCRIPTION_KEY, null), pageInfo.optString(GROUP_ID_KEY, null)); } }