EDK: Stop having MojoCreateDataPipeOptions as a member of DataPipe.

The former is aligned whereas the latter isn't (except as forced by
having the former as a member), which made it at least a bit dubious.

R=jamesr@chromium.org

Review URL: https://codereview.chromium.org/1412183009 .
diff --git a/mojo/edk/system/data_pipe.cc b/mojo/edk/system/data_pipe.cc
index 7cfd2a5..109f1ac 100644
--- a/mojo/edk/system/data_pipe.cc
+++ b/mojo/edk/system/data_pipe.cc
@@ -656,7 +656,8 @@
                    bool has_local_consumer,
                    const MojoCreateDataPipeOptions& validated_options,
                    std::unique_ptr<DataPipeImpl> impl)
-    : validated_options_(validated_options),
+    : element_num_bytes_(validated_options.element_num_bytes),
+      capacity_num_bytes_(validated_options.capacity_num_bytes),
       producer_open_(true),
       consumer_open_(true),
       producer_awakable_list_(has_local_producer ? new AwakableList()
diff --git a/mojo/edk/system/data_pipe.h b/mojo/edk/system/data_pipe.h
index 62fe5aa..0d77668 100644
--- a/mojo/edk/system/data_pipe.h
+++ b/mojo/edk/system/data_pipe.h
@@ -9,7 +9,6 @@
 
 #include <memory>
 
-#include "base/compiler_specific.h"
 #include "mojo/edk/embedder/platform_handle_vector.h"
 #include "mojo/edk/system/channel_endpoint_client.h"
 #include "mojo/edk/system/handle_signals_state.h"
@@ -174,15 +173,14 @@
   void ConsumerCloseNoLock() MOJO_EXCLUSIVE_LOCKS_REQUIRED(mutex_);
 
   // Thread-safe and fast (they don't take |mutex_|):
-  const MojoCreateDataPipeOptions& validated_options() const {
-    return validated_options_;
+  MojoCreateDataPipeOptions validated_options() const {
+    MojoCreateDataPipeOptions rv = {sizeof(MojoCreateDataPipeOptions),
+                                    MOJO_CREATE_DATA_PIPE_OPTIONS_FLAG_NONE,
+                                    element_num_bytes_, capacity_num_bytes_};
+    return rv;
   }
-  size_t element_num_bytes() const {
-    return validated_options_.element_num_bytes;
-  }
-  size_t capacity_num_bytes() const {
-    return validated_options_.capacity_num_bytes;
-  }
+  size_t element_num_bytes() const { return element_num_bytes_; }
+  size_t capacity_num_bytes() const { return capacity_num_bytes_; }
 
   // Must be called under |mutex_|.
   bool producer_open_no_lock() const MOJO_SHARED_LOCKS_REQUIRED(mutex_) {
@@ -262,8 +260,8 @@
     return !!consumer_awakable_list_;
   }
 
-  MSVC_SUPPRESS_WARNING(4324)
-  const MojoCreateDataPipeOptions validated_options_;
+  const uint32_t element_num_bytes_;
+  const uint32_t capacity_num_bytes_;
 
   mutable util::Mutex mutex_;
   // *Known* state of producer or consumer.
diff --git a/mojo/edk/system/data_pipe_impl.h b/mojo/edk/system/data_pipe_impl.h
index 87464c8..e25b697 100644
--- a/mojo/edk/system/data_pipe_impl.h
+++ b/mojo/edk/system/data_pipe_impl.h
@@ -132,7 +132,7 @@
 
   ChannelEndpointClient* channel_endpoint_client() const { return owner_; }
 
-  const MojoCreateDataPipeOptions& validated_options() const {
+  MojoCreateDataPipeOptions validated_options() const {
     return owner_->validated_options();
   }
   size_t element_num_bytes() const { return owner_->element_num_bytes(); }