1c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
2c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
3c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// found in the LICENSE file.
4c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
5c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
6c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)/**
7c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @fileoverview Helpers for validating parameters to chrome-search:// iframes.
8c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) */
9c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
10c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
11c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)/**
12c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * Converts an RGB color number to a hex color string if valid.
13c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @param {number} color A 6-digit hex RGB color code as a number.
14c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @return {?string} A CSS representation of the color or null if invalid.
15c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) */
167dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochfunction convertToHexColor(color) {
17c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // Color must be a number, finite, with no fractional part, in the correct
18c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // range for an RGB hex color.
19c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  if (isFinite(color) && Math.floor(color) == color &&
20c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      color >= 0 && color <= 0xffffff) {
21c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    var hexColor = color.toString(16);
22c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    // Pads with initial zeros and # (e.g. for 'ff' yields '#0000ff').
23c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    return '#000000'.substr(0, 7 - hexColor.length) + hexColor;
24c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
25c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  return null;
26c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
277dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
287dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
297dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch/**
307dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch * Validates a RGBA color component. It must be a number between 0 and 255.
317dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch * @param {number} component An RGBA component.
327dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch * @return {boolean} True if the component is valid.
337dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch */
347dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochfunction isValidRBGAComponent(component) {
357dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  return isFinite(component) && component >= 0 && component <= 255;
367dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch}
377dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
387dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
397dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch/**
407dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch * Converts an Array of color components into RGBA format "rgba(R,G,B,A)".
417dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch * @param {Array.<number>} rgbaColor Array of rgba color components.
427dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch * @return {?string} CSS color in RGBA format or null if invalid.
437dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch */
447dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochfunction convertArrayToRGBAColor(rgbaColor) {
457dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  // Array must contain 4 valid components.
467dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  if (rgbaColor instanceof Array && rgbaColor.length === 4 &&
477dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      isValidRBGAComponent(rgbaColor[0]) &&
487dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      isValidRBGAComponent(rgbaColor[1]) &&
497dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      isValidRBGAComponent(rgbaColor[2]) &&
507dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      isValidRBGAComponent(rgbaColor[3])) {
517dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch    return 'rgba(' +
527dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch            rgbaColor[0] + ',' +
537dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch            rgbaColor[1] + ',' +
547dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch            rgbaColor[2] + ',' +
557dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch            rgbaColor[3] / 255 + ')';
567dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  }
577dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  return null;
587dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch}
59