Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1007)

Unified Diff: chrome/browser/extensions/api/socket/socket_api_controller.h

Issue 8743017: Real (but naive) UDP socket sending. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Post-try-server fixes. Created 9 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/extensions/api/socket/socket_api_controller.h
diff --git a/chrome/browser/extensions/api/socket/socket_api_controller.h b/chrome/browser/extensions/api/socket/socket_api_controller.h
new file mode 100644
index 0000000000000000000000000000000000000000..f35b10a4492315a4c6fd85053afc8d94745ea1bc
--- /dev/null
+++ b/chrome/browser/extensions/api/socket/socket_api_controller.h
@@ -0,0 +1,84 @@
+// Copyright (c) 2011 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 CHROME_BROWSER_EXTENSIONS_API_SOCKET_SOCKET_API_CONTROLLER_H_
+#define CHROME_BROWSER_EXTENSIONS_API_SOCKET_SOCKET_API_CONTROLLER_H_
+#pragma once
+
+#include <string>
+#include <map>
+
+#include "base/memory/scoped_ptr.h"
+#include "base/memory/singleton.h"
+#include "googleurl/src/gurl.h"
+#include "net/base/completion_callback.h"
+
+class Profile;
+
+namespace base {
+class ListValue;
+class Value;
+}
+
+namespace net {
+class UDPClientSocket;
+class IPEndPoint;
+}
+
+namespace extensions {
+
+class Socket;
+
+// The SocketController singleton keeps track of all our Sockets, and provides
+// a convenient set of methods to manipulate them.
+class SocketController {
+ public:
+ static SocketController* GetInstance();
+
+ SocketController();
+ virtual ~SocketController();
+
+ // Create/Destroy are a pair. They represent the allocation and deallocation
+ // of the Socket object in memory.
+ //
+ // TODO(miket): we currently require the app developer to remember to call
+ // Destroy, which is a buzzkill in JavaScript. I believe that to solve this,
+ // we'll have to associate each Socket with a creator extension, and then
+ // clean up when the extension goes out of scope. As the API is defined
+ // today, we're exposing only primitive socketIds to JavaScript, which seems
+ // to imply that we won't be able to garbage-collect when individual sockets
+ // "go out of scope" (in quotes because they never do).
+ int CreateUdp(const Profile* profile, const std::string& extension_id,
+ const GURL& src_url);
+ bool DestroyUdp(int socket_id);
+
+ // Connect, Close, Read, and Write map to the equivalent methods in
+ // UDPClientSocket.
+ //
+ // TODO(miket): Implement Read.
+ bool ConnectUdp(int socket_id, const std::string address, int port);
+ void CloseUdp(int socket_id);
+ int WriteUdp(int socket_id, const std::string msg);
+
+ // Converts a string IP address and integer port into a format that
+ // UDPClientSocket can deal with. Public so test harness can use it.
+ static bool CreateIPEndPoint(const std::string address, int port,
+ net::IPEndPoint* ip_end_point);
+
+ private:
+ int next_socket_id_;
+ typedef std::map<int, Socket*> SocketMap;
+ SocketMap socket_map_;
+
+ // Convenience method for accessing SocketMap.
+ Socket* GetSocket(int socket_id);
+
+ friend struct DefaultSingletonTraits<SocketController>;
+
+ DISALLOW_COPY_AND_ASSIGN(SocketController);
+};
+
+} // namespace extensions
+
+#endif // CHROME_BROWSER_EXTENSIONS_API_SOCKET_SOCKET_API_CONTROLLER_H_

Powered by Google App Engine
This is Rietveld 408576698