Disable view source for Developer Tools.
[chromium-blink-merge.git] / chrome / browser / resources / print_preview / data / cloud_parsers.js
blobe37be46cb0dd9dc31ade837d09daa91a94322c45
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 cr.define('cloudprint', function() {
6   'use strict';
8   /** Namespace which contains a method to parse cloud destinations directly. */
9   function CloudDestinationParser() {};
11   /**
12    * Enumeration of cloud destination field names.
13    * @enum {string}
14    * @private
15    */
16   CloudDestinationParser.Field_ = {
17     LAST_ACCESS: 'accessTime',
18     CAPABILITIES: 'capabilities',
19     CONNECTION_STATUS: 'connectionStatus',
20     DISPLAY_NAME: 'displayName',
21     ID: 'id',
22     IS_TOS_ACCEPTED: 'isTosAccepted',
23     TAGS: 'tags',
24     TYPE: 'type'
25   };
27   /**
28    * Special tag that denotes whether the destination has been recently used.
29    * @type {string}
30    * @const
31    * @private
32    */
33   CloudDestinationParser.RECENT_TAG_ = '^recent';
35   /**
36    * Special tag that denotes whether the destination is owned by the user.
37    * @type {string}
38    * @const
39    * @private
40    */
41   CloudDestinationParser.OWNED_TAG_ = '^own';
43   /**
44    * Enumeration of cloud destination types that are supported by print preview.
45    * @enum {string}
46    * @private
47    */
48   CloudDestinationParser.CloudType_ = {
49     ANDROID: 'ANDROID_CHROME_SNAPSHOT',
50     DOCS: 'DOCS',
51     IOS: 'IOS_CHROME_SNAPSHOT'
52   };
54   /**
55    * Parses a destination from JSON from a Google Cloud Print search or printer
56    * response.
57    * @param {!Object} json Object that represents a Google Cloud Print search or
58    *     printer response.
59    * @param {!print_preview.Destination.Origin} origin The origin of the
60    *     response.
61    * @return {!print_preview.Destination} Parsed destination.
62    */
63   CloudDestinationParser.parse = function(json, origin) {
64     if (!json.hasOwnProperty(CloudDestinationParser.Field_.ID) ||
65         !json.hasOwnProperty(CloudDestinationParser.Field_.TYPE) ||
66         !json.hasOwnProperty(CloudDestinationParser.Field_.DISPLAY_NAME)) {
67       throw Error('Cloud destination does not have an ID or a display name');
68     }
69     var id = json[CloudDestinationParser.Field_.ID];
70     var tags = json[CloudDestinationParser.Field_.TAGS] || [];
71     var connectionStatus =
72         json[CloudDestinationParser.Field_.CONNECTION_STATUS] ||
73         print_preview.Destination.ConnectionStatus.UNKNOWN;
74     var optionalParams = {
75       tags: tags,
76       isOwned: arrayContains(tags, CloudDestinationParser.OWNED_TAG_),
77       lastAccessTime: parseInt(
78           json[CloudDestinationParser.Field_.LAST_ACCESS], 10) || Date.now(),
79       isTosAccepted: (id == print_preview.Destination.GooglePromotedId.FEDEX) ?
80           json[CloudDestinationParser.Field_.IS_TOS_ACCEPTED] : null,
81       cloudID: id
82     };
83     var cloudDest = new print_preview.Destination(
84         id,
85         CloudDestinationParser.parseType_(
86             json[CloudDestinationParser.Field_.TYPE]),
87         origin,
88         json[CloudDestinationParser.Field_.DISPLAY_NAME],
89         arrayContains(tags, CloudDestinationParser.RECENT_TAG_) /*isRecent*/,
90         connectionStatus,
91         optionalParams);
92     if (json.hasOwnProperty(CloudDestinationParser.Field_.CAPABILITIES)) {
93       cloudDest.capabilities = /*@type {!print_preview.Cdd}*/ (
94           json[CloudDestinationParser.Field_.CAPABILITIES]);
95     }
96     return cloudDest;
97   };
99   /**
100    * Parses the destination type.
101    * @param {string} typeStr Destination type given by the Google Cloud Print
102    *     server.
103    * @return {!print_preview.Destination.Type} Destination type.
104    * @private
105    */
106   CloudDestinationParser.parseType_ = function(typeStr) {
107     if (typeStr == CloudDestinationParser.CloudType_.ANDROID ||
108         typeStr == CloudDestinationParser.CloudType_.IOS) {
109       return print_preview.Destination.Type.MOBILE;
110     } else if (typeStr == CloudDestinationParser.CloudType_.DOCS) {
111       return print_preview.Destination.Type.GOOGLE_PROMOTED;
112     } else {
113       return print_preview.Destination.Type.GOOGLE;
114     }
115   };
117   // Export
118   return {
119     CloudDestinationParser: CloudDestinationParser
120   };