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

Side by Side Diff: chrome/browser/resources/print_preview/data/invitation_store.js

Issue 587013003: Add Print Preview UI to accept and reject printer sharing invitations. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 3 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 unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2014 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.
4
5 cr.define('print_preview', function() {
6 'use strict';
7
8 /**
9 * Printer sharing invitations data store.
10 * @param {!print_preview.UserInfo} userInfo User information repository.
11 * @constructor
12 * @extends {cr.EventTarget}
13 */
14 function InvitationStore(userInfo) {
15 cr.EventTarget.call(this);
16
17 /**
18 * User information repository.
19 * @private {!print_preview.UserInfo}
20 */
21 this.userInfo_ = userInfo;
22
23 /**
24 * Maps user account to the list of invitations for this account.
25 * @private {!Object.<string, !Array.<!print_preview.Invitation>>}
26 */
27 this.invitations_ = {};
28
29 /**
30 * Maps user account to the flag whether the invitations for this account
31 * were successfully loaded.
32 * @private {!Object.<string, print_preview.InvitationStore.LoadStatus_>}
33 */
34 this.loadStatus_ = {};
35
36 /**
37 * Event tracker used to track event listeners of the destination store.
38 * @private {!EventTracker}
39 */
40 this.tracker_ = new EventTracker();
41
42 /**
43 * Used to fetch and process invitations.
44 * @private {print_preview.CloudPrintInterface}
45 */
46 this.cloudPrintInterface_ = null;
47
48 /**
49 * Invitation being processed now. Only one invitation can be processed at
50 * a time.
51 * @private {print_preview.Invitation}
52 */
53 this.invitationInProgress_ = null;
54 };
55
56 /**
57 * Event types dispatched by the data store.
58 * @enum {string}
59 */
60 InvitationStore.EventType = {
61 INVITATION_PROCESSED:
62 'print_preview.InvitationStore.INVITATION_PROCESSED',
63 INVITATION_SEARCH_DONE:
64 'print_preview.InvitationStore.INVITATION_SEARCH_DONE'
65 };
66
67 /**
68 * @enum {number}
69 * @private
70 */
71 InvitationStore.LoadStatus_ = {
72 IN_PROGRESS: 1,
73 DONE: 2,
74 FAILED: 3
75 };
76
77 InvitationStore.prototype = {
78 __proto__: cr.EventTarget.prototype,
79
80 /**
81 * @return {print_preview.Invitation} Currently processed invitation or
82 * {@code null}.
83 */
84 get invitationInProgress() {
85 return this.invitationInProgress_;
86 },
87
88 /**
89 * @param {string} account Account to filter invitations by.
90 * @return {!Array.<!print_preview.Invitation>} List of invitations for the
91 * {@code account}.
92 */
93 invitations: function(account) {
94 return this.invitations_[account] || [];
95 },
96
97 /**
98 * Sets the invitation store's Google Cloud Print interface.
99 * @param {!print_preview.CloudPrintInterface} cloudPrintInterface Interface
100 * to set.
101 */
102 setCloudPrintInterface: function(cloudPrintInterface) {
103 this.cloudPrintInterface_ = cloudPrintInterface;
104 this.tracker_.add(
105 this.cloudPrintInterface_,
106 cloudprint.CloudPrintInterface.EventType.INVITES_DONE,
107 this.onCloudPrintInvitesDone_.bind(this));
108 this.tracker_.add(
109 this.cloudPrintInterface_,
110 cloudprint.CloudPrintInterface.EventType.INVITES_FAILED,
111 this.onCloudPrintInvitesDone_.bind(this));
112 this.tracker_.add(
113 this.cloudPrintInterface_,
114 cloudprint.CloudPrintInterface.EventType.PROCESS_INVITE_DONE,
115 this.onCloudPrintProcessInviteDone_.bind(this));
116 this.tracker_.add(
117 this.cloudPrintInterface_,
118 cloudprint.CloudPrintInterface.EventType.PROCESS_INVITE_FAILED,
119 this.onCloudPrintProcessInviteFailed_.bind(this));
120 },
121
122 /** Initiates loading of cloud printer sharing invitations. */
123 startLoadingInvitations: function() {
124 if (!this.cloudPrintInterface_)
125 return;
126 if (!this.userInfo_.activeUser)
127 return;
128 if (this.loadStatus_.hasOwnProperty(this.userInfo_.activeUser)) {
129 if (this.loadStatus_[this.userInfo_.activeUser] ==
130 InvitationStore.LoadStatus_.DONE) {
131 cr.dispatchSimpleEvent(
132 this, InvitationStore.EventType.INVITATION_SEARCH_DONE);
133 }
134 return;
135 }
136
137 this.loadStatus_[this.userInfo_.activeUser] =
138 InvitationStore.LoadStatus_.IN_PROGRESS;
139 this.cloudPrintInterface_.invites(this.userInfo_.activeUser);
140 },
141
142 /**
143 * Accepts or rejects the {@code invitation}, based on {@code accept} value.
144 * @param {!print_preview.Invitation} invitation Invitation to process.
145 * @param {boolean} accept Whether to accept this invitation.
146 */
147 processInvitation: function(invitation, accept) {
148 if (!!this.invitationInProgress_)
149 return;
150 this.invitationInProgress_ = invitation;
151 this.cloudPrintInterface_.processInvite(invitation, accept);
152 },
153
154 /**
155 * Removes processed invitation from the internal storage.
156 * @param {!print_preview.Invitation} invitation Processed invitation.
157 * @private
158 */
159 invitationProcessed_: function(invitation) {
160 if (this.invitations_.hasOwnProperty(invitation.account)) {
161 this.invitations_[invitation.account] =
162 this.invitations_[invitation.account].filter(function(i) {
163 return i != invitation;
164 });
165 }
166 if (this.invitationInProgress_ == invitation)
167 this.invitationInProgress_ = null;
168 },
169
170 /**
171 * Called when printer sharing invitations are fetched.
172 * @param {Event} event Contains the list of invitations.
173 * @private
174 */
175 onCloudPrintInvitesDone_: function(event) {
176 this.loadStatus_[event.user] = InvitationStore.LoadStatus_.DONE;
177 this.invitations_[event.user] = event.invitations;
178
179 cr.dispatchSimpleEvent(
180 this, InvitationStore.EventType.INVITATION_SEARCH_DONE);
181 },
182
183 /**
184 * Called when printer sharing invitations fetch has failed.
185 * @param {Event} event Contains the reason of failure.
186 * @private
187 */
188 onCloudPrintInvitesFailed_: function(event) {
189 this.loadStatus_[event.user] = InvitationStore.LoadStatus_.FAILED;
190 },
191
192 /**
193 * Called when printer sharing invitation was processed successfully.
194 * @param {Event} event Contains detailed information about the invite and
195 * newly accepted destination.
196 * @private
197 */
198 onCloudPrintProcessInviteDone_: function(event) {
199 this.invitationProcessed_(event.invitation);
200 cr.dispatchSimpleEvent(
201 this, InvitationStore.EventType.INVITATION_PROCESSED);
202 },
203
204 /**
205 * Called when /printer call completes. Updates the specified destination's
206 * print capabilities.
207 * @param {Event} event Contains detailed information about the
208 * destination.
209 * @private
210 */
211 onCloudPrintProcessInviteFailed_: function(event) {
212 this.invitationProcessed_(event.invitation);
213 // TODO: Display an error.
214 cr.dispatchSimpleEvent(
215 this, InvitationStore.EventType.INVITATION_PROCESSED);
216 }
217 };
218
219 // Export
220 return {
221 InvitationStore: InvitationStore
222 };
223 });
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698