1// Copyright (c) 2013 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5'use strict';
6
7base.require('ui');
8
9base.exportTo('tracing.analysis', function() {
10  var ObjectInstanceView = ui.define('object-instance-view');
11
12  ObjectInstanceView.prototype = {
13    __proto__: HTMLDivElement.prototype,
14
15    decorate: function() {
16      this.objectInstance_ = undefined;
17    },
18
19    set modelObject(obj) {
20      this.objectInstance = obj;
21    },
22
23    get modelObject() {
24      return this.objectInstance;
25    },
26
27    get objectInstance() {
28      return this.objectInstance_;
29    },
30
31    set objectInstance(i) {
32      this.objectInstance_ = i;
33      this.updateContents();
34    },
35
36    updateContents: function() {
37      throw new Error('Not implemented');
38    }
39  };
40
41  ObjectInstanceView.typeNameToViewInfoMap = {};
42  ObjectInstanceView.register = function(typeName,
43                                         viewConstructor,
44                                         opt_options) {
45    if (ObjectInstanceView.typeNameToViewInfoMap[typeName])
46      throw new Error('Handler already registerd for ' + typeName);
47    var options = opt_options || {
48      showInTrackView: true
49    };
50    ObjectInstanceView.typeNameToViewInfoMap[typeName] = {
51      constructor: viewConstructor,
52      options: options
53    };
54  };
55
56  ObjectInstanceView.unregister = function(typeName) {
57    if (ObjectInstanceView.typeNameToViewInfoMap[typeName] === undefined)
58      throw new Error(typeName + ' not registered');
59    delete ObjectInstanceView.typeNameToViewInfoMap[typeName];
60  };
61
62  ObjectInstanceView.getViewInfo = function(typeName) {
63    return ObjectInstanceView.typeNameToViewInfoMap[typeName];
64  };
65
66
67  return {
68    ObjectInstanceView: ObjectInstanceView
69  };
70});
71