diff --git a/src/content/browser/speech/audio_buffer.h b/src/content/browser/speech/audio_buffer.h
new file mode 100644
index 0000000..1231fa4
--- /dev/null
+++ b/src/content/browser/speech/audio_buffer.h
@@ -0,0 +1,84 @@
+// Copyright (c) 2012 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.
+
+#ifndef CONTENT_BROWSER_SPEECH_AUDIO_BUFFER_H_
+#define CONTENT_BROWSER_SPEECH_AUDIO_BUFFER_H_
+
+#include <stddef.h>
+#include <stdint.h>
+
+#include <string>
+
+#include "base/containers/circular_deque.h"
+#include "base/macros.h"
+#include "base/memory/ref_counted.h"
+#include "content/common/content_export.h"
+
+namespace content {
+
+// Models a chunk derived from an AudioBuffer.
+class CONTENT_EXPORT AudioChunk :
+    public base::RefCountedThreadSafe<AudioChunk> {
+ public:
+  explicit AudioChunk(int bytes_per_sample);
+  // Creates a chunk of |length| bytes, initialized to zeros.
+  AudioChunk(size_t length, int bytes_per_sample);
+  AudioChunk(const uint8_t* data, size_t length, int bytes_per_sample);
+
+  bool IsEmpty() const;
+  int bytes_per_sample() const { return bytes_per_sample_; }
+  size_t NumSamples() const;
+  const std::string& AsString() const;
+  int16_t GetSample16(size_t index) const;
+  const int16_t* SamplesData16() const;
+  uint8_t* writable_data() {
+    return reinterpret_cast<uint8_t*>(&data_string_[0]);
+  }
+
+ private:
+  friend class base::RefCountedThreadSafe<AudioChunk>;
+  ~AudioChunk() {}
+
+  std::string data_string_;
+  const int bytes_per_sample_;
+
+  DISALLOW_COPY_AND_ASSIGN(AudioChunk);
+};
+
+// Models an audio buffer. The current implementation relies on on-demand
+// allocations of AudioChunk(s) (which uses a string as storage).
+class AudioBuffer {
+ public:
+  explicit AudioBuffer(int bytes_per_sample);
+  ~AudioBuffer();
+
+  // Enqueues a copy of |length| bytes of |data| buffer.
+  void Enqueue(const uint8_t* data, size_t length);
+
+  // Dequeues, in FIFO order, a single chunk respecting the length of the
+  // corresponding Enqueue call (in a nutshell: multiple Enqueue calls followed
+  // by DequeueSingleChunk calls will return the individual chunks without
+  // merging them).
+  scoped_refptr<AudioChunk> DequeueSingleChunk();
+
+  // Dequeues all previously enqueued chunks, merging them in a single chunk.
+  scoped_refptr<AudioChunk> DequeueAll();
+
+  // Removes and frees all the enqueued chunks.
+  void Clear();
+
+  // Checks whether the buffer is empty.
+  bool IsEmpty() const;
+
+ private:
+  using ChunksContainer = base::circular_deque<scoped_refptr<AudioChunk>>;
+  ChunksContainer chunks_;
+  const int bytes_per_sample_;
+
+  DISALLOW_COPY_AND_ASSIGN(AudioBuffer);
+};
+
+}  // namespace content
+
+#endif  // CONTENT_BROWSER_SPEECH_AUDIO_BUFFER_H_
