| Index: native_client_sdk/src/examples/common.js
|
| diff --git a/native_client_sdk/src/examples/common.js b/native_client_sdk/src/examples/common.js
|
| index 1562924d03e435e064e83c983ec40b63b1a09d82..0d355bffb74781e12f6eadf76700aad85e71888a 100644
|
| --- a/native_client_sdk/src/examples/common.js
|
| +++ b/native_client_sdk/src/examples/common.js
|
| @@ -14,6 +14,52 @@ var isTest = false;
|
| // code.
|
| var common = (function() {
|
|
|
| + function isHostToolchain(tool) {
|
| + return tool == 'win' || tool == 'linux' || tool == 'mac';
|
| + }
|
| +
|
| + /**
|
| + * Return the mime type for NaCl plugin.
|
| + *
|
| + * @param {string} tool The name of the toolchain, e.g. "glibc", "newlib" etc.
|
| + * @param {bool} isRelease True if this is a release build.
|
| + * @return {string} The mime-type for the kind of NaCl plugin matching
|
| + * the given toolchain.
|
| + */
|
| + function mimeTypeForTool(tool, isRelease) {
|
| + // For NaCl modules use application/x-nacl.
|
| + var mimetype = 'application/x-nacl';
|
| + if (isHostToolchain(tool)) {
|
| + // For non-NaCl PPAPI plugins use the x-ppapi-debug/release
|
| + // mime type.
|
| + if (isRelease)
|
| + mimetype = 'application/x-ppapi-release';
|
| + else
|
| + mimetype = 'application/x-ppapi-debug';
|
| + } else if (tool == 'pnacl') {
|
| + mimetype = 'application/x-pnacl';
|
| + }
|
| + return mimetype;
|
| + }
|
| +
|
| + /**
|
| + * Check if the browser supports NaCl plugins.
|
| + *
|
| + * @param {string} tool The name of the toolchain, e.g. "glibc", "newlib" etc.
|
| + * @return {bool} True if the browser supports the type of NaCl plugin
|
| + * produced by the given toolchain.
|
| + */
|
| + function browserSupportsNaCl(tool) {
|
| + // Assume host toolchains always work with the given browser.
|
| + // The below mime-type checking might not work with
|
| + // --register-pepper-plugins.
|
| + if (isHostToolchain(tool)) {
|
| + return true;
|
| + }
|
| + var mimetype = mimeTypeForTool(tool);
|
| + return navigator.mimeTypes[mimetype] !== undefined;
|
| + }
|
| +
|
| /**
|
| * Create the Native Client <embed> element as a child of the DOM element
|
| * named "listener".
|
| @@ -41,19 +87,7 @@ var common = (function() {
|
| }
|
| }
|
|
|
| - // For NaCL modules use application/x-nacl.
|
| - var mimetype = 'application/x-nacl';
|
| - var isHost = tool == 'win' || tool == 'linux' || tool == 'mac';
|
| - if (isHost) {
|
| - // For non-nacl PPAPI plugins use the x-ppapi-debug/release
|
| - // mime type.
|
| - if (path.toLowerCase().indexOf('release') != -1)
|
| - mimetype = 'application/x-ppapi-release';
|
| - else
|
| - mimetype = 'application/x-ppapi-debug';
|
| - } else if (tool == 'pnacl') {
|
| - mimetype = 'application/x-pnacl';
|
| - }
|
| + var mimetype = mimeTypeForTool(tool);
|
| moduleEl.setAttribute('type', mimetype);
|
|
|
| // The <EMBED> element is wrapped inside a <DIV>, which has both a 'load'
|
| @@ -65,6 +99,7 @@ var common = (function() {
|
| listenerDiv.appendChild(moduleEl);
|
|
|
| // Host plugins don't send a moduleDidLoad message. We'll fake it here.
|
| + var isHost = isHostToolchain(tool);
|
| if (isHost) {
|
| window.setTimeout(function() {
|
| var evt = document.createEvent('Event');
|
| @@ -258,7 +293,11 @@ var common = (function() {
|
| // status message indicating that the module is still loading. Otherwise,
|
| // do not change the status message.
|
| updateStatus('Page loaded.');
|
| - if (common.naclModule == null) {
|
| + var isRelease = path.toLowerCase().indexOf('release') != -1;
|
| + if (!browserSupportsNaCl(tool, isRelease)) {
|
| + updateStatus(
|
| + 'Browser does not support NaCl (' + tool + '), or NaCl is disabled');
|
| + } else if (common.naclModule == null) {
|
| updateStatus('Creating embed: ' + tool);
|
|
|
| // We use a non-zero sized embed to give Chrome space to place the bad
|
|
|