// Copyright (c) 2011 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 Implements a shim so that the CFInstall scripts can be compiled
* with or without Closure. In particular, chromeframe.js is used by the stub,
* the implementation, and the download site, so we need to provide an
* implementation of goog.provide.
**/
var goog = {};
goog.global = this;
/**
* From closure/base.js:goog.exportPath_ .
* @param {string} name
* @param {Object=} opt_object
*/
goog.provide = function(name, opt_object) {
var parts = name.split('.');
var cur = goog.global;
// Internet Explorer exhibits strange behavior when throwing errors from
// methods externed in this manner. See the testExportSymbolExceptions in
// base_test.html for an example.
if (!(parts[0] in cur) && cur.execScript)
cur.execScript('var ' + parts[0]);
// Certain browsers cannot parse code in the form for((a in b); c;);
// This pattern is produced by the JSCompiler when it collapses the
// statement above into the conditional loop below. To prevent this from
// happening, use a for-loop and reserve the init logic as below.
// Parentheses added to eliminate strict JS warning in Firefox.
for (var part; parts.length && (part = parts.shift());) {
if (!parts.length && opt_object !== undefined) {
// last part and we have an object; use it
cur[part] = opt_object;
} else if (cur[part]) {
cur = cur[part];
} else {
cur = cur[part] = {};
}
}
};
// The following line causes the closureBuilder script to recognize this as
// base.js .
goog.provide('goog');
/**
* From closure/base.js:goog.exportPath_ .
* @param {string} name
* @param {Object=} opt_object
*/
goog.exportSymbol = goog.provide;
/**
* NO-OP
* @param {string} name
*/
goog.require = function(name) {};
/**
* A simple form that supports only bound 'this', not arguments.
* @param {Function} fn A function to partially apply.
* @param {Object|undefined} selfObj Specifies the object which |this| should
* point to when the function is run.
* @return {!Function} A partially-applied form of the function bind() was
* invoked as a method of.
*/
goog.bind = function(fn, selfObj) {
return function() {
return fn.apply(selfObj, arguments);
};
};