Reland Use CopyOnWriteBuffer instead of Buffer to avoid unnecessary copies.

This CL removes copy and assign support from Buffer and changes various
parameters from Buffer to CopyOnWriteBuffer so they can be passed along
and copied without actually copying the underlying data.

With this changed some parameters to be "const" and fixed an issue when
creating a CopyOnWriteBuffer with empty data.

BUG=webrtc:5155

Review URL: https://codereview.webrtc.org/1823503002

Cr-Commit-Position: refs/heads/master@{#12062}
diff --git a/webrtc/api/datachannelinterface.h b/webrtc/api/datachannelinterface.h
index 3d6f711..53c11d4 100644
--- a/webrtc/api/datachannelinterface.h
+++ b/webrtc/api/datachannelinterface.h
@@ -17,8 +17,8 @@
 #include <string>
 
 #include "webrtc/base/basictypes.h"
-#include "webrtc/base/buffer.h"
 #include "webrtc/base/checks.h"
+#include "webrtc/base/copyonwritebuffer.h"
 #include "webrtc/base/refcount.h"
 
 
@@ -50,7 +50,7 @@
 };
 
 struct DataBuffer {
-  DataBuffer(const rtc::Buffer& data, bool binary)
+  DataBuffer(const rtc::CopyOnWriteBuffer& data, bool binary)
       : data(data),
         binary(binary) {
   }
@@ -61,7 +61,7 @@
   }
   size_t size() const { return data.size(); }
 
-  rtc::Buffer data;
+  rtc::CopyOnWriteBuffer data;
   // Indicates if the received data contains UTF-8 or binary data.
   // Note that the upper layers are left to verify the UTF-8 encoding.
   // TODO(jiayl): prefer to use an enum instead of a bool.