Add an extensions keep-alive client.

This adds the renderer side of adding keep-alives while API calls
implemented on mojo services are in progress.

BUG=389016

Review URL: https://codereview.chromium.org/669303002

Cr-Commit-Position: refs/heads/master@{#301528}
diff --git a/extensions/renderer/resources/keep_alive.js b/extensions/renderer/resources/keep_alive.js
new file mode 100644
index 0000000..281e8517
--- /dev/null
+++ b/extensions/renderer/resources/keep_alive.js
@@ -0,0 +1,41 @@
+// Copyright 2014 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.
+
+define('keep_alive', [
+    'content/public/renderer/service_provider',
+    'extensions/common/mojo/keep_alive.mojom',
+    'mojo/public/js/bindings/core',
+], function(serviceProvider, mojom, core) {
+
+  /**
+   * An object that keeps the background page alive until closed.
+   * @constructor
+   * @alias module:keep_alive~KeepAlive
+   */
+  function KeepAlive() {
+    /**
+     * The handle to the keep-alive object in the browser.
+     * @type {!MojoHandle}
+     * @private
+     */
+    this.handle_ = serviceProvider.connectToService(mojom.KeepAlive.name);
+  }
+
+  /**
+   * Removes this keep-alive.
+   */
+  KeepAlive.prototype.close = function() {
+    core.close(this.handle_);
+  };
+
+  var exports = {};
+
+  return {
+    /**
+     * Creates a keep-alive.
+     * @return {!module:keep_alive~KeepAlive} A new keep-alive.
+     */
+    createKeepAlive: function() { return new KeepAlive(); }
+  };
+});