166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis// Copyright (c) 2013 The Chromium Authors. All rights reserved.
266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis// Use of this source code is governed by a BSD-style license that can be
366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis// found in the LICENSE file.
466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis
566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis'use strict';
666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis
766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennisbase.require('ui');
866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis
966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennisbase.exportTo('tracing.analysis', function() {
1066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  var ObjectSnapshotView = ui.define('object-snapshot-view');
1166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis
1266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  ObjectSnapshotView.prototype = {
1366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    __proto__: HTMLDivElement.prototype,
1466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis
1566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    decorate: function() {
1666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis      this.objectSnapshot_ = undefined;
1766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    },
1866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis
1966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    set modelObject(obj) {
2066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis      this.objectSnapshot = obj;
2166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    },
2266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis
2366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    get modelObject() {
2466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis      return this.objectSnapshot;
2566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    },
2666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis
2766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    get objectSnapshot() {
2866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis      return this.objectSnapshot_;
2966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    },
3066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis
3166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    set objectSnapshot(i) {
3266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis      this.objectSnapshot_ = i;
3366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis      this.updateContents();
3466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    },
3566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis
3666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    updateContents: function() {
3766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis      throw new Error('Not implemented');
3866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    }
3966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  };
4066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis
4166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  ObjectSnapshotView.typeNameToViewInfoMap = {};
4266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  ObjectSnapshotView.register = function(typeName,
4366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis                                         viewConstructor,
4466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis                                         opt_options) {
4566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    if (ObjectSnapshotView.typeNameToViewInfoMap[typeName])
4666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis      throw new Error('Handler already registered for ' + typeName);
4766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    var options = opt_options || {
4866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis      showInTrackView: true
4966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    };
5066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    ObjectSnapshotView.typeNameToViewInfoMap[typeName] = {
5166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis      constructor: viewConstructor,
5266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis      options: options
5366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    };
5466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  };
5566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis
5666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  ObjectSnapshotView.unregister = function(typeName) {
5766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    if (ObjectSnapshotView.typeNameToViewInfoMap[typeName] === undefined)
5866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis      throw new Error(typeName + ' not registered');
5966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    delete ObjectSnapshotView.typeNameToViewInfoMap[typeName];
6066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  };
6166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis
6266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  ObjectSnapshotView.getViewInfo = function(typeName) {
6366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    return ObjectSnapshotView.typeNameToViewInfoMap[typeName];
6466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  };
6566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis
6666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  return {
6766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    ObjectSnapshotView: ObjectSnapshotView
6866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  };
6966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis});
70