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

Unified Diff: third_party/google_input_tools/third_party/closure_library/closure/goog/uri/utils.js

Issue 1257313003: Update Google Input Tools (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Free up grd resources. Created 5 years, 5 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: third_party/google_input_tools/third_party/closure_library/closure/goog/uri/utils.js
diff --git a/third_party/google_input_tools/third_party/closure_library/closure/goog/uri/utils.js b/third_party/google_input_tools/third_party/closure_library/closure/goog/uri/utils.js
index 425661e26b6672883d866f6770a91da83264a64e..100129a8232cd0ef71f0dae04fb0348b7f6480e1 100644
--- a/third_party/google_input_tools/third_party/closure_library/closure/goog/uri/utils.js
+++ b/third_party/google_input_tools/third_party/closure_library/closure/goog/uri/utils.js
@@ -35,14 +35,13 @@
*
* One advantage of the limited functionality here is that this approach is
* less sensitive to differences in URI encodings than goog.Uri, since these
- * functions modify the strings in place, rather than decoding and
- * re-encoding.
+ * functions operate on strings directly, rather than decoding them and
+ * then re-encoding.
*
* Uses features of RFC 3986 for parsing/formatting URIs:
* http://www.ietf.org/rfc/rfc3986.txt
*
* @author gboyer@google.com (Garrett Boyer) - The "lightened" design.
- * @author msamuel@google.com (Mike Samuel) - Domain knowledge and regexes.
*/
goog.provide('goog.uri.utils');
@@ -229,7 +228,7 @@ goog.uri.utils.ComponentIndex = {
* </pre>
*
* @param {string} uri The URI string to examine.
- * @return {!Array.<string|undefined>} Each component still URI-encoded.
+ * @return {!Array<string|undefined>} Each component still URI-encoded.
* Each component that is present will contain the encoded value, whereas
* components that are not present will be undefined or empty, depending
* on the browser's regular expression implementation. Never null, since
@@ -239,7 +238,7 @@ goog.uri.utils.split = function(uri) {
goog.uri.utils.phishingProtection_();
// See @return comment -- never null.
- return /** @type {!Array.<string|undefined>} */ (
+ return /** @type {!Array<string|undefined>} */ (
uri.match(goog.uri.utils.splitRe_));
};
@@ -298,11 +297,17 @@ goog.uri.utils.phishingProtection_ = function() {
/**
* @param {?string} uri A possibly null string.
+ * @param {boolean=} opt_preserveReserved If true, percent-encoding of RFC-3986
+ * reserved characters will not be removed.
* @return {?string} The string URI-decoded, or null if uri is null.
* @private
*/
-goog.uri.utils.decodeIfPossible_ = function(uri) {
- return uri && decodeURIComponent(uri);
+goog.uri.utils.decodeIfPossible_ = function(uri, opt_preserveReserved) {
+ if (!uri) {
+ return uri;
+ }
+
+ return opt_preserveReserved ? decodeURI(uri) : decodeURIComponent(uri);
};
@@ -343,8 +348,8 @@ goog.uri.utils.getScheme = function(uri) {
*/
goog.uri.utils.getEffectiveScheme = function(uri) {
var scheme = goog.uri.utils.getScheme(uri);
- if (!scheme && self.location) {
- var protocol = self.location.protocol;
+ if (!scheme && goog.global.self && goog.global.self.location) {
+ var protocol = goog.global.self.location.protocol;
scheme = protocol.substr(0, protocol.length - 1);
}
// NOTE: When called from a web worker in Firefox 3.5, location maybe null.
@@ -388,7 +393,8 @@ goog.uri.utils.getDomainEncoded = function(uri) {
* @return {?string} The decoded domain, or null if none.
*/
goog.uri.utils.getDomain = function(uri) {
- return goog.uri.utils.decodeIfPossible_(goog.uri.utils.getDomainEncoded(uri));
+ return goog.uri.utils.decodeIfPossible_(
+ goog.uri.utils.getDomainEncoded(uri), true /* opt_preserveReserved */);
};
@@ -423,7 +429,8 @@ goog.uri.utils.getPathEncoded = function(uri) {
* slash, if any.
*/
goog.uri.utils.getPath = function(uri) {
- return goog.uri.utils.decodeIfPossible_(goog.uri.utils.getPathEncoded(uri));
+ return goog.uri.utils.decodeIfPossible_(
+ goog.uri.utils.getPathEncoded(uri), true /* opt_preserveReserved */);
};
@@ -522,7 +529,7 @@ goog.uri.utils.removeFragment = function(uri) {
*
* @param {string} uri1 The first URI.
* @param {string} uri2 The second URI.
- * @return {boolean} Whether they have the same domain and port.
+ * @return {boolean} Whether they have the same scheme, domain and port.
*/
goog.uri.utils.haveSameDomain = function(uri1, uri2) {
var pieces1 = goog.uri.utils.split(uri1);
@@ -584,17 +591,53 @@ goog.uri.utils.QueryValue;
* ];
* </pre>
*
- * @typedef {!Array.<string|goog.uri.utils.QueryValue>}
+ * @typedef {!Array<string|goog.uri.utils.QueryValue>}
*/
goog.uri.utils.QueryArray;
/**
+ * Parses encoded query parameters and calls callback function for every
+ * parameter found in the string.
+ *
+ * Missing value of parameter (e.g. “…&key&…”) is treated as if the value was an
+ * empty string. Keys may be empty strings (e.g. “…&=value&…”) which also means
+ * that “…&=&…” and “…&&…” will result in an empty key and value.
+ *
+ * @param {string} encodedQuery Encoded query string excluding question mark at
+ * the beginning.
+ * @param {function(string, string)} callback Function called for every
+ * parameter found in query string. The first argument (name) will not be
+ * urldecoded (so the function is consistent with buildQueryData), but the
+ * second will. If the parameter has no value (i.e. “=” was not present)
+ * the second argument (value) will be an empty string.
+ */
+goog.uri.utils.parseQueryData = function(encodedQuery, callback) {
+ if (!encodedQuery) {
+ return;
+ }
+ var pairs = encodedQuery.split('&');
+ for (var i = 0; i < pairs.length; i++) {
+ var indexOfEquals = pairs[i].indexOf('=');
+ var name = null;
+ var value = null;
+ if (indexOfEquals >= 0) {
+ name = pairs[i].substring(0, indexOfEquals);
+ value = pairs[i].substring(indexOfEquals + 1);
+ } else {
+ name = pairs[i];
+ }
+ callback(name, value ? goog.string.urlDecode(value) : '');
+ }
+};
+
+
+/**
* Appends a URI and query data in a string buffer with special preconditions.
*
* Internal implementation utility, performing very few object allocations.
*
- * @param {!Array.<string|undefined>} buffer A string buffer. The first element
+ * @param {!Array<string|undefined>} buffer A string buffer. The first element
* must be the base URI, and may have a fragment identifier. If the array
* contains more than one element, the second element must be an ampersand,
* and may be overwritten, depending on the base URI. Undefined elements
@@ -633,7 +676,7 @@ goog.uri.utils.appendQueryData_ = function(buffer) {
* Appends key=value pairs to an array, supporting multi-valued objects.
* @param {string} key The key prefix.
* @param {goog.uri.utils.QueryValue} value The value to serialize.
- * @param {!Array.<string>} pairs The array to which the 'key=value' strings
+ * @param {!Array<string>} pairs The array to which the 'key=value' strings
* should be appended.
* @private
*/
@@ -663,12 +706,12 @@ goog.uri.utils.appendKeyValuePairs_ = function(key, value, pairs) {
/**
* Builds a buffer of query data from a sequence of alternating keys and values.
*
- * @param {!Array.<string|undefined>} buffer A string buffer to append to. The
+ * @param {!Array<string|undefined>} buffer A string buffer to append to. The
* first element appended will be an '&', and may be replaced by the caller.
- * @param {goog.uri.utils.QueryArray|Arguments} keysAndValues An array with
+ * @param {!goog.uri.utils.QueryArray|!Arguments} keysAndValues An array with
* alternating keys and values -- see the typedef.
* @param {number=} opt_startIndex A start offset into the arary, defaults to 0.
- * @return {!Array.<string|undefined>} The buffer argument.
+ * @return {!Array<string|undefined>} The buffer argument.
* @private
*/
goog.uri.utils.buildQueryDataBuffer_ = function(
@@ -705,12 +748,12 @@ goog.uri.utils.buildQueryData = function(keysAndValues, opt_startIndex) {
/**
* Builds a buffer of query data from a map.
*
- * @param {!Array.<string|undefined>} buffer A string buffer to append to. The
+ * @param {!Array<string|undefined>} buffer A string buffer to append to. The
* first element appended will be an '&', and may be replaced by the caller.
- * @param {Object.<goog.uri.utils.QueryValue>} map An object where keys are
- * URI-encoded parameter keys, and the values conform to the contract
+ * @param {!Object<string, goog.uri.utils.QueryValue>} map An object where keys
+ * are URI-encoded parameter keys, and the values conform to the contract
* specified in the goog.uri.utils.QueryValue typedef.
- * @return {!Array.<string|undefined>} The buffer argument.
+ * @return {!Array<string|undefined>} The buffer argument.
* @private
*/
goog.uri.utils.buildQueryDataBufferFromMap_ = function(buffer, map) {
@@ -726,9 +769,9 @@ goog.uri.utils.buildQueryDataBufferFromMap_ = function(buffer, map) {
* Builds a query data string from a map.
* Currently generates "&key&" for empty args.
*
- * @param {Object} map An object where keys are URI-encoded parameter keys,
- * and the values are arbitrary types or arrays. Keys with a null value
- * are dropped.
+ * @param {!Object<string, goog.uri.utils.QueryValue>} map An object where keys
+ * are URI-encoded parameter keys, and the values are arbitrary types
+ * or arrays. Keys with a null value are dropped.
* @return {string} The encoded query string, in the form 'a=1&b=2'.
*/
goog.uri.utils.buildQueryDataFromMap = function(map) {
@@ -777,9 +820,9 @@ goog.uri.utils.appendParams = function(uri, var_args) {
* Appends query parameters from a map.
*
* @param {string} uri The original URI, which may already have query data.
- * @param {Object} map An object where keys are URI-encoded parameter keys,
- * and the values are arbitrary types or arrays. Keys with a null value
- * are dropped.
+ * @param {!Object<goog.uri.utils.QueryValue>} map An object where keys are
+ * URI-encoded parameter keys, and the values are arbitrary types or arrays.
+ * Keys with a null value are dropped.
* @return {string} The new parameters.
*/
goog.uri.utils.appendParamsFromMap = function(uri, map) {
@@ -912,9 +955,9 @@ goog.uri.utils.getParamValue = function(uri, keyEncoded) {
/**
* Gets all values of a query parameter.
- * @param {string} uri The URI to process. May contain a framgnet.
- * @param {string} keyEncoded The URI-encoded key. Case-snsitive.
- * @return {!Array.<string>} All URI-decoded values with the given key.
+ * @param {string} uri The URI to process. May contain a fragment.
+ * @param {string} keyEncoded The URI-encoded key. Case-sensitive.
+ * @return {!Array<string>} All URI-decoded values with the given key.
* If the key is not found, this will have length 0, but never be null.
*/
goog.uri.utils.getParamValues = function(uri, keyEncoded) {

Powered by Google App Engine
This is Rietveld 408576698