| Index: chrome/browser/resources/login/screen.js
|
| diff --git a/chrome/browser/resources/login/screen.js b/chrome/browser/resources/login/screen.js
|
| deleted file mode 100644
|
| index 2dcaebbfcd83edb26e0234f41ae035d131e6d242..0000000000000000000000000000000000000000
|
| --- a/chrome/browser/resources/login/screen.js
|
| +++ /dev/null
|
| @@ -1,335 +0,0 @@
|
| -// Copyright 2014 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -/**
|
| - * @fileoverview Base class for all login WebUI screens.
|
| - */
|
| -cr.define('login', function() {
|
| - /** @const */ var CALLBACK_USER_ACTED = 'userActed';
|
| - /** @const */ var CALLBACK_CONTEXT_CHANGED = 'contextChanged';
|
| -
|
| - function doNothing() {};
|
| -
|
| - var querySelectorAll = HTMLDivElement.prototype.querySelectorAll;
|
| -
|
| - var Screen = function(sendPrefix) {
|
| - this.sendPrefix_ = sendPrefix;
|
| - this.screenContext_ = null;
|
| - this.contextObservers_ = {};
|
| - };
|
| -
|
| - Screen.prototype = {
|
| - __proto__: HTMLDivElement.prototype,
|
| -
|
| - /**
|
| - * Prefix added to sent to Chrome messages' names.
|
| - */
|
| - sendPrefix_: null,
|
| -
|
| - /**
|
| - * Context used by this screen.
|
| - */
|
| - screenContext_: null,
|
| -
|
| - get context() {
|
| - return this.screenContext_;
|
| - },
|
| -
|
| - /**
|
| - * Dictionary of context observers that are methods of |this| bound to
|
| - * |this|.
|
| - */
|
| - contextObservers_: null,
|
| -
|
| - /**
|
| - * Called during screen registration.
|
| - */
|
| - decorate: doNothing,
|
| -
|
| - /**
|
| - * Returns minimal size that screen prefers to have. Default implementation
|
| - * returns current screen size.
|
| - * @return {{width: number, height: number}}
|
| - */
|
| - getPreferredSize: function() {
|
| - return {width: this.offsetWidth, height: this.offsetHeight};
|
| - },
|
| -
|
| - /**
|
| - * Called for currently active screen when screen size changed.
|
| - */
|
| - onWindowResize: doNothing,
|
| -
|
| - /**
|
| - * @final
|
| - */
|
| - initialize: function() {
|
| - return this.initializeImpl_.apply(this, arguments);
|
| - },
|
| -
|
| - /**
|
| - * @final
|
| - */
|
| - send: function() {
|
| - return this.sendImpl_.apply(this, arguments);
|
| - },
|
| -
|
| - /**
|
| - * @final
|
| - */
|
| - addContextObserver: function() {
|
| - return this.addContextObserverImpl_.apply(this, arguments);
|
| - },
|
| -
|
| - /**
|
| - * @final
|
| - */
|
| - removeContextObserver: function() {
|
| - return this.removeContextObserverImpl_.apply(this, arguments);
|
| - },
|
| -
|
| - /**
|
| - * @final
|
| - */
|
| - commitContextChanges: function() {
|
| - return this.commitContextChangesImpl_.apply(this, arguments);
|
| - },
|
| -
|
| - /**
|
| - * @override
|
| - * @final
|
| - */
|
| - querySelectorAll: function() {
|
| - return this.querySelectorAllImpl_.apply(this, arguments);
|
| - },
|
| -
|
| - /**
|
| - * Does the following things:
|
| - * * Creates screen context.
|
| - * * Looks for elements having "alias" property and adds them as the
|
| - * proprties of the screen with name equal to value of "alias", i.e. HTML
|
| - * element <div alias="myDiv"></div> will be stored in this.myDiv.
|
| - * * Looks for buttons having "action" properties and adds click handlers
|
| - * to them. These handlers send |CALLBACK_USER_ACTED| messages to
|
| - * C++ with "action" property's value as payload.
|
| - * @private
|
| - */
|
| - initializeImpl_: function() {
|
| - this.screenContext_ = new login.ScreenContext();
|
| - this.querySelectorAllImpl_('[alias]').forEach(function(element) {
|
| - var alias = element.getAttribute('alias');
|
| - if (alias in this)
|
| - throw Error('Alias "' + alias + '" of "' + this.name() + '" screen ' +
|
| - 'shadows or redefines property that is already defined.');
|
| - this[alias] = element;
|
| - this[element.getAttribute('alias')] = element;
|
| - }, this);
|
| - var self = this;
|
| - this.querySelectorAllImpl_('button[action]').forEach(function(button) {
|
| - button.addEventListener('click', function(e) {
|
| - var action = this.getAttribute('action');
|
| - self.send(CALLBACK_USER_ACTED, action);
|
| - e.stopPropagation();
|
| - });
|
| - });
|
| - },
|
| -
|
| - /**
|
| - * Sends message to Chrome, adding needed prefix to message name. All
|
| - * arguments after |messageName| are packed into message parameters list.
|
| - *
|
| - * @param {string} messageName Name of message without a prefix.
|
| - * @param {...*} varArgs parameters for message.
|
| - * @private
|
| - */
|
| - sendImpl_: function(messageName, varArgs) {
|
| - if (arguments.length == 0)
|
| - throw Error('Message name is not provided.');
|
| - var fullMessageName = this.sendPrefix_ + messageName;
|
| - var payload = Array.prototype.slice.call(arguments, 1);
|
| - chrome.send(fullMessageName, payload);
|
| - },
|
| -
|
| - /**
|
| - * Starts observation of property with |key| of the context attached to
|
| - * current screen. This method differs from "login.ScreenContext" in that
|
| - * it automatically detects if observer is method of |this| and make
|
| - * all needed actions to make it work correctly. So it's no need for client
|
| - * to bind methods to |this| and keep resulting callback for
|
| - * |removeObserver| call:
|
| - *
|
| - * this.addContextObserver('key', this.onKeyChanged_);
|
| - * ...
|
| - * this.removeContextObserver('key', this.onKeyChanged_);
|
| - * @private
|
| - */
|
| - addContextObserverImpl_: function(key, observer) {
|
| - var realObserver = observer;
|
| - var propertyName = this.getPropertyNameOf_(observer);
|
| - if (propertyName) {
|
| - if (!this.contextObservers_.hasOwnProperty(propertyName))
|
| - this.contextObservers_[propertyName] = observer.bind(this);
|
| - realObserver = this.contextObservers_[propertyName];
|
| - }
|
| - this.screenContext_.addObserver(key, realObserver);
|
| - },
|
| -
|
| - /**
|
| - * Removes |observer| from the list of context observers. Supports not only
|
| - * regular functions but also screen methods (see comment to
|
| - * |addContextObserver|).
|
| - * @private
|
| - */
|
| - removeContextObserverImpl_: function(observer) {
|
| - var realObserver = observer;
|
| - var propertyName = this.getPropertyNameOf_(observer);
|
| - if (propertyName) {
|
| - if (!this.contextObservers_.hasOwnProperty(propertyName))
|
| - return;
|
| - realObserver = this.contextObservers_[propertyName];
|
| - delete this.contextObservers_[propertyName];
|
| - }
|
| - this.screenContext_.removeObserver(realObserver);
|
| - },
|
| -
|
| - /**
|
| - * Sends recent context changes to C++ handler.
|
| - * @private
|
| - */
|
| - commitContextChangesImpl_: function() {
|
| - if (!this.screenContext_.hasChanges())
|
| - return;
|
| - this.sendImpl_(CALLBACK_CONTEXT_CHANGED,
|
| - this.screenContext_.getChangesAndReset());
|
| - },
|
| -
|
| - /**
|
| - * Calls standart |querySelectorAll| method and returns its result converted
|
| - * to Array.
|
| - * @private
|
| - */
|
| - querySelectorAllImpl_: function(selector) {
|
| - var list = querySelectorAll.call(this, selector);
|
| - return Array.prototype.slice.call(list);
|
| - },
|
| -
|
| - /**
|
| - * Called when context changes are recieved from C++.
|
| - * @private
|
| - */
|
| - contextChanged_: function(diff) {
|
| - this.screenContext_.applyChanges(diff);
|
| - },
|
| -
|
| - /**
|
| - * If |value| is the value of some property of |this| returns property's
|
| - * name. Otherwise returns empty string.
|
| - * @private
|
| - */
|
| - getPropertyNameOf_: function(value) {
|
| - for (var key in this)
|
| - if (this[key] === value)
|
| - return key;
|
| - return '';
|
| - }
|
| - };
|
| -
|
| - Screen.CALLBACK_USER_ACTED = CALLBACK_USER_ACTED;
|
| -
|
| - return {
|
| - Screen: Screen
|
| - };
|
| -});
|
| -
|
| -cr.define('login', function() {
|
| - return {
|
| - /**
|
| - * Creates class and object for screen.
|
| - * Methods specified in EXTERNAL_API array of prototype
|
| - * will be available from C++ part.
|
| - * Example:
|
| - * login.createScreen('ScreenName', 'screen-id', {
|
| - * foo: function() { console.log('foo'); },
|
| - * bar: function() { console.log('bar'); }
|
| - * EXTERNAL_API: ['foo'];
|
| - * });
|
| - * login.ScreenName.register();
|
| - * var screen = $('screen-id');
|
| - * screen.foo(); // valid
|
| - * login.ScreenName.foo(); // valid
|
| - * screen.bar(); // valid
|
| - * login.ScreenName.bar(); // invalid
|
| - *
|
| - * @param {string} name Name of created class.
|
| - * @param {string} id Id of div representing screen.
|
| - * @param {(function()|Object)} proto Prototype of object or function that
|
| - * returns prototype.
|
| - */
|
| - createScreen: function(name, id, template) {
|
| - if (typeof template == 'function')
|
| - template = template();
|
| -
|
| - var apiNames = template.EXTERNAL_API || [];
|
| - for (var i = 0; i < apiNames.length; ++i) {
|
| - var methodName = apiNames[i];
|
| - if (typeof template[methodName] !== 'function')
|
| - throw Error('External method "' + methodName + '" for screen "' +
|
| - name + '" not a function or undefined.');
|
| - }
|
| -
|
| - function checkPropertyAllowed(propertyName) {
|
| - if (propertyName.charAt(propertyName.length - 1) === '_' &&
|
| - (propertyName in login.Screen.prototype)) {
|
| - throw Error('Property "' + propertyName + '" of "' + id + '" ' +
|
| - 'shadows private property of login.Screen prototype.');
|
| - }
|
| - };
|
| -
|
| - var Constructor = function() {
|
| - login.Screen.call(this, 'login.' + name + '.');
|
| - };
|
| - Constructor.prototype = Object.create(login.Screen.prototype);
|
| - var api = {};
|
| -
|
| - Object.getOwnPropertyNames(template).forEach(function(propertyName) {
|
| - if (propertyName === 'EXTERNAL_API')
|
| - return;
|
| -
|
| - checkPropertyAllowed(propertyName);
|
| -
|
| - var descriptor =
|
| - Object.getOwnPropertyDescriptor(template, propertyName);
|
| - Object.defineProperty(Constructor.prototype, propertyName, descriptor);
|
| -
|
| - if (apiNames.indexOf(propertyName) >= 0) {
|
| - api[propertyName] = function() {
|
| - var screen = $(id);
|
| - return screen[propertyName].apply(screen, arguments);
|
| - };
|
| - }
|
| - });
|
| -
|
| - Constructor.prototype.name = function() { return id; };
|
| -
|
| - api.contextChanged = function() {
|
| - var screen = $(id);
|
| - screen.contextChanged_.apply(screen, arguments);
|
| - }
|
| -
|
| - api.register = function() {
|
| - var screen = $(id);
|
| - screen.__proto__ = new Constructor();
|
| - screen.decorate();
|
| - Oobe.getInstance().registerScreen(screen);
|
| - };
|
| -
|
| - cr.define('login', function() {
|
| - var result = {};
|
| - result[name] = api;
|
| - return result;
|
| - });
|
| - }
|
| - };
|
| -});
|
| -
|
|
|