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

Side by Side Diff: chrome/browser/resources/settings/languages_page/languages.js

Issue 2827553002: MD Settings: Use a browser proxy from the languages page. Re-enable test. (Closed)
Patch Set: Address @dbeam feedback Created 3 years, 8 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
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 /** 5 /**
6 * @fileoverview 'settings-languages' handles Chrome's language and input 6 * @fileoverview 'settings-languages' handles Chrome's language and input
7 * method settings. The 'languages' property, which reflects the current 7 * method settings. The 'languages' property, which reflects the current
8 * language settings, must not be changed directly. Instead, changes to 8 * language settings, must not be changed directly. Instead, changes to
9 * language settings should be made using the LanguageHelper APIs provided by 9 * language settings should be made using the LanguageHelper APIs provided by
10 * this class via languageHelper. 10 * this class via languageHelper.
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
71 * PromiseResolver to be resolved when the singleton has been initialized. 71 * PromiseResolver to be resolved when the singleton has been initialized.
72 * @private {!PromiseResolver} 72 * @private {!PromiseResolver}
73 */ 73 */
74 resolver_: { 74 resolver_: {
75 type: Object, 75 type: Object,
76 value: function() { 76 value: function() {
77 return new PromiseResolver(); 77 return new PromiseResolver();
78 }, 78 },
79 }, 79 },
80 80
81 /** @type {!LanguageSettingsPrivate} */
82 languageSettingsPrivate: Object,
83
84 /** @type {!InputMethodPrivate} */
85 inputMethodPrivate: Object,
86
87 /** 81 /**
88 * Hash map of supported languages by language codes for fast lookup. 82 * Hash map of supported languages by language codes for fast lookup.
89 * @private {!Map<string, !chrome.languageSettingsPrivate.Language>} 83 * @private {!Map<string, !chrome.languageSettingsPrivate.Language>}
90 */ 84 */
91 supportedLanguageMap_: { 85 supportedLanguageMap_: {
92 type: Object, 86 type: Object,
93 value: function() { return new Map(); }, 87 value: function() { return new Map(); },
94 }, 88 },
95 89
96 /** 90 /**
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
141 // Observe Chrome OS prefs (ignored for non-Chrome OS). 135 // Observe Chrome OS prefs (ignored for non-Chrome OS).
142 'updateRemovableLanguages_(' + 136 'updateRemovableLanguages_(' +
143 'prefs.settings.language.preload_engines.value, ' + 137 'prefs.settings.language.preload_engines.value, ' +
144 'prefs.settings.language.enabled_extension_imes.value, ' + 138 'prefs.settings.language.enabled_extension_imes.value, ' +
145 'languages)', 139 'languages)',
146 ], 140 ],
147 141
148 /** @private {?Function} */ 142 /** @private {?Function} */
149 boundOnInputMethodChanged_: null, 143 boundOnInputMethodChanged_: null,
150 144
145 /** @private {?settings.LanguagesBrowserProxy} */
146 browserProxy_: null,
147
148 /** @private {?LanguageSettingsPrivate} */
149 languageSettingsPrivate_: null,
150
151 /** @private {?InputMethodPrivate} */
152 inputMethodPrivate_: null,
153
151 /** @override */ 154 /** @override */
152 attached: function() { 155 attached: function() {
153 this.languageSettingsPrivate = 156 this.browserProxy_ = settings.LanguagesBrowserProxyImpl.getInstance();
154 settings.languageSettingsPrivateApiForTest || 157 this.languageSettingsPrivate_ =
155 /** @type {!LanguageSettingsPrivate} */(chrome.languageSettingsPrivate); 158 this.browserProxy_.getLanguageSettingsPrivate();
156 159 this.inputMethodPrivate_ = this.browserProxy_.getInputMethodPrivate();
157 this.inputMethodPrivate =
158 settings.inputMethodPrivateApiForTest ||
159 /** @type {!InputMethodPrivate} */(chrome.inputMethodPrivate);
160 160
161 var promises = []; 161 var promises = [];
162 162
163 // Wait until prefs are initialized before creating the model, so we can 163 // Wait until prefs are initialized before creating the model, so we can
164 // include information about enabled languages. 164 // include information about enabled languages.
165 promises[0] = CrSettingsPrefs.initialized; 165 promises[0] = CrSettingsPrefs.initialized;
166 166
167 // Get the language list. 167 // Get the language list.
168 promises[1] = new Promise(function(resolve) { 168 promises[1] = new Promise(function(resolve) {
169 this.languageSettingsPrivate.getLanguageList(resolve); 169 this.languageSettingsPrivate_.getLanguageList(resolve);
170 }.bind(this)); 170 }.bind(this));
171 171
172 // Get the translate target language. 172 // Get the translate target language.
173 promises[2] = new Promise(function(resolve) { 173 promises[2] = new Promise(function(resolve) {
174 this.languageSettingsPrivate.getTranslateTargetLanguage(resolve); 174 this.languageSettingsPrivate_.getTranslateTargetLanguage(resolve);
175 }.bind(this)); 175 }.bind(this));
176 176
177 if (cr.isChromeOS) { 177 if (cr.isChromeOS) {
178 promises[3] = new Promise(function(resolve) { 178 promises[3] = new Promise(function(resolve) {
179 this.languageSettingsPrivate.getInputMethodLists(function(lists) { 179 this.languageSettingsPrivate_.getInputMethodLists(function(lists) {
180 resolve(lists.componentExtensionImes.concat( 180 resolve(lists.componentExtensionImes.concat(
181 lists.thirdPartyExtensionImes)); 181 lists.thirdPartyExtensionImes));
182 }); 182 });
183 }.bind(this)); 183 }.bind(this));
184 184
185 promises[4] = new Promise(function(resolve) { 185 promises[4] = new Promise(function(resolve) {
186 this.inputMethodPrivate.getCurrentInputMethod(resolve); 186 this.inputMethodPrivate_.getCurrentInputMethod(resolve);
187 }.bind(this)); 187 }.bind(this));
188 } 188 }
189 189
190 if (cr.isWindows || cr.isChromeOS) { 190 if (cr.isWindows || cr.isChromeOS) {
191 // Fetch the starting UI language, which affects which actions should be 191 // Fetch the starting UI language, which affects which actions should be
192 // enabled. 192 // enabled.
193 promises.push(cr.sendWithPromise('getProspectiveUILanguage').then( 193 promises.push(this.browserProxy_.getProspectiveUILanguage().then(
194 function(prospectiveUILanguage) { 194 function(prospectiveUILanguage) {
195 this.originalProspectiveUILanguage_ = 195 this.originalProspectiveUILanguage_ =
196 prospectiveUILanguage || window.navigator.language; 196 prospectiveUILanguage || window.navigator.language;
197 }.bind(this))); 197 }.bind(this)));
198 } 198 }
199 199
200 Promise.all(promises).then(function(results) { 200 Promise.all(promises).then(function(results) {
201 if (!this.isConnected) { 201 if (!this.isConnected) {
202 // Return early if this element was detached from the DOM before this 202 // Return early if this element was detached from the DOM before this
203 // async callback executes (can happen during testing). 203 // async callback executes (can happen during testing).
204 return; 204 return;
205 } 205 }
206 206
207 // TODO(dpapad): Cleanup this code. It uses results[3] and results[4] 207 // TODO(dpapad): Cleanup this code. It uses results[3] and results[4]
208 // which only exist for ChromeOS. 208 // which only exist for ChromeOS.
209 this.createModel_(results[1], results[2], results[3], results[4]); 209 this.createModel_(results[1], results[2], results[3], results[4]);
210 this.resolver_.resolve(); 210 this.resolver_.resolve();
211 }.bind(this)); 211 }.bind(this));
212 212
213 if (cr.isChromeOS) { 213 if (cr.isChromeOS) {
214 this.boundOnInputMethodChanged_ = this.onInputMethodChanged_.bind(this); 214 this.boundOnInputMethodChanged_ = this.onInputMethodChanged_.bind(this);
215 this.inputMethodPrivate.onChanged.addListener( 215 this.inputMethodPrivate_.onChanged.addListener(
216 assert(this.boundOnInputMethodChanged_)); 216 assert(this.boundOnInputMethodChanged_));
217 } 217 }
218 }, 218 },
219 219
220 /** @override */ 220 /** @override */
221 detached: function() { 221 detached: function() {
222 if (cr.isChromeOS) { 222 if (cr.isChromeOS) {
223 this.inputMethodPrivate.onChanged.removeListener( 223 this.inputMethodPrivate_.onChanged.removeListener(
224 assert(this.boundOnInputMethodChanged_)); 224 assert(this.boundOnInputMethodChanged_));
225 this.boundOnInputMethodChanged_ = null; 225 this.boundOnInputMethodChanged_ = null;
226 } 226 }
227 }, 227 },
228 228
229 /** 229 /**
230 * Updates the prospective UI language based on the new pref value. 230 * Updates the prospective UI language based on the new pref value.
231 * @param {string} prospectiveUILanguage 231 * @param {string} prospectiveUILanguage
232 * @private 232 * @private
233 */ 233 */
(...skipping 251 matching lines...) Expand 10 before | Expand all | Expand 10 after
485 return this.resolver_.promise; 485 return this.resolver_.promise;
486 }, 486 },
487 487
488 // <if expr="chromeos or is_win"> 488 // <if expr="chromeos or is_win">
489 /** 489 /**
490 * Sets the prospective UI language to the chosen language. This won't affect 490 * Sets the prospective UI language to the chosen language. This won't affect
491 * the actual UI language until a restart. 491 * the actual UI language until a restart.
492 * @param {string} languageCode 492 * @param {string} languageCode
493 */ 493 */
494 setProspectiveUILanguage: function(languageCode) { 494 setProspectiveUILanguage: function(languageCode) {
495 chrome.send('setProspectiveUILanguage', [languageCode]); 495 this.browserProxy_.setProspectiveUILanguage(languageCode);
496 }, 496 },
497 497
498 /** 498 /**
499 * True if the prospective UI language was changed from its starting value. 499 * True if the prospective UI language was changed from its starting value.
500 * @return {boolean} 500 * @return {boolean}
501 */ 501 */
502 requiresRestart: function() { 502 requiresRestart: function() {
503 return this.originalProspectiveUILanguage_ != 503 return this.originalProspectiveUILanguage_ !=
504 this.languages.prospectiveUILanguage; 504 this.languages.prospectiveUILanguage;
505 }, 505 },
506 // </if> 506 // </if>
507 507
508 /** 508 /**
509 * @param {string} languageCode 509 * @param {string} languageCode
510 * @return {boolean} True if the language is enabled. 510 * @return {boolean} True if the language is enabled.
511 */ 511 */
512 isLanguageEnabled: function(languageCode) { 512 isLanguageEnabled: function(languageCode) {
513 return this.enabledLanguageSet_.has(languageCode); 513 return this.enabledLanguageSet_.has(languageCode);
514 }, 514 },
515 515
516 /** 516 /**
517 * Enables the language, making it available for spell check and input. 517 * Enables the language, making it available for spell check and input.
518 * @param {string} languageCode 518 * @param {string} languageCode
519 */ 519 */
520 enableLanguage: function(languageCode) { 520 enableLanguage: function(languageCode) {
521 if (!CrSettingsPrefs.isInitialized) 521 if (!CrSettingsPrefs.isInitialized)
522 return; 522 return;
523 523
524 this.languageSettingsPrivate.enableLanguage(languageCode); 524 this.languageSettingsPrivate_.enableLanguage(languageCode);
525 this.disableTranslateLanguage(languageCode); 525 this.disableTranslateLanguage(languageCode);
526 }, 526 },
527 527
528 /** 528 /**
529 * Disables the language. 529 * Disables the language.
530 * @param {string} languageCode 530 * @param {string} languageCode
531 */ 531 */
532 disableLanguage: function(languageCode) { 532 disableLanguage: function(languageCode) {
533 if (!CrSettingsPrefs.isInitialized) 533 if (!CrSettingsPrefs.isInitialized)
534 return; 534 return;
(...skipping 12 matching lines...) Expand all
547 function(otherLanguageCode) { 547 function(otherLanguageCode) {
548 return otherLanguageCode != languageCode && 548 return otherLanguageCode != languageCode &&
549 this.isLanguageEnabled(otherLanguageCode); 549 this.isLanguageEnabled(otherLanguageCode);
550 }.bind(this)); 550 }.bind(this));
551 if (!supportsOtherEnabledLanguages) 551 if (!supportsOtherEnabledLanguages)
552 this.removeInputMethod(inputMethod.id); 552 this.removeInputMethod(inputMethod.id);
553 } 553 }
554 } 554 }
555 555
556 // Remove the language from preferred languages. 556 // Remove the language from preferred languages.
557 this.languageSettingsPrivate.disableLanguage(languageCode); 557 this.languageSettingsPrivate_.disableLanguage(languageCode);
558 this.enableTranslateLanguage(languageCode); 558 this.enableTranslateLanguage(languageCode);
559 }, 559 },
560 560
561 /** 561 /**
562 * @param {string} languageCode Language code for an enabled language. 562 * @param {string} languageCode Language code for an enabled language.
563 * @return {boolean} 563 * @return {boolean}
564 */ 564 */
565 canDisableLanguage: function(languageCode) { 565 canDisableLanguage: function(languageCode) {
566 // Cannot disable the prospective UI language. 566 // Cannot disable the prospective UI language.
567 if (languageCode == this.languages.prospectiveUILanguage) 567 if (languageCode == this.languages.prospectiveUILanguage)
(...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after
727 */ 727 */
728 getLanguage: function(languageCode) { 728 getLanguage: function(languageCode) {
729 return this.supportedLanguageMap_.get(languageCode); 729 return this.supportedLanguageMap_.get(languageCode);
730 }, 730 },
731 731
732 // <if expr="chromeos"> 732 // <if expr="chromeos">
733 /** @param {string} id */ 733 /** @param {string} id */
734 addInputMethod: function(id) { 734 addInputMethod: function(id) {
735 if (!this.supportedInputMethodMap_.has(id)) 735 if (!this.supportedInputMethodMap_.has(id))
736 return; 736 return;
737 this.languageSettingsPrivate.addInputMethod(id); 737 this.languageSettingsPrivate_.addInputMethod(id);
738 }, 738 },
739 739
740 /** @param {string} id */ 740 /** @param {string} id */
741 removeInputMethod: function(id) { 741 removeInputMethod: function(id) {
742 if (!this.supportedInputMethodMap_.has(id)) 742 if (!this.supportedInputMethodMap_.has(id))
743 return; 743 return;
744 this.languageSettingsPrivate.removeInputMethod(id); 744 this.languageSettingsPrivate_.removeInputMethod(id);
745 }, 745 },
746 746
747 /** @param {string} id */ 747 /** @param {string} id */
748 setCurrentInputMethod: function(id) { 748 setCurrentInputMethod: function(id) {
749 this.inputMethodPrivate.setCurrentInputMethod(id); 749 this.inputMethodPrivate_.setCurrentInputMethod(id);
750 }, 750 },
751 751
752 /** 752 /**
753 * @param {string} languageCode 753 * @param {string} languageCode
754 * @return {!Array<!chrome.languageSettingsPrivate.InputMethod>} 754 * @return {!Array<!chrome.languageSettingsPrivate.InputMethod>}
755 */ 755 */
756 getInputMethodsForLanguage: function(languageCode) { 756 getInputMethodsForLanguage: function(languageCode) {
757 return this.languageInputMethods_.get(languageCode) || []; 757 return this.languageInputMethods_.get(languageCode) || [];
758 }, 758 },
759 759
760 /** 760 /**
761 * @param {!chrome.languageSettingsPrivate.InputMethod} inputMethod 761 * @param {!chrome.languageSettingsPrivate.InputMethod} inputMethod
762 * @return {boolean} 762 * @return {boolean}
763 */ 763 */
764 isComponentIme: function(inputMethod) { 764 isComponentIme: function(inputMethod) {
765 return inputMethod.id.startsWith('_comp_'); 765 return inputMethod.id.startsWith('_comp_');
766 }, 766 },
767 767
768 /** @param {string} id Input method ID. */ 768 /** @param {string} id Input method ID. */
769 openInputMethodOptions: function(id) { 769 openInputMethodOptions: function(id) {
770 this.inputMethodPrivate.openOptionsPage(id); 770 this.inputMethodPrivate_.openOptionsPage(id);
771 }, 771 },
772 772
773 /** @param {string} id New current input method ID. */ 773 /** @param {string} id New current input method ID. */
774 onInputMethodChanged_: function(id) { 774 onInputMethodChanged_: function(id) {
775 this.set('languages.inputMethods.currentId', id); 775 this.set('languages.inputMethods.currentId', id);
776 }, 776 },
777 777
778 /** @param {string} id Added input method ID. */ 778 /** @param {string} id Added input method ID. */
779 onInputMethodAdded_: function(id) { 779 onInputMethodAdded_: function(id) {
780 this.updateEnabledInputMethods_(); 780 this.updateEnabledInputMethods_();
781 }, 781 },
782 782
783 /** @param {string} id Removed input method ID. */ 783 /** @param {string} id Removed input method ID. */
784 onInputMethodRemoved_: function(id) { 784 onInputMethodRemoved_: function(id) {
785 this.updateEnabledInputMethods_(); 785 this.updateEnabledInputMethods_();
786 }, 786 },
787 // </if> 787 // </if>
788 }); 788 });
789 })(); 789 })();
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698