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.
4
5cr.define('options', function() {
6  /** @const */ var OptionsPage = options.OptionsPage;
7
8  /**
9   * CertificateBackupOverlay class
10   * Encapsulated handling of the 'enter backup password' overlay page.
11   * @class
12   */
13  function CertificateBackupOverlay() {
14    OptionsPage.call(this, 'certificateBackupOverlay',
15                     '',
16                     'certificateBackupOverlay');
17  }
18
19  cr.addSingletonGetter(CertificateBackupOverlay);
20
21  CertificateBackupOverlay.prototype = {
22    __proto__: OptionsPage.prototype,
23
24    /**
25     * Initializes the page.
26     */
27    initializePage: function() {
28      OptionsPage.prototype.initializePage.call(this);
29
30      var self = this;
31      $('certificateBackupCancelButton').onclick = function(event) {
32        self.cancelBackup_();
33      };
34      $('certificateBackupOkButton').onclick = function(event) {
35        self.finishBackup_();
36      };
37      var onBackupPasswordInput = function(event) {
38        self.comparePasswords_();
39      };
40      $('certificateBackupPassword').oninput = onBackupPasswordInput;
41      $('certificateBackupPassword2').oninput = onBackupPasswordInput;
42
43      self.clearInputFields_();
44    },
45
46    /**
47     * Clears any uncommitted input, and dismisses the overlay.
48     * @private
49     */
50    dismissOverlay_: function() {
51      this.clearInputFields_();
52      OptionsPage.closeOverlay();
53    },
54
55    /**
56     * Attempt the Backup operation.
57     * The overlay will be left up with inputs disabled until the backend
58     * finishes and dismisses it.
59     * @private
60     */
61    finishBackup_: function() {
62      chrome.send('exportPersonalCertificatePasswordSelected',
63                  [$('certificateBackupPassword').value]);
64      $('certificateBackupCancelButton').disabled = true;
65      $('certificateBackupOkButton').disabled = true;
66      $('certificateBackupPassword').disabled = true;
67      $('certificateBackupPassword2').disabled = true;
68    },
69
70    /**
71     * Cancel the Backup operation.
72     * @private
73     */
74    cancelBackup_: function() {
75      chrome.send('cancelImportExportCertificate');
76      this.dismissOverlay_();
77    },
78
79    /**
80     * Compares the password fields and sets the button state appropriately.
81     * @private
82     */
83    comparePasswords_: function() {
84      var password1 = $('certificateBackupPassword').value;
85      var password2 = $('certificateBackupPassword2').value;
86      $('certificateBackupOkButton').disabled =
87          !password1 || password1 != password2;
88    },
89
90    /**
91     * Clears the value of each input field.
92     * @private
93     */
94    clearInputFields_: function() {
95      $('certificateBackupPassword').value = '';
96      $('certificateBackupPassword2').value = '';
97      $('certificateBackupPassword').disabled = false;
98      $('certificateBackupPassword2').disabled = false;
99      $('certificateBackupCancelButton').disabled = false;
100      $('certificateBackupOkButton').disabled = true;
101    },
102  };
103
104  CertificateBackupOverlay.show = function() {
105    CertificateBackupOverlay.getInstance().clearInputFields_();
106    OptionsPage.navigateToPage('certificateBackupOverlay');
107  };
108
109  CertificateBackupOverlay.dismiss = function() {
110    CertificateBackupOverlay.getInstance().dismissOverlay_();
111  };
112
113  // Export
114  return {
115    CertificateBackupOverlay: CertificateBackupOverlay
116  };
117});
118