// 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("mojo/public/js/bindings/connection", [
  "mojo/public/js/bindings/connector",
  "mojo/public/js/bindings/router",
], function(connector, router) {

  function Connection(
      handle, localFactory, remoteFactory, routerFactory, connectorFactory) {
    if (routerFactory === undefined)
      routerFactory = router.Router;
    this.router_ = new routerFactory(handle, connectorFactory);
    this.remote = remoteFactory && new remoteFactory(this.router_);
    this.local = localFactory && new localFactory(this.remote);
    this.router_.setIncomingReceiver(this.local);

    // Validate incoming messages: remote responses and local requests.
    var validateRequest = localFactory && localFactory.prototype.validator;
    var validateResponse = remoteFactory.prototype.validator;
    var payloadValidators = [];
    if (validateRequest)
      payloadValidators.push(validateRequest);
    if (validateResponse)
      payloadValidators.push(validateResponse);
    this.router_.setPayloadValidators(payloadValidators);
  }

  Connection.prototype.close = function() {
    this.router_.close();
    this.router_ = null;
    this.local = null;
    this.remote = null;
  };

  Connection.prototype.encounteredError = function() {
    return this.router_.encounteredError();
  };

  // The TestConnection subclass is only intended to be used in unit tests.

  function TestConnection(handle, localFactory, remoteFactory) {
    Connection.call(this,
                    handle,
                    localFactory,
                    remoteFactory,
                    router.TestRouter,
                    connector.TestConnector);
  }

  TestConnection.prototype = Object.create(Connection.prototype);

  var exports = {};
  exports.Connection = Connection;
  exports.TestConnection = TestConnection;
  return exports;
});
