| Index: mojo/public/js/new_bindings/base.js
|
| diff --git a/mojo/public/js/new_bindings/base.js b/mojo/public/js/new_bindings/base.js
|
| index ef7aa32f73646c47bec8b51694b458ad50d929a7..db72d489db6ec016817ec1557a11812f33836b31 100644
|
| --- a/mojo/public/js/new_bindings/base.js
|
| +++ b/mojo/public/js/new_bindings/base.js
|
| @@ -11,10 +11,53 @@ if (mojo && mojo.internal) {
|
| var mojo = mojo || {};
|
| mojo.internal = {};
|
| mojo.internal.global = this;
|
| +mojo.config = {
|
| + // Whether to automatically load mojom dependencies.
|
| + // For example, if foo.mojom imports bar.mojom, |autoLoadMojomDeps| set to
|
| + // true means that loading foo.mojom.js will insert a <script> tag to load
|
| + // bar.mojom.js, if it hasn't been loaded.
|
| + //
|
| + // The URL of bar.mojom.js is determined by the relative path of bar.mojom
|
| + // (relative to the position of foo.mojom at build time) and the URL of
|
| + // foo.mojom.js. For exmple, if at build time the two mojom files are
|
| + // located at:
|
| + // a/b/c/foo.mojom
|
| + // a/b/d/bar.mojom
|
| + // and the URL of foo.mojom.js is:
|
| + // http://example.org/scripts/b/c/foo.mojom.js
|
| + // then the URL of bar.mojom.js will be:
|
| + // http://example.org/scripts/b/d/bar.mojom.js
|
| + //
|
| + // If you would like bar.mojom.js to live at a different location, you need
|
| + // to turn off |autoLoadMojomDeps| before loading foo.mojom.js, and manually
|
| + // load bar.mojom.js yourself. Similarly, you need to turn off the option if
|
| + // you merge bar.mojom.js and foo.mojom.js into a single file.
|
| + //
|
| + // Performance tip: Avoid loading the same mojom.js file multiple times.
|
| + // Assume that |autoLoadMojomDeps| is set to true:
|
| + // <!-- No duplicate loading; recommended. -->
|
| + // <script src="http://example.org/scripts/b/c/foo.mojom.js"></script>
|
| + //
|
| + // <!-- No duplicate loading, although unnecessary. -->
|
| + // <script src="http://example.org/scripts/b/d/bar.mojom.js"></script>
|
| + // <script src="http://example.org/scripts/b/c/foo.mojom.js"></script>
|
| + //
|
| + // <!-- Load bar.mojom.js twice; should be avoided. -->
|
| + // <script src="http://example.org/scripts/b/c/foo.mojom.js"></script>
|
| + // <script src="http://example.org/scripts/b/d/bar.mojom.js"></script>
|
| + autoLoadMojomDeps: true
|
| +};
|
|
|
| (function() {
|
| var internal = mojo.internal;
|
|
|
| + var LoadState = {
|
| + PENDING_LOAD: 1,
|
| + LOADED: 2
|
| + };
|
| +
|
| + var mojomRegistry = new Map();
|
| +
|
| function exposeNamespace(namespace) {
|
| var current = internal.global;
|
| var parts = namespace.split('.');
|
| @@ -29,5 +72,40 @@ mojo.internal.global = this;
|
| return current;
|
| }
|
|
|
| + function isMojomPendingLoad(id) {
|
| + return mojomRegistry.get(id) === LoadState.PENDING_LOAD;
|
| + }
|
| +
|
| + function isMojomLoaded(id) {
|
| + return mojomRegistry.get(id) === LoadState.LOADED;
|
| + }
|
| +
|
| + function markMojomPendingLoad(id) {
|
| + if (isMojomLoaded(id)) {
|
| + throw new Error('The following mojom file has been loaded: ' + id);
|
| + }
|
| +
|
| + mojomRegistry.set(id, LoadState.PENDING_LOAD);
|
| + }
|
| +
|
| + function markMojomLoaded(id) {
|
| + mojomRegistry.set(id, LoadState.LOADED);
|
| + }
|
| +
|
| + function loadMojomIfNecessary(id, url) {
|
| + if (mojomRegistry.has(id)) {
|
| + return;
|
| + }
|
| +
|
| + markMojomPendingLoad(id);
|
| + internal.global.document.write('<script type="text/javascript" src="' +
|
| + url + '"></script>');
|
| + }
|
| +
|
| internal.exposeNamespace = exposeNamespace;
|
| + internal.isMojomPendingLoad = isMojomPendingLoad;
|
| + internal.isMojomLoaded = isMojomLoaded;
|
| + internal.markMojomPendingLoad = markMojomPendingLoad;
|
| + internal.markMojomLoaded = markMojomLoaded;
|
| + internal.loadMojomIfNecessary = loadMojomIfNecessary;
|
| })();
|
|
|