1<!DOCTYPE html>
2<!--
3Copyright (c) 2013 The Chromium Authors. All rights reserved.
4Use of this source code is governed by a BSD-style license that can be
5found in the LICENSE file.
6-->
7
8<link rel="import" href="/tracing/base/base.html">
9<script>
10'use strict';
11
12tr.exportTo('tr.e.cc', function() {
13  /**
14   * @constructor
15   */
16  function PictureAsImageData(picture, errorOrImageData) {
17    this.picture_ = picture;
18    if (errorOrImageData instanceof ImageData) {
19      this.error_ = undefined;
20      this.imageData_ = errorOrImageData;
21    } else {
22      this.error_ = errorOrImageData;
23      this.imageData_ = undefined;
24    }
25  };
26
27  /**
28   * Creates a new pending PictureAsImageData (no image data and no error).
29   *
30   * @return {PictureAsImageData} a new pending PictureAsImageData.
31   */
32  PictureAsImageData.Pending = function(picture) {
33    return new PictureAsImageData(picture, undefined);
34  };
35
36  PictureAsImageData.prototype = {
37    get picture() {
38      return this.picture_;
39    },
40
41    get error() {
42      return this.error_;
43    },
44
45    get imageData() {
46      return this.imageData_;
47    },
48
49    isPending: function() {
50      return this.error_ === undefined && this.imageData_ === undefined;
51    },
52
53    asCanvas: function() {
54      if (!this.imageData_)
55        return;
56
57      var canvas = document.createElement('canvas');
58      var ctx = canvas.getContext('2d');
59
60      canvas.width = this.imageData_.width;
61      canvas.height = this.imageData_.height;
62      ctx.putImageData(this.imageData_, 0, 0);
63      return canvas;
64    }
65  };
66
67  return {
68    PictureAsImageData: PictureAsImageData
69  };
70});
71</script>
72