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

Unified Diff: chrome/browser/resources/print_preview/search/destination_search.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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/resources/print_preview/search/destination_search.js
diff --git a/chrome/browser/resources/print_preview/search/destination_search.js b/chrome/browser/resources/print_preview/search/destination_search.js
index 1d54473586aed1e2c199f320bbc6520465d5a59e..387535cca2a4e99953dd24a691861166718dfae8 100644
--- a/chrome/browser/resources/print_preview/search/destination_search.js
+++ b/chrome/browser/resources/print_preview/search/destination_search.js
@@ -12,12 +12,14 @@ cr.define('print_preview', function() {
* the destination store.
* @param {!print_preview.DestinationStore} destinationStore Data store
* containing the destinations to search through.
+ * @param {!print_preview.InvitationStore} invitationStore Data store
+ * holding printer sharing invitations.
* @param {!print_preview.UserInfo} userInfo Event target that contains
* information about the logged in user.
* @constructor
* @extends {print_preview.Overlay}
*/
- function DestinationSearch(destinationStore, userInfo) {
+ function DestinationSearch(destinationStore, invitationStore, userInfo) {
print_preview.Overlay.call(this);
/**
@@ -28,6 +30,13 @@ cr.define('print_preview', function() {
this.destinationStore_ = destinationStore;
/**
+ * Data store holding printer sharing invitations.
+ * @type {!print_preview.DestinationStore}
+ * @private
+ */
+ this.invitationStore_ = invitationStore;
+
+ /**
* Event target that contains information about the logged in user.
* @type {!print_preview.UserInfo}
* @private
@@ -35,6 +44,13 @@ cr.define('print_preview', function() {
this.userInfo_ = userInfo;
/**
+ * Currently displayed printer sharing invitation.
+ * @type {print_preview.Invitation}
+ * @private
+ */
+ this.invitation_ = null;
+
+ /**
* Used to record usage statistics.
* @type {!print_preview.DestinationSearchMetricsContext}
* @private
@@ -138,6 +154,9 @@ cr.define('print_preview', function() {
this.reflowLists_();
this.metrics_.record(
print_preview.Metrics.DestinationSearchBucket.DESTINATION_SHOWN);
+
+ this.destinationStore_.startLoadAllDestinations();
+ this.invitationStore_.startLoadingInvitations();
} else {
// Collapse all destination lists
this.localList_.setIsShowAll(false);
@@ -177,6 +196,15 @@ cr.define('print_preview', function() {
this.onSignInActivated_.bind(this));
this.tracker.add(
+ this.getChildElement('.invitation-accept-button'),
+ 'click',
+ this.onInvitationProcessButtonClick_.bind(this, true /*accept*/));
+ this.tracker.add(
+ this.getChildElement('.invitation-reject-button'),
+ 'click',
+ this.onInvitationProcessButtonClick_.bind(this, false /*accept*/));
+
+ this.tracker.add(
this.getChildElement('.cloudprint-promo > .close-button'),
'click',
this.onCloudprintPromoCloseButtonClick_.bind(this));
@@ -214,6 +242,15 @@ cr.define('print_preview', function() {
this.onDestinationSearchDone_.bind(this));
this.tracker.add(
+ this.invitationStore_,
+ print_preview.InvitationStore.EventType.INVITATION_SEARCH_DONE,
+ this.updateInvitations_.bind(this));
+ this.tracker.add(
+ this.invitationStore_,
+ print_preview.InvitationStore.EventType.INVITATION_PROCESSED,
+ this.updateInvitations_.bind(this));
+
+ this.tracker.add(
this.localList_,
print_preview.DestinationList.EventType.ACTION_LINK_ACTIVATED,
this.onManageLocalDestinationsActivated_.bind(this));
@@ -259,6 +296,7 @@ cr.define('print_preview', function() {
parseInt(elStyle.getPropertyValue('padding-top')) -
parseInt(elStyle.getPropertyValue('padding-bottom')) -
this.getChildElement('.lists').offsetTop -
+ this.getChildElement('.invitation-container').offsetHeight -
this.getChildElement('.cloudprint-promo').offsetHeight;
},
@@ -414,6 +452,55 @@ cr.define('print_preview', function() {
},
/**
+ * Updates printer sharing invitations UI.
+ * @private
+ */
+ updateInvitations_: function() {
+ var invitations = this.userInfo_.activeUser ?
+ this.invitationStore_.invitations(this.userInfo_.activeUser) : [];
+ if (invitations.length > 0) {
+ this.invitation_ = invitations[0];
+ this.showInvitation_(this.invitation_);
+ } else {
+ this.invitation_ = null;
+ }
+ setIsVisible(
+ this.getChildElement('.invitation-container'), !!this.invitation_);
+ this.reflowLists_();
+ },
+
+ /**
+ * @param {!printe_preview.Invitation} invitation Invitation to show.
+ * @private
+ */
+ showInvitation_: function(invitation) {
+ var invitationText = '';
+ if (invitation.asGroupManager) {
+ invitationText = localStrings.getStringF(
+ 'groupPrinterSharingInviteText',
+ invitation.sender,
+ invitation.destination.displayName,
+ invitation.receiver);
+ } else {
+ invitationText = localStrings.getStringF(
+ 'printerSharingInviteText',
+ invitation.sender,
+ invitation.destination.displayName);
+ }
+ this.getChildElement('.invitation-text').innerHTML = invitationText;
+
+ var acceptButton = this.getChildElement('.invitation-accept-button');
+ acceptButton.textContent = localStrings.getString(
+ invitation.asGroupManager ? 'acceptForGroup' : 'accept');
+ acceptButton.disabled = !!this.invitationStore_.invitationInProgress;
+ this.getChildElement('.invitation-reject-button').disabled =
+ !!this.invitationStore_.invitationInProgress;
+ setIsVisible(
+ this.getChildElement('#invitation-process-throbber'),
+ !!this.invitationStore_.invitationInProgress);
+ },
+
+ /**
* Called when user's logged in accounts change. Updates the UI.
* @private
*/
@@ -440,7 +527,7 @@ cr.define('print_preview', function() {
setIsVisible(this.getChildElement('.user-info'), loggedIn);
setIsVisible(this.getChildElement('.cloud-list'), loggedIn);
setIsVisible(this.getChildElement('.cloudprint-promo'), !loggedIn);
- this.reflowLists_();
+ this.updateInvitations_();
},
/**
@@ -503,6 +590,9 @@ cr.define('print_preview', function() {
this.updateThrobbers_();
this.renderDestinations_();
this.reflowLists_();
+ // In case user account information was retrieved with this search
+ // (knowing current user account is required to fetch invitations).
+ this.invitationStore_.startLoadingInvitations();
},
/**
@@ -548,6 +638,7 @@ cr.define('print_preview', function() {
if (account) {
this.userInfo_.activeUser = account;
this.destinationStore_.reloadUserCookieBasedDestinations();
+ this.invitationStore_.startLoadingInvitations();
this.metrics_.record(
print_preview.Metrics.DestinationSearchBucket.ACCOUNT_CHANGED);
} else {
@@ -565,6 +656,16 @@ cr.define('print_preview', function() {
},
/**
+ * Called when the printer sharing invitation Accept/Reject button is
+ * clicked.
+ * @private
+ */
+ onInvitationProcessButtonClick_: function(accept) {
+ this.invitationStore_.processInvitation(this.invitation_, accept);
+ this.updateInvitations_();
+ },
+
+ /**
* Called when the close button on the cloud print promo is clicked. Hides
* the promo.
* @private

Powered by Google App Engine
This is Rietveld 408576698