// Copyright (c) 2010 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.


function chromeos() {
}

chromeos.connectionManager = function() {
};

chromeos.connectionManager.device_info_callback_ = null;
chromeos.connectionManager.transaction_status_callback_ = null;
chromeos.connectionManager.parent_page_url_ = 'chrome://mobilesetup';

chromeos.connectionManager.getDeviceInfo = function(callback) {
  chromeos.connectionManager.device_info_callback_ = callback;
  chromeos.connectionManager.requestDeviceInfo_();
};

chromeos.connectionManager.setTransactionStatus = function(status, callback) {
  chromeos.connectionManager.transaction_status_callback_ = callback;
  chromeos.connectionManager.reportTransactionStatus_(status);
};

chromeos.connectionManager.reportTransactionStatus_ = function(status) {
  var msg = {
    'type': 'reportTransactionStatusMsg',
    'domain': location.href,
    'status': status
  };
  window.parent.postMessage(msg, chromeos.connectionManager.parent_page_url_);
};

chromeos.connectionManager.requestDeviceInfo_ = function() {
  var msg = {
    'type': 'requestDeviceInfoMsg',
    'domain': location.href,
  };
  window.parent.postMessage(msg, chromeos.connectionManager.parent_page_url_);
}

window.addEventListener('message', function(e) {
  if (e.data.type == 'deviceInfoMsg') {
    if (chromeos.connectionManager.device_info_callback_)
      chromeos.connectionManager.device_info_callback_(e.data.payload);
  }
});
