From b1784f4dc9fbf104e4454796edf26d2f76e16a94 Mon Sep 17 00:00:00 2001
From: "yzshen@chromium.org"
 <yzshen@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>
Date: Thu, 13 Jun 2013 06:48:36 +0000
Subject: Introduce PPB_TCPSocket_Dev.

This change exposes the PPB_TCPSocket_Dev interface and makes it to share the same backend as PPB_TCPSocket_Private.

It doesn't include:
- apps permission check;
- TCP socket options that PPB_TCPSocket_Private doesn't support.
These will be implemented in separate CLs.

BUG=247225
TEST=newly added test_tcp_socket.{h,cc}.

Review URL: https://chromiumcodereview.appspot.com/16667002

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@206014 0039d316-1c4b-4281-b951-d872f2087c98
---
 ppapi/cpp/dev/tcp_socket_dev.cc | 117 ++++++++++++++++++++++++++++++++++++++++
 ppapi/cpp/dev/tcp_socket_dev.h  |  53 ++++++++++++++++++
 2 files changed, 170 insertions(+)
 create mode 100644 ppapi/cpp/dev/tcp_socket_dev.cc
 create mode 100644 ppapi/cpp/dev/tcp_socket_dev.h

(limited to 'ppapi/cpp/dev')

diff --git a/ppapi/cpp/dev/tcp_socket_dev.cc b/ppapi/cpp/dev/tcp_socket_dev.cc
new file mode 100644
index 0000000..4ff9514
--- /dev/null
+++ b/ppapi/cpp/dev/tcp_socket_dev.cc
@@ -0,0 +1,117 @@
+// Copyright 2013 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.
+
+#include "ppapi/cpp/dev/tcp_socket_dev.h"
+
+#include "ppapi/c/pp_errors.h"
+#include "ppapi/cpp/completion_callback.h"
+#include "ppapi/cpp/instance_handle.h"
+#include "ppapi/cpp/module_impl.h"
+
+namespace pp {
+
+namespace {
+
+template <> const char* interface_name<PPB_TCPSocket_Dev_0_1>() {
+  return PPB_TCPSOCKET_DEV_INTERFACE_0_1;
+}
+
+}  // namespace
+
+TCPSocket_Dev::TCPSocket_Dev() {
+}
+
+TCPSocket_Dev::TCPSocket_Dev(const InstanceHandle& instance) {
+  if (has_interface<PPB_TCPSocket_Dev_0_1>()) {
+    PassRefFromConstructor(get_interface<PPB_TCPSocket_Dev_0_1>()->Create(
+        instance.pp_instance()));
+  }
+}
+
+TCPSocket_Dev::TCPSocket_Dev(PassRef, PP_Resource resource)
+    : Resource(PASS_REF, resource) {
+}
+
+TCPSocket_Dev::TCPSocket_Dev(const TCPSocket_Dev& other) : Resource(other) {
+}
+
+TCPSocket_Dev::~TCPSocket_Dev() {
+}
+
+TCPSocket_Dev& TCPSocket_Dev::operator=(const TCPSocket_Dev& other) {
+  Resource::operator=(other);
+  return *this;
+}
+
+// static
+bool TCPSocket_Dev::IsAvailable() {
+  return has_interface<PPB_TCPSocket_Dev_0_1>();
+}
+
+int32_t TCPSocket_Dev::Connect(const NetAddress_Dev& addr,
+                               const CompletionCallback& callback) {
+  if (has_interface<PPB_TCPSocket_Dev_0_1>()) {
+    return get_interface<PPB_TCPSocket_Dev_0_1>()->Connect(
+        pp_resource(), addr.pp_resource(), callback.pp_completion_callback());
+  }
+  return callback.MayForce(PP_ERROR_NOINTERFACE);
+}
+
+NetAddress_Dev TCPSocket_Dev::GetLocalAddress() const {
+  if (has_interface<PPB_TCPSocket_Dev_0_1>()) {
+    return NetAddress_Dev(
+        PASS_REF,
+        get_interface<PPB_TCPSocket_Dev_0_1>()->GetLocalAddress(pp_resource()));
+  }
+  return NetAddress_Dev();
+}
+
+NetAddress_Dev TCPSocket_Dev::GetRemoteAddress() const {
+  if (has_interface<PPB_TCPSocket_Dev_0_1>()) {
+    return NetAddress_Dev(
+        PASS_REF,
+        get_interface<PPB_TCPSocket_Dev_0_1>()->GetRemoteAddress(
+            pp_resource()));
+  }
+  return NetAddress_Dev();
+}
+
+int32_t TCPSocket_Dev::Read(char* buffer,
+                            int32_t bytes_to_read,
+                            const CompletionCallback& callback) {
+  if (has_interface<PPB_TCPSocket_Dev_0_1>()) {
+    return get_interface<PPB_TCPSocket_Dev_0_1>()->Read(
+        pp_resource(), buffer, bytes_to_read,
+        callback.pp_completion_callback());
+  }
+  return callback.MayForce(PP_ERROR_NOINTERFACE);
+}
+
+int32_t TCPSocket_Dev::Write(const char* buffer,
+                             int32_t bytes_to_write,
+                             const CompletionCallback& callback) {
+  if (has_interface<PPB_TCPSocket_Dev_0_1>()) {
+    return get_interface<PPB_TCPSocket_Dev_0_1>()->Write(
+        pp_resource(), buffer, bytes_to_write,
+        callback.pp_completion_callback());
+  }
+  return callback.MayForce(PP_ERROR_NOINTERFACE);
+}
+
+void TCPSocket_Dev::Close() {
+  if (has_interface<PPB_TCPSocket_Dev_0_1>())
+    get_interface<PPB_TCPSocket_Dev_0_1>()->Close(pp_resource());
+}
+
+int32_t TCPSocket_Dev::SetOption(PP_TCPSocket_Option_Dev name,
+                                 const Var& value,
+                                 const CompletionCallback& callback) {
+  if (has_interface<PPB_TCPSocket_Dev_0_1>()) {
+    return get_interface<PPB_TCPSocket_Dev_0_1>()->SetOption(
+        pp_resource(), name, value.pp_var(), callback.pp_completion_callback());
+  }
+  return callback.MayForce(PP_ERROR_NOINTERFACE);
+}
+
+}  // namespace pp
diff --git a/ppapi/cpp/dev/tcp_socket_dev.h b/ppapi/cpp/dev/tcp_socket_dev.h
new file mode 100644
index 0000000..16d7dee
--- /dev/null
+++ b/ppapi/cpp/dev/tcp_socket_dev.h
@@ -0,0 +1,53 @@
+// Copyright 2013 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 PPAPI_CPP_DEV_TCP_SOCKET_DEV_H_
+#define PPAPI_CPP_DEV_TCP_SOCKET_DEV_H_
+
+#include "ppapi/c/dev/ppb_tcp_socket_dev.h"
+#include "ppapi/cpp/dev/net_address_dev.h"
+#include "ppapi/cpp/pass_ref.h"
+#include "ppapi/cpp/resource.h"
+
+namespace pp {
+
+class CompletionCallback;
+class InstanceHandle;
+
+class TCPSocket_Dev: public Resource {
+ public:
+  TCPSocket_Dev();
+
+  explicit TCPSocket_Dev(const InstanceHandle& instance);
+
+  TCPSocket_Dev(PassRef, PP_Resource resource);
+
+  TCPSocket_Dev(const TCPSocket_Dev& other);
+
+  virtual ~TCPSocket_Dev();
+
+  TCPSocket_Dev& operator=(const TCPSocket_Dev& other);
+
+  // Returns true if the required interface is available.
+  static bool IsAvailable();
+
+  int32_t Connect(const NetAddress_Dev& addr,
+                  const CompletionCallback& callback);
+  NetAddress_Dev GetLocalAddress() const;
+  NetAddress_Dev GetRemoteAddress() const;
+  int32_t Read(char* buffer,
+               int32_t bytes_to_read,
+               const CompletionCallback& callback);
+  int32_t Write(const char* buffer,
+                int32_t bytes_to_write,
+                const CompletionCallback& callback);
+  void Close();
+  int32_t SetOption(PP_TCPSocket_Option_Dev name,
+                    const Var& value,
+                    const CompletionCallback& callback);
+};
+
+}  // namespace pp
+
+#endif  // PPAPI_CPP_DEV_TCP_SOCKET_DEV_H_
-- 
cgit v1.1